Kubernetes でのエージェント側コンポーネントのインストール
Splunk AppDynamicsこのページでは、Kubernetes アプリケーションで アプリケーション サーバー エージェントを使用してインストゥルメント化されたトランザクション分析とログ分析の展開オプションについて説明します。
トランザクション分析(Java および .NET エージェントを除く)とログ分析では、分析エージェントがアプリケーション サーバ エージェントとともに展開されている必要があります。
トランザクション分析
Analytics エージェントは、アプリケーション サーバー エージェントとイベントサービスの間のプロキシとして機能します。「分析エージェントを使用した分析の展開」を参照してください。
Kubernetes アプリケーションでトランザクション分析をサポートするため、Analytics エージェントには 2 つの展開オプションがあります。
- アプリケーションコンテナのサイドカー。
このモデルでは、Analytics エージェントコンテナが各アプリケーションポッドに追加され、アプリケーションコンテナとともに開始/停止します。
- 各 Kubernetes ワーカーノードに単一の Analytics エージェントが展開される共有エージェント。ノード上の各ポッドは、その Analytics エージェントを使用してイベントサービスと通信します。
ログ分析
展開されると、Analytics エージェントはアプリケーションのログにアクセスし、ログデータをイベントサービスに送信できます。
Kubernetes アプリケーションでログ分析をサポートするため、Analytics エージェントには 3 つの展開オプションがあります。
Analytics エージェントを展開するための設定例
次の導入仕様は、上記の展開オプションの実装方法の具体例です。
以下の展開仕様のスニペットは、2 つのコンテナを含む Java アプリケーション用です。
travelapp:アプリケーションコンテナを再起動します。analyticsagent:コンテナを追加すると、サイドカーとして機能します。
これらのコンテナは、/opt/appdynamics/app-logs パスにマウントされた shared-storage という名前のボリュームを共有します。Java アプリケーションは、このパスにログを書き込むように構成されています。分析エージェントはこのパスからログを読み取り、イベントサービスにログを送信します。
トランザクション分析:サイドカーまたはポッドを使用した導入仕様
- サイドカー
-
次の導入仕様では、2 つのコンテナを定義します。アプリケーションコンテナ
flight-services(アプリケーション サーバー エージェントでインストゥルメントされたイメージを使用)と、Analytics エージェントコンテナappd-analytics-agent(Docker Hub から Analytics エージェントを使用)です。appd-analytics-agentコンテナは ConfigMap と Secret を使用して、Analytics エージェントに必要なイベントサービスログイン情報(アカウントアクセスキーとグローバルアカウント名を含む)を構成します。「エージェント側のコンポーネントのインストール」を参照してください。サイドカーとして、Analytics エージェントは
localhostで使用でき、デフォルトのポート 9090 が使用されます。アプリケーション サーバ エージェントは自動的に接続し、追加の構成は必要ありません。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: 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-info appd-secret コントローラ情報 YAML ファイル。Secret を作成するコマンド。
- ポッド
-
次の導入仕様は同じ
flight-servicesアプリケーション用ですが、サイドカーを使用する代わりに、Daemonset として個別に展開された共有 Analytics エージェントを参照します。flight-servicesコンテナは、エージェント環境変数APPDYNAMICS_ANALYTICS_HOSTおよびAPPDYNAMICS_ANALYTICS_PORTを、以下の例で定義されている共有 Analytics エージェントのanalytics-proxyサービスに設定します。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: APPDYNAMICS_ANALYTICS_PORT value: "9090" ports: - containerPort: 8080 protocol: TCP restartPolicy: Always ...
ログ分析:サイドカーまたはポッドを使用した展開仕様
- サイドカーのインストール
-
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 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: Namespace metadata: name: ns1 --- 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 volumeMounts: - name: shared-volume mountPath: /opt/appdynamics/app-logs volumes: - name: shared-volume persistentVolumeClaim: claimName: shared-data-pvc --- apiVersion: v1 kind: Service metadata: name: aa-container-service namespace: ns1 spec: selector: app: agent-container ports: - protocol: TCP port: 9090 targetPort: 9090 name: http type: NodePort --- apiVersion: v1 kind: Pod metadata: name: application-pod namespace: ns1 labels: app: my-app spec: containers: - name: app-container image: travel-aa-container-service:latest imagePullPolicy: Never ports: - containerPort: 9999 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: - name: shared-volume mountPath: /opt/appdynamics/app-logs volumes: - name: shared-volume persistentVolumeClaim: claimName: shared-data-pvc