【GKE/Datadog】最低限のログ検知


ログレベルが errorの時は、slackに通知させる仕組みを作っていきたいと思います。

使用するサービス

  • GKE
  • Datadog
  • Slack

実装

Datadog

下記yamlファイルを apply すれば良いです。


apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: datadog-agent
spec:
  selector:
    matchLabels:
      app: datadog-agent
  template:
    metadata:
      labels:
        app: datadog-agent
      name: datadog-agent
    spec:
      containers:
      - image: datadog/agent:latest
        imagePullPolicy: Always
        name: datadog-agent
        ports:
          - containerPort: 8125
            name: dogstatsdport
            protocol: UDP
          - containerPort: 8126
            name: traceport
            protocol: TCP
        env:
          - name: DD_API_KEY
            value: [API KEY]
          - name: DD_COLLECT_KUBERNETES_EVENTS
            value: "true"
          - name: DD_LEADER_ELECTION
            value: "true"
          - name: KUBERNETES
            value: "yes"
          - name: DD_KUBERNETES_KUBELET_HOST
            valueFrom:
              fieldRef:
                fieldPath: status.hostIP
          - name: DD_LOGS_ENABLED # 追加
            value: "true"
          - name: DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL # 追加
            value: "true"
          - name: DD_CRI_SOCKET_PATH
            value: /host/var/run/docker.sock
          - name: DOCKER_HOST
            value: "unix:///host/var/run/docker.sock"
          - name: DD_AC_EXCLUDE
            value: "name:datadog-agent"
        resources:
          requests:
            memory: "256Mi"
            cpu: "200m"
          limits:
            memory: "256Mi"
            cpu: "200m"
        volumeMounts:
          - name: dockersocketdir
            mountPath: /host/var/run
          - name: procdir
            mountPath: /host/proc
            readOnly: true
          - name: cgroups
            mountPath: /host/sys/fs/cgroup
            readOnly: true
          - name: pointerdir # 追加
            mountPath: /opt/datadog-agent/run
        livenessProbe:
          exec:
            command:
            - ./probe.sh
          initialDelaySeconds: 15
          periodSeconds: 5
      volumes:
      - hostPath:
          path: /var/run
        name: dockersocketdir
      - hostPath:
          path: /proc
        name: procdir
      - hostPath:
          path: /sys/fs/cgroup
        name: cgroups
      - hostPath: # 追加
          path: /var/lib/datadog-agent/run
        name: pointerdir

Datadog でログ出力

以前記事に書いた通りにdatadogをクラスタに適応しても、コンテナのログはDatadogには集まりません。
以前下記で書いた yaml に実装を追加する必要があります。
コメントで追加と書いている箇所が、それに該当します。
【GKE】DatadogでGKEを監視する - Qiita

追加箇所

 env:
    (...)
    - name: DD_LOGS_ENABLED
      value: "true"
    - name: DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL
      value: "true"
  volumeMounts:
        (...)
        - name: pointerdir
          mountPath: /opt/datadog-agent/run
    (...)
    volumes:
      (...)
      - hostPath:
          path: /var/lib/datadog-agent/run
        name: pointerdir

どこを確認すべきか

Logs → GettingStartedをクリックし、追加で付与すべきyamlの実装を確認します。

Container → Kubernetesを選択します。

issue

pointerdirで書かれているところは、上記のdatadog管理画面上の実装とは少し違うので、注意が必要です。


      - hostPath:
          path: /var/lib/datadog-agent/run
        name: pointerdir

kubernetes logging, datadog-agent RunContainerError · Issue #3370 · DataDog/datadog-agent · GitHub