【问题标题】:Collecting Python logs to DataDog in ECS将 Python 日志收集到 ECS 中的 DataDog
【发布时间】:2018-12-28 19:07:45
【问题描述】:

我很难使用 DataDog 代理从部署在 ECS 中的 python 应用程序收集日志。我在 ECS 中部署了一个 dockerized Flask 应用程序。该应用程序将日志吐出到标准输出。我现在需要在 DataDog 中监控它们。

我添加了一个新的 DataDog 代理容器(与 Fargate 兼容,因为我使用的是 Fargate),它作为与应用程序相同任务的一部分运行。我可以在 app.datadoghq.com/containers 中看到这两个容器的 CPU 和内存指标,这意味着 DataDog 代理正在工作。

我现在需要应用日志。我浏览了https://app.datadoghq.com/logs/onboarding/container 中的文档,添加了

  "dockerLabels": {
    "com.datadoghq.ad.logs": "[{\"source\": \"python\", \"service\": \"flask\"}]"
  },

到应用程序容器和以下 env.vars 到 DataDog 容器:

  "environment": [
    {
      "name": "DD_API_KEY",
      "value": "<key>"
    },
    {
      "name": "DD_LOGS_ENABLED",
      "value": "true"
    },
    {
      "name": "DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL",
      "value": "true"
    },
    {
      "name": "SD_BACKEND",
      "value": "docker"
    },
    {
      "name": "ECS_FARGATE",
      "value": "true"
    }
  ]

但这似乎还不够。 我是否朝着正确的方向前进?我错过了什么?

【问题讨论】:

  • 我认为 type:docker 现在不能在 fargate 上工作——要么是因为对 docker 套接字的访问受限,要么是因为 fargate 可能不允许您使用默认的日志记录驱动程序(json-file )。 Datadog 正在为此努力。不过,我听说有人在远程情况下通过 udp/tcp 向 datadog 代理发送日志。不确定你想走那条路,但如果你愿意,the docs are here

标签: logging flask amazon-ecs datadog aws-fargate


【解决方案1】:

我与 Datadog 支持人员讨论了这个问题,他们确认 awslogs 日志记录驱动程序阻止 Datadog 代理容器访问容器的日志。由于awslogs 是目前唯一可用于使用 Fargate 启动类型的任务的日志记录驱动程序,因此将日志记录到 Datadog 将需要另一种方法。

由于awslogs 日志记录驱动程序将日志发送到 CloudWatch,我使用的一种方法是创建订阅以将这些日志组流式传输到 Datadog 的 Lambda 函数,如配置的here。您可以从 Lambda side 使用 CloudWatch 日志作为触发器来执行此操作,也可以从 CloudWatch Logs 端执行此操作,方法是单击 Actions> Stream to AWS Lambda

我选择了 Lambda 选项,因为它既快速又简单,并且不需要对我们的应用程序进行任何代码更改(因为我们仍处于评估阶段)。 Datadog 支持建议我必须修改 Lambda 函数才能将日志归因于相应的服务:

this block 中,将其修改为:

structured_line = merge_dicts(log, {
    "syslog.hostname": logs["logStream"],
    "syslog.path": logs["logGroup"],
    "syslog.appname": logs["logGroup"],
    "aws": {
        "awslogs": {
            "logGroup": logs["logGroup"],
            "logStream": logs["logStream"],
            "owner": logs["owner"]
        }
    }
})

根据 Datadog 支持:

  1. syslog.appname 需要匹配现有的 APM 服务,以便将日志与服务相关联。
  2. 此解决方案目前尚不完全受支持,他们正在努力对此进行更彻底的记录。

我必须进行进一步修改,以对我们的应用程序有意义的方式设置 syslog.* 键的值,但效果很好。

【讨论】:

    猜你喜欢
    • 2022-12-15
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 2020-02-04
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 2019-12-01
    相关资源
    最近更新 更多