Kubernetes での分析の展開
Splunk AppDynamicsこのページでは、Kubernetes アプリケーションで アプリケーション サーバー エージェントを使用してインストゥルメント化されたトランザクション分析とログ分析の展開オプションについて説明します。
トランザクション分析(Java および .NET エージェントを除く)とログ分析では、分析エージェントがアプリケーション サーバ エージェントとともに展開されている必要があります。
トランザクション分析
Analytics エージェントは、アプリケーション サーバー エージェントとイベントサービスの間のプロキシとして機能します。「分析エージェントを使用した分析の展開」を参照してください。
Kubernetes アプリケーションでトランザクション分析をサポートするため、Analytics エージェントには 2 つの展開オプションがあります。
-
アプリケーションコンテナのサイドカー。
このモデルでは、Analytics エージェントコンテナが各アプリケーションポッドに追加され、アプリケーションコンテナとともに開始/停止します。
-
各 Kubernetes ワーカーノードに単一の Analytics エージェントが展開される共有エージェント。ノード上の各ポッドは、その Analytics エージェントを使用してイベントサービスと通信します。
このモデルでは、Analytics エージェントは Daemonset として展開されます。
ログ分析
展開されると、Analytics エージェントはアプリケーションのログにアクセスし、ログデータをイベントサービスに送信できます。
Kubernetes アプリケーションでログ分析をサポートするため、Analytics エージェントには 3 つの展開オプションがあります。
アプリケーションコンテナのサイドカー。
.
このモデルでは、Analytics エージェントコンテナが各アプリケーションポッドに追加され、アプリケーションコンテナとともに開始/停止します。Analytics エージェントとアプリケーションコンテナは、アプリケーションログが書き込まれるボリュームを共有するように設定されます。
-
アプリケーションがコンテナファイルシステムをバイパスし、ログデータを STDOUT STDERR /var/log/containers に出力する場合。
このモデルでは、Analytics エージェントは Daemonset として展開されます。
注: OpenShift などの一部の Kubernetes ディストリビューションでは、/var/log/containers の下のファイルにアクセスするための昇格された権限が Analytics エージェントに必要です。 - syslog プロバイダーが Kubernetes クラスタで使用できる場合は、Analytics エージェントを展開して、TCP トランスポートで syslog メッセージを受信できます。syslog プロバイダーごとに 1 つの Analytics エージェントインスタンスが必要です。Syslog メッセージからのログ分析データの収集Syslog メッセージからのログ分析データの収集
トランザクションおよびログ分析の場合、サイドカーアプローチのほうが簡単に展開できますが、アプリケーションポッドごとに 1 つの追加コンテナが必要になるため、より多くのクラスタリソースを消費します。共有エージェントアプローチは、管理する別の展開オブジェクトを追加しますが、クラスタの全体的なリソース消費を大幅に削減できます。
Analytics エージェントを展開するための設定例
次の導入仕様は、上記の展開オプションの実装方法の具体例です。
トランザクション分析:サイドカーまたはポッドを使用した導入仕様
- サイドカー
-
次の展開仕様では、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