HirokiYoshida837 / ISUCON2022

0 stars 0 forks source link

ISUCON - Datadog使ってみる #4

Closed HirokiYoshida837 closed 2 years ago

HirokiYoshida837 commented 2 years ago

せっかくなので使ってみる。

HirokiYoshida837 commented 2 years ago

アカウント作った。2週間はフル機能が無料で使えるらしい。

とりあえず手動でインストールしてセットアップしてみる

1. インストール

以下のコマンドを実施 (そのまま貼ると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)"
HirokiYoshida837 commented 2 years ago

これだけで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

インストールするだけで、とりあえずホストの状況は見れるっぽい。 各種プロセスの状態とかは色々設定追加が必要かな。

HirokiYoshida837 commented 2 years ago

image

HirokiYoshida837 commented 2 years ago

負荷かけてみたが、いまいちわからず。もっと細かく見れないのかな? image

HirokiYoshida837 commented 2 years ago

ライブプロセスモニタリングをしてみる

HirokiYoshida837 commented 2 years ago

各種設定はここで


isucon@isucon-11-a:/etc/datadog-agent$ pwd
/etc/datadog-agent

https://docs.datadoghq.com/ja/agent/guide/agent-configuration-files/?tabs=agentv6v7

HirokiYoshida837 commented 2 years ago

APIキー追加はここ?

Create a new API key here: https://app.datadoghq.com/account/settings

#

HirokiYoshida837 commented 2 years ago

設定追加したら見れるようになった


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

image

HirokiYoshida837 commented 2 years ago

ログ監視も入れてみる。まずは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
HirokiYoshida837 commented 2 years ago

ログ取得うまくいかないな。ログ取れなくてもまあ問題はないけど、、、

HirokiYoshida837 commented 2 years ago

使ってみた感じ、設定すべき項目が多くてISUCONやってるときにこの設定をひたすらするのは大変。 やるんだったらちゃんと設定ファイルを準備しておかないと意味なさそう?

netdataの方がシュっと入れられて便利なように感じる。

もしくはISUCON用の情報が色々あるNew Relicのほうがいいのだろうか

HirokiYoshida837 commented 2 years ago

とりあえず、APMやるところまではやってみてから考えよう APMできれば、alp使わなくても良さそうな気がする

https://qiita.com/peko858/items/538ef6554e36f680e000

HirokiYoshida837 commented 2 years ago

datadogの各種設定ができているかはこれで確認する

datadog-agent configcheck
HirokiYoshida837 commented 2 years ago

nginxの設定はできた。ログ取得はやめて、プロセス監視だけ入れた

HirokiYoshida837 commented 2 years ago

nginxのデータ取ってみたがあまり参考にならないかも image

HirokiYoshida837 commented 2 years ago

設定方法

HirokiYoshida837 commented 2 years ago

ISUCONではあまりこれを見る意味はなさそう。

HirokiYoshida837 commented 2 years ago

MySQLはどうなるか試してみる

HirokiYoshida837 commented 2 years ago

MySQLの設定ちょっと手間かかるので後回し

HirokiYoshida837 commented 2 years ago

APMいれてみる

https://docs.datadoghq.com/ja/tracing/setup_overview/setup/go/?tabs=%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A

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 する

HirokiYoshida837 commented 2 years ago

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

image

HirokiYoshida837 commented 2 years ago

alpなしでこれできるの最高。

image

指定した時間範囲でこれができればなお良い

HirokiYoshida837 commented 2 years ago

指定した時間範囲でこれができればなお良い

グラフ上で指定範囲をドラッグすればいける

image

HirokiYoshida837 commented 2 years ago

各種トレースはこんな感じ。 node.jsだとデフォルトでDBへのクエリも見てくれてる。すごすぎて感動

image

HirokiYoshida837 commented 2 years ago

コードを少し追加するだけで導入できるので、絶対導入したい。

goで導入するための方法をちゃんと調べてスムーズに導入できるように頑張ろう。

HirokiYoshida837 commented 2 years ago

今日は終わり、続きは明日。

特記事項

HirokiYoshida837 commented 2 years ago

golangでもなんとかdatadogを導入できた。pprofは取れてない。 まとめ中

image

HirokiYoshida837 commented 2 years ago

datadog APMまとめ

必要なパッケージを取得

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

HirokiYoshida837 commented 2 years ago

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

設定ファイル

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

もしアプリケーションが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
HirokiYoshida837 commented 2 years ago

ひとまず情報まとめたのでcloseします。

また練習してみて手順とか必要情報をまとめ直すかも