📚
【負荷テスト】k6からDatadogへデータ流してみる
またもや最近投稿しているk6の記事です!今回はk6の実行結果をDatadogに流してみようと思います。
環境
k6: v0.42
datadog/agent: 7 (後述のコードではlatestを指定していますが、こちらがダウンロードされています)
k6からDatadogへデータ流してみる
それでは実施!!
docker-composeとテストスクリプトを用意
テストからリクエストするAPIはnginxのデフォルトページを使用。
DD_API_KEYとDD_SITEの値はDatadogに登録した後に設定します。
version: "3.6"
services:
nginx:
image: nginx:latest
container_name: loadtest_nginx
ports:
- "80:80"
# こちらを追加
datadog-agent:
image: datadog/agent:latest
container_name: datadog-agent
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /proc/:/host/proc/:ro
- /sys/fs/cgroup/:/host/sys/fs/cgroup:ro
environment:
- DD_API_KEY=${DD_API_KEY}
- DD_SITE=${DD_SITE}
- DD_DOGSTATSD_NON_LOCAL_TRAFFIC=1
- DD_API_KEY=<DD_API_KEY> # こちらの内容はDatadogに登録した際のものを設定
- DD_SITE=<DD_SITE> # こちらの内容はDatadogに登録した際のものを設定
env_file:
- .env
ports:
- "8125:8125/udp"
テストスクリプトは以下を適当なものを用意。
import { check } from "k6"
import http from "k6/http"
export const options = {
// 閾値(設定した条件を満たせないと負荷テストがfailになる)
thresholds: {
// リクエストの失敗が1%以内
http_req_failed: ["rate<0.01"],
// 90パーセンタイルが500ms以内、95パーセンタイルが1000ms以内のレイテンシ
http_req_duration: ["p(90)<500", 'p(95) < 1000']
},
// テストステージ(順番に実行される)
stages: [
// targetは同時実行数、durationは実行時間
{ target: 50, duration: '15s' },
{ target: 100, duration: '15s' }
]
}
// テストケース
export default function () {
const res = http.get(
"http://localhost:80"
)
check(res, {
'is_status_200': (r) => r.status === 200
})
Datadogに登録する
今回は無料トライアルを利用しました。14日間の間フル機能を使えるらしい。とりあえず適当に進めていったのですが、Agent Setup画面という画面が出てきました。
今回はdocker-composeからアクセスするのでDockerタブを選択し、①のコマンド内にあるDD_API_KEYとDD_SITEをdocker-composeに設定しました。
この状態でdocker-composeを起動するとdatadog-agentが起動してDatadogへ接続しにいくはずです。
k6からDatadogにデータを流す
docker-composeを起動
docker-compose up -d
k6実行
以下を実行してk6を実行しDatadogへ結果を流します。
K6_STATSD_ENABLE_TAGS=true k6 run simple-k6-sample.js --rps 100 --out statsd
Datadogで結果を確認
k6のデータが正しく送信されるとダッシュボードにk6というボードが追加されているはずです。(私の場合は最初表示されなかったですが)
こちらを選択すると以下のようなボードが表示されるはず。
最後に
こんな感じでk6の結果をDatadogに流すことができました。
実際のインスタンスでもdatadog-agentを用意する手順が変わるくらいでそこまで難しくはなさそうですね。
参考
- Datadog公式ドキュメント
- k6 のテスト結果を datadog で可視化してみる
Discussion