Kubernetes でのエージェント側コンポーネントのインストール

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

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

注: Java エージェント 4.5.15 以降または .NET エージェント 20.10 以降では「エージェントレス」分析がサポートされているため、トランザクション分析用に Analytics エージェントを展開する必要はありません。サポートされている SFP および SFP+ モジュールのリストについては、

Analytics エージェントを使用しない分析の展開

.

トランザクション分析

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

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

  1. アプリケーションコンテナのサイドカー。トランザクション分析サイドカーの図このモデルでは、Analytics エージェントコンテナが各アプリケーションポッドに追加され、アプリケーションコンテナとともに開始/停止します。
  2. 各 Kubernetes ワーカーノードに単一の Analytics エージェントが展開される共有エージェント。ノード上の各ポッドは、その Analytics エージェントを使用してイベントサービスと通信します。
ログ分析サイドカーの図このモデルでは、Analytics エージェントは Daemonset として展開されます。

ログ分析

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

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

  1. アプリケーションコンテナのサイドカー。ログ分析 STDOUT 図このモデルでは、Analytics エージェントコンテナが各アプリケーションポッドに追加され、アプリケーションコンテナとともに開始/停止します。Analytics エージェントとアプリケーションコンテナは、アプリケーションログが書き込まれるボリュームを共有するように設定されます。
  2. アプリケーションがコンテナファイルシステムをバイパスし、ログデータを STDOUT および STDERR に出力する場合、Analytics エージェントを各 Kubernetes ワーカーノードに展開できます。Analytics エージェントは、コンテナごとに一意のファイルとして /var/log/containers の下に Kubernetes によって保存された、ワーカーノードのファイルシステム上のすべてのアプリケーションコンテナのログ出力にアクセスできます。ログ分析 STDOUT 図このモデルでは、Analytics エージェントは Daemonset として展開されます。
    注: OpenShift などの一部の Kubernetes ディストリビューションでは、/var/log/containers の下のファイルにアクセスするための昇格された権限が Analytics エージェントに必要です。
  3. syslog プロバイダーが Kubernetes クラスタで使用できる場合は、Analytics エージェントを展開して、TCP トランスポートで syslog メッセージを受信できます。syslog プロバイダーごとに 1 つの Analytics エージェントインスタンスが必要です。Syslog メッセージからのログ分析データの収集Syslog メッセージからのログ分析データの収集
トランザクションおよびログ分析の場合、サイドカーアプローチのほうが簡単に展開できますが、アプリケーションポッドごとに 1 つの追加コンテナが必要になるため、より多くのクラスタリソースを消費します。共有エージェントアプローチは、管理する別の展開オブジェクトを追加しますが、クラスタの全体的なリソース消費を大幅に削減できます。

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

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

注:

以下の展開仕様のスニペットは、2 つのコンテナを含む Java アプリケーション用です。

  • travelapp:アプリケーションコンテナを再起動します。
  • analyticsagent:コンテナを追加すると、サイドカーとして機能します。

これらのコンテナは、/opt/appdynamics/app-logs パスにマウントされた shared-storage という名前のボリュームを共有します。Java アプリケーションは、このパスにログを書き込むように構成されています。分析エージェントはこのパスからログを読み取り、イベントサービスにログを送信します。

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

サイドカー

次の導入仕様では、2 つのコンテナを定義します。アプリケーションコンテナ flight-services(アプリケーション サーバー エージェントでインストゥルメントされたイメージを使用)と、Analytics エージェントコンテナ appd-analytics-agentDocker 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