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入れる前後で、スコアがどれくらい影響あるか確認しておくこと