헤로쿠(Heroku) 빌드팩은 Heroku dyno에 Datadog 에이전트를 설치하여 시스템 메트릭, 커스텀 애플리케이션 메트릭 및 트레이스를 수집합니다. 커스텀 애플리케이션 메트릭 또는 트레이스를 수집하려면 애플리케이션에서 DogStatsD 또는 Datadog APM 라이브러리에 적합한 언어를 포함합니다.

설치

이 가이드는 이미 헤로쿠를 실행하는 애플리케이션이 있는 것으로 가정합니다. 헤로쿠 설명서를 참조해 헤로쿠에 애플리케이션을 구축하는 방법을 배워보세요.

  1. Datadog API 설정으로 이동해 Datadog API 키를 복사하세요. 키를 환경 변수에 내보내기하세요.

    export DD_API_KEY=<YOUR_API_KEY>
    
  2. 애플리케이션 이름을 APPNAME 환경 변수로 내보내기:

    export APPNAME=<YOUR_HEROKU_APP_NAME>
    
  3. Datadog 사이트를 DD_SITE 환경 변수로 내보내기:

    export DD_SITE=
    
  4. Datadog 빌드팩을 프로젝트에 추가:

    cd <HEROKU_PROJECT_ROOT_FOLDER>
    
    # Enable Heroku Labs Dyno Metadata to set HEROKU_APP_NAME env variable automatically
    heroku labs:enable runtime-dyno-metadata -a $APPNAME
    
    # Set hostname in Datadog as appname.dynotype.dynonumber for metrics continuity
    heroku config:add DD_DYNO_HOST=true
    
    # Set the DD_SITE env variable automatically
    heroku config:add DD_SITE=$DD_SITE
    
    # Add this buildpack and set your Datadog API key
    heroku buildpacks:add --index 1 https://github.com/DataDog/heroku-buildpack-datadog.git
    heroku config:add DD_API_KEY=$DD_API_KEY
    
    # Deploy to Heroku forcing a rebuild
    git commit --allow-empty -m "Rebuild slug"
    git push heroku main
    

완료 후 각 dyno가 시작되면 Datadog 에이전트가 자동으로 시작됩니다.

Datadog Agent는 statsd/dogstatsd 메트릭 및 이벤트에 대한 8125 수신 포트를 제공합니다. 트레이스는 8126 포트에서 수집합니다.

빌드팩 주문

헤로쿠 설명서의 빌드팩 보기에서 설명된 대로 목록에 있는 마지막 빌드팩에서 애플리케이션에 대한 프로세스 유형을 결정하는 데 사용됩니다.

heroku-buildpack-apt, puppeteer-heroku-buildpack, 또는 heroku-buildpack-monorepo/app 폴더를 수정하는 빌드팩 등 apt 패키지를 설치하는 빌드팩은 Datadog 빌드팩 이전에 추가될 필요가 있습니다. 예를 들어, 애플리케이션에서 ruby, datadogapt 빌드팩을 사용하는 경우 이것이 올바른 heroku buildpacks 출력입니다.

1. https://github.com/heroku/heroku-buildpack-apt.git
2. https://github.com/DataDog/heroku-buildpack-datadog.git
3. heroku/ruby

특정 빌드팩 버전 및 특정 Datadog 에이전트 버전 고정

헤로쿠는 항상 최신 빌드팩을 사용할 것을 권장합니다. 빌드팩 버전을 고정하려면 빌드팩 릴리스 태그를 지정하여 이를 수행할 수 있습니다.

heroku buildpacks:add --index 1 https://github.com/DataDog/heroku-buildpack-datadog.git#<DATADOG_BUILDPACK_RELEASE>

<DATADOG_BUILDPACK_RELEASE>를 사용하려는 빌드팩 릴리스로 교체합니다.

기본적으로 빌드팩은 릴리스 시점 최신 버전의 Datadog 에이전트를 고정합니다. DD_AGENT_VERSION 환경 변수를 설정해 이전 버전에 에이전트를 고정할 수 있습니다.

업그레이드 및 slug 재컴파일

이 빌드팩을 업그레이드하거나 특정 빌드팩 옵션을 수정하면 slug를 다시 컴파일해야 합니다.

다음 옵션은 slug를 다시 컴파일해야 합니다.

  • DD_AGENT_VERSION
  • DD_AGENT_MAJOR_VERSION
  • DD_PYTHON_VERSION
  • DD_APM_ENABLED
  • DD_PROCESS_AGENT

예를 들어 DD_AGENT_VERSION 등, 이 빌드팩을 업그레이드하거나 옵션을 변경하려면, 다음 단계가 필요합니다.

# Set new version of the Agent
heroku config:set DD_AGENT_VERSION=<NEW_AGENT_VERSION> -a <YOUR_APP_NAME>

# Rebuild your slug with the new Agent version:
git commit --allow-empty -m "Rebuild slug"
git push heroku main

설정

위에 표시된 환경 변수와 함께 설정할 수 있는 몇 가지 옵션들이 있습니다.

설정설명
DD_API_KEY필수 API 키는 조직 설정 -> API 키 페이지에서 사용할 수 있습니다. 참고: 애플리케이션 키가 아닌 API키입니다.
DD_HOSTNAME옵션 경고: 수동으로 호스트 이름을 설정하면 메트릭스 연속성 오류가 발생할 수 있습니다. 이 변수를 설정하지 않는 것이 좋습니다. dyno 호스트가 오래 지속되지 않기 때문에 dynoname 또는 appname을 모니터링하는 것이 좋습니다.
DD_DYNO_HOST옵션 true로 설정하여 web.1 또는 run.1234 등 dyno 이름을 호스트 이름으로 사용합니다. 자세한 정보는 아래 호스트 이름 섹션을 참조하세요. 기본값은 false입니다.
DD_TAGS옵션 공백으로 구분된 열로 제공된 추가 태그를 설정합니다(참고: 빌드팩 버전 1.16 이전에서 쉼표로 구분된 열, 이는 여전히 역호환성을 위해 지원됩니다.) 예: heroku config:set DD_TAGS="simple-tag-0 tag-key-1:tag-value-1". 빌드팩은 자동으로 web.1dynotype(dyno 유형, 예: run 또는 web) 등 dyno 이름을 대표하는 dyno 태그를 추가합니다. 자세한 정보는 태깅 가이드를 참조하세요.
DD_VERSION옵션 버전별 트레이스를 구성하는 데 사용되는 애플리케이션 버전을 설정합니다.
DD_HISTOGRAM_PERCENTILES옵션 선택적으로 히스토그램 메트릭을 위한 추가 백분위수를 설장합니다. 백분위수를 그래프로 만드는 방법을 참조하세요.
DISABLE_DATADOG_AGENT옵션 설정한 경우 Datadog 에이전트가 실행되지 ㅇ낳습니다.
DD_APM_ENABLED옵션 트레이스 수집은 기본적으로 활성화됩니다. false로 설정해 트레이스 수집을 비활성화합니다. 이 옵션을 변경하려면 slug를 다시 컴파일해야 합니다. 자세한 정보는 slug 업그레이드 및 재컴파일 섹션을 확인하세요.
DD_PROCESS_AGENT옵션 Datadog 프로세스 에이전트는 기본적으로 비활성화됩니다. true로 설정해 프로세스 에이전트를 활성화합니다. 이 옵션을 변경하려면 slug를 재컴파일해야 합니다. 자세한 정보는 slug 업그레이드 및 재컴파일 섹션을 참조하세요.
DD_SITE옵션 app.datadoghq.eu 서비스를 사용하는 경우 이를 datadoghq.eu로 설정합니다. 기본값은 datadoghq.com입니다.
DD_AGENT_VERSION옵션 기본적으로 빌드팩은 패키지 리포지토리에서 사용 가능한 최신 Datadog 에이전트 6.x 버전을 설치합니다. 이 변수를 사용해 Datadog 에이전트 이전 버전을 설치하세요. 참고: 일부 에이전트는 사용하지 않을 수 있습니다. 이 옵션은 DD_AGENT_MAJOR_VERSION보다 우선합니다. 이 옵션을 변경하려면 slug를 재컴파일해야 합니다. 자세한 정보는 slug 업그레이드 및 재컴파일을 참조하세요.
DD_AGENT_MAJOR_VERSION옵션 기본적으로 빌드팩은 패키지 리포지토리에서 사용 가능한 Datadog 에이전트 최신 7.x 버전을 설치합니다. 이 변수를 6로 설정해 Datadog 에이전트 최신 6.x 버전을 설치합니다. 에이전트 버전과 파이썬(Python) 버전과 관련된 자세한 정보는 파이썬 버전 섹션을 참조하세요. 이 옵션을 변경하려면 slug를 재컴파일합니다. 자세한 정보는 slug 업그레이드 및 재컴파일을 참조하세요.
DD_DISABLE_HOST_METRICS옵션 기본적으로 빌드팩은 dyno가 실행되는 호스트 머신의 시스템 메트릭을 보고합니다. 이를 true로 설정하여 시스템 메트릭 수집을 비활성화하세요. 자세한 정보는 아래에서 시스템 메트릭 섹션을 참조하세요.
DD_PYTHON_VERSION옵션 6.14.0 버전부터 Datadog 에이전트는 파이썬 버전 23과 함께 제공됩니다. 빌드팩은 버전 중 하나만 유지합니다. 이를 2 또는 3로 설정하여 에이전트에서 유지하려는 파이썬 버전을 선택하세요. 설정하지 않으면 빌드팩은 2을 유지합니다. 자세한 정보는 파이썬 버전 섹션을 참조하세요. 이 옵션을 변경하려면 slug를 재컴파일해야 합니다. 자세한 정보는 slug 업그레이드 및 재컴파일 섹션을 확인하세요.
DD_HEROKU_CONF_FOLDER옵션 기본적으로 빌드팩은 포함하려는 모든 설정 파일에 대해 /datadog 폴더의 애플리케이션 루트를 포함합니다. 이를 설정하여 원하는 경로에 이 위치를 재정의할 수 있습니다.
DD_ENABLE_HEROKU_REDIS옵션 참으로 설정하여 Redis 통합 자동 검색을 활성화하세요. Datadog Redis 통합 섹션 활성화를 확인하세요.
DD_REDIS_URL_VAR옵션 기본적으로 Redis 통합 자동 검색은 REDIS_URL에 저장된 연결 문자열을 사용합니다. 재정의하려면 이 변수를 쉼표로 구분된 연결 문자열에 저장된 변수 이름 목록으로 설정합니다. 자세한 정보는 Datadog Redis 통합 섹션을 확인하세요.
DD_ENABLE_HEROKU_POSTGRES옵션 이를 참으로 설정하여 Postgres 통합 자동 검색을 활성화합니다. 자세한 정보는 Datadog Postgres 통합 섹션 활성화를 확인하세요.
DD_POSTGRES_URL_VAR옵션 기본적으로 Postgres 통합 자동 검색은 DATABASE_URL에 저장된 연결 문자열을 사용합니다. 재정의하려면 이 변수를 쉼표로 구분된 연결 문자열이 저장된 변수 이름 목록으로 설정합니다. 자세한 정보는 Datadog Postgres 통합 섹션 활성화를 확인하세요.
DD_ENABLE_DBM옵션 이 가이드를 따라 Datadog Postgres 통합을 활성화하면 DD_ENABLE_DBMtrue로 설정해 Database 모니터링을 활성화합니다.

추가 설명서는 Datadog 에이전트 설명서를 참조하세요.

호스트네임

헤로쿠(Heroku) dyno는 수명이 짧습니다. 새로운 코드가 구축되고, 설정 변경이 있거나 리소스 필요/가용성이 변경될 때마다 각기 다른 호스트 머신으로 이동될 수 있습니다. 헤로쿠는 유연하고 반응성이 뛰어나므로 Datadog에서 많은 수의 호스트가 보고될 수 있습니다. Datadog는 호스트 기반으로 청구하고 빌드팩 기본값은 실제 호스트를 보고하므로 예상보다 더 높은 비용이 발생할 수 있습니다.

사용 사례에 따라 더 적은 수의 호스트를 집계하고 보고하도록 호스트 이름을 설정하길 원할 수 있습니다. 그렇게 하려면 DD_DYNO_HOSTtrue로 설정하세요. 그러면 에이전트가 호스트 이름을 앱 및 dyno 이름을 보고합니다(예: appname.web.1 또는 appname.run.1234) 또한 호스트 개수는 dyno 사용량과 일치하게 됩니다. 하나의 단점은 dyno가 순환할 때마다 메트릭 지속성 오류가 다소 발생할 수 있다는 점입니다.

올바르게 작동하도록 하려면 HEROKU_APP_NAME을 설정해야 합니다. 가장 손쉬운 방법은 dyno 메타데이터를 활성화하는 것입니다. 참고: Dyno 메타데이터는 아직 비공개 영역에서 사용할 수 없습니다. 이 경우 수동으로 HEROKU_APP_NAME을 설정해야 합니다.

수명이 짧은 dyno를 위한 Datadog 에이전트 비활성화

기본적으로, Datadog 에이전트는 애플리케이션의 일부인 각 dyno에서 실행됩니다. scheduler, release 또는 run를 포함합니다. 많은 경우 이런 dyno의 메트릭은 필요하지 않으며 이에 대해 Datadog 에이전트를 비활성화해도 좋습니다.

dyno 유형에 따라 Datadog 에이전트를 비활성화하려면 다음 스니펫을 prerun.sh script(모니터링하려는 dyno 유형에 적응)에 추가합니다.

# Disable the Datadog Agent based on dyno type
if [ "$DYNOTYPE" == "run" ] || [ "$DYNOTYPE" == "scheduler" ] || [ "$DYNOTYPE" == "release" ]; then
  DISABLE_DATADOG_AGENT="true"
fi

시스템 메트릭

기본적으로, 빌드팩은 dyno에서 실행되는 호스트 머신의 시스템 메트릭을 수집합니다. 시스템 메트릭은 이 빌드팩을 사용하는 개별 dyno에서 사용할 수 없습니다. 호스트 시스템 메트릭 수집을 비활성화하려면 DD_DISABLE_HOST_METRICS 환경 변수를 true로 설정합니다.

dyno에 대한 시스템 메트릭을 수집하려면, 다음을 해야 합니다.

  1. 헤로쿠 랩: 로그-런타임-메트릭을 활성화합니다.
  2. Datadog 로그 드레인을 사용하여 헤로쿠 Logplex에서 메트릭 로그를 수집하여 Datadog로 전달합니다.
  3. 수집된 로그에 대해 로그-기반 메트릭을 생성합니다.

파일 위치

  • Datadog 에이전트는 /app/.apt/opt/datadog-agent에 설치되어 있습니다.
  • Datadog 에이전트 설정 파일은 /app/.apt/etc/datadog-agent에 있습니다.
  • Datadog 에이전트 로그는 /app/.apt/var/log/datadog에 있습니다.

통합 활성화

Datadog Redis 통합 활성화

헤로쿠 애플리케이션에서 Redis 애드온을 사용하는 경우(예: Redis용 헤루쿠 데이터 또는 Redis Enterprise Cloud), 환경 변수를 설정해 Datadog Redis 통합을 활성화할 수 있습니다.

heroku config:set DD_ENABLE_HEROKU_REDIS=true

기본적으로 이 통합은 Redis 연결 URL이 REDIS_URL 환경 변수에 정의되어 있다고 가정합니다. 해당 환경 변수는 Redis용 헤로쿠 데이터 및 기타 Redis 애드온 기본값입니다.

연결 URL이 각기 다른 환경 변수에 정의되었거나 Redis 인스턴스 1개 이상을 설정해야 하는 경우, DD_REDIS_URL_VAR 환경 변수를 쉼표로 구분된 연결 문자열 이름으로 설정합니다. 예를 들어 헤로쿠 Redis와 Redis Enterprise Cloud을 사용하는 경우 DD_REDIS_URL_VAR를 설정합니다.

heroku config:set DD_REDIS_URL_VAR=REDIS_URL,REDISCLOUD_URL

Datadog Postgres 통합 활성화

헤로쿠(Heroku) 애플리케이션에서 Postgres 애드온을 사용하는 경우(예: 헤로쿠 Postgres), 환경 변수를 설정하여 Datadog Postgres 통합을 활성화할 수 있습니다.

heroku config:set DD_ENABLE_HEROKU_POSTGRES=true

기본적으로 이 통합은 Postgres 연결 URL이 DATABASE_URL 환경 변수에 정의되어 있는 것으로 간주합니다. 이는 헤로쿠 Postgres 및 기타 Postgres 애드온 기본 설정입니다.

연결 URL이 각기 다른 환경 변수에 정의되어 있거나 Postgres 인스턴스를 1개 이상 설정하려면, DD_POSTGRES_URL_VAR 환경 변수를 쉼표로 구분된 연결 문자열 변수 이름으로 설정합니다. 예를 들어 Postgres 인스턴스 2개가 있고, 연결 문자열이 POSTGRES_URL1POSTGRES_URL2에 저장된 경우 DD_POSTGRES_URL_VAR를 설정하세요.

heroku config:set DD_POSTGRES_URL_VAR=POSTGRES_URL1,POSTGRES_URL2

Postgres 인스턴스를 위해 Database 모니터링을 활성화하려면 이러한 지침에 따라 에이전트가 데이터베이스에 액세스하도록 허용하고 DD_ENABLE_DBM을 참으로 설정합니다.

heroku config:set DD_ENABLE_DBM=true

Database 모니터링을 사용하려면 Datadog 에이전트용 데이터베이스 자격 증명을 생성해야 합니다. 그러므로 DBM은 헤로쿠 Postgres Essential Tier 플랜에서 사용할 수 없습니다.

기타 통합 활성화

Datadog<INTEGRATION_NAME> 통합을 활성화하는 경우

  • 애플리케이션 내 datadog/conf.d 폴더를 생성합니다.
  • 각 통합을 활성화하려면 <INTEGRATION_NAME>.d 폴더를 생성합니다.
  • 폴더에서 통합 설정을 사용해 conf.yaml을 생성합니다.

dyno 시작 동안 YAML 파일은 적절한 Datadog 에이전트 설정 디렉터리에 복사됩니다.

예를 들어 Datadog-Memcache 통합을 활성화하려면 애플리케이션 루트 /datadog/conf.d/mcache.d/conf.yaml에 파일을 추가합니다(또는 /$DD_HEROKU_CONF_FOLDER/conf.d/mcache.d/conf.yaml). 이 설정 옵션을 변경한 경우:

init_config:

instances:
  ## @param url - string - required
  ## url used to connect to the Memcached instance.
  #
  - url: localhost

모든 사용 가능한 설정 옵션은 샘플 mcache.d/conf.yaml을 참조하세요.

커뮤니티 통합

활성화하려는 통합이 커뮤니티 통합의 일부인 경우, 패키지를 prerun script의 일부로 패키지를 설치합니다.

agent-wrapper integration install -t datadog-<INTEGRATION_NAME>==<INTEGRATION_VERSION>

예를 들어 핑 통합를 설치하려면 설정 파일 datadog/conf.d/ping.d/conf.yaml을 생성하고 다음 라인을 사전 실행 스크립트에 다음 라인을 추가합니다.

agent-wrapper integration install -t datadog-ping==1.0.0

dyno 기반 통합 비활성화

모든 dyno에서 헤로쿠 애플리케이션에 있는 파일 시스템이 공유됨에 따라 통합을 활성화하면 run 또는 worker dyno를 포함하는 각 dyno에서 실행됩니다. dyno 이름 또는 유형에 따라 통합 실행을 제한하려면 작은 스니펫을 [사전 실행 스크립트](#사전 실행-스크립트)에 추가할 수 있습니다.

예를 들어, Gunicorn 통합이 web 유형 dyno에서만 실행되어야 하는 경우 다음을 사전 실행 스크립트에 추가합니다.

if [ "$DYNOTYPE" != "web" ]; then
  rm -f "$DD_CONF_DIR/conf.d/gunicorn.d/conf.yaml"
fi

커스텀 점검 활성화

자체적인 에이전트 커스텀 점검을 활성화하려면 애플리케이션 내에 있는 Datadog 설정 폴더에 checks.d 폴더를 생성합니다. 폴더 아래에 커스텀 점검에 있는 모든 .py.yaml 파일을 복사합니다. dyno 시작 동안 파일은 적합한 Datadog 에이전트 설정 디렉터리로 복사됩니다.

예를 들어 foobar, 2개의 커스텀 점검이 있는 경우 다음이 올바른 폴더 트리입니다.

.
└── app
    └── datadog
        └── checks.d
            ├── foo.py
            ├── foo.yaml
            ├── bar.py
            └── bar.yaml

사전 실행 스크립트

위의 모든 설정과 더불어 애플리케이션에 /datadog/prerun.sh 사전 실행 스크립트를 포함할 수 있습니다. 사전 실행 스크립트는 모든 표준 설정 작업 이후, 그리고 Datadog 에이전트 시작 전에 실행됩니다. DD_TAGS 또는 DD_VERSION 등 환경 변수를 수정하고, 추가 설정을 구성하고, 커뮤니티 통합을 설치하거나 심지어 프로그램에서 Datadog 에이전트를 비활성화할 수 있습니다.

아래 예는 prerun.sh 스크립트에서 할 수 있는 몇 가지 작업을 보여줍니다.

#!/usr/bin/env bash

# dyno 유형에 따라 Datadog 에이전트 비활성화
if [ "$DYNOTYPE" == "run" ]; then
  DISABLE_DATADOG_AGENT="true"
fi

# dyno 유형에 따라 통합 비활성화
if [ "$DYNOTYPE" != "web" ]; then
  rm -f "$DD_CONF_DIR/conf.d/gunicorn.d/conf.yaml"
fi

# HEROKU_SLUG_COMMIT에 따라 앱 버전 설정
if [ -n "$HEROKU_SLUG_COMMIT" ]; then
  DD_VERSION=$HEROKU_SLUG_COMMIT
fi

# "ping" 커뮤니티 통합 설치
agent-wrapper integration install -t datadog-ping==1.0.0

Datadog 콘솔 출력 제한

일부 경우 Datadog 빌드팩이 콘솔에 작성하는 로그 양을 제한하길 원할 수 있습니다.

빌드팩의 로그 출력을 제한하려면 TRACE, DEBUG, INFO, WARN, ERROR, CRITICAL, OFF 중 하나에 DD_LOG_LEVEL 환경 변수를 설정합니다.

heroku config:add DD_LOG_LEVEL=ERROR

선택적 바이너리

slug 영역을 저장하려면, DD_APM_ENABLEDfalse로 설정되어 있거나 DD_PROCESS_AGENT이 설정 안 됨 또는 false로 설정되어 있는 경우 컴파일 동안 선택적 process-agent 바이너리가 제거됩니다.

slug 크기를 줄이려면 DD_APM_ENABLEDfalse로 설정되어 있도록 합니다. APM 기능을 사용하지 않고 DD_PROCESS_AGENTtrue로 설정되지 않은 경우, 프로세스 모니터링을 사용하지 않은 것입니다.

디버깅

정보 또는 디버깅 명령을 실행하려면 agent-wrapper 명령을 사용합니다.

예를 들어 Datadog 에이전트 상태와 활성화된 통합을 표시하려면 다음을 실행합니다.

agent-wrapper status

파이썬 및 에이전트 버전

6.14 버전 이전 파이썬 버전 2이 내장된 Datadog v6 에이전트가 출시되었습니다. 2020년 1월 6.14부터 파이썬 버전 2 수명 종료를 준비 중임을 발표했습니다. Datadog v6 에이전트는 파이썬 버전 23 모두를 포함해 출시되어 소비자가 커스텀 점검을 파이썬 버전 3으로 이전할 수 있는 충분한 시간을 제공합니다. 헤로쿠 빌드팩은 버전 중 하만을 유지합니다. DD_PYTHON_VERSION2 또는 3로 설정하여 에이전트에서 유지하려는 파이썬 버전을 선택합니다. 설정하지 않는 경우 빌드팩은 파이썬 버전 2을 유지합니다. 오직 파이썬 버전 2와 호환되는 커스텀 점검을 사용하는 경우 수명 종료 전 3 버전으로 마이그레이션합니다.

에이전트 v7는 파이썬 버전 3을 포함해 출시합니다. 커스텀 점검을 사용하지 않거나 커스텀 점검이 이미 버전 3에 마이그레이션된 경우 가능한 한 빨리 에이전트 v7에 이동합니다. 6.15부터 v7은 동일한 기능 설정을 공유하는 동일한 부 버전과 함께 릴리스되어 두 버전 간 안전한 이동이 가능합니다. 예를 들어 6.16을 실행하는 경우 파이썬 버전 2이 필요하지 않으며 안전하게 7.16로 건너뛸 수 있습니다.

헤로쿠 로그 수집

Datadog 빌드팩은 헤로쿠 플랫폼에서 로그를 수집하지 않습니다. 헤로쿠 로그 수집을 설정하려면 전용 가이드를 참조하세요.

도커(Docker) 이미지를 포함하는 헤로쿠 사용

이 빌드팩은 헤로쿠 Slug 컴파일러를 사용하는 헤로쿠 구축 환경에서만 작동합니다. 도커 컨테이너를 사용하는 헤로쿠에서 애플리케이션을 구축하는 경우

  1. 도커 이미지의 일부로 Datadog 에이전트를 추가하고 컨테이너의 다른 프로세스로 에이전트를 시작합니다.
  2. 헤로쿠 애플리케이션에서 다음 설정 옵션을 사용해 Datadog가 이를 헤로쿠 dyno로 올바르게 보고하도록 합니다.
heroku config:add DD_HEROKU_DYNO=true

예를 들어, 데비안(Debian) 기반 OS를 사용해 도커 이미지를 빌드하는 경우 Dockerfile에 다음 라인을 추가하세요.

# GPG 종속성 설치
RUN apt-get update \
 && apt-get install -y gnupg apt-transport-https gpg-agent curl ca-certificates

# Datadog 리포지토리 및 서명 키 추가
ENV DATADOG_APT_KEYRING="/usr/share/keyrings/datadog-archive-keyring.gpg"
ENV DATADOG_APT_KEYS_URL="https://keys.datadoghq.com"
RUN sh -c "echo 'deb [signed-by=${DATADOG_APT_KEYRING}] https://apt.datadoghq.com/ stable 7' > /etc/apt/sources.list.d/datadog.list"
RUN touch ${DATADOG_APT_KEYRING}
RUN curl -o /tmp/DATADOG_APT_KEY_CURRENT.public "${DATADOG_APT_KEYS_URL}/DATADOG_APT_KEY_CURRENT.public" && \
    gpg --ignore-time-conflict --no-default-keyring --keyring ${DATADOG_APT_KEYRING} --import /tmp/DATADOG_APT_KEY_CURRENT.public
RUN curl -o /tmp/DATADOG_APT_KEY_06462314.public "${DATADOG_APT_KEYS_URL}/DATADOG_APT_KEY_06462314.public" && \
    gpg --ignore-time-conflict --no-default-keyring --keyring ${DATADOG_APT_KEYRING} --import /tmp/DATADOG_APT_KEY_06462314.public
RUN curl -o /tmp/DATADOG_APT_KEY_C0962C7D.public "${DATADOG_APT_KEYS_URL}/DATADOG_APT_KEY_C0962C7D.public" && \
    gpg --ignore-time-conflict --no-default-keyring --keyring ${DATADOG_APT_KEYRING} --import /tmp/DATADOG_APT_KEY_C0962C7D.public
RUN curl -o /tmp/DATADOG_APT_KEY_F14F620E.public "${DATADOG_APT_KEYS_URL}/DATADOG_APT_KEY_F14F620E.public" && \
    gpg --ignore-time-conflict --no-default-keyring --keyring ${DATADOG_APT_KEYRING} --import /tmp/DATADOG_APT_KEY_F14F620E.public
RUN curl -o /tmp/DATADOG_APT_KEY_382E94DE.public "${DATADOG_APT_KEYS_URL}/DATADOG_APT_KEY_382E94DE.public" && \
    gpg --ignore-time-conflict --no-default-keyring --keyring ${DATADOG_APT_KEYRING} --import /tmp/DATADOG_APT_KEY_382E94DE.public


# Datadog 에이전트 설치
RUN apt-get update && apt-get -y --force-yes install --reinstall datadog-agent

# 엔트리포인트 복사
COPY entrypoint.sh /

# DogStatsD 및 트레이스-에이전트 포트 익스포즈
EXPOSE 8125/udp 8126/tcp

# Datadog 설정 복사
COPY datadog-config/ /etc/datadog-agent/

CMD ["/entrypoint.sh"]

도커 컨테이너 엔트리 포인트에서 Datadog 에이전트, Datadog 애플리케이션 성능 모니터링(APM) 에이전트 및 Datadog 프로세스 에이전트를 시작합니다.

#!/bin/bash

datadog-agent run &
/opt/datadog-agent/embedded/bin/trace-agent --config=/etc/datadog-agent/datadog.yaml &
/opt/datadog-agent/embedded/bin/process-agent --config=/etc/datadog-agent/datadog.yaml

도커 이미지의 더 많은 고급 옵션을 보려면 Datadog 에이전트 도커 파일을 참조하세요.

기여하기

기여 가이드라인를 참조하여 헤로쿠-빌드팩-Datadog 리포지토리에 이슈나 PR을 시작하는 방법을 알아보세요.

내역

이 프로젝트의 이전 버전은 마이크더맨 헤로쿠-빌드팩-datadog 프로젝트에서 가져온 것입니다. 대부분 Datadog 에이전트 버전 6을 위해 재작성되었습니다. 변경 사항과 자세한 정보는 변경 로그에서 찾을 수 있습니다.

트러블슈팅

에이전트 상태 받기

빌드팩을 설정했고 Datadog에서 예상 데이터를 일부 받지 못하고 있다면, Datadog 에이전트에 대한 상태 명령을 실행해 원인을 파악할 수 있습니다.

# 환경 변수로 헤로쿠 애플리케이션 이름 내보내기
export APPNAME=your-application-name

heroku ps:exec -a $APPNAME

# 자격 증명 설정 중... 완료
# ⬢ ruby-heroku-datadog에서 web.1으로 연결 중...
# DD_API_KEY 환경 변수가 설정되지 않았습니다. 다음 실행: heroku config:add DD_API_KEY=<your API key>
# Datadog 에이전트가 비활성화되었습니다. DISABLE_DATADOG_AGENT를 설정 취소하거나 누락된 환경 변수를 설정합니다.

~ $

설정되지 않은 DD_API_KEY에 대한 경고는 무시해도 좋습니다. 헤로쿠는 SSH 세션에 대한 설정 변수를 설정하지 않지만 Datadog 에이전트 프로세스가 해당 변수에 액세스할 수 있습니다.

SSH 세션이 시작되면 Datadog 상태 명령을 실행합니다.

~ $ agent-wrapper status

Getting the status from the agent.

===============
Agent (v7.27.0)
===============

[...]

디버깅

Datadog에 데이터 없음

status 명령이 올바르게 실행되고 출력 섹션이 API 키의 유효성을 표시하는지 확인하세요.

  API Keys status
  ===============
    API key ending with 68306: API Key valid

통합 확인

활성화한 통합이 올바르게 실행되는지 확인하려면 Collector 섹션에서 점검이 올바르게 실행되는지 확인하세요.

=========
Collector
=========

  Running Checks
  ==============

[...]
    postgres (5.4.0)
    ----------------
      Instance ID: postgres:e07ef94b907fe733 [OK]
      Configuration Source: file:/app/.apt/etc/datadog-agent/conf.d/postgres.d/conf.yaml
      Total Runs: 4,282
      Metric Samples: Last Run: 15, Total: 64,230
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 1, Total: 4,282
      Average Execution Time : 43ms
      Last Execution Date : 2021-05-13 08:15:46 UTC (1620893746000)
      Last Successful Execution Date : 2021-05-13 08:15:46 UTC (1620893746000)
      metadata:
        version.major: 13
        version.minor: 2
        version.patch: 0
        version.raw: 13.2 (Ubuntu 13.2-1.pgdg20.04+1)
        version.scheme: semver

APM 에이전트 점검

APM에 대해 애플리케이션을 계측하였고 Datadog에서 트레이스를 받지 못하고 있는 경우 APM 에이전트가 올바르게 실행되어 트레이스를 수집하는지 점검할 수 있습니다.

[...]
=========
APM Agent
=========
  Status: Running
  Pid: 63
  Uptime: 64702 seconds
  Mem alloc: 10,331,128 bytes
  Hostname: ruby-heroku-datadog.web.1
  Receiver: localhost:8126
  Endpoints:
    https://trace.agent.datadoghq.com

  Receiver (previous minute)
  ==========================
    From ruby 2.6.6 (ruby-x86_64-linux), client 0.48.0
      Traces received: 11 (14,181 bytes)
      Spans received: 33

    Default priority sampling rate: 100.0%
    Priority sampling rate for 'service:ruby-heroku-datadog,env:': 100.0%
    Priority sampling rate for 'service:ruby-heroku-datadog,env:development': 100.0%

[...]

Datadog가 dyno보다 많은 수의 에이전트를 보고합니다.

DD_DYNO_HOSTtrue로 설정되어 있고 모든 헤로쿠 애플리케이션에 대해 HEROKU_APP_NAME 값이 설정되어 있어야 합니다. 자세한 정보는 호스트 이름 섹션을 참조하세요.

빌드팩이나 에이전트를 업그레이드한 후, 시작 시 에이전트가 오류를 보고합니다.

빌드팩 또는 에이전트 업그레이드 이후 애플리케이션의 slug을 컴파일해야 합니다. 자세한 정보는 업그레이드 및 slug 재컴파일 섹션을 확인하세요.