TL;DR;
ただhelm installするだけだと色々難点があるので、以下の設定は最低限入れておくといいと思います。
手順
相当な数の設定をhelm install時に渡す必要があって、コマンドラインから--set
フラグで渡すと見通しが悪いため、以下のようなYAMLファイルを作成する。
datadog.values.yaml
daemonset:
updateStrategy: RollingUpdate
# Masterノードのメトリクスも収集できるように
tolerations:
- operator: Exists
effect: NoSchedule
- operator: Exists
effect: NoExecute
- operator: Exists
key: CriticalAddonsOnly
# helm install datadogでつくられるkube-state-metrics chartのrbac.createをtrueにする方法がわからないので別個に入れる
kubeStateMetrics:
enabled: false
datadog:
# Datadog APMを利用するため
apmEnabled: true
env:
# Process and Container Monitoringを利用するため
# https://docs.datadoghq.com/infrastructure/process/#kubernetes-daemonset
- name: DD_PROCESS_AGENT_ENABLED
value: "true"
- name: HOST_PROC
value: /host/proc
- name: HOST_SYS
value: /host/sys
# 必要かなと思ったけど、これがあるとホストのhostnameコマンドの出力(本当のホスト名)ではなく、K8Sノード名(AWSの場合、ip-<private ip>)が使われてしまって、トレース、メトリクス、ログの#hostタグの値の整合がとれなくなってしまったのでやめた
# https://github.com/DataDog/dd-agent/issues/3496#issuecomment-325642715
#- name: KUBERNETES_KUBELET_HOST
# valueFrom:
# fieldRef:
# fieldPath: spec.nodeName
# Event collectionするとき同じイベントを重複して収集してしまわないように、Leader Election機能を有効化する
# https://github.com/kubernetes/charts/issues/1021#issuecomment-327189423
- name: KUBERNETES_LEADER_CANDIDATE
value: "true"
- name: KUBERNETES_LEADER_LEASE_DURATION
value: "60"
- name: KUBERNETES_NAMESPACE_NAME_REGEX
value: "'.*'"
# 複数環境(test, staging, production等)からのメトリクスを分類できるように(Datadog APMトレースのタグにはならない)
- name: DD_TAGS
value: "env:test,kube_cluster:mycluster1"
volumeMount:
- name: passwd
mountPath: /etc/passwd
readOnly: true
volume:
- hostPath:
path: /etc/passwd
Datadog chartにインストールさせることもできるか、その場合にkube-state-metrics chartにそのRBAC関連リソースを作らせる方法がわからなったので、別途インストールする。
$ helm install stable/kube-state-metrics --set rbac.create=True
dd-agentをインストールする。
$ helm install \
--name datadog \
--set datadog.apiKey=$DD_API_KEY \
-f datadog.values.yaml