
負荷テストを実施中にGrafanaのすべてのダッシュボードで断線のような症状が現れ、上の画像のようにデータが欠落し続ける現象が発生しました。
最初は、アプリケーションのターゲットDBサーバーにCPU負荷が100%かかるテストを行っている最中に発生した問題だったため、
DBの問題か?
と思いましたが、DBサーバーの負荷問題を解決した後もテスト中に同じ現象が続けて現れました。
さらに、Prometheusの仕組みを考えると、DBへのアクセスがないのにこのような現象が発生したことから、別の原因があるはずです。
まず、負荷テスト中にActuatorのメトリクス情報が欠落してデータが表示されなかったのかどうか確認するため、actuator/metrics URLに直接アクセスしてみました。

このとき、メトリクスの値は正常に返ってきていましたが、レスポンス時間がおよそ1〜2秒程度遅延しているのに気づきました。この遅延が怪しいと思い、負荷テストを終了してから再度リクエストしたところ、レスポンスは即座に返ってきました。
あ!これはタイムアウトが発生していたんだ。
Prometheusのネットワーク設定を見ると、タイムアウト値(scrape_timeout)はデフォルトで10秒ですが、スクレイプ周期(scrape_interval)より大きくはできないとのことです。
そこでprometheus.ymlファイルを確認すると、scrape_intervalを1秒に設定していることが分かり、その結果タイムアウトも1秒として適用されていました。

Prometheusの初期設定時に、変化を素早く確認するためscrape_intervalの周期を短く設定していました。しかし負荷テストの過程で全スレッドが負荷テストのリクエスト処理に使われ、スレッドの返却にも時間がかかるようになりました。その結果、Prometheusのメトリクスリクエストを処理するためのスレッド取得時間が伸び、レスポンス時間も増加し、最終的に1秒というタイムアウトを超えてしまったのでした。
その後この値を10秒に変更したところ、Grafanaダッシュボードにデータが正常に表示されるようになりました。
