Pixie の PxL script で Kubernetes クラスタでの通信を取得する

kubernetes

Pixie CLI をインストールしてログインする。New Relic から使っている場合はインストールコマンドに含まれている api key を渡す。

CDKでEKSクラスタにnewrelic-bundleをインストールしてモニタリングする - sambaiz-net

$ bash -c "$(curl -fsSL https://withpixie.ai/install.sh)"
$ px version
Pixie CLI
0.8.2+Distribution.401c92c.20230531033620.1.jenkins

$ px auth login --api_key='xxxxx'
Pixie CLI
Authentication Successful

PxL Script で pixie が収集しているデータの table を読み込んで表示してみる。スクリプトを書く際はビルトインのスクリプトが参考になる。

import px
df = px.DataFrame(table='http_events', start_time='-30s')
df['pod'] = df.ctx['pod']
px.display(df)

px run や live で実行する。

$ px run -f test_script.pxl -o json | jq
{
  "_tableName_": "output",
  "time_": "2024-04-07T19:03:31.857543719+09:00",
  "upid": "00000003-0000-13c1-0000-0000000067ac",
  "remote_addr": "10.18.36.193",
  "remote_port": 40818,
  "trace_role": 2,
  "major_version": 1,
  "minor_version": 1,
  "content_type": 0,
  "req_headers": "{\"Accept\":\"*/*\",.}",
  "req_method": "GET",
  "req_path": "/health",
  "req_body": "",
  "req_body_size": 0,
  "resp_headers": "{\"Connection\":\"close\",...}",
  "resp_status": 200,
  "resp_message": "OK",
  "resp_body": "OK",
  "resp_body_size": 2,
  "latency": 94640,
  "pod": "newrelic/newrelic-bundle-nri-metadata-injection-c8fdfdcc-zdlt6"
}
...

$ px live -f test_script.pxl

trace_role が 1 のものが pod からクラスタ外の remote_addr への通信で、2 のものが remote_addr から pod への通信となっているpx.ip_to_pod_id()px.pod_id_to_pod_name() で pod の remote_addr を名前に変換できる。

import px
df = px.DataFrame(table='http_events', start_time='-30s')
df['pod'] = df.ctx['pod']

df.ra_pod = px.pod_id_to_pod_name(px.ip_to_pod_id(df.remote_addr))
df.ra_name = px.select(df.ra_pod != '', df.ra_pod, df.remote_addr)

df.source = px.select(df.trace_role == 1, df.pod, df.ra_name)
df.destination = px.select(df.trace_role == 1, df.ra_name, df.pod)

df = df[df.ra_pod != '']
px.display(df[['source', 'destination', 'latency']])

pod 間の HTTP 通信を取得できた。

{
  "_tableName_": "output",
  "source": "newrelic/vizier-query-broker-bb9d87cc9-lq7tw",
  "destination": "newrelic/vizier-metadata-69c585d799-pd2hl",
  "latency": 10760328
}
{
  "_tableName_": "output",
  "source": "newrelic/vizier-query-broker-bb9d87cc9-lq7tw",
  "destination": "newrelic/vizier-metadata-69c585d799-pd2hl",
  "latency": 11376994
}
{
  "_tableName_": "output",
  "source": "newrelic/vizier-query-broker-bb9d87cc9-lq7tw",
  "destination": "newrelic/vizier-metadata-69c585d799-pd2hl",
  "latency": 16669085
}