概要

Python のログを Datadog に送信するには、Python ロガーを構成してホスト上のファイルにログを記録し、Datadog Agent でそのファイルをテールします。

ロガーの構成

Python のログは、トレースバックのために扱いが複雑になることがあります。トレースバックは、ログを複数行に分割する原因となり、元のログイベントとの関連付けが困難になります。この問題に対処するため、Datadog はロギング時に JSON フォーマッターを使用することを強く推奨しています。

  • 各スタックトレースが正しいログにラップされていることを確認します。
  • ログイベントのすべての属性が正しく抽出されていることを確認します (重大度、ロガー名、スレッド名など)。

以下のロギングライブラリの設定例をご参照ください。

*Python ロガーには、カスタム属性を追加するための extra パラメーターがあります。DJANGO_DATADOG_LOGGER_EXTRA_INCLUDE を使って、extra パラメーターを追加したいロガーの名前にマッチする正規表現を指定します。

Datadog Agent の構成

ログ収集を有効にしたら、カスタムログ収集を設定して、以下のようにログファイルを追跡して Datadog に送信します。

  1. python.d/ フォルダーを conf.d/ Agent 構成ディレクトリに作成します。
  2. conf.d/python.d/ ディレクトリに、以下の内容の conf.yaml ファイルを作成します。
    init_config:
    
    instances:
    
    ##Log section
    logs:
    
      - type: file
        path: "<PATH_TO_PYTHON_LOG>.log"
        service: "<SERVICE_NAME>"
        source: python
        sourcecategory: sourcecode
        # For multiline logs, if they start by the date with the format yyyy-mm-dd uncomment the following processing rule
        #log_processing_rules:
        #  - type: multi_line
        #    name: new_log_start_with_date
        #    pattern: \d{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])
    
  3. Agent を再起動します
  4. Agent の status サブコマンドを実行し、Checks セクションで python を探し、ログが Datadog に正常に送信されることを確認します。

ログが JSON 形式の場合、Datadog は自動的にログメッセージをパースし、ログ属性を抽出します。ログエクスプローラーを使用して、ログを表示し、トラブルシューティングを行うことができます。

ログとトレースにおけるサービスを接続

APM が有効になっているアプリケーションの場合は、APM Python の指示に従いログにトレース ID、スパン ID、envserviceversion を自動的に追加し、ログとトレースを接続します。

: APM トレーサーがログに service を挿入する場合、Agent 構成で設定されている値は上書きされます。

これで、ログは次のような形式になります。

2019-01-07 15:20:15,972 DEBUG [flask.app] [app.py:100] [dd.trace_id=5688176451479556031 dd.span_id=4663104081780224235] - this is an example

ログが JSON 形式の場合、値がトップレベル、またはトップレベルの extra または record.extra ブロックにある場合、トレース値は自動的に抽出されます。以下はトレース値が自動的にパースされる有効な JSON ログの例です。

{
  "message":"Hello from the private method",
  "dd.trace_id":"18287620314539322434",
  "dd.span_id":"8440638443344356350",
  "dd.env":"dev",
  "dd.service":"logs",
  "dd.version":"1.0.0"
}
{
  "message":"Hello from the private method",
  "extra":{
    "dd.trace_id":"18287620314539322434",
    "dd.span_id":"8440638443344356350",
    "dd.env":"dev",
    "dd.service":"logs",
    "dd.version":"1.0.0"
  }
}
{
"message":"Hello from the private method",
  "record":{
    "extra":{
      "dd.trace_id":"1734396609740561719",
      "dd.span_id":"17877262712156101004",
      "dd.env":"dev",
      "dd.service":"logs",
      "dd.version":"1.0.0"
    }
  }
}

その他の参考資料