ACK Net Exporterは、クラスタネットワークの可観測性を高めるコンポーネントです。 ACK Net Exporterをクラスターにデプロイして、コンテナネットワークのさまざまなメトリックを収集できます。 これにより、ネットワークの問題を早期に特定してトラブルシューティングすることができます。 このトピックでは、ACK Net Exporterを使用してコンテナネットワークの問題をトラブルシューティングする方法について説明します。
前提条件
Container Service for Kubernetes (ACK) マネージドクラスターが作成されます。 詳細については、「ACK管理クラスターの作成」をご参照ください。
背景情報
ACK Net Exporterは、各ノードのデーモンポッドで実行されます。 ACK Net the Exporterは、拡張バークレーパケットフィルタ (eBPF) 技術を使用して、ノードからネットワーク情報を収集し、その情報をポッドに集約します。 ACK Net Exporterは、高レベルのネットワーク情報を監視できる標準インターフェイスを提供します。 次の図は、ACK Net Exporterのアーキテクチャを示しています。
ACK Net Exporterのインストールと設定
ACK Net Exporterのインストール
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、 を選択します。
On theマーケットプレイスページ、検索ack-net-exporterコンポーネントをクリックします。
ack-net-exporterコンポーネントページの右上隅で、右上隅の [デプロイ] をクリックします。 展開パネルが表示されます。
では、基本情報ステップを設定し、クラスターと名前空間パラメーターをクリックし、次へ.
[パラメーター] ステップで、次の表に記載されているパラメーターを設定し、[OK] をクリックします。
パラメーター
説明
デフォルト値
name
ACK Net Exporterコンポーネントの名前。
ack-net-exporter-default
namespace
ACK Net Exporterが属する名前空間。
kube-system
config.enableEventServer
イベントトレース機能を有効にするかどうかを指定します。 有効な値:
false: イベントトレース機能を無効にします。
true: イベントトレース機能を有効にします。
false
config.enableMetricServer
メトリック収集機能を有効にするかどうかを指定します。 有効な値:
false: メトリック収集機能を無効にします。
true: メトリック収集機能を有効にします。
true
config.remoteLokiAddress
イベントがプッシュされるGrafana Lokiサービスアドレス。
デフォルトでは、このパラメータは空のままです。
config.metricLabelVerbose
メトリック冗長機能を有効にするかどうかを指定します。 有効な値:
false: メトリック冗長機能を無効にします。
true: メトリック冗長機能を有効にします。 この機能を有効にすると、ポッドのIPアドレスとラベルがメトリックのラベル情報として保存されます。
false
config.metricServerPort
HTTPサービスを提供するためにメトリックサービスによって使用されるポート。
9102
config.eventServerPort
gRPCストリーミングサービスを提供するためにイベントサービスによって使用されるポート。
19102
config.metricProbes
有効にするメトリックプローブ。 詳細については、このトピックの「ACK Net Exporterメトリクス」セクションをご参照ください。
デフォルトでは、このパラメーターは空のままで、必要なメトリックプローブのみが有効になります。
config.eventProbes
有効にするイベントプローブ。 詳細については、このトピックのACK Net Exporterイベントセクションを参照してください。
デフォルトでは、このパラメーターは空のままで、必要なイベントプローブのみが有効になります。
ACK Net Exporterの設定
次のコマンドを実行して、ACK Net ExporterのConfigMapを変更できます。
kubectl edit cm inspector-config -n kube-system
または、ACKコンソールでACK Net Exporterを設定できます。
ACK コンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、
を選択します。ConfigMapページで、名前空間パラメーターをkube-systemに設定し、kubeskoop-configを検索し、[操作] 列の [編集] をクリックします。
[編集] パネルでパラメーターを設定し、[OK] をクリックします。
次の表に、ACK Net Exporterでサポートされているパラメーターを示します。
パラメーター
説明
デフォルト値
debugmode
デバッグモードを有効にするかどうかを指定します。 有効な値:
false: デバッグモードを無効にします。
true: デバッグモードを有効にします。 このモードを有効にすると、デバッグレベルのログ、インターフェイスのデバッグ、Go pprof、およびgopsがサポートされます。
false
event_config.loki_enable
Grafana Lokiにイベントをプッシュする機能を有効にするかどうかを指定します。 詳細については、このトピックの「Grafana Lokiを使用したイベントの収集と視覚化」をご参照ください。 有効な値:
false: Grafana Lokiにイベントをプッシュする機能を無効にします。
true: Grafana Lokiにイベントをプッシュする機能を有効にします。
false
event_config.loki_address
Grafana Lokiサービスアドレス。 デフォルトでは、指定された名前空間でgrafana-lokiという名前のサービスが自動的に検出されます。
デフォルトでは、このパラメータは空のままです。
event_config.probes
有効にするイベントプローブ。 詳細については、このトピックのACK Net Exporterイベントセクションを参照してください。
デフォルトでは、このパラメーターは空のままで、必要なイベントプローブのみが有効になります。
event_config.port
gRPCストリーミングサービスを提供するためにイベントサービスによって使用されるポート。
19102
metric_config.verbose
メトリック冗長機能を有効にするかどうかを指定します。 有効な値:
false: メトリック冗長機能を無効にします。
true: メトリック冗長機能を有効にします。 この機能を有効にすると、ポッドのIPアドレスとラベルがメトリックのラベル情報として保存されます。
false
metric_config.port
HTTPサービスを提供するためにメトリックサービスによって使用されるポート。
9102
metric_config.probes
有効にするメトリックプローブ。 詳細については、このトピックの「ACK Net Exporterメトリクス」セクションをご参照ください。
デフォルトでは、このパラメーターは空のままで、必要なメトリックプローブのみが有効になります。
metric_config.interval
メトリックが収集される間隔。 メトリック収集はパフォーマンスを低下させます。 したがって、ACK Net Exporterは、定期的に収集されたメトリックをメモリにキャッシュします。
5
以前のACK Net Exporterバージョンでは、ACK Net Exporterの設定を変更した後、システムをトリガーしてすべてのACK Net Exporterコンテナを再作成する必要があります。 変更された設定は、コンテナーの再作成後に有効になります。 ACK Net Exporter 0.2.3以降のバージョンでは、ホットアップデートをサポートしているため、この操作を実行する必要はありません。
ACK Net Exporterの使用に関する注意事項
Alinux以外のオペレーティングシステムでACK Net Exporterを使用する
ACK Net Exporterのいくつかの重要な機能は、eBPFプログラムに依存して情報を収集します。 さまざまなオペレーティングシステムカーネルの要件を満たすために、ACK Net ExporterはCO-REを使用してeBPFプログラムを配布します。 ACK Net Exporterが起動すると、オペレーティングシステムのカーネルに関連付けられているBPFタイプフォーマット (BTF) ファイルをロードする必要があります。 BTFファイルは、カーネルデバッグ情報のメタデータを格納する。 対応するBTFファイルが読み込まれない場合、主要な機能は使用できなくなります。 それ以降のバージョンのほとんどのオペレーティングシステムには、BTFファイルが組み込まれています。 オペレーティングシステムの詳細については、「BPFタイプフォーマット (BTF) 」をご参照ください。
Alinux2およびAlinux3ノードでACK Net Exporterを実行するには、次の要件が満たされていることを確認します。
オペレーティングシステムのカーネルバージョンは4.10以降である必要があります。
次のいずれかのファイルがインストールされています。
カーネルデバッグ情報を格納するkernel-debuginfoファイル。
デバッグ情報を格納するvmlinuxファイル。 ファイルはオペレーティングシステムカーネルによってコンパイルされますが、圧縮されていません。
オペレーティングシステムによって提供されるBTFファイル。
ACK Net Exporterが0.2.9以降に更新され、ACK Net Exporterのインストール時にconfig.enableLegacyVersionパラメーターがfalseに設定されます。
上記の要件が満たされている場合は、次の手順を実行して、ACK Net Exporterが提供する高度な機能を使用できます。
BTFファイルをノードの /boot/ パスに保存します。
完全なvmlinuxファイルをインストールした場合は、vmlinuxファイルをオペレーティングシステムの /boot/ パスに保存できます。
kernel-debuginfoパッケージをインストールした場合は、ノードの /usr/lib/debug/lib/modules/ パスでvmlinuxファイルを見つけ、そのファイルを /boot/ パスにコピーします。
次のコマンドを実行して、有効なBTF情報がロードされ、ACK Net Exporterが期待どおりに実行できるかどうかを確認します。
# You can use an alternative tool such as docker, podman, or ctr, instead of nerdctl, to run a comparable command for conducting the test. nerdctl run -it -v /boot:/boot registry.cn-hangzhou.aliyuncs.com/acs/btfhack:latest -- btfhack discover
BTFファイルのパスが返された場合、設定は完了です。 ACK Net Exporterのコンテナを再作成し、一定期間待機するようにシステムをトリガーできます。 次に、収集したメトリクスとイベントを表示できます。
ACK Net Exporterでサポートされているメトリックとメトリック形式
ACK Net Exporterは、Prometheusメトリクスをサポートしています。 ACK Net Exporterをインストールした後、ACK Net Exporter用に作成されたポッドのサービスポートにアクセスしてメトリクスを照会できます。
ACKコンソールのMarketplaceページからACK Net Exporterをインストールする場合、次のコマンドを実行してすべてのACK Net Exporterポッドを照会できます。
kubectl get pod -l app=net-exporter -n kube-system -o wide
期待される結果
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES anp-*** 1/1 Running 0 32s 10.1.XX.XX cn-*** <none> <none>
次のコマンドを実行して、メトリックを照会します。 コマンドの
10.1.XX.XX
を、前の手順で取得したACK Net ExporterのIPアドレスに置き換えます。curl http://<10.1.XX.XX>:9102/metrics
ACK Net Exporterは、次の形式でメトリックデータを返します。
inspector_pod_udprcvbuferrors{namespace="elastic-system",netns="ns402653****",node="iZbp179u0bgzhofjupc****",pod="elastic-operator-0"} 0 1654487977826
上記の形式には、次のフィールドが含まれます。
inspector_pod_udprcvbuferrors
は、メトリックがACK Net Exporterによって提供され、ポッドメトリックであることを示します。 ポッドとノードの両方のメトリックが収集されます。 メトリックの名前はudprcvbuferrors
です。これは、ポッド内の受信キューがいっぱいになったために発生したUDP受信バッファエラーの数を示します。namespace
、pod
、node
、およびnetns
: メトリックのラベル。 PromQLステートメントを使用してラベルをフィルタリングできます。pod
ラベルは、メトリックが記述するポッドを示します。namespace
ラベルは、ポッドが属する名前空間を示します。node
ラベルは、ポッドをホストするノードの名前を示します。 /etc/hostnameファイルで指定されたホスト名がデフォルトのホスト名として使用されます。netns
ラベルは、ポッド内のコンテナのネットワーク名前空間のIDを示します。0
と1654487977826
は、メトリックの値と、メトリック値が収集された時点を示します。 時点はUNIXタイムスタンプです。
ACK Net Exporterでサポートされているイベントとイベント形式
ACK Net Exporterは、ノードで発生するネットワーク例外のイベントを収集できます。 このセクションでは、発生する可能性のあるネットワーク例外について説明します。 これらの例外は時折発生し、再現が困難です。 これらの例外をトラブルシューティングする効率的な方法はありません。
データパケット損失による接続障害と要求タイムアウト。
時間のかかるデータ処理によるパフォーマンスの問題。
TCPや接続追跡などのステートフル接続メカニズムの異常が原因で発生するビジネスの中断。
ACK Net Exporterは、オペレーティングシステムのカーネルにeBPFベースのコンテキスト可観測性を提供し、上記の問題のトラブルシューティングに役立ちます。 ACK Net Exporterは、例外が発生したときにオペレーティングシステムのステータスをリアルタイムでキャプチャし、イベントログを生成します。 ACK Net Exporterでサポートされているイベントとイベントプローブの詳細については、このトピックのACK Net Exporterイベントを参照してください。
イベントログで関連情報を確認できます。 この例では、tcp_resetプローブが使用されます。 ポッドが未知のポートを宛先とする通常のパケットを受信すると、ACK Net Exporterは次のイベントをキャプチャします。
type=TCPRESET_NOSOCK pod=storage-monitor-5775dfdc77-fj767 namespace=kube-system protocol=TCP saddr=100.103.42.233 sport=443 daddr=10.1.17.188 dport=33488
type=TCPRESET_NOSOCK
: TCPRESET_NOSOCKイベントを示す。 このタイプのイベントは、tcp_resetプローブによってキャプチャされます。 このイベントは、一致するソケットが見つからないため、未知のポートを宛先とするパケットに対してリセットパケットが返されることを示します。 ほとんどの場合、このイベントはNATが失敗したときに発生します。 たとえば、このイベントは、IPVSタイムアウトが発生したときに発生します。pod/namespace
: ACK Net Exporterがパケットのネットワーク名前空間に基づいて一致するIPアドレスとネットワークデバイスのシリアル番号を見つけた後に、イベントに関連付けられたポッドメタデータ。saddr/sport/daddr/dport
: ACK Net Exporterがカーネルから取得したパケット情報。 パケット情報は、イベントに基づいて変化する。 たとえば、net_softirqプローブによってキャプチャされたイベントにはIPアドレスが含まれていません。 その代わりに、イベントには、割り込みが発生したCPUのシリアル番号と遅延が含まれています。
有効なオペレーティングシステムのカーネルスタッキング情報を必要とするイベントの場合、ACK Net Exporterは、次のイベントなど、これらのイベントが発生したときに、オペレーティングシステムのカーネルのスタッキングコンテキストをキャプチャします。
type=PACKETLOSS pod=hostNetwork namespace=hostNetwork protocol=TCP saddr=10.1.17.172 sport=6443 daddr=10.1.17.176 dport=43018 stacktrace:skb_release_data+0xA3 __kfree_skb+0xE tcp_recvmsg+0x61D inet_recvmsg+0x58 sock_read_iter+0x92 new_sync_read+0xE8 vfs_read+0x89 ksys_read+0x5A
ACK Net Exporterでは、複数の方法を使用してイベントを表示できます。 詳細については、このトピックの「ACK Net Exporterからモニタリングデータを収集する」を参照してください。
ACK Net Exporterからモニタリングデータを収集する
シナリオ1: モニタリングデータをPrometheusまたはGrafanaにエクスポートし、データを視覚化
ACK Net Exporterは、モニタリングデータをPrometheusサーバーにエクスポートできます。 自己管理のPrometheusサーバーを使用する場合は、次のscrap_config
を追加して、PrometheusサーバーがACK Net Exporterからモニタリングデータを収集できるようにします。
# In the following example, only one endpoint is specified for data collection.
scrape_configs:
# The job=<job_name> label is added to each time series that is collected based on the configuration. In this example, the job is named net-exporter_sample.
- job_name: "net-exporter_sample"
static_configs:
- targets: ["{kubernetes pod ip}:9102"]
PrometheusサーバーがACKクラスターで実行されている場合、Prometheusのサービス検出機能を使用して、期待どおりに機能するすべてのACK Net Exporterポッドを自動的に取得できます。 これを行うには、Prometheusサーバーに次の設定を追加します。
apiVersion: v1
kind: ConfigMap
metadata:
name: prometheus-server-conf
labels:
name: prometheus-server-conf
namespace: kube-system
data:
prometheus.yml: |-
# Add the following configurations to the Prometheus server:
- job_name: 'net-exporter'
kubernetes_sd_configs:
- role: endpoints
relabel_configs:
- source_labels: [__meta_kubernetes_endpoints_name]
regex: 'net-exporter'
action: keep
- job_name: 'kubernetes-pods'
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
action: keep
regex: true
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
action: replace
target_label: __metrics_path__
regex: (.+)
- source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
action: replace
regex: ([^:]+)(?::\d+)?;(\d+)
replacement: $1:$2
target_label: __address__
- action: labelmap
regex: __meta_kubernetes_pod_label_(.+)
- source_labels: [__meta_kubernetes_namespace]
action: replace
target_label: kubernetes_namespace
- source_labels: [__meta_kubernetes_pod_name]
action: replace
target_label: kubernetes_pod_name
設定を追加したら、Prometheusサーバーで
を選択します。 PrometheusサーバーのTargetsページには、期待どおりに実行されるACK Net Exporterポッドが表示されます。 PrometheusサーバーのGraphページの検索ボックスにinspectorと入力して、ACK Net Exporterメトリクスを表示することもできます。Grafanaを設定して、プロメテウスに収集されるモニタリングデータを視覚化できます。
Grafanaページの左側のナビゲーションウィンドウで、 .
On the新しいダッシュボードページをクリックします。新しいパネルを追加する.
[編集パネル] ページの下部で、[データソース] フィールドに [プロメテウス] と入力します。 次に、Prometheusサーバーのアドレスを入力します。
[Metric browser] をクリックし、inspectorと入力します。 次に、Grafanaは利用可能なすべてのACK Net Exporterメトリクスを表示します。 右上の [保存] をクリックします。 表示されるダイアログボックスで、[保存] をクリックします。 Grafanaは、次の図に示すように、視覚化されたデータを表示します。
前の図に表示されている設定に基づいて、Grafanaダッシュボードでのメトリクスの表示方法を設定します。 たとえば、次の設定を使用して、
inspector_pod_tcppassiveopenes
メトリックの増分トレンドを表示できます。 このメトリックは、システムの起動後またはコンテナの作成後に、ネットワーク空間内でTCP接続を確立するためにクライアントから送信されたハンドシェイク要求によって作成されたソケットの総数を示します。 このメトリックの増分トレンドを表示するには、次の設定を使用します。// Use the rate() method provided by PromQL to calculate the increment trend of the metric. rate(inspector_pod_tcppassiveopens[1m]) // Use the labels provided by net-exporter to configure a legend to display the metric. {{namespace}}/{{pod}}/{{node}}
シナリオ2: モニタリングデータをARMSにエクスポートし、データを視覚化
モニタリングデータをACK Net ExporterからApplication Real-Time monitoring Service (ARMS) にエクスポートし、データを可視化するには、次の手順を実行します。
カスタムACK Net Exporterメトリクスを設定します。
にログインします。 ARMSコンソールを使用します。 左側のナビゲーションウィンドウで、 を選択します。
にログインします。 ARMSコンソールを使用します。
上部のナビゲーションバーで、ACKクラスターがデプロイされているリージョンを選択します。
左側のナビゲーションウィンドウで、 .
管理するPrometheusインスタンスの名前をクリックして、[統合センター] ページに移動します。
[インスタンス] ページで、管理するインスタンスを見つけ、インスタンスの名前をクリックします。 その後、インスタンスの詳細ページにリダイレクトされます。 ほとんどの場合、Prometheusインスタンスの名前はクラスターの名前と同じです。
左側のナビゲーションウィンドウで、[サービスの検出] をクリックし、[ターゲット] タブをクリックします。 [ターゲット] タブの下部で、[kubernetes-pods] をクリックします。 この情報は、カスタムACK Net Exporterメトリクスが設定されていることを示しています。
kubernetes-podsが表示されていない場合は、[設定] タブをクリックし、[デフォルトのサービス検出] タブのスイッチをオンにする必要があります。
左側のナビゲーションウィンドウで、[ダッシュボード] をクリックします。 [ダッシュボード] ページで、ダッシュボードをクリックしてGrafanaにログインします。 [パネルの追加] をクリックして [グラフ] を選択し、[データソース] セクションでクラスターに関連するデータソースを有効にします。
[Metric browser] をクリックし、inspectorと入力します。 その後、Grafanaは利用可能なすべてのACK Net Exporterメトリクスを自動的に表示します。 右上隅の [保存] をクリックします。 表示されるダイアログボックスで、[保存] をクリックします。 Grafanaは、次の図に示すように、視覚化されたデータを表示します。
シナリオ3: モニタリングデータをGrafana Lokiにエクスポートし、データを視覚化
ACK Net Exporterによって収集された異常イベントを、事前設定されたGrafana Lokiサービスにリアルタイムでプッシュできます。 これにより、これらのイベントを一元管理できます。 モニタリングデータをACK Net ExporterからGrafana Lokiにエクスポートするには、次の手順を実行します。
- 説明
ACK Net ExporterポッドがアクセスできるネットワークにGrafana Lokiをデプロイします。 ACK Net Exporterは、イベントログをGrafana Lokiに自動的にプッシュできます。
ACK Net Exporterの設定ページで、enableEventServerパラメーターをtrueに設定し、lokiServerAddressパラメーターをGrafana Lokiサービスのアドレスに設定します。 サービスアドレスとして、Grafana LokiサービスのIPアドレスまたはドメイン名を指定できます。
次のコマンドを実行してサービスアドレスにアクセスし、Grafana Lokiが使用可能かどうかを確認します。
curl http://[Address of Grafana Loki]:3100/ready
Grafana Lokiが利用可能な場合は、Grafana LokiをGrafanaデータソースとして追加します。
Grafanaを開きます。 左側のナビゲーションウィンドウで、
を選択し、Grafana Lokiのアドレスを入力し、[保存とテスト] をクリックします。左側のナビゲーションウィンドウで、[探索] をクリックします。 上部のナビゲーションバーで、データソースをLokiに設定し、Grafana Lokiにプッシュされたイベントを表示します。
[ラベルフィルター] ドロップダウンリストからノードを選択するか、[ラインコンテナー] フィールドにキーワードを入力して特定のイベントを検索することで、ノードのイベントを表示できます。
上部のナビゲーションバーで [ダッシュボードに追加] をクリックして、設定済みのイベントパネルをダッシュボードに追加できます。
ACK Net Exporterが提供するイベントの内容は、イベントの種類によって異なります。 イベントの詳細を確認して、関連するコンテンツを表示できます。
Grafana LokiでサポートされているLogQLクエリ言語の詳細については、「LogQL: ログクエリ言語」をご参照ください。
シナリオ4: ACK Net Exporter CLIを使用してイベントを収集
ACK Net Exporter CLI (inspector-cli) は、ACK Net Exporterに基づいてACKチームによって開発されたシナリオ固有のトラブルシューティングおよび分析ツールです。 inspector-cliを使用して、カーネル例外イベントをリアルタイムで収集できます。 inspector-cliは、クラウドネイティブのシナリオで一般的な例外の原因をすばやく特定するのに役立ちます。
インスペクタ-cliは、オンプレミスのコンピューターでコンテナーを起動して実行できます。
# Start a temporary container to run inspector-cli. You can replace the image with a later version to update inspector-cli.
docker run -it --name=inspector-cli --network=host registry.cn-hangzhou.aliyuncs.com/acs/inspector:v0.0.1-12-gff0558c-aliyun
which inspector
# /bin/inspector is the working path of inspector-cli. You can directly run inspector-cli in the container.
次の例は、inspector-cliを使用して、ACK Net Exporterによってキャプチャされたノードのイベントを収集する方法を示しています。
# Set the -e parameter to the address of the event service of ACK Net Exporter.
inspector watch -e 10.1.16.255
# Expected results:
INFO TCP_RCV_RST_ESTAB Namespace=kube-system Pod=kube-proxy-worker-tbv5s Node=iZbp1jesgumdx66l8ym8j8Z Netns=4026531993 10.1.16.255:43186 -> 100.100.27.15:3128
...
ACK Net Exporterのインスペクタコンテナにログインして、問題のトラブルシューティングを行うこともできます。
# When you run the following command, set the -n parameter to the namespace of ACK Net Exporter and specify the ACK Net Exporter pod that you want to access.
kubectl exec -it -n kube-system -c inspector net-exporter-2rvfh -- sh
# Run the following command to view the distribution of network entities on the current node.
inspector list entity
# Run the following command to listen for network exception events and other relevant information in the local network.
inspector watch -d -v
#{"time":"2023-02-03T09:01:03.402118044Z","level":"INFO","source":"/go/src/net-exporter/cmd/watch.go:63","msg":"TCPRESET_PROCESS","meta":"hostNetwork/hostNetwork node=izbp1dnsn1bwv9oyu2gaupz netns=ns0 ","event":"protocol=TCP saddr=10.1.17.113 sport=6443 daddr=10.1.17.113 dport=44226 state:TCP_OTHER "}
# You can also specify multiple ACK Net Exporter nodes to view the time when the event occurs on these nodes.
inspector watch -s 10.1.17.113 -s 10.1.18.14 -d -v
ACK Net Exporterを使用して時折コンテナネットワークの問題をトラブルシューティングする
このセクションでは、クラウドネイティブシナリオで時折ネットワークの問題をトラブルシューティングする方法について説明します。 ACK Net Exporterは、これらの問題の修正に必要な情報をすばやく取得するのに役立ちます。
DNSタイムアウトの問題
クラウドネイティブ環境でのDNSタイムアウトの問題により、サービスアクセスが失敗する可能性があります。 以下の理由により、DNSタイムアウトの問題が発生します。
DNSサーバーは、DNSクエリがタイムアウトする前に応答しません。
DNSクライアントは、DNSクエリを迅速に配信できないか、またはDNSクエリの配信に失敗します。
DNSサーバは、DNSクエリに応答する。 ただし、メモリ不足などのDNSクライアントの問題により、応答が失われます。
次のメトリックを使用して、DNSタイムアウトの問題をトラブルシューティングできます。
メトリック | 説明 |
inspector_pod_udpsndbuferrors | UDPパケットがネットワーク層を介して送信されたときに報告されるエラーの数。 |
inspector_pod_udpincsumerrors | UDPパケットが受信されたときに報告されるチェックサムエラーの数。 |
inspector_pod_udpnoports | UDPパケットを受信するために関数が呼び出されたときに、 |
inspector_pod_udpinerrors | UDPパケットが受信されたときに報告されるエラーの数。 |
inspector_pod_udpoutdatagrams | ネットワーク層を介して正常に送信されたUDPパケットの数。 |
inspector_pod_udprcvbuferrors | ソケットキューがいっぱいになっているため、UDPがアプリケーション層からソケットキューへのプロトコルデータの複製に失敗した回数。 |
クラウドネイティブ環境の多くのサービスは、CoreDNSが提供するDNS解決サービスに依存しています。 CoreDNSに関連付けられたDNSの問題が発生した場合は、CoreDNSポッドのメトリックを確認する必要があります。
Nginx Ingressの499、502、503、および504の問題
クラウドネイティブ環境では、通常、Ingressゲートウェイまたはプロキシまたはブローカーとして機能するサービスに例外が発生します。 NGINX IngressまたはNGINXをベースとして使用する他のプロキシサービスでは、次の499、502、503、および504エラーがよく発生します。
499
: このエラーは、NGINXクライアントがNGINXサーバーから応答を受信せずにTCP接続を閉じた場合に返されます。 一般的な理由:NGINXクライアントは、TCP接続が作成された直後にリクエストを送信しません。 その結果、NGINXサーバーがリクエストに応答する前に、クライアントはタイムアウトします。 この問題は、Androidクライアントから送信される非同期リクエストでよく発生します。
NGINXサーバは、TCP接続を処理するために一定期間を必要とする。 このシナリオでは、考えられるすべての原因を確認する必要があります。
NGINXサーバーは、アップストリームバックエンドからの応答を待っています。
502
: このエラーは通常、NGINXサーバーとアップストリームバックエンド間の接続の問題 (接続の失敗や予期しない接続の中断など) が原因です。 一般的な理由:バックエンドにDNS解決の失敗が発生します。 この問題は、Kubernetesサービスがバックエンドとして指定されている場合によく発生します。
NGINXサーバーがアップストリームバックエンドへの接続に失敗しました。
上流の要求または応答のサイズが大きすぎるか、メモリを割り当てることができないため、ビジネス対話が中断されます。
503
: すべてのアップストリームバックエンドが使用できない場合、このエラーがクライアントに返されます。 クラウドネイティブ環境での一般的な理由:バックエンドはありません。 この問題はたまにしか発生しません。
Ingressは、トラフィックが多いためにレート制限をトリガーします。
504
: このエラーは、NGINXサーバーとアップストリームバックエンド間で交換されたパケットがタイムアウトした場合に返されます。 一般的な理由の1つは、アップストリームバックエンドからの応答がタイムアウト期間が終了する前にNGINXサーバーに到達できないことです。
上記のエラーが返されたら、次の情報を収集して、さらなるトラブルシューティングのために範囲を絞り込む必要があります。
NGINXによって提供されるaccess_log情報 (
request_time
、upstream_connect_time
、upstrem_response_time
など) 。NGINXによって提供されるerror_log情報。 問題が発生したときにエラーメッセージが返されるかどうかを確認する必要があります。
livenessプロービングまたはreadinessプロービングを設定した場合は、ヘルスチェック情報を確認する必要があります。
接続障害が原因で問題が発生した場合は、次の表に示すメトリックに注意してください。
メトリック | 説明 |
inspector_pod_tcpextlistenoverflows | LISTEN状態のソケットが接続を受け入れるときにSYNキューがいっぱいになる回数。 |
inspector_pod_tcpextlistendrops | LISTEN状態のソケットがSYN_RECV状態のソケットの作成に失敗した回数。 |
inspector_pod_netdevtxdropped | ネットワークインターフェイスコントローラ (NIC) の送信エラーによるパケットドロップ数。 |
inspector_pod_netdevrxdropped | NIC受信エラーによるパケットドロップ数。 |
inspector_pod_tcpactiveopenes | TCP SYNがポッド内で成功した回数 (SYN再送信を除く) 。 接続障害が発生すると、このメトリックの値も増加します。 |
inspector_pod_tcppassiveopenes | TCPハンドシェイクが成功し、ソケットがポッド内で割り当てられた回数。 ほとんどの場合、このメトリックは新しい接続の数を示します。 |
inspector_pod_tcpretranssegs | ポッド内で再送信されるパケットの総数。 TCPセグメンテーションオフロード (TSO) によって生成されたTCPセグメントは既にカウントされている。 |
inspector_pod_tcpestabresets | ポッド内で異常にクローズされたTCP接続の数。 値は結果に基づいてのみ計算されます。 |
inspector_pod_tcpoutrsts | ポッド内で送信されたTCPリセットパケットの数。 |
inspector_pod_conntrackinvalid | 接続追跡が接続の作成に失敗したが、パケットをドロップしない回数。 |
inspector_pod_conntrackdrop | 接続トラッキングが接続障害のためにパケットをドロップする回数。 |
NGINXサーバーの応答が遅い場合は、次の表に示すメトリックに注意してください。 たとえば、リクエスト処理時間 (request_time
) は短いが、リクエストはタイムアウトします。
メトリック | 説明 |
inspector_pod_tcpsummarytcpestablishedconn | ESTABLISHED状態のTCP接続の数。 |
inspector_pod_tcpsummarytcptimewaitconn | TIMEWAIT状態のTCP接続の数。 |
inspector_pod_tcpsummarytcptxqueue | ESTABLISHED状態のTCP接続の送信キュー内のデータパケットのサイズ。 単位はバイトです。 |
inspector_pod_tcpsummarytcprxqueue | ESTABLISHED状態のTCP接続の受信キュー内のデータパケットのサイズ。 単位はバイトです。 |
inspector_pod_tcpexttcpretransfail | 再送信後に返されるEBUSY以外のエラーの数。 エラーは、再送信が失敗したことを示す。 |
問題が発生した時点で前述のメトリックの変更を確認して、範囲を絞り込むことができます。 それでも原因を特定できない場合は、チケットを起票し、前述の情報をチケットに含めてテクニカルサポートをリクエストします。
TCPリセットの問題
ホストは、予期しないTCPパケットを受信すると、TCPリセットパケットを返します。 TCPリセットは、アプリケーションに次の影響を与えます。
connection reset by peer
: ほとんどの場合、このエラーはCライブラリに依存するNGINXサービスで発生します。壊れたパイプ
: ほとんどの場合、このエラーはTCPでカプセル化されたJavaおよびPythonアプリケーションで発生します。
TCPリセットは、クラウドネイティブ環境では一般的です。 TCPリセットの原因はさまざまであり、特定が困難です。 次のセクションでは、TCPリセットの一般的な理由を示します。
サーバーは期待どおりにサービスを提供できません。 例えば、TCPに割り当てられたメモリが不足している。 このシナリオでは、TCPは事前にリセットパケットを送信します。
サービスまたはロードバランサが使用されている場合、エンドポイントやConntrackエラーなどのステートフルなメカニズムエラーにより、リクエストは予期しないバックエンドに転送されます。
セキュリティ上の理由により、接続は解放されます。
ラップされたシーケンス番号 (PAWS) に対する保護またはシーケンス番号のラッピングの問題は、NATまたは高並行性のシナリオで発生します。
TCPキープアライブが使用されている場合、接続は長期間アイドル状態のままです。
次のメトリックを収集して、上記の原因をすばやく区別できます。
TCPリセットパケットが生成されたときに、クライアントとサーバー間のネットワークトポロジーを分析します。
次の表で説明されているメトリックに注意してください。
メトリック
説明
inspector_pod_tcpexttcpabortontimeout
キープアライブ、ウィンドウプローブ、および再送信コールの上限に達したため、TCPリセットパケットが接続を閉じるために送信される回数。
inspector_pod_tcpexttcpabortonlinger
TCP Linger_2オプションが有効になっているときに、FIN_WAIT2接続を閉じるためにTCPリセットパケットが送信される回数。
inspector_pod_tcpexttcpabortonclose
ステータスマシン以外の理由でデータ受信がまだ進行中である場合に、TCP接続を閉じるためにTCPリセットパケットが送信される回数。
inspector_pod_tcpexttcpabortonmemory
tcp_check_oomがtw_sockまたはtcp_sockへのメモリ割り当て中にメモリ不足エラーをトリガーするため、TCPリセットパケットが接続を閉じるために送信される回数。
inspector_pod_tcpexttcpabortondata *
LingerまたはLinger2オプションが有効になっているため、TCPリセットパケットが接続を閉じるために送信される回数。
inspector_pod_tcpexttcpackskippedsynrecv
SYN_RECV状態のソケットがACKに応答しない回数。
inspector_pod_tcpexttcpackskippedpaws
PAWSがトリガされるため、ACKパケットがウィンドウ外 (OOW) レート制限メカニズムによって制限される回数。
inspector_pod_tcpestabresets
ポッド内で異常にクローズされたTCP接続の数。 値は結果に基づいてのみ計算されます。
inspector_pod_tcpoutrsts
ポッド内で送信されたTCPリセットパケットの数。
特定のパターンでTCPリセットが発生した場合、ACK Net Exporterのイベント機能を有効にして、対応するイベントを収集できます。
イベント
説明
TCP_SEND_RST
このイベントは、次のTCP_SEND_RST_NOSockまたはTCP_SEND_RST_ACTIVE共通イベントが発生しない限り、TCPリセットパケットがクローズ接続に送信されるときに生成されます。
TCP_SEND_RST_NOSock
このイベントは、ローカルソケットが見つからないためにTCPリセットパケットが送信されたときに生成されます。
TCP_SEND_RST_ACTIVE
このイベントは、リソースの問題やユーザーモードが無効になっているためにTCPリセットパケットが送信されたときに生成されます。
TCP_RCV_RST_SYN
このイベントは、3ウェイハンドシェイク段階中にTCPリセットパケットが送信されるときに生成されます。
TCP_RCV_RST_ESTAB
このイベントは、接続が確立された後にTCPリセットパケットが送信されるときに生成されます。
TCP_RCV_RST_TW
このイベントは、4ウェイハンドシェイク段階中にTCPリセットパケットが送信されるときに生成されます。
時折のネットワーク待ち時間とジッタの問題
クラウドネイティブ環境でのネットワーク遅延とネットワークジッタの問題は、トラブルシューティングが困難です。 これらの問題の原因はさまざまです。 加えて、ネットワーク待ち時間の問題は、前述の3つのタイプの問題をさらに引き起こし得る。 コンテナネットワークでは、ノードのネットワーク遅延の問題は通常、次の理由で発生します。
RTスケジューラによって管理されるリアルタイムプロセスは、完了するために長い時間期間を必要とする。 その結果、ユーザ・プロセスまたはネットワーク・カーネル・プロセスは、待ち行列に積まれるか、またはゆっくりと実行される。
ユーザプロセスによって行われる外部呼び出しは、時折、完了するのに長い時間を必要とする。 たとえば、ディスクの応答が遅くなったり、RDSインスタンスのラウンドトリップ時間が長くなったりするため、リクエストの処理が遅くなります。
一部のCPUまたはNUMAノードは、不適切なノード構成のために圧倒されます。 その結果、システムの吃音が発生します。
カーネルのステートフル機構は、待ち時間の増加を引き起こす。 例えば、接続追跡による確認動作のために、多数の孤立ソケットがソケット検索に悪影響を及ぼす。
ほとんどの場合、これらのネットワークの問題はオペレーティングシステムの問題によって発生します。 範囲を絞り込むには、次の表に記載されているメトリックに注意してください。
メトリック | 説明 |
inspector_pod_netsoftirqshed | ソフトウェア割り込みが開始されてからksoftirqdプロセスがソフトウェア割り込みの実行を開始するまでの期間。 |
inspector_pod_netsoftirq | ksoftirqdプロセスがソフトウェア割り込みを開始してからoffcpu状態に変化するまでの時間。 |
inspector_pod_ioioreadsyscall | プロセスによって実行された読み取り操作の数 (読み取りまたはプリアドの数など) 。 |
inspector_pod_ioiowritesyscall | プロセスによって実行される書き込み操作の数 (書き込み数または書き込み数など) 。 |
inspector_pod_ioioreadbytes | ほとんどの場合ブロックデバイスであるファイルシステムからプロセスが読み取るバイト数。 |
inspector_pod_ioiowritebyres | プロセスがファイルシステムに書き込むバイト数。 |
inspector_pod_virtsendcmdlat | NIC操作の仮想呼び出しの期間。 |
inspector_pod_tcpexttcptimeouts | TCP_CAの状態が復旧、損失、または障害ではない間にSYNパケットが応答されなかったためにSYNパケットが再送信された回数。 |
inspector_pod_tcpsummarytcpestablishedconn | ESTABLISHED状態のTCP接続の数。 |
inspector_pod_tcpsummarytcptimewaitconn | TIMEWAIT状態のTCP接続の数。 |
inspector_pod_tcpsummarytcptxqueue | ESTABLISHED状態のTCP接続の送信キュー内のデータパケットのサイズ。 単位はバイトです。 |
inspector_pod_tcpsummarytcprxqueue | ESTABLISHED状態のTCP接続の受信キュー内のデータパケットのサイズ。 単位はバイトです。 |
inspector_pod_softnetprocessed | すべてのCPUがポッド内のNICから受信するバックログパケットの数。 |
inspector_pod_softnettimesqueeze | すべてのCPUが完全なパケットの受信に失敗した回数、または受信操作がポッド内でタイムアウトした回数。 |
ケーススタディ
次のケースは、ACK Net Exporterを使用してコンテナネットワークの問題をトラブルシューティングする方法を示しています。
ケース1: 時折DNS解決タイムアウト
症状
顧客Aは、時折発生するDNS解決タイムアウトを処理するためのテクニカルサポートを要求するチケットを提出しました。 顧客AのアプリケーションはPHPで書かれています。 CoreDNSは、DNS解決を実行するように構成される。
トラブルシューティング
Customer Aの監視システムからDNSメトリックを取得します。
報告されたタイムアウトの瞬間にメトリックを分析します。 分析により、次の問題が明らかになります。
DNS解決タイムアウトが発生するたびに、
inspector_pod_udpnoports
の値が1ずつ増加します。 このメトリックの値は小さいです。inspector_pod_packetloss
メトリックで示される__udp4_lib_rcv
パケットドロップの数が1増加します。 しかしながら、パケットドロップの数の変化はわずかである。
顧客Aは、DNSサーバのIPアドレスがインターネットサービスプロバイダ (ISP) によって提供されるパブリックIPアドレスであることを指定する。 取得したメトリックに基づいて、クライアントに応答を送信するのに必要な時間が長いため、DNSタイムアウトが発生しました。 応答は、DNSクエリがユーザーモードでタイムアウトした後に受信されます。
ケース2: 時折Javaアプリケーションの接続障害
症状
顧客Bは、次の問題を解決するためにテクニカルサポートを要求するチケットを提出しました。Tomcatは時々利用できなくなり、問題は毎回5〜10秒続きます。
トラブルシューティング
ログ分析の結果は、問題が発生したときにJavaランタイムがガベージコレクション (GC) 操作を実行していたことを示しています。
Customer BはACK Net Exporterをデプロイし、モニタリングデータを分析しました。 顧客Bは、問題が発生した時点で、
inspector_pod_tcpextlistendrops
メトリックの値が大幅に増加していることを発見しました。分析結果は、JavaランタイムがGC操作を実行したときにリクエスト処理が遅くなったことを示しています。 ただし、新しい要求は抑制されません。 その結果、多数の接続が作成され、LISTENソケットのバックログがオーバーフローします。 これにより、
inspector_pod_tcpextlistendrops
メトリックの値が増加します。TCP接続が積み重なるという問題は一時的なものであり、TCPの要求処理能力に起因するものではありません。 このシナリオでは、お客様Bが推奨するようにTomcatパラメーターを変更し、問題を解決しました。
ケース3: 時折のネットワークのジッター
症状
お客様Cは、次の問題を解決するためにテクニカルサポートをリクエストするチケットを提出しました。Redisインスタンスとアプリケーション間の往復時間が大幅に増加します。 その結果、タイムアウトエラーが発生します。 問題は再現できません。
トラブルシューティング
顧客Cがログを分析した後、顧客CはRedisリクエストの応答時間が300ミリ秒を超えることがあることを特定しました。
Customer Cは、問題が発生した時点で
inspector_node_virtsendcmdlat
メトリックの値が増加したことも確認しました。 Prometheusサービスの影響を受けるモニタリングレベルは15と18です。 計算後、顧客Cは、長い応答時間を有する2つの仮想コールを識別した。 監視レベル15の通話の応答時間が36ミリ秒を超え、監視レベル18の通話の応答時間が200ミリ秒を超えています。カーネルは、仮想呼び出しを処理するときにCPUを占有します。 この場合、CPUリソースを他の操作でプリエンプトすることはできません。 その結果、ポッドがバッチで追加または削除されると、仮想呼び出しの実行が遅くなり、応答時間がさらに長くなります。
ケース4: NGINX Ingressがヘルスチェックに合格しないことがあります
症状
お客様Dは、次の問題を解決するためにテクニカルサポートをリクエストするチケットを提出しました。NGINX Ingressがヘルスチェックに合格しないことがあります。 その結果、リクエスト失敗が発生します。
トラブルシューティング
Customer DがACK Net Exporterをデプロイした後、Customer Dは次のメトリックが異常であることを確認しました。
の値は、
inspector_pod_tcpsummarytcprxqueue
とinspector_pod_tcpsummarytcptxqueue
メトリクスが増加しました。の値は、
inspector_pod_tcpexttcptimeouts
メトリックが増加しました。の値は、
inspector_pod_tcpsummarytcptimewaitconn
メトリックが減少し、inspector_pod_tcpsummarytcpestablishedconn
メトリックが増加しました。
分析結果は、問題が発生したときにカーネルが期待どおりに実行されたことを示しています。 接続は期待どおりに作成されます。 ただし、ユーザープロセスが受信ソケット内のパケットを処理し、パケットを送信したときに例外が発生しました。 このシナリオでは、ヘルスチェックの失敗は、スケジューリングまたはレート制限の問題によって引き起こされる可能性があります。
顧客Dは、推奨通りにcgroupsのモニタリングデータをチェックし、ヘルスチェックの失敗が発生した時点でCPUスロットリングを特定しました。 この結果は、cgroupの問題により、ユーザープロセスがCPUリソースのスケジュールに失敗することがあることを示しています。
この問題を解決するには、CPU Burstを参照し、NGINX IngressのCPUバーストを設定します。
付録
ACK Net Exporterメトリクス
ACK Net Exporterでサポートされているメトリックは常に更新されます。 詳細については、ACKコンソールのMarketplaceページの手順を参照してください。 ポッドに関連しないnet_softirqとvirtcmdlatを除いて、すべてのメトリックとイベントはポッド固有の情報を提供します。
メトリック | 説明 | プローブ |
inspector_pod_netdevrxbytes | NICが受信したバイト数。 | netdev |
inspector_pod_netdevtxbytes | NICによって送信されたバイト数。 | netdev |
inspector_pod_netdevtxerrors | NIC送信エラーの数。 | netdev |
inspector_pod_netdevrxerrors | NIC受信エラーの数。 | netdev |
inspector_pod_netdevtxdropped | NIC送信エラーによるパケットドロップ数。 | netdev |
inspector_pod_netdevrxdropped | NIC受信エラーによるパケットドロップ数。 | netdev |
inspector_pod_netdevtxpackets | NICによって正常に送信されたパケットの数。 | netdev |
inspector_pod_netdevrxpackets | NICによって正常に受信されたパケットの数。 | netdev |
inspector_pod_softnetprocessed | すべてのCPUがポッド内のNICから受信するバックログパケットの数。 | ソフトネット |
inspector_pod_softnetdropped | CPUがポッド内のNICからパケットを受信した後に、すべてのCPUによってドロップされるバックログパケットの数。 | ソフトネット |
inspector_pod_softnettimesqueeze | すべてのCPUが完全なパケットの受信に失敗した回数、または受信操作がポッド内でタイムアウトした回数。 | ソフトネット |
inspector_pod_tcpactiveopenes | TCP SYNがポッド内で成功した回数 (SYN再送信を除く) 。 接続障害が発生すると、このメトリックの値も増加します。 | tcp |
inspector_pod_tcppassiveopenes | TCPハンドシェイクが成功し、ソケットがポッド内で割り当てられた回数。 ほとんどの場合、このメトリックは新しい接続の数を示します。 | tcp |
inspector_pod_tcpretranssegs | ポッド内で再送信されるパケットの総数。 TSOによって生成されるTCPセグメントは既にカウントされている。 | tcp |
inspector_pod_tcpestabresets | ポッド内で例外的にクローズされているTCP接続の数。 値は結果に基づいてのみ計算されます。 | tcp |
inspector_pod_tcpoutrsts | ポッド内で送信されたTCPリセットパケットの数。 | tcp |
inspector_pod_tcpcurrestab | ポッド内のアクティブなTCP接続の数。 | tcp |
inspector_pod_tcpexttcpabortontimeout | キープアライブ、ウィンドウプローブ、および再送信コールの上限に達したため、TCPリセットパケットが接続を閉じるために送信される回数。 | tcpext |
inspector_pod_tcpexttcpabortonlinger | TCP Linger_2オプションが有効になっているときに、FIN_WAIT2接続を閉じるためにTCPリセットパケットが送信される回数。 | tcpext |
inspector_pod_tcpexttcpabortonclose | ステータスマシン以外の理由でデータ受信がまだ進行中である場合に、TCP接続を閉じるためにTCPリセットパケットが送信される回数。 | tcpext |
inspector_pod_tcpexttcpabortonmemory | tcp_check_oomがtw_sockまたはtcp_sockへのメモリ割り当て中にメモリ不足エラーをトリガーするため、TCPリセットパケットが接続を閉じるために送信される回数。 | tcpext |
inspector_pod_tcpexttcpabortondata * | LingerまたはLinger2オプションが有効になっているため、TCPリセットパケットが接続を閉じるために送信される回数。 | tcpext |
inspector_pod_tcpextlistenoverflows | LISTEN状態のソケットが接続を受け入れるときにSYNキューがいっぱいになる回数。 | tcpext |
inspector_pod_tcpextlistendrops | LISTEN状態のソケットがSYN_RECV状態のソケットを作成できない回数。 | tcpext |
inspector_pod_tcpexttcpackskippedsynrecv | SYN_RECV状態のソケットがACKに応答しない回数。 | tcpext |
inspector_pod_tcpexttcpackskippedpaws | PAWSがトリガされるので、ACKパケットがOOWレート制限メカニズムによって制限される回数。 | tcpext |
inspector_pod_tcpexttcpackskippedseq | ACKパケットがOOWレート制限機構によって制限される回数は、シーケンス番号がウィンドウ外にあるためである。 | tcpext |
inspector_pod_tcpexttcpackskippedchallenge | ackパケットにチャレンジする回数は、OOWレート制限機構によって制限される。 これらのパケットは通常、TCPリセットパケットを確認するために送信されます。 | tcpext |
inspector_pod_tcpexttcpackskippedtimewait | ACKパケットがfin_wait_2状態のOOWレート制限メカニズムによって無視される回数。 | tcpext |
inspector_pod_tcpexttcpackskippedfinwait2 | ACKパケットがfin_wait_2状態のOOWレート制限メカニズムによって無視される回数。 | tcpext |
inspector_pod_tcpextpawsestabrejected * | PAWSがトリガーされたためにTCPインバウンドパケットがドロップされた回数。 | tcpext |
inspector_pod_tcpexttcprcvqdrop | このメトリックの値は、メモリ割り当てに失敗し、TCP受信キューがいっぱいになると増加します。 | tcpext |
inspector_pod_tcpexttcpretransfail | 再送信後に返されるEBUSY以外のエラーの数。 エラーは、再送信が失敗したことを示す。 | tcpext |
inspector_pod_tcpexttcpsynretrans | 再送信されるSYNパケットの数。 | tcpext |
inspector_pod_tcpexttcpfastretrans | TCP_CAのステータスがLossでない場合に再送信がトリガーされた回数。 | tcpext |
inspector_pod_tcpexttcptimeouts | TCP_CAのステータスが回復、損失、または障害ではない間にSYNパケットが応答されなかったためにSYNパケットが再送信された回数。 | tcpext |
inspector_pod_tcpsummarytcpestablishedconn | ESTABLISHED状態のTCP接続の数。 | tcpsummary |
inspector_pod_tcpsummarytcptimewaitconn | TIMEWAIT状態のTCP接続の数。 | tcpsummary |
inspector_pod_tcpsummarytcptxqueue | ESTABLISHED状態のTCP接続の送信キュー内のデータパケットのサイズ。 単位はバイトです。 | tcpsummary |
inspector_pod_tcpsummarytcprxqueue | ESTABLISHED状態のTCP接続の受信キュー内のデータパケットのサイズ。 単位はバイトです。 | tcpsummary |
inspector_pod_udpindatagrams | 正常に受信されたUDPパケットの数。 | udp |
inspector_pod_udpsndbuferrors | UDPパケットがネットワーク層を介して送信されたときに報告されるエラーの数。 | udp |
inspector_pod_udpincsumerrors | UDPパケットが受信されたときに報告されるチェックサムエラーの数。 | udp |
inspector_pod_udpignoredmulti | UDPによって無視されるマルチキャストパケットの数。 | udp |
inspector_pod_udpnoports | ネットワーク層が__udp4_lib_rcvを呼び出してパケットを受信したときに、対応するソケットが見つからない回数。 | udp |
inspector_pod_udpinerrors | UDPパケットが受信されたときに報告されるエラーの数。 | udp |
inspector_pod_udpoutdatagrams | ネットワーク層を介して正常に送信されたUDPパケットの数。 | udp |
inspector_pod_udprcvbuferrors | ソケットキューがいっぱいになっているため、UDPがアプリケーション層からソケットキューへのプロトコルデータの複製に失敗した回数。 | udp |
inspector_pod_conntrackentries * | 既存のエントリの数。 | conntrack |
inspector_pod_conntrackfound | 接続追跡レコードが見つかった回数。 | conntrack |
inspector_pod_conntrackinsert | メトリックは使用されていません。 | conntrack |
inspector_pod_conntrackinvalid | 接続追跡が接続の作成に失敗したが、パケットをドロップしない回数。 | conntrack |
inspector_pod_conntrackignore | 接続がすでに作成されているか、接続の追跡が不要になるまでに、接続の追跡がスキップされる回数。 | conntrack |
inspector_pod_conntrackinsertfailed | メトリックは使用されていません。 | conntrack |
inspector_pod_conntrackdrop | 接続トラッキングが接続障害のためにパケットをドロップする回数。 | conntrack |
inspector_pod_conntrackearlydrop | メトリックは使用されていません。 | conntrack |
inspector_pod_conntracksearchrestart | 接続追跡中に検索を再試行した回数。 | conntrack |
inspector_pod_fdopenfd | ポッド内のすべてのプロセスのファイル記述子の数。 | fd |
inspector_pod_fdopensocket | ポッド内のソケットタイプのファイル記述子の数。 | fd |
inspector_pod_slabtcpslabobjperslab | TCPスラブの単一ページに含まれるオブジェクトの数。 | スラブ |
inspector_pod_slabtcpslabpagesperslab | TCPスラブ内のページ数。 | スラブ |
inspector_pod_slabtcpslabobjactive | TCPスラブ内のアクティブオブジェクトの数。 | スラブ |
inspector_pod_slabtcpslabobjnum | TCPスラブ内のオブジェクトの数。 | スラブ |
inspector_pod_slabtcpslabobjsize | TCPスラブ内の各オブジェクトのサイズ。 サイズはカーネルのバージョンによって異なります。 | スラブ |
inspector_pod_ioioreadsyscall | プロセスによって実行された読み取り操作の数 (読み取りまたはプリアドの数など) 。 | io |
inspector_pod_ioiowritesyscall | プロセスによって実行される書き込み操作の数 (書き込み数または書き込み数など) 。 | io |
inspector_pod_ioioreadbytes | ほとんどの場合ブロックデバイスであるファイルシステムからプロセスが読み取るバイト数。 | io |
inspector_pod_ioiowritebyres | プロセスがファイルシステムに書き込むバイト数。 | io |
inspector_pod_net_softirq_schedslow100ms | ネットワークの中断が発生したときに、スケジューリングの待機時間が100ミリ秒を超えた回数。 | net_softirq |
inspector_pod_net_softirq_excuteslow100ms | ネットワークソフトウェアの中断が100ミリ秒以上続く回数。 | net_softirq |
inspector_pod_abnormalalloss (inspector_pod_packetloss_abnormal) | パケット整合性の問題やパケットチェックサムエラーなど、パケットの問題以外のエラーが原因で、カーネルがパケットをドロップする回数。 | packetloss |
inspector_pod_totalloss(inspector_pod_packetloss_total) | カーネルによってドロップされたパケットの総数。 | packetloss |
inspector_pod_virtcmdlatency100ms | NICによる仮想化通信の実行回数が100ミリ秒を超えます。 | virtcmdlat |
inspector_pod_socketlatencyread100ms | ユーザープログラムがネットワークソケットファイルからコンテンツを読み取るのに100ミリ秒以上かかる回数。 | socketlatency |
inspector_pod_socketlatencywrite100ms | ユーザープログラムがネットワークソケットファイルにコンテンツを書き込むのに100ミリ秒を超える必要がある回数。 | socketlatency |
kernellatency_rxslow100ms | オペレーティングシステムのカーネルがパケットを受信するために100ミリ秒以上を必要とする回数。 | kernellatency |
kernellatency_txslow100ms | オペレーティングシステムのカーネルがパケットの送信に100ミリ秒以上必要な回数。 | kernellatency |
ACK Net Exporterイベント
次の表に、最新のACK Net Exporterバージョンを使用してキャプチャできるオペレーティングシステムのネットワーク関連イベントを示します。
プローブ | 説明 |
netiftxlat | トラフィック制御のキューイング規律 (qdiscs) は、キュー内のデータパケットを送信できるようになるまで、長時間待機する必要があります。 |
packetloss | 通常のデータパケットは、オペレーティングシステムカーネルによってドロップされます。 |
net_softirq | カーネル処理ソフトウェアの割り込みにより、NET_RXまたはNET_TXによるパケットスケジューリングが中断されたり、パケット処理が大幅に遅延したりします。 |
socketlatency | ポッド内のプロセスは、ソケット関連の読み取りおよび書き込み操作を完了するために長い期間を必要とする。 |
kernellatency | カーネルは、ネットワーク層でパケットを処理するために長い時間を必要とする。 |
virtcmdlatency | Virtio-netとホスト間の通信には長い時間が必要です。 |
tcpreset | TCPリセットパケットが受信または送信される。 |
tcptwrcv | TCPがTIMEWAIT状態にあるとき、TCPはパケットを受信し、処理する。 |
推奨Grafana設定ファイル
8.4.0以降のGrafanaバージョンを使用する場合は、[ACK Net Exporter-0.2.9.json] をクリックしてGrafana設定ファイルをダウンロードします。
Grafana 8.4.0以前を使用している場合は、[ACK Net Exporter-legacy.json] をクリックしてGrafana構成ファイルをダウンロードします。