2025/06/17 22:50 How to use Prometheus to efficiently detect anomalies at scale

やっほー、ロボ子!Grafana LabsがPromQLだけで動く異常検知フレームワークを公開したらしいのじゃ!

Grafana Labsですか、博士。それは興味深いですね。PromQLだけで異常検知ができるというのは、どのような仕組みなのでしょう?

それが面白いところでな、Prometheusの機能だけを使うのが原則らしいぞ。外部システムに頼らず、Prometheusだけで完結するから、スケーラビリティも高いし、仕組みも理解しやすいらしい。

なるほど、Prometheus互換性、高いスケーラビリティ、透明性が重要な原則なのですね。具体的には、どのようなアプローチで異常検知を行うのでしょうか?

最初はzスコアの公式をベースに、平均値±標準偏差×乗数で基準線を設定したみたいじゃ。平均は1時間の時間窓、標準偏差は26時間の時間窓を使ったらしいぞ。

zスコアを使うのですね。しかし、それだと極端な外れ値がある場合に、標準偏差が大きく変動してしまいそうですが…。

さすがロボ子、よく気が付いたのじゃ!実際、それが課題だったみたいでな。標準偏差が急激に増加して、異常検知が止まってしまうことがあったらしい。そこで、平滑化関数を追加したみたいじゃ。

平滑化関数ですか。それによって、外れ値の影響を軽減できるのですね。他にどのような課題があったのでしょうか?

バンドが狭すぎて誤検知が多かったり、安定した期間が続くとすべてフィルタリングされてしまったり…色々あったみたいじゃ。変動係数(COVAR)の概念を使ったり、最小幅を設定する新しいバンドを追加したりして、対応したらしいぞ。

なるほど、様々な課題を乗り越えて、今の形になったのですね。長期的な反復パターン、例えば定期的なスパイクにはどのように対応しているのでしょうか?

それには、オフセットを使った同じ計算式を使うらしいぞ。例えば、23時間30分前のデータを使って計算する、みたいな感じじゃな。

過去のデータと比較することで、定期的なパターンを考慮できるのですね。このフレームワークを利用するには、具体的にどうすれば良いのでしょうか?

Prometheusインスタンスに記録およびアラートルールを追加して、メトリックに`anomaly_name`ラベルを追加するだけみたいじゃ。GitHubリポジトリで詳細な情報、ルール、ダッシュボード、デモ環境が利用できるらしいぞ。

比較的簡単に導入できそうですね。今後の展望としては、どのようなものが考えられますか?

異常検知をSLOベースのアラートに連携させたり、根本原因分析を強化したりするみたいじゃな。Grafana Cloud Assertsのようなツールで、アラートと異常を関連付けることも考えているらしいぞ。

SLOベースのアラート連携は重要ですね。異常検知の結果を、より実用的なアラートに繋げられると、運用効率が向上しそうです。

Grafana Cloudも無料枠があるみたいだから、試してみるのも良いかもじゃな。私も試してみようかしら。

そうですね、博士。私も一緒に試してみます。ところで博士、PromQLの達人である博士なら、PromQLで俳句も作れますよね?

むむ、PromQLで俳句…?ええい、ままよ!「メトリクス 眺めていたら 夜が明けた」…って、これじゃただのエンジニアの日常じゃな!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。