このページでは、Kubernetes で実行されているアプリケーションをモニタするようにネットワークの可視性を設定する方法について説明します。

ネットワークの可視性では、アプリケーションのネットワーク上でのやり取りを監視し、主要なパフォーマンスメトリックを報告します。これらのメトリックでは、アプリケーションのネットワークの問題がアプリケーションの問題から分離されます。

ネットワークエージェントは、REST API を使用してアプリケーションコンテナの各ノードで TCP ポートを開き、ネットワーク DaemonSet コンテナと通信します。この通信により、ポッドとノード間のモニタリングが可能になります。エージェントを、ホストモードが有効になっている各ノードで DaemonSet として展開できます。 

はじめる前に

DaemonSet の Docker イメージを作成し、エージェントを設定する前に、次の要件を確認します。

  • ネットワークエージェントと同じクラスタに展開されている Java エージェント 4.4 以上を使用するポッドが少なくとも 1 つあること。
  • TCP ポート 3892 がノードでまだ使用されていないこと。ポート 3892 は、DaemonSet と通信するためにアプリケーションポッドで使用されます。

ネットワークの可視性の DaemonSet 用 Docker イメージ

Kubernetes を使用してネットワークの可視性を設定するには、最初にネットワーク可視性の DaemonSet 用 Docker イメージを作成し、Docker の信頼できるレジストリにイメージをプッシュする必要があります。

  1. 次のサンプル Dockerfile をテキストファイルに貼り付けて、ファイルを保存します。

    FROM ubuntu:14.04
    
    ARG NETVIZ_ZIP_PKG
    RUN groupadd -r appd-netviz && useradd -r -g appd-netviz appd-netviz
    
    RUN apt-get update && apt-get install -y \
      net-tools \
      tcpdump \
      curl  \
      unzip   \
      ssh-client \
      binutils \
      build-essential 
    
    WORKDIR /netviz-agent
    
    # copy NetViz agent contents
    COPY $NETVIZ_ZIP_PKG .
    
    # run the agent install script and disable netlib
    RUN unzip $NETVIZ_ZIP_PKG && ./install.sh \
        && sed -i -e "s|enable_netlib = 1|enable_netlib = 0|g" ./conf/agent_config.lua \
        && sed -i -e "s|WEBSERVICE_IP=.*|WEBSERVICE_IP=\"0.0.0.0\"|g" ./conf/agent_config.lua
    
    RUN chown -R appd-netviz:appd-netviz /netviz-agent
    RUN setcap cap_net_raw=eip /netviz-agent/bin/appd-netagent
    USER appd-netviz
    
    # default command to run for the agent
    CMD  ./bin/appd-netagent -c ./conf -l ./logs -r ./run
    CODE
  2. Dockerfile を保存したディレクトリに移動し、次のコマンドを入力して Docker イメージを作成します。

    $ docker build --build-arg NETVIZ_ZIP_PKG=/path/to/netviz-agent-pkg.zip -t appd-netviz .
    CODE
  3. Docker の信頼できるレジストリに Docker イメージをプッシュします。

Kubernetes を使用したネットワークの可視性の設定

  1. 次の設定を使用して yaml ファイルを作成します。

    apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
    kind: DaemonSet
    metadata:
      name: appd-netviz-agent
    spec:
      selector:
        matchLabels:
          name: appd-netviz-agent
      template:
        metadata:
          name: appd-netviz-agent
          labels:
            name: appd-netviz-agent
        spec:
          hostIPC: true
          hostNetwork: true
          containers:
          - name: appd-netviz-agent
            image: path/to/your/Docker/image # docker registry image
            resources:
              requests:
                memory: "250Mi"
                cpu: "0.5"
              limits:
                memory: "2Gi"
                cpu: "1"
            securityContext:
              capabilities:
                add: ["NET_RAW"]
            ports:
            - containerPort: 3892
              hostPort: 3892
          imagePullSecrets:
            - name: your-registry-key # add the registry key, kubectl create secret ...
    CODE
  2. 設定ファイルで、次のフィールドを更新します。
    • imagecontainers の下):Docker の信頼できるレジストリ内の DaemonSet イメージへのファイルパス。
    • nameimagePullSecrets の下):Docker の信頼できるレジストリのキー。
  3. 次のコマンドを入力して、Kubernetes にネットワークエージェントを展開します。

    $ kubectl apply -f MyConfigFile.yaml
    CODE

アプリケーションポッドをモニタするためのネットワークの可視性の設定

Kubernetes にネットワークの可視性を展開したら、Java エージェントバージョン 4.4 以上を使用するポッドをネットワークエージェントと同じクラスタに 1 つ以上展開する必要があります。これにより、ネットワークメトリックをアプリケーションフローにマッピングできます。 

  1. テキストエディタで Kubernetes を使用してアプリケーションの展開設定 yaml ファイルを開き、APPDYNAMICS_NETVIZ_AGENT_HOSTAPPDYNAMICS_NETVIZ_AGENT_PORT の値を次のように設定します。

    - name: APPDYNAMICS_NETVIZ_AGENT_HOST
      valueFrom:
        fieldRef:
          fieldPath: status.hostIP
    - name: APPDYNAMICS_NETVIZ_AGENT_PORT
      value: 3892
    CODE

    4.5.2 以前の Java エージェントバージョンを使用している場合は、<app-agent-install-dir>/<version-number>/external-services/netviz/netviz-service.properties ファイルを開いてこれらの値を設定する必要があります

  2. コントローラ UI では、ネットワークメトリックをアプリケーションフローにマッピングするために、ソケット インストゥルメンテーションを有効にします。「ネットワークエージェントおよびアプリケーション エージェントの設定」を参照してください。