Go のログを Datadog に送信するには、ファイルにログを記録し、そのファイルを Datadog Agent で追跡します。オープンソースのロギングライブラリである logrus を使用すると、以下のようなセットアップが可能です。

Datadog は、カスタムパース規則の使用を避け、ログを JSON で生成するようにロギングライブラリをセットアップすることを強くお勧めします。

ロガーの構成

典型的な Go 構成では、main.go ファイルを開き、以下のコードに貼り付けます。

package main

import (
  log "github.com/sirupsen/logrus"
)

func main() {

    // JSONFormatter を使用します
    log.SetFormatter(&log.JSONFormatter{})

    // logrus を使用して通常どおりイベントをログに記録します
    log.WithFields(log.Fields{"string": "foo", "int": 1, "float": 1.1 }).Info("My first event from golang to stdout")
}

ログイベントに表示するメタデータを JSON オブジェクトで提供すると、ログにメタデータを追加できます。

メタデータには、hostnameusernamecustomersmetric などの情報があり、トラブルシューティングや Go アプリケーションの状態の把握に役立ちます。

package main

import (
  log "github.com/sirupsen/logrus"
)

func main() {

    // JSONFormatter を使用します
    log.SetFormatter(&log.JSONFormatter{})

    // logrus を使用してイベントをログに記録します
    log.WithFields(log.Fields{"string": "foo", "int": 1, "float": 1.1 }).Info("My first event from golang to stdout")

  // メタデータについては、以下のように、ログステートメント間でフィールドを再利用するのが一般的です
  contextualizedLog := log.WithFields(log.Fields{
    "hostname": "staging-1",
    "appname": "foo-app",
    "session": "1ce3f6v"
  })

  contextualizedLog.Info("Simple event with global metadata")
}

Datadog Agent の構成

ログ収集が有効になったら、ログファイルを追跡して新しいログを Datadog に送信するカスタムログ収集を設定します。

  1. go.d/ フォルダーを conf.d/ Agent 構成ディレクトリに作成します。

  2. go.d/ に以下の内容で conf.yaml ファイルを作成します。

    ##Log section
    logs:
    
      - type: file
        path: "<path_to_your_go_log>.log"
        service: <service_name>
        source: go
        sourcecategory: sourcecode
    
  3. Agent を再起動します

  4. Agent の status サブコマンドを実行し、Checks セクションで go を探し、ログが Datadog に正常に送信されることを確認します。

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

ログとトレースの接続

このアプリケーションで APM が有効になっている場合、APM Go ロギングのドキュメントに従ってログにトレース ID とスパン ID を自動的に追加することで、アプリケーションログとトレース間の相関関係を改善できます。

ベストプラクティス

  • ロガーには、関連する関数やサービスに対応する名前を付けます。
  • DEBUGINFOWARNINGFATAL のログレベルを使用します。Datadog では、Go の FATALEmergency という重大度レベルにマッピングされます。
  • まず、最も重要な情報をロギングすることから始めましょう。さらに繰り返しながら、ログの包括性を高めていきます。
  • メタを使用して、あらゆるログにコンテキストを追加します。これにより、ユーザー、顧客、ビジネス中心の属性などをすばやくフィルターにかけることができます。

その他の参考資料