LoginSignup
2
4

More than 1 year has passed since last update.

Grafana8 でアラートが大幅なアップデート! - LokiからSlackにログ付きでアラートを出す!

Posted at

はじめに

Grafana は、v8.0でアラート機能周りにアップデートが入り、メッセージ内容に変数を入れることができるようになった。
本記事では、Prometeusのログ版であるLokiのログを、Slackに送信するというのをやる。

tl;dr

  • v8から使える。ただし、設定ファイルに以下のオプションを追加する必要がある。
  • アラート条件の設定、テンプレートメッセージや通知の停止(Silence)などできることが大幅に増えた。
[feature_toggles]
enable = ngalert

やりたいこと

Datadogのログアラートには、↓のようにそのエラー箇所のログが送信される。これによって、Slackを見るだけである程度エラー内容が把握できる。意外とこれが、今までの Grafana 、GCPの Cloud Logging ではできなくって困っていた。

※ 画像は Datadog公式ドキュメントを引用
https://docs.datadoghq.com/ja/monitors/monitor_types/log/

インストール

GrafanaとLokiを用意する。すでにある人は飛ばしてください。
個人的には学習用だとソースコードからビルドするのがおすすめ。LokiもGrafanaもGoで書かれているので、cmdフォルダを見つけて go run するだけ。(本当はMakefileを見た方がいい)

grafanaを起動
git clone --depth=1 https://github.com/grafana/grafana
cd grafana
go run ./pkg/cmd/grafana-server

go run するだけだと思ったけど嘘でした。Grafanaはwebサーバなので、yarnも必要です。

grafanaのwebビルド
yarn
yarn start

再度 grafana を起動

lokiを起動
git clone --depth=1 https://github.com/grafana/loki
cd loki
go run ./cmd/loki --config.file ./cmd/loki/loki-local-config.yaml

prometheus同様に、exporter が必要。
loki のリポジトリに promtail というのがあり、それがその役割なので起動する。
ログを収集するデフォルトのパスは、/var/log/*log
設定から変えられる。/tmp/log/*log に変えておく。

sed s%/var/log%/tmp/log%g ./clients/cmd/promtail/promtail-local-config.yaml > ./clients/cmd/promtail/promtail-local-config.yaml.new
mv ./clients/cmd/promtail/promtail-local-config.yaml.new ./clients/cmd/promtail/promtail-local-config.yaml

go run ./clients/cmd/promtail -config.file ./clients/cmd/promtail/promtail-local-config.yaml

アラート新機能の有効化

アラートはデフォルトではレガシーが有効になっている。
設定ファイルに、以下を追加すると新機能が使える。

conf/defaults.ini
[feature_toggles]
enable = ngalert

データソースの追加

Grafanaを起動したら、http://localhost:3000/datasourcesから、以下のようにLokiのデータソースを設定する。

Screen Shot 2021-08-24 at 10.11.50.png

ログを確認

まずは、ログを書き込む。

echo HelloWorld > /tmp/log/helloworld.log

GrafanaのExploreで確認する。クエリを打ってもいいですし、おすすめはLog browserと書かれた部分からぽちぽちでクエリ書ける。
http://localhost:3000/explore

Screen Shot 2021-08-24 at 10.21.16.png

アラート作成

アラートのページへ行く。前まではパネルの一部としてアラートが作れたが、今は専用のページから作る。
http://localhost:3000/alerting

中身は↓こんな感じ。フォルダがなければ、ダッシュボードのフォルダと同じなので、そっちから作れる。
logfmt でラベル化できる。ログがjsonの場合は、jsonを使うと良い。
Screen Shot 2021-08-24 at 10.25.09.png

条件は以下。最小が10秒なので、そうしとくと感度が上がる。すげえ通知くるのでうるさくなったら調整する。
Screen Shot 2021-08-24 at 10.26.04.png

メッセージテンプレートの作成

ContactPointsから、Slackの設定をする。Text Bodyには、{{ template "message" . }}を入力し、上部のMessageTemplateにテンプレートを定義する。テンプレートは、Goのテンプレートパッケージを使ってるらしい。https://pkg.go.dev/text/template

Screen Shot 2021-08-24 at 10.44.15.png

Slackにアラートを送信

設定したら、logfmt形式で再度ログを書き込み。

echo "msg=helloworld" > /tmp/log/helloworld.log

ラベルに msg=helloworld が確認できる。

Screen Shot 2021-08-24 at 10.46.55.png

以上!

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4