はじめに
負荷試験ツールとして単体でも便利なk6ですが、外部のロギングツールと連携することで、更に使い勝手が増します。
特に、負荷試験中は、負荷試験が正常に回っているのかウォッチしつつ、何か異常があればすぐに試験を中止するのが、試験の効率化の上で重要です。
そこで今回は、k6とdatadogを連携して、k6実行中のメトリクスをdatadogに送信する方法を紹介します。
結論を知りたい方は以下のPRをご参照ください。
PR: https://github.com/gonkunkun/k6-template/pull/6
前提
今回の記事内容の前提は以下の通りです
- dockerの環境構築済み
- k6をinstall済み
- goの環境構築済み
手順
まずはDatadogのAPIキーを入手しましょう。
今回はトライアルで登録します。
まずはdatadogのサイトへ。
datadog: https://www.datadoghq.com/ja/
「無料で始める」を選択。
適宜情報を入力しましょう。
利用環境としてDockerを選択します。
手順に従って、datadog agentを起動します。
Datadog側でdatadog-agentのデータの受信を確認出来たら、チュートリアルは完了です。
Integration
から、k6のIntegartionをinstallします。
k6
で検索。
Install integration
を選択。
後は表示される手順に従って、datadog-agentを再度起動します。
datadog agentの起動を確認。
ログ上も特に問題は無さそう。
ここから、k6側の設定を行います。
必須なのはxk6-output-statsd
の拡張機能です。
k6コマンドをビルドしましょう。
なお、xk6コマンドが無い方は以下の記事を参考にinstallしましょう。

k6実行時にdatadog-agent経由でメトリクスを送信出来るように、実行時のコマンドに環境変数とオプションを追加します。
参考: https://grafana.com/docs/k6/latest/results-output/real-time/datadog/
後はdatadogのダッシュボードからメトリクスの受信を確認。
無事にk6のメトリクスをdatadogに連携出来ました。
使い勝手の向上
負荷試験へのtag付け
メトリクス送信時に、カスタムタグも一緒に付与するのがオススメです。
どの環境で、いつテストを実行したのか、これらの情報が分かるだけで後からでも負荷試験の結果確認がしやすくなります。
tags: https://k6.io/docs/using-k6/tags-and-groups/
k6の実行オプションに以下のようにtagsを追加するだけです。
参考PR: https://github.com/gonkunkun/k6-template/pull/6/files
Datadogのダッシュボード上から、envとdatetimeでフィルタリングできるようになりました。

docker-composeで起動
毎回dockerの実行コマンドを記載するのも面倒です。
docker-composeでまとめて定義しちゃいましょう。
ここではdatadog-agentとRedisをdocker-composeで起動するようにします。
環境変数を設定。
後は起動するだけです。
おわりに
今回はk6実行中のメトリクスをdatadogに連携する方法を消化しました。
負荷試験は長い時間行うこともあり、試験が正しく回っているのかを確認するためにも、メトリクスの監視は必須です。
よいk6ライフを。