python Flask 应用程序使用 ACR 在 Azure Linux 容器上使用 Datadog 跟踪 APM 日志

Gow*_*ham 4 python azure docker datadog

我当前的组织正在迁移到 DataDog 以进行应用程序性能监控。我正在使用 docker 将 Python Flask Web 应用程序部署到 Azure 容器注册表。部署到 Azure 后,应用程序应在 Datadog 门户上列出/可用。

请注意,我刚刚开始学习 Docker 容器。我很有可能完全错了。请多多包涵

遵循的步骤

选项 1:在本地计算机上创建 docker 容器并推送到 ACR

  1. 将 python 库添加dd-trace到 docker 镜像

  2. 在 docker 文件中添加了 dd-trace run 命令

  3. 建立形象

  4. 在本地运行容器

    出现 OSError:[Errno 99] 无法分配请求的地址

    FROM python:3.7
    ENV VIRTUAL_ENV=/opt/venv
    RUN python -m venv $VIRTUAL_ENV
    ENV PATH="$VIRTUAL_ENV/bin:$PATH"
    
    ENV DD_API_KEY=apikeyfromdatadoghq
    ENV DD_ENV=safhire-dev
    ENV DD_LOGS_ENABLED=true
    ENV DD_LOGS_INJECTION=true
    ENV DD_SERVICE=dev-az1-pythonbusinessservice
    ENV DD_TAGS=products:myprojects
    ENV DD_TRACE_DEBUG=true
    ENV DD_TRACE_ENABLED=true
    ENV DOCKER_ENABLE_CI=true
    
    COPY /app /app
    
    
    COPY requirements.txt /
    RUN pip install --no-cache-dir -U pip
    RUN pip install --no-cache-dir -r /requirements.txt
    CMD ddtrace-run python app/main.py runserver 127.0.0.1:3000
    
    Run Code Online (Sandbox Code Playgroud)

选项 2:将日志转发到 Azure Blob 存储,但过程繁重

  1. 使用代码库 Linux 部署 Python
  2. 将日志转发到 Azure Blob 存储
  3. 创建 BlobTrigger Azure 函数以将日志转发到 DataDogAPI
  4. 我相信通过这种方法我们无法捕获 APM 日志,但是我们可以捕获应用程序和控制台日志

选项 3:使用 Serilog,但是,我的组织不想使用第三方日志记录框架,我们有自己的日志记录框架

非常感谢任何帮助,我正在寻找使用选项 1 的解决方案解决方案。我浏览了 Microsoft 文章、Datadog 文档,但没有成功。

我设置了应用程序注册、管理订阅的读者权限、在 Azure 门户上创建了 ClientID 和应用程序机密。他们都没有帮助

您能否确认是否有一种方法可以在 Azure 上不安装代理的情况下收集 Datadog 上的 APM 日志。

先感谢您。

Gow*_*ham 5

经过几天的研究并与 datadog 支持团队跟进后,我能够在 datadog 门户上获取 APM 日志。

以下是我的docker-compose.yml文件配置,我相信它对将来的人有帮助

version: "3"
services:
  web:
    build: web
    command: ddtrace-run python standalone_api.py 
    volumes:
      - .:/usr/src/app
    depends_on: 
      datadog-agent:
        condition: service_healthy         
    image: pythonbusinessservice:ICDNew
    ports: 
     - 5000:5000
    environment:     
    - DATADOG_HOST=datadog-agent
    - DD_TRACE_AGENT_PORT=8126
    - DD_AGENT_HOST=datadog-agent
  datadog-agent:
    build: datadog
    image: gcr.io/datadoghq/agent:latest
    ports: 
     - 8126:8126          
    environment: 
     - DD_API_KEY=9e3rfg*****************adf3
     - DD_SITE=datadoghq.com
     - DD_HOSTNAME=pythonbusinessservice
     - DD_TAGS=env:dev      
     - DD_APM_ENABLED=true
     - DD_APM_NON_LOCAL_TRAFFIC=true
     - DD_DOGSTATSD_NON_LOCAL_TRAFFIC=true     
     - DD_SERVICE=pythonbusinessservice 
     - DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL=true 
     - DD_CONTAINER_EXCLUDE="name:datadog-agent"      
    volumes:
     - /var/run/docker.sock:/var/run/docker.sock
     - /proc/:/host/proc/:ro
     - /opt/datadog-agent/run:/opt/datadog-agent/run:rw
     - /sys/fs/cgroup:/host/sys/fs/cgroup:ro
Run Code Online (Sandbox Code Playgroud)

Dockerfile对于我的 python 长时间运行的应用程序

FROM python:3.7

COPY . /app
WORKDIR /app

RUN pip install -r requirements.txt

CMD ["ddtrace-run python", "/app/standalone_api.py"]
Run Code Online (Sandbox Code Playgroud)

请注意,在requirements.txt 文件中我 ddtrace列出了软件包