📚

【負荷テスト】k6からDatadogへデータ流してみる

2023/10/28に公開

またもや最近投稿している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を用意する手順が変わるくらいでそこまで難しくはなさそうですね。

参考

Discussion