Closed HirokiYoshida837 closed 2 years ago
アカウント作った。2週間はフル機能が無料で使えるらしい。
とりあえず手動でインストールしてセットアップしてみる
以下のコマンドを実施 (そのまま貼るとAPIキーが露出するので注意。)
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)"
これだけでOK。自動でenabledになってる。
isucon@isucon-11-a:~$ sudo systemctl status datadog-agent
isucon@isucon-11-a:~$ sudo systemctl status datadog-agent
● datadog-agent.service - Datadog Agent
Loaded: loaded (/lib/systemd/system/datadog-agent.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2022-06-28 22:30:20 JST; 37s ago
Main PID: 1840 (agent)
Tasks: 9 (limit: 4696)
Memory: 70.4M
CGroup: /system.slice/datadog-agent.service
└─1840 /opt/datadog-agent/bin/agent/agent run -p /opt/datadog-agent/run/agent.pid
インストールするだけで、とりあえずホストの状況は見れるっぽい。 各種プロセスの状態とかは色々設定追加が必要かな。
負荷かけてみたが、いまいちわからず。もっと細かく見れないのかな?
ライブプロセスモニタリングをしてみる
各種設定はここで
isucon@isucon-11-a:/etc/datadog-agent$ pwd
/etc/datadog-agent
https://docs.datadoghq.com/ja/agent/guide/agent-configuration-files/?tabs=agentv6v7
設定追加したら見れるようになった
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
ログ監視も入れてみる。まずはnginxのログ
logs_enabled: true
## @param logs_config - custom object - optional
## Enter specific configurations for your Log collection.
## Uncomment this parameter and the one below to enable them.
## See https://docs.datadoghq.com/agent/logs/
#
logs_config:
- type: file
service: myservice
path: /var/log/nginx/access.log
source: nginx
sourcecategory: http_web_access
- type: file
service: myservice
path: /var/log/nginx/error.log
source: nginx
sourcecategory: http_web_access
ログ取得うまくいかないな。ログ取れなくてもまあ問題はないけど、、、
使ってみた感じ、設定すべき項目が多くてISUCONやってるときにこの設定をひたすらするのは大変。 やるんだったらちゃんと設定ファイルを準備しておかないと意味なさそう?
netdataの方がシュっと入れられて便利なように感じる。
もしくはISUCON用の情報が色々あるNew Relicのほうがいいのだろうか
とりあえず、APMやるところまではやってみてから考えよう APMできれば、alp使わなくても良さそうな気がする
datadogの各種設定ができているかはこれで確認する
datadog-agent configcheck
nginxの設定はできた。ログ取得はやめて、プロセス監視だけ入れた
nginxのデータ取ってみたがあまり参考にならないかも
ISUCONではあまりこれを見る意味はなさそう。
MySQLはどうなるか試してみる
MySQLの設定ちょっと手間かかるので後回し
go get gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer
https://gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer
コードに適宜追加してからbuild
go build -o isucondition .
go.sumがおかしいよって言われたら go mod tidy する
goだとうまく動かせないのでひとまず node.jsで実行。
この手順どおりにすれば導入できた https://docs.datadoghq.com/ja/tracing/setup_overview/setup/nodejs/?tabs=%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A
alpなしでこれできるの最高。
指定した時間範囲でこれができればなお良い
指定した時間範囲でこれができればなお良い
グラフ上で指定範囲をドラッグすればいける
各種トレースはこんな感じ。 node.jsだとデフォルトでDBへのクエリも見てくれてる。すごすぎて感動
コードを少し追加するだけで導入できるので、絶対導入したい。
goで導入するための方法をちゃんと調べてスムーズに導入できるように頑張ろう。
今日は終わり、続きは明日。
特記事項
golangでもなんとかdatadogを導入できた。pprofは取れてない。 まとめ中
必要なパッケージを取得
go get gopkg.in/DataDog/dd-trace-go.v1
go get gopkg.in/DataDog/dd-trace-go.v1/tracer
go get gopkg.in/DataDog/dd-trace-go.v1/contrib
go get package github.com/DataDog/dd-trace-go/contrib/jmoiron/sqlx
go get github.com/labstack/echo/v4
go get github.com/labstack/echo/v4/middleware
# dd-trace-go
$ go get gopkg.in/DataDog/dd-trace-go.v1
$ go get gopkg.in/DataDog/dd-trace-go.v1/tracer
$ go get gopkg.in/DataDog/dd-trace-go.v1/contrib
# 今回はsqlが sqlxだったのでこれでOK。実装によって変える必要があるかも。
$ go get package github.com/DataDog/dd-trace-go/contrib/jmoiron/sqlx
# echoはv3とv4で微妙にインターフェースが違うので、明示的にgo getしなおす。
# main.go側で v3のecho関連を読んでいる場合、incompatibleでv3が入ってくるかもしれないので注意。
$ go get github.com/labstack/echo/v4
$ go get github.com/labstack/echo/v4/middleware
アプリケーション内に追加
import (
// echo
"github.com/labstack/echo/v4"
emiddleWarev4 "github.com/labstack/echo/v4/middleware"
pechov4 "gopkg.in/DataDog/dd-trace-go.v1/contrib/labstack/echo.v4"
// sqlx
"github.com/jmoiron/sqlx"
sqltrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql"
sqlxtrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/jmoiron/sqlx"
)
// main
func main() {
// mainの先頭でtracerを設定。
tracer.Start(
tracer.WithDebugMode(true),
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 tidy
datadogのtracerはデフォルトではONになっているはず。以下のファイルをtailして確認してみる。
$ tail -f /var/log/datadog/trace-agent.log
tracer入れる前後で、スコアがどれくらい影響あるか確認しておくこと
インストール
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
設定ファイル
トラブル時はここから探す。
もしアプリケーションが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
ひとまず情報まとめたのでcloseします。
また練習してみて手順とか必要情報をまとめ直すかも
せっかくなので使ってみる。