すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:ACK Net Exporterを使用したネットワークの問題のトラブルシューティング

最終更新日:Oct 29, 2024

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のアーキテクチャを示しています。

image

ACK Net Exporterのインストールと設定

ACK Net Exporterのインストール

  1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[Marketplace] > [Marketplace] を選択します。

  2. On theマーケットプレイスページ、検索ack-net-exporterコンポーネントをクリックします。

  3. ack-net-exporterコンポーネントページの右上隅で、右上隅の [デプロイ] をクリックします。 展開パネルが表示されます。

  4. では、基本情報ステップを設定し、クラスター名前空間パラメーターをクリックし、次へ.

  5. [パラメーター] ステップで、次の表に記載されているパラメーターを設定し、[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を設定できます。

    1. ACK コンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

    2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[設定] > [設定] を選択します。

    3. ConfigMapページで、名前空間パラメーターをkube-systemに設定し、kubeskoop-configを検索し、[操作] 列の [編集] をクリックします。

    4. [編集] パネルでパラメーターを設定し、[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が提供する高度な機能を使用できます。

  1. BTFファイルをノードの /boot/ パスに保存します。

    • 完全なvmlinuxファイルをインストールした場合は、vmlinuxファイルをオペレーティングシステムの /boot/ パスに保存できます。

    • kernel-debuginfoパッケージをインストールした場合は、ノードの /usr/lib/debug/lib/modules/ パスでvmlinuxファイルを見つけ、そのファイルを /boot/ パスにコピーします。

  2. 次のコマンドを実行して、有効な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用に作成されたポッドのサービスポートにアクセスしてメトリクスを照会できます。

  1. 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>
  2. 次のコマンドを実行して、メトリックを照会します。 コマンドの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受信バッファエラーの数を示します。

  • namespacepodnode、およびnetns: メトリックのラベル。 PromQLステートメントを使用してラベルをフィルタリングできます。 podラベルは、メトリックが記述するポッドを示します。 namespaceラベルは、ポッドが属する名前空間を示します。 nodeラベルは、ポッドをホストするノードの名前を示します。 /etc/hostnameファイルで指定されたホスト名がデフォルトのホスト名として使用されます。 netnsラベルは、ポッド内のコンテナのネットワーク名前空間のIDを示します。

  • 01654487977826は、メトリックの値と、メトリック値が収集された時点を示します。 時点は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メトリクスを表示することもできます。

inspector2

Grafanaを設定して、プロメテウスに収集されるモニタリングデータを視覚化できます。

  1. Grafanaページの左側のナビゲーションウィンドウで、5 > ダッシュボード.

  2. On the新しいダッシュボードページをクリックします。新しいパネルを追加する.

  3. [編集パネル] ページの下部で、[データソース] フィールドに [プロメテウス] と入力します。 次に、Prometheusサーバーのアドレスを入力します。

  4. [Metric browser] をクリックし、inspectorと入力します。 次に、Grafanaは利用可能なすべてのACK Net Exporterメトリクスを表示します。 右上の [保存] をクリックします。 表示されるダイアログボックスで、[保存] をクリックします。 Grafanaは、次の図に示すように、視覚化されたデータを表示します。

    grafna

  5. 前の図に表示されている設定に基づいて、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) にエクスポートし、データを可視化するには、次の手順を実行します。

  1. 手順1: Prometheusのマネージドサービスの有効化.

  2. カスタムACK Net Exporterメトリクスを設定します。

    1. にログインします。 ARMSコンソールを使用します。 左側のナビゲーションウィンドウで、[Prometheusのマネージドサービス] > [インスタンス] を選択します。

    2. にログインします。 ARMSコンソールを使用します。

    3. 上部のナビゲーションバーで、ACKクラスターがデプロイされているリージョンを選択します

    4. 左側のナビゲーションウィンドウで、Prometheusのマネージドサービス > インスタンス.

    5. 管理するPrometheusインスタンスの名前をクリックして、[統合センター] ページに移動します。

    6. [インスタンス] ページで、管理するインスタンスを見つけ、インスタンスの名前をクリックします。 その後、インスタンスの詳細ページにリダイレクトされます。 ほとんどの場合、Prometheusインスタンスの名前はクラスターの名前と同じです。

    7. 左側のナビゲーションウィンドウで、[サービスの検出] をクリックし、[ターゲット] タブをクリックします。 [ターゲット] タブの下部で、[kubernetes-pods] をクリックします。 この情報は、カスタムACK Net Exporterメトリクスが設定されていることを示しています。服务发现

      kubernetes-podsが表示されていない場合は、[設定] タブをクリックし、[デフォルトのサービス検出] タブのスイッチをオンにする必要があります。配置

    8. 左側のナビゲーションウィンドウで、[ダッシュボード] をクリックします。 [ダッシュボード] ページで、ダッシュボードをクリックしてGrafanaにログインします。 [パネルの追加] をクリックして [グラフ] を選択し、[データソース] セクションでクラスターに関連するデータソースを有効にします。

    9. [Metric browser] をクリックし、inspectorと入力します。 その後、Grafanaは利用可能なすべてのACK Net Exporterメトリクスを自動的に表示します。 右上隅の [保存] をクリックします。 表示されるダイアログボックスで、[保存] をクリックします。 Grafanaは、次の図に示すように、視覚化されたデータを表示します。81

シナリオ3: モニタリングデータをGrafana Lokiにエクスポートし、データを視覚化

ACK Net Exporterによって収集された異常イベントを、事前設定されたGrafana Lokiサービスにリアルタイムでプッシュできます。 これにより、これらのイベントを一元管理できます。 モニタリングデータをACK Net ExporterからGrafana Lokiにエクスポートするには、次の手順を実行します。

  1. Grafana Lokiを設定する.

    説明

    ACK Net ExporterポッドがアクセスできるネットワークにGrafana Lokiをデプロイします。 ACK Net Exporterは、イベントログをGrafana Lokiに自動的にプッシュできます。

  2. ACK Net Exporterの設定ページで、enableEventServerパラメーターをtrueに設定し、lokiServerAddressパラメーターをGrafana Lokiサービスのアドレスに設定します。 サービスアドレスとして、Grafana LokiサービスのIPアドレスまたはドメイン名を指定できます。命令

  3. 次のコマンドを実行してサービスアドレスにアクセスし、Grafana Lokiが使用可能かどうかを確認します。

    curl http://[Address of Grafana Loki]:3100/ready
  4. Grafana Lokiが利用可能な場合は、Grafana LokiをGrafanaデータソースとして追加します。

    Grafanaを開きます。 左側のナビゲーションウィンドウで、[データソース] > [Loki] を選択し、Grafana Lokiのアドレスを入力し、[保存とテスト] をクリックします。loki

  5. 左側のナビゲーションウィンドウで、[探索] をクリックします。 上部のナビゲーションバーで、データソースを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パケットを受信するために関数が呼び出されたときに、__udp4_lib_rcv関数がソケットを見つけられない回数。

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_timeupstream_connect_timeupstrem_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キープアライブが使用されている場合、接続は長期間アイドル状態のままです。

次のメトリックを収集して、上記の原因をすばやく区別できます。

  1. TCPリセットパケットが生成されたときに、クライアントとサーバー間のネットワークトポロジーを分析します。

  2. 次の表で説明されているメトリックに注意してください。

    メトリック

    説明

    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リセットパケットの数。

  3. 特定のパターンで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解決を実行するように構成される。

トラブルシューティング

  1. Customer Aの監視システムからDNSメトリックを取得します。

  2. 報告されたタイムアウトの瞬間にメトリックを分析します。 分析により、次の問題が明らかになります。

    • DNS解決タイムアウトが発生するたびに、inspector_pod_udpnoportsの値が1ずつ増加します。 このメトリックの値は小さいです。

    • inspector_pod_packetlossメトリックで示される __udp4_lib_rcvパケットドロップの数が1増加します。 しかしながら、パケットドロップの数の変化はわずかである。

  3. 顧客Aは、DNSサーバのIPアドレスがインターネットサービスプロバイダ (ISP) によって提供されるパブリックIPアドレスであることを指定する。 取得したメトリックに基づいて、クライアントに応答を送信するのに必要な時間が長いため、DNSタイムアウトが発生しました。 応答は、DNSクエリがユーザーモードでタイムアウトした後に受信されます。

ケース2: 時折Javaアプリケーションの接続障害

症状

顧客Bは、次の問題を解決するためにテクニカルサポートを要求するチケットを提出しました。Tomcatは時々利用できなくなり、問題は毎回5〜10秒続きます。

トラブルシューティング

  1. ログ分析の結果は、問題が発生したときにJavaランタイムがガベージコレクション (GC) 操作を実行していたことを示しています。

  2. Customer BはACK Net Exporterをデプロイし、モニタリングデータを分析しました。 顧客Bは、問題が発生した時点で、inspector_pod_tcpextlistendropsメトリックの値が大幅に増加していることを発見しました。

  3. 分析結果は、JavaランタイムがGC操作を実行したときにリクエスト処理が遅くなったことを示しています。 ただし、新しい要求は抑制されません。 その結果、多数の接続が作成され、LISTENソケットのバックログがオーバーフローします。 これにより、inspector_pod_tcpextlistendropsメトリックの値が増加します。

  4. TCP接続が積み重なるという問題は一時的なものであり、TCPの要求処理能力に起因するものではありません。 このシナリオでは、お客様Bが推奨するようにTomcatパラメーターを変更し、問題を解決しました。

ケース3: 時折のネットワークのジッター

症状

お客様Cは、次の問題を解決するためにテクニカルサポートをリクエストするチケットを提出しました。Redisインスタンスとアプリケーション間の往復時間が大幅に増加します。 その結果、タイムアウトエラーが発生します。 問題は再現できません。

トラブルシューティング

  1. 顧客Cがログを分析した後、顧客CはRedisリクエストの応答時間が300ミリ秒を超えることがあることを特定しました。

  2. Customer Cは、問題が発生した時点でinspector_node_virtsendcmdlatメトリックの値が増加したことも確認しました。 Prometheusサービスの影響を受けるモニタリングレベルは15と18です。 計算後、顧客Cは、長い応答時間を有する2つの仮想コールを識別した。 監視レベル15の通話の応答時間が36ミリ秒を超え、監視レベル18の通話の応答時間が200ミリ秒を超えています。

  3. カーネルは、仮想呼び出しを処理するときにCPUを占有します。 この場合、CPUリソースを他の操作でプリエンプトすることはできません。 その結果、ポッドがバッチで追加または削除されると、仮想呼び出しの実行が遅くなり、応答時間がさらに長くなります。

ケース4: NGINX Ingressがヘルスチェックに合格しないことがあります

症状

お客様Dは、次の問題を解決するためにテクニカルサポートをリクエストするチケットを提出しました。NGINX Ingressがヘルスチェックに合格しないことがあります。 その結果、リクエスト失敗が発生します。

トラブルシューティング

  1. Customer DがACK Net Exporterをデプロイした後、Customer Dは次のメトリックが異常であることを確認しました。

    1. の値は、inspector_pod_tcpsummarytcprxqueueinspector_pod_tcpsummarytcptxqueueメトリクスが増加しました。

    2. の値は、inspector_pod_tcpexttcptimeoutsメトリックが増加しました。

    3. の値は、inspector_pod_tcpsummarytcptimewaitconnメトリックが減少し、inspector_pod_tcpsummarytcpestablishedconnメトリックが増加しました。

  2. 分析結果は、問題が発生したときにカーネルが期待どおりに実行されたことを示しています。 接続は期待どおりに作成されます。 ただし、ユーザープロセスが受信ソケット内のパケットを処理し、パケットを送信したときに例外が発生しました。 このシナリオでは、ヘルスチェックの失敗は、スケジューリングまたはレート制限の問題によって引き起こされる可能性があります。

  3. 顧客Dは、推奨通りにcgroupsのモニタリングデータをチェックし、ヘルスチェックの失敗が発生した時点でCPUスロットリングを特定しました。 この結果は、cgroupの問題により、ユーザープロセスがCPUリソースのスケジュールに失敗することがあることを示しています。

  4. この問題を解決するには、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構成ファイルをダウンロードします。