Download PDF
Download page Kubernetes でのエージェント側コンポーネントのインストール.
Kubernetes でのエージェント側コンポーネントのインストール
このページでは、Kubernetes アプリケーションで Splunk AppDynamics アプリケーション サーバー エージェントを使用してインストゥルメント化されたトランザクション分析とログ分析の展開オプションについて説明します。「エージェント側のコンポーネントのインストール」を参照してください。
トランザクション分析とログ分析では、Analytics エージェントがアプリケーション サーバ エージェントとともに展開されている必要があります。Java エージェント 4.5.15 以降または .NET エージェント 20.10 以降では、トランザクション分析用に Analytics エージェントを展開する必要はありません。詳細については、Analytics エージェントを使用しない分析の展開を参照してください。
トランザクション分析
Analytics エージェントは、アプリケーション サーバ エージェントとイベントサービスの間のプロキシとして機能します。「Analytics エージェントを使用した分析の展開」を参照してください。
Kubernetes アプリケーションでトランザクション分析をサポートするため、Analytics エージェントには 2 つの展開オプションがあります。
- アプリケーションコンテナのサイドカー。
このモデルでは、Analytics エージェントコンテナが各アプリケーションポッドに追加され、アプリケーションコンテナとともに開始/停止します。 - 各 Kubernetes ワーカーノードに単一の Analytics エージェントが展開される共有エージェント。ノード上の各ポッドは、その Analytics エージェントを使用してイベントサービスと通信します。
このモデルでは、Analytics エージェントは Daemonset として展開されます。
ログ分析
展開されると、Analytics エージェントはアプリケーションのログにアクセスし、ログデータをイベントサービスに送信できます。
Kubernetes アプリケーションでログ分析をサポートするため、Analytics エージェントには 3 つの展開オプションがあります。
- アプリケーションコンテナのサイドカー。
このモデルでは、Analytics エージェントコンテナが各アプリケーションポッドに追加され、アプリケーションコンテナとともに開始/停止します。Analytics エージェントとアプリケーションコンテナは、アプリケーションログが書き込まれるボリュームを共有するように設定されます。 アプリケーションがコンテナファイルシステムをバイパスし、ログデータを
STDOUT
およびSTDERR
に出力する場合、Analytics エージェントを各 Kubernetes ワーカーノードに展開できます。Analytics エージェントは、コンテナごとに一意のファイルとして/var/log/containers
の下に Kubernetes によって保存された、ワーカーノードのファイルシステム上のすべてのアプリケーションコンテナのログ出力にアクセスできます。
このモデルでは、Analytics エージェントは Daemonset として展開されます。OpenShift などの一部の Kubernetes ディストリビューションでは、
/var/log/containers
の下のファイルにアクセスするための昇格された権限が Analytics エージェントに必要です。- syslog プロバイダーが Kubernetes クラスタで使用できる場合は、Analytics エージェントを展開して、TCP トランスポートで syslog メッセージを受信できます。syslog プロバイダーごとに 1 つの Analytics エージェントインスタンスが必要です。「Collect Log Analytics Data from Syslog Messages」を参照してください。
トランザクションおよびログ分析の場合、サイドカーアプローチのほうが簡単に展開できますが、アプリケーションポッドごとに 1 つの追加コンテナが必要になるため、より多くのクラスタリソースを消費します。共有エージェントアプローチは、管理する別の展開オブジェクトを追加しますが、クラスタの全体的なリソース消費を大幅に削減できます。
Analytics エージェントを展開するための設定例
次の導入仕様は、上記の展開オプションの実装方法の具体例です。また、Analytics エージェントのホスト、ポート、および SSL 環境変数を設定する方法のベストプラクティスについては、「コンテナへの .NET Agent for Linux のインストール」および「コンテナへの Node.js エージェントのインストール」を参照してください。
トランザクション分析:サイドカーを使用した導入仕様
次の導入仕様では、2 つのコンテナを定義します。アプリケーションコンテナ flight-services
(アプリケーション サーバー エージェントでインストゥルメント化されたイメージを使用)と、Analytics エージェントコンテナ appd-analytics-agent
(Docker Hub(docker.io/appdynamics/machine-agent-analytics:latest
)からマシンエージェントを使用)です。
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: sashaz/ad-air-nodejs-services-analytics:latest
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/machine-agent-analytics:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9090
protocol: TCP
resources:
limits:
cpu: 200m
memory: 900M
requests:
cpu: 100m
memory: 600M
...
controller-info
ConfigMap は、コントローラ情報 YAML ファイルに記載されています。appd-secret
を作成するコマンドは、シークレットに記載されています。
トランザクション分析:共有 Analytics エージェントを使用した導入仕様
次の導入仕様は同じ 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: sashaz/ad-air-nodejs-services-analytics:latest
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
...
以下の analytics-agent.yaml
ファイルでは、共有 Analytics エージェントが Daemonset として展開されます。このファイルは、共有 Analytics エージェントに到達できる名前空間でエンドポイントを公開するサービス appd-infra-agent-service
も定義します。
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: appd-infra-agent
spec:
selector:
matchLabels:
name: appd-infra-agent
template:
metadata:
labels:
name: appd-infra-agent
spec:
serviceAccountName: appdynamics-infraviz
containers:
- 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/machine-agent-analytics:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9090
protocol: TCP
resources:
limits:
cpu: 200m
memory: 900M
requests:
cpu: 100m
memory: 600M
volumeMounts:
- name: ma-log-volume
mountPath: /opt/appdynamics/conf/logging/log4j.xml
subPath: log4j.xml
- mountPath: /hostroot
name: hostroot
readOnly: true
restartPolicy: Always
volumes:
- name: ma-log-volume
configMap:
name: ma-log-config
- name: hostroot
hostPath:
path: /
type: Directory
---
apiVersion: v1
kind: Service
metadata:
name: appd-infra-agent-service
spec:
selector:
name: appd-infra-agent
ports:
- name: "9090"
port: 9090
targetPort: 9090
status:
loadBalancer: {}
完全な導入仕様は、マシンエージェント YAML ファイルに記載されています。appdynamics-infraviz
サービスアカウントは、RBAC YAML ファイルで定義されます。ma-log-config ConfigMap は、マシンエージェントのログ設定ファイルで定義されます。
ベストプラクティスは、アプリケーションで使用される名前空間とは別の専用の名前空間(通常は appdynamics
)に共有 Analytics エージェントを展開することです。
$ kubectl -n appdynamics apply -f analytics-agent.yaml
アプリケーションの名前空間から共有 Analytics エージェントへのアクセスを提供するには、次の手順を実行します。
サービス名(この例では
analytics-proxy
)を以前に作成したappd-infra-agent-service
の DNS 名にマッピングするには、ExternalName
サービスが必要です。kind: Service apiVersion: v1 metadata: name: analytics-proxy spec: type: ExternalName externalName: appd-infra-agent-service.appdynamics.svc.cluster.local ports: - port: 9090 targetPort: 9090
CODEアプリケーション サーバ エージェントが展開されている各アプリケーションの名前空間でこのサービスを作成します。
$ kubectl -n <app namespace> apply -f analytics-proxy.yaml
CODEanalytics-proxy
は、flight-services
導入仕様で使用されるAPPDYNAMICS_ANALYTICS_HOST
の値であることに注意してください。- name: APPDYNAMICS_ANALYTICS_HOST value: analytics-proxy
CODE
ログ分析:サイドカーを使用した導入仕様
次の導入仕様スニペットは、アプリケーションコンテナ client-api
と、アプリケーションコンテナのサイドカーとして機能する Analytics エージェントコンテナ appd-analytics-agent
を定義する Java アプリケーション用です。init コンテナ appd-agent-attach
も定義されますが、例を簡素化するために、関連する定義は削除されています。
共有ボリューム appd-volume
が、マウントパス /opt/appdlogs
を使用してアプリケーションコンテナと Analytics エージェントコンテナにマウントされます。Java アプリケーションはこのパスにログを書き込むように設定され、Analytics エージェントはこのパスからログを読み取り、イベントサービスに送信するように設定されます。
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
name: client-api
name: client-api
spec:
selector:
matchLabels:
name: client-api
template:
metadata:
labels:
name: client-api
spec:
containers:
- name: client-api
envFrom:
- configMapRef:
name: agent-config
env:
- name: APPDYNAMICS_AGENT_ACCOUNT_ACCESS_KEY
valueFrom:
secretKeyRef:
key: appd-key
name: appd-secret
- name: JAVA_OPTS
...
image: sashaz/java-services:v5
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
protocol: TCP
resources: {}
volumeMounts:
- mountPath: /opt/appdlogs
name: appd-volume
...
- name: appd-analytics-agent
env:
- name: APPDYNAMICS_AGENT_ACCOUNT_ACCESS_KEY
valueFrom:
secretKeyRef:
key: appd-key
name: appd-secret
envFrom:
- configMapRef:
name: agent-config
image: docker.io/appdynamics/machine-agent-analytics:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9090
protocol: TCP
resources:
limits:
cpu: 200m
memory: 900M
requests:
cpu: 100m
memory: 600M
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /opt/appdlogs
name: appd-volume
dnsPolicy: ClusterFirst
initContainers:
- name: appd-agent-attach
...
restartPolicy: Always
schedulerName: default-scheduler
serviceAccountName: appd-account
volumes:
- emptyDir: {}
name: appd-volume
...
ログ分析:共有 Analytics エージェントの導入仕様(STDOUT/STDERR サポート)
次の導入仕様では、アプリケーションコンテナが、アプリケーション コンテナ ファイルシステムではなく STDOUT
および STDERR
にログを出力する使用例がサポートされています。
Kubernetes はコンテナログを /var/log/containers
の下のホストに書き込むため、Analytics エージェントはそこで読み取ることができます。Analytics エージェントは Daemonset として展開されます。ボリューム varlog
が、ホストパス /var/log/containers
へのアクセスにより定義され、Analytics エージェントコンテナ appd-analytics-agent
にマウントされます。Analytics エージェントは、/var/log/containers
に書き込まれたコンテナ固有のログを読み取るように設定されます。詳細については、「ソースルールを使用したログ分析の構成」を参照してください。
apiVersion: v1
kind: ServiceAccount
metadata:
name: appdynamics-loganalytics
namespace: appdynamics
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
labels:
name: appd-analytics
name: appd-analytics
spec:
selector:
matchLabels:
name: appd-analytics
template:
metadata:
labels:
name: appd-analytics
spec:
nodeSelector:
kubernetes.io/os: linux
containers:
- name: appd-analytics-agent
env:
- name: APPDYNAMICS_AGENT_ACCOUNT_ACCESS_KEY
valueFrom:
secretKeyRef:
key: controller-key
name: appd-secret
envFrom:
- configMapRef:
name: agent-config
image: docker.io/appdynamics/machine-agent-analytics:log-24.1.0
imagePullPolicy: Always
ports:
- containerPort: 9090
protocol: TCP
- containerPort: 5144
hostPort: 5144
protocol: TCP
resources:
limits:
cpu: 300m
memory: 900M
requests:
cpu: 200m
memory: 800M
volumeMounts:
- name: varlog
mountPath: /var/log
readOnly: true
- name: dockerlog
mountPath: /var/lib/docker/containers
readOnly: true
restartPolicy: Always
serviceAccountName: appdynamics-loganalytics
volumes:
- name: varlog
hostPath:
path: /var/log
- name: dockerlog
hostPath:
path: /var/lib/docker/containers