Kubernetes での分析の展開

Splunk AppDynamicsこのページでは、Kubernetes アプリケーションで アプリケーション サーバー エージェントを使用してインストゥルメント化されたトランザクション分析とログ分析の展開オプションについて説明します。

トランザクション分析(Java および .NET エージェントを除く)とログ分析では、分析エージェントがアプリケーション サーバ エージェントとともに展開されている必要があります。

注: Java エージェント 4.5.15 以降または .NET エージェント 20.10 以降では「エージェントレス」分析がサポートされているため、トランザクション分析用に Analytics エージェントを展開する必要はありません。「分析エージェントを使用しない分析の展開」を参照してください。

トランザクション分析

Analytics エージェントは、アプリケーション サーバー エージェントとイベントサービスの間のプロキシとして機能します。「分析エージェントを使用した分析の展開」を参照してください。

Kubernetes アプリケーションでトランザクション分析をサポートするため、Analytics エージェントには 2 つの展開オプションがあります。

  1. アプリケーションコンテナのサイドカー。

    トランザクション分析サイドカーの図

    このモデルでは、Analytics エージェントコンテナが各アプリケーションポッドに追加され、アプリケーションコンテナとともに開始/停止します。

  2. 各 Kubernetes ワーカーノードに単一の Analytics エージェントが展開される共有エージェント。ノード上の各ポッドは、その Analytics エージェントを使用してイベントサービスと通信します。

    ログ分析サイドカーの図

    このモデルでは、Analytics エージェントは Daemonset として展開されます。

ログ分析

展開されると、Analytics エージェントはアプリケーションのログにアクセスし、ログデータをイベントサービスに送信できます。

Kubernetes アプリケーションでログ分析をサポートするため、Analytics エージェントには 3 つの展開オプションがあります。

  1. アプリケーションコンテナのサイドカー。

    .アプリケーション コンテナ フローのサイドカー

    このモデルでは、Analytics エージェントコンテナが各アプリケーションポッドに追加され、アプリケーションコンテナとともに開始/停止します。Analytics エージェントとアプリケーションコンテナは、アプリケーションログが書き込まれるボリュームを共有するように設定されます。

  2. アプリケーションがコンテナファイルシステムをバイパスし、ログデータを STDOUT STDERR /var/log/containers に出力する場合。

    ログ分析 STDOUT

    このモデルでは、Analytics エージェントは Daemonset として展開されます。

    注: OpenShift などの一部の Kubernetes ディストリビューションでは、/var/log/containers の下のファイルにアクセスするための昇格された権限が Analytics エージェントに必要です。
  3. syslog プロバイダーが Kubernetes クラスタで使用できる場合は、Analytics エージェントを展開して、TCP トランスポートで syslog メッセージを受信できます。syslog プロバイダーごとに 1 つの Analytics エージェントインスタンスが必要です。Syslog メッセージからのログ分析データの収集Syslog メッセージからのログ分析データの収集

トランザクションおよびログ分析の場合、サイドカーアプローチのほうが簡単に展開できますが、アプリケーションポッドごとに 1 つの追加コンテナが必要になるため、より多くのクラスタリソースを消費します。共有エージェントアプローチは、管理する別の展開オブジェクトを追加しますが、クラスタの全体的なリソース消費を大幅に削減できます。

Analytics エージェントを展開するための設定例

次の導入仕様は、上記の展開オプションの実装方法の具体例です。

注: 次の展開仕様スニペットは、サイドカーとして機能する 2 つのコンテナ(travelapp アプリケーションコンテナ、analyticsagent コンテナ)を含む Java アプリケーション用です。これらのコンテナは、/opt/appdynamics/app-logs パスにマウントされる shared-storage という名前のボリュームを共有します。Javaアプリケーションは、このパスにログを書き込むように設定されています。分析エージェントはこのパスからログを読み取り、イベントサービスにログを送信します。

トランザクション分析:サイドカーまたはポッドを使用した導入仕様

サイドカー

次の展開仕様では、2 つのコンテナを定義します。アプリケーションコンテナの flight-services と Docker Hub からの Analytics エージェント appd-analytics-agent です。

appd-analytics-agent エージェント側のコンポーネントのインストール

サイドカーとして、Analytics エージェントは localhost で利用できます。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: flight-services
spec:
  selector:
    matchLabels:
      name: flight-services
  replicas: 1
  template:
    metadata:
      labels:
        name: flight-services
    spec:
      containers:
      - name: flight-services
        image: <flight-services-docker-image>
        imagePullPolicy: IfNotPresent
        envFrom:
          - configMapRef:
              name: controller-info
        env:
        - name: APPDYNAMICS_AGENT_ACCOUNT_ACCESS_KEY
          valueFrom:
            secretKeyRef:
              key: appd-key
              name: appd-secret
        - name: APPDYNAMICS_AGENT_TIER_NAME
          value: flight-services
		
        ports:
        - containerPort: 8080
          protocol: TCP
        restartPolicy: Always
      - name: appd-analytics-agent
        envFrom:
        - configMapRef:
            name: controller-info
        env:
        - name: APPDYNAMICS_AGENT_ACCOUNT_ACCESS_KEY
          valueFrom:
            secretKeyRef:
              key: appd-key
              name: appd-secret
        - name: APPDYNAMICS_EVENTS_API_URL
          valueFrom:
            configMapKeyRef:
              key: EVENT_ENDPOINT
              name: controller-info
 		- name: EVENT_ENDPOINT
            value: events end point
        - name: APPDYNAMICS_EVENTS_CERTIFICATE_PATH
            value: <Path of root certificate in container> e.g. /certs/root_ca.crt 
        - name: APPDYNAMICS_AGENT_GLOBAL_ACCOUNT_NAME
          valueFrom:
            configMapKeyRef:
              key: FULL_ACCOUNT_NAME
              name: controller-info
        image: docker.io/appdynamics/analytics-agent:24.10.0-595-debian
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 9090
          protocol: TCP
        resources:
          limits:
            cpu: 200m
            memory: 900M
          requests:
            cpu: 100m
            memory: 600M
...

controller-infoappd-secretコントローラ情報 YAML ファイルSecret を作成するコマンド。

ポッド

次のデプロイメント仕様は、同じ flight-services flight-services APPDYNAMICS_ANALYTICS_HOST APPDYNAMICS_ANALYTICS_PORT 分析プロキシ用です。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: flight-services
spec:
  selector:
    matchLabels:
      name: flight-services
  replicas: 1
  template:
    metadata:
      labels:
        name: flight-services
    spec:
      containers:
      - name: flight-services
        image: <flight-services-docker-image>
        imagePullPolicy: IfNotPresent
        envFrom:
          - configMapRef:
              name: controller-info
       env:
        - name: APPDYNAMICS_AGENT_ACCOUNT_ACCESS_KEY
          valueFrom:
            secretKeyRef:
              key: appd-key
              name: appd-secret
        - name: APPDYNAMICS_AGENT_TIER_NAME
          value: flight-services
        - name: APPDYNAMICS_ANALYTICS_HOST
          value: analytics-proxy
        - name: EVENT_ENDPOINT
            value: events end point
        - name: APPDYNAMICS_EVENTS_CERTIFICATE_PATH
            value: <Path of root certificate in container> e.g. /certs/root_ca.crt
        - name: APPDYNAMICS_ANALYTICS_PORT
          value: "9090"
        ports:
        - containerPort: 8080
          protocol: TCP
        volumeMounts:
        - mountPath: /certs       # Added a new volume mount for /certs, which corresponds to the 		    location in the container where the certificate will be accessible.
           name: certs-volume
      restartPolicy: Always
      volumes:
        - name: certs-volume
            hostPath:
              path: <Path on the host where the certificate resides, formatted for the container's host OS> e.g. /mnt/c/User/NewUser/certs       
              type: Directory
...

ログ分析:サイドカーまたはポッドを使用した展開仕様

サイドカーのインストール
apiVersion: apps/v1
kind: Deployment
metadata:
  name: two-container-deployment
spec:
  selector:
    matchLabels:
      app: two-container-app
  template:
    metadata:
      labels:
        app: two-container-app
    spec:
      containers:
      - name: analyticsagent
        image: docker.io/appdynamics/analytics-agent:24.10.0-595-debian
        imagePullPolicy: Never
        ports:
        - containerPort: 9090
        env:
		- name: APPDYNAMICS_CONTROLLER_HOST_NAME
			value: controller host name
		- name: APPDYNAMICS_CONTROLLER_SSL_ENABLED
			value: "false"
		- name: APPDYNAMICS_CONTROLLER_PORT
			value: controller port
		- name: APPDYNAMICS_AGENT_ACCOUNT_NAME
			value: account name
		- name: APPDYNAMICS_AGENT_APPLICATION_NAME
			value: applicant name
		- name: APPDYNAMICS_AGENT_GLOBAL_ACCOUNT_NAME
			value: global account name
		- name: APPDYNAMICS_AGENT_ACCOUNT_ACCESS_KEY
			value: account access key
		- name: EVENT_ENDPOINT
			value: events end point 
		- name: APPDYNAMICS_EVENTS_CERTIFICATE_PATH
          value: <Path on the machine (Windows-specific with backslashes)>:<Path in the container (Windows-specific with backslashes)>
        volumeMounts:
        - mountPath: /opt/appdynamics/app-logs
          name: shared-storage
      - name: travelapp
        image: travel-debian:latest
        imagePullPolicy: Never
        env:
		- name: APPDYNAMICS_CONTROLLER_HOST_NAME
			value: controller host name
		- name: APPDYNAMICS_CONTROLLER_SSL_ENABLED
			value: "false"
		- name: APPDYNAMICS_CONTROLLER_PORT
			value: controller port
		- name: APPDYNAMICS_AGENT_ACCOUNT_NAME
			value: account name
		- name: APPDYNAMICS_AGENT_APPLICATION_NAME
			value: applicant name
		- name: APPDYNAMICS_AGENT_GLOBAL_ACCOUNT_NAME
			value: global account name
		- name: APPDYNAMICS_AGENT_ACCOUNT_ACCESS_KEY
			value: account access key
		- name: EVENT_ENDPOINT
        volumeMounts:
        - mountPath: /opt/appdynamics/analytics-demo/appAgent/ver24.10.0-595/logs/Travel_one-pod-two-cntr-Node
          name: shared-storage
      volumes:
        - name: shared-storage
          emptyDir: {}

---
apiVersion: v1
kind: Service
metadata:
  name: service-analytics-agent
spec:
  selector:
    app: two-container-app
  ports:
  - protocol: TCP
    port: 9090
    targetPort: 9090
  type: NodePort
ポッドのインストール
apiVersion: v1
kind: Pod
metadata:
  name: agent-pod
  namespace: ns1
  labels:
    app: agent-container
spec:
  containers:
    - name: aa-container
      image: docker.io/appdynamics/analytics-agent:24.10.0-595-debian
      imagePullPolicy: Never
      ports:
        - containerPort: 9090
      env:
        - name: APPDYNAMICS_CONTROLLER_HOST_NAME
            value: controller host name
        - name: APPDYNAMICS_CONTROLLER_SSL_ENABLED
            value: "false"
        - name: APPDYNAMICS_CONTROLLER_PORT
            value: controller port
        - name: APPDYNAMICS_AGENT_ACCOUNT_NAME
            value: account name
        - name: APPDYNAMICS_AGENT_APPLICATION_NAME
            value: applicant name
        - name: APPDYNAMICS_AGENT_GLOBAL_ACCOUNT_NAME
            value: global account name
        - name: APPDYNAMICS_AGENT_ACCOUNT_ACCESS_KEY
            value: account access key
        - name: EVENT_ENDPOINT
            value: events end point
          - name: APPDYNAMICS_EVENTS_CERTIFICATE_PATH
            value: <Path of root certificate in container> e.g. /certs/root_ca.crt
      volumeMounts:
        - name: shared-volume
          mountPath: /opt/appdynamics/app-logs
        - mountPath: /certs       # Added a new volume mount for /certs in the analyticsagent container, which corresponds to the location in the container where the certificate will be accessible.
           name: certs-volume
  volumes:
    - name: shared-volume
      persistentVolumeClaim:
        claimName: shared-data-pvc
    - name: certs-volume
        hostPath:
          path: <Path on the host where the certificate resides, formatted for the container's host OS> e.g. /mnt/c/User/NewUser/certs       
          type: Directory