DataDogでログを出す🐶

はじめに

ServerSideSwiftでDataDogを使うことになりdd-sdk-iosを使ってログを送れるのかを無料トライアルに登録して検証をしたんですが、思ったよりハマって時間取られたのでまとめます。

必要な手順は以下の3つです、エージェントのインストールと起動についてはすんなりいけると思うので2,3の手順の詳細をまとめます。

  1. DataDog Agentのインストール -> エージェントの起動
  2. DataDog.yamlの書き換え
  3. コードの実装

DataDog.yamlの書き換え

ログを送るにはまずdatadog.yamlファイルを書き換える必要があります、Agentを入れたらdatadog.yamlの中身を書き換えろとドキュメント(ホスト Agent ログの収集)にあったんですが、そもそもdatadog.yamlがどこにあるのかわからなかったのでfindコマンドで探したところ僕の場合は以下のpathにありました /Users/harumidiv/.datadog-agent/datadog.yaml

find ~ -name "datadog.yaml"

yamlを書き換えるということもログ実装ドキュメントと分かれてて見つけるのに時間かかりました…リンク貼っておいてほしい🐶

変更自体は以下のようにlogs_enabledをtrueにするだけでOKです

# logs_enabled: false

↓

logs_enabled: true

コード

無料トライアル版での検証コードなのでappIDやclientTokenもそのまま乗っけてしまっていますが、こちらはアカウントに紐付いているのでDataDogのサイト上で確認して任意の値に変更する必要があります。

environmentの値はログをDataDogのコンソール上で絞り込むもののようなので任意の値で良さそうです。

import SwiftUI
import DatadogCore
import DatadogLogs

struct ContentView: View {
    let appID = "ee4cefb0-05ec-408b-bb1c-d772d653bf49"
    let clientToken = "pubdbbc19a0710b42ab03954a59564db05e"
    let environment = "dev" 
    
    var logger: LoggerProtocol
    
    var body: some View {
        Button {
            logger.debug("A debug message.😺")
            logger.info("Some relevant information?😺")
            logger.notice("Have you noticed?😺")
            logger.warn("An important warning…😺")
            logger.error("An error was met!😺")
            logger.critical("Something critical happened!😺")
        } label: {
            VStack {
                Image(systemName: "globe")
                    .imageScale(.large)
                    .foregroundStyle(.tint)
                Text("Hello, world!")
                
            }
            .padding()
        }
    }
    
    init() {
        
        Datadog.initialize(
            with: Datadog.Configuration(
                clientToken: clientToken,
                env: environment,
                site: .ap1
            ),
            trackingConsent: .granted
        )
        
        Logs.enable()
        
        logger = Logger.create(
            with: Logger.Configuration(
                service: "DDogSample2",
                name: "Analytics",
                networkInfoEnabled: true,
                remoteSampleRate: 100,
                consoleLogFormat: .shortWith(prefix: "[iOS App] ")
            )
        )
        
        
        Datadog.verbosityLevel = .debug
    }
}

💡つまずきポイント

注意点としてはログを有効にするタイミングをLogger作成時よりも前にすることです!!

この部分に気づかずかなりハマってしまいissueで質問までしました..

Logs are not sent on the DataDog site #2078

Xcode上のログ

Datadog.verbosityLevel = .debug

↑を入れておくと正しくログを送信できた時にxcodeのコンソール上にもログが吐き出されます

DataDogのLog Exproler