- 重要な情報
- アプリ内
- インフラストラクチャー
- アプリケーションパフォーマンス
- 継続的インテグレーション
- ログ管理
- セキュリティ
- UX モニタリング
- 管理
任意の Python ロガーを使用して、ホスト上のファイルにログを記録します。次に、Datadog Agent でファイルを監視して、ログを Datadog に送信します。
Python ログの処理はかなり複雑ですが、その主な原因はトレースバックです。トレースバックが複数行に分割されるため、元のログイベントとの関連付けが難しくなります。 この問題に対応するには、ログの収集時に JSON フォーマッタを使用して次の処理を行うことを強くお勧めします。
以下は、ログライブラリごとのセットアップ例です。
APM が有効になっているアプリケーションの場合は、APM Python の指示に従いログにトレース ID、スパン ID、env
、service
、version
を自動的に追加し、ログとトレースを接続します。
注: 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
次に、ファイルから Python ログを収集するように、Datadog Agent を構成します。
JSON-log-formatter の使用例
import logging
import json_log_formatter
formatter = json_log_formatter.JSONFormatter()
json_handler = logging.FileHandler(filename='/var/log/my-log.json')
json_handler.setFormatter(formatter)
logger = logging.getLogger('my_json')
logger.addHandler(json_handler)
logger.setLevel(logging.INFO)
logger.info('Sign up', extra={'referral_code': '52d6ce'})
ログファイルには次のログレコード (インライン) が含まれます。
{
"message": "Sign up",
"time": "2015-09-01T06:06:26.524448",
"referral_code": "52d6ce"
}
Python-json-logger の使用例
import logging
from pythonjsonlogger import jsonlogger
logger = logging.getLogger()
logHandler = logging.FileHandler(filename='/var/log/my-log.json')
formatter = jsonlogger.JsonFormatter()
logHandler.setFormatter(formatter)
logger.addHandler(logHandler)
logger.setLevel(logging.INFO)
logger.info('Sign up', extra={'referral_code': '52d6ce'})
ログファイルには次のログレコード (インライン) が含まれます。
{
"message": "Sign up",
"referral_code": "52d6ce"
}
ハンドラーの構成については、Python-json-logger のドキュメントを参照してください。
Agent の conf.d/python.d/
ディレクトリに、以下の内容の conf.yaml
ファイルを作成します。
init_config:
instances:
##ログセクション
logs:
- type: file
path: "<Python_ログへのパス>.log"
service: "<アプリケーション>"
source: python
sourcecategory: sourcecode
# 複数行ログで、ログが yyyy-mm-dd 形式の日付で始まる場合は、以下の処理ルールのコメントを解除します。
#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])
Agent を再起動して、コンフィギュレーションへの変更を適用します。