Datadog 導入手順 - HirokiYoshida837/ISUCON2022 GitHub Wiki

datadog agent導入まとめ

インストール

DD_AGENT_MAJOR_VERSION=7 DD_API_KEY=XXXXXX DD_SITE="us5.datadoghq.com" bash -c "$(curl -L https://s3.amazonaws.com/dd-agent/scripts/install_script.sh)"

daemon起動など

# 有効化
$ sudo systemctl enable datadog-agent

# 無効化
$ sudo systemctl disable datadog-agent

# ステータス確認
$ sudo systemctl status datadog-agent

# 再起動
$ sudo systemctl restart datadog-agent

設定確認。yamlを変更したらこれを実施。

$ sudo datadog-agent checkconfig

ログ確認

$ /var/log/datadog

APIキーは、Datadogの画面から Organization Settings -> API Keys

datadog.yamlを変更する

api_key: exxxxxxx8

設定ファイル

  • /etc/datadog-agent/datadog.yaml

トラブル時はここから探す。

もしアプリケーションがDockerで動くタイプならここをみて、別でDockerコンテナを動かす

必要な設定はこれくらい。デフォルトでfalseなのでコメントアウトする。(プロセス監視の設定だけ変えればOKなはず。)

process_config:
  ## @param process_collection - custom object - optional
  ## Specifies settings for collecting processes.
  process_collection:
    ## @param enabled - boolean - optional - default: false
    ## Enables collection of information about running processes.
    enabled: true

datadog APMまとめ

アプリケーション内に追加

import (
	sqltrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql"
	sqlxtrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/jmoiron/sqlx"
        // echoは問題のバージョンによって切り替えれば良い。v3とv4でinterfaceが違うので、注意
	pechov3 "gopkg.in/DataDog/dd-trace-go.v1/contrib/labstack/echo"
	// pechov4 "gopkg.in/DataDog/dd-trace-go.v1/contrib/labstack/echo.v4"
	"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
        // v4の場合はmiddlewareを明示的にimportしないとぶつかるかも
	// emiddleWarev4 "github.com/labstack/echo/v4/middleware"
)

// main
func main() {
	
	// mainの先頭でtracerを設定。
	tracer.Start(
                // DebugMode trueにしていると、ログが大量にでてしまう。
		tracer.WithDebugMode(false),
		tracer.WithRuntimeMetrics(),
	)
	defer tracer.Stop()

	// echoのMiddlewareを設定
	e := echo.New()
	e.Use(pechov4.Middleware(pechov4.WithServiceName("test-go")))

	// echoでmiddlewareを使っているところは、明示的にv4のinterfaceを使うように変更
	e.Use(emiddleWarev4.Logger())
	e.Use(emiddleWarev4.Recover())
}

// DBのトレースを設定
// sqlx.openしている箇所を見つけて、差し替える。
func (mc *MySQLConnectionEnv) ConnectDB() (*sqlx.DB, error) {
	dsn := fmt.Sprintf("%v:%v@tcp(%v:%v)/%v?parseTime=true&loc=Asia%%2FTokyo", mc.User, mc.Password, mc.Host, mc.Port, mc.DBName)

	// ここをコメントアウト
	// return sqlx.Open("mysql", dsn)

	// ここを追加。Driverは合わせる
	sqltrace.Register("mysql", &mysql.MySQLDriver{}, sqltrace.WithServiceName("test-go-mysql"))
	return sqlxtrace.Open("mysql", dsn)
}

環境変数で各種変数を設定。アプリケーションに環境変数を渡しているshを探すなど。

DD_ENV=prod
DD_SERVICE=test-go
DD_VERSION=abc123
DD_RUNTIME_METRICS_ENABLED=true

アプリ側に書いた後にgo mod tidyすれば、go.mod なども更新してくれるはず。

$ go mod tidy

アプリをビルドする側でうまくビルドできないときは、ビルド前にgo mod tidyしたほうがいいかもしれない。

datadogのtracerはデフォルトではONになっているはず。以下のファイルをtailして確認してみる。

$ tail -f /var/log/datadog/trace-agent.log 

tracer入れる前後で、スコアがどれくらい影響あるか確認しておくこと