DataDog 日志提取在 Kubernetes 集群上不起作用

Jam*_*ady 6 logging kubernetes datadog devops

我们按照这些说明使用 DataDog 的操作符在 Kubernetes 1.22 集群中设置 DataDog。这是通过 helm 安装的,没有任何自定义。

Operator、集群代理和每节点代理 Pod 均按预期运行。我们知道代理能够与 DataDog 端点成功通信,因为我们的新集群显示在 DataDog 的基础设施列表视图中。

然而,来自我们应用程序 Pod 的日志没有出现在 DataDog 中,我们正在努力找出原因。

我们确实确认了一些明显的事情:

  • agent.log.enabled在我们的代理规范中是正确的(下面包含完整的 YAML)。
  • 我们的应用程序 Pod 的日志存在于 中/var/log/pods/,并且包含我们期望的日志行。
  • DataDog 代理能够看到这些日志文件。

因此,代理与 DataDog UI 中可用的日志之间似乎出现了问题。有谁对如何调试这个有任何想法?


我们的代理配置:

apiVersion: datadoghq.com/v1alpha1
kind: DatadogAgent
metadata:
  name: datadog
  namespace: datadog
spec:
  agent:
    apm:
      enabled: false
    config:
      tolerations:
        - operator: Exists
    image:
      name: "gcr.io/datadoghq/agent:latest"
    log:
      enabled: true
    process:
      enabled: false
      processCollectionEnabled: false
  clusterAgent:
    config:
      admissionController:
        enabled: true
        mutateUnlabelled: true
      clusterChecksEnabled: true
      externalMetrics:
        enabled: true
    image:
      name: "gcr.io/datadoghq/cluster-agent:latest"
    replicas: 1
  clusterChecksRunner: {}
  credentials:
    apiSecret:
      keyName: api-key
      secretName: datadog-secret
    appSecret:
      keyName: app-key
      secretName: datadog-secret
  features:
    kubeStateMetricsCore:
      enabled: false
    logCollection:
      enabled: true
    orchestratorExplorer:
      enabled: false

Run Code Online (Sandbox Code Playgroud)

以下是 DataDog 代理之一的环境变量:

DD_API_KEY : secretKeyRef(datadog-secret.api-key)
DD_CLUSTER_AGENT_AUTH_TOKEN : secretKeyRef(datadog.token) 
DD_CLUSTER_AGENT_ENABLED : true
DD_CLUSTER_AGENT_KUBERNETES_SERVICE_NAME : datadog-cluster-agent
DD_COLLECT_KUBERNETES_EVENTS : false
DD_DOGSTATSD_ORIGIN_DETECTION : false
DD_DOGSTATSD_SOCKET : /var/run/datadog/statsd/statsd.sock
DD_EXTRA_CONFIG_PROVIDERS : clusterchecks endpointschecks
DD_HEALTH_PORT : 5555
DD_KUBERNETES_KUBELET_HOST : fieldRef(v1:status.hostIP)
DD_LEADER_ELECTION : false
DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL : false
DD_LOGS_CONFIG_K8S_CONTAINER_USE_FILE : true
DD_LOGS_ENABLED : true
DD_LOG_LEVEL : INFO
KUBERNETES : yes
Run Code Online (Sandbox Code Playgroud)

Adi*_*iii 1

如果您能够看到指标,那么对于日志我可以看到两个可能的原因

  • 在 helm 安装期间启用日志收集
helm upgrade -i datadog --set datadog.apiKey=mykey datadog/datadog --set datadog.logs.enabled=true
Run Code Online (Sandbox Code Playgroud)
  • 区域配置错误,默认情况下需要US.
helm upgrade -i datadog --set datadog.apiKey=my-key datadog/datadog --set datadog.site=us5.datadoghq.com
Run Code Online (Sandbox Code Playgroud)

如果这两个正确,请确保 pod 写入日志 stdout/sterror

因为默认情况下日志路径似乎是正确的

         - name: logpodpath
            mountPath: /var/log/pods
            mountPropagation: None
Run Code Online (Sandbox Code Playgroud)

除此之外,您还需要将要从中收集日志的容器列表列入白名单,或者您可以将以下 ENV 设置为 true,它应该可以工作并收集所有日志。

DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL=true
Run Code Online (Sandbox Code Playgroud)