Grafana + Lokiでのログアラート設定の嵌りどころ
2020-07-01
azblob://2022/11/11/eyecatch/2020-06-30-loki-grafana-alert-000.jpg

今回はGrafana + Lokiでロギングを行っている中での設定で、日本語のドキュメントではパッと見つからなかった点を備忘録として残しておきます。

TL;DR

Lokiのエンドポイントhttp://{loki}:3100/lokiはprometheus互換のAPIのため、GrafanaのdatasourceでLokiをprometheusとして設定出来ます。(ややこしい)
これによって、LokiからGrafanaのアラート設定を利用出来る様になります。(Loki単体にアラート機能はなく、Grafanaのアラートはデータソースによる制限が有る為そのままではアラートを作成出来ない)
詳しくは下記のIssueを参考にしてください。
https://github.com/grafana/loki/issues/1422

概要

そもそものGrafanaやLokiについては既に多くのブログで解説等されているので、どの様な物かは下記の公式ドキュメントを参考にしてください。
https://github.com/grafana/loki#loki-like-prometheus-but-for-logs

Grafana + Lokiを利用してる中で、特定のExceptionが発生している件数をメトリックとして取得しアラートを作成する必要がありました。
Prometheusと同様に設定を行おうとアラートタブを開いたのですが、LokiのデータソースではGrafanaアラートのサポート外のためそのままではアラートを作成出来ません。

lokiデータソース時のアラート画面

下記の様なクエリでlokiのログからメトリックの取得はざっくり出来ているので、後はアラートの設定を行える様に整えるのみの状況です。
count_over_time(({job="hoge"}|= "fugaException")[1m])

データソースの登録

TL;DRにも記載しましたが少し調べるとそれらしいIssueが見つかったので、lokiをPrometheusのデータソースとして登録します。

データソース設定画面

ざっくりと上記の様に設定を行い、Save&Testを実行するとSuccessの旨が表示されます。
後は通常のPrometheusの様にクエリを作成し、アラートを設定する事でLokiのメトリックからログを作成する事が可能になります。

注意事項としてLokiをデータソースとして登録した場合、通常のPrometheusと違いquery editor画面で取得可能なメトリックはLoading metrics…の状態から更新されません。

クエリエディターの画面

この状態でもクエリを実行すれば結果を取得出来るので、ちょっと気持ち悪いですがそのままクエリを実行しダッシュボードとアラートを作成しましょう。

まとめ

ちょっと短いですが、LokiにはPrometheus互換のAPIが有るので、GrafanaでPrometheusのデータソースとして扱えばGrafanaのアラート機能が使えるという話でした。
Lokiもまだまだ触っている途中ですが、搦め手っぽいとは言え今回の様な細かなところも考慮されているのは嬉しいですね。