今回はメトリクス可視化ツールのGrafanaからSlackチャンネルへ通知を送る方法です。
Grafanaとは
Grafanaとはオープンソースのダッシュボードツールです。
いわゆるメトリクス可視化ツールです。
Grafanaは、マルチプラットフォームのオープンソース分析およびインタラクティブな視覚化Webアプリケーションです。サポートされているデータソースに接続すると、チャート、グラフ、アラートがWebに提供されます。プラグインシステムを介して拡張可能です。
AWSでいうところのCloud Watch Logs Insightsに似たようなツールで
メトリクスをグラフ等で可視化してくれます。
Kubernetes基盤で監視運用をする際に役立つツールでPrometheusとも相性が良いです。
グラフによる可視化がメインですが、
収集したメトリクスに対して独自にカスタマイズしたクエリを発行することも可能です。
またクエリで得た結果に対して閾値を設定してアラートを上げることもできます。
今回はカスタムクエリを発行して取得した結果に対してアラートを設定しSlackに通知してみます。
ツールとしてはメトリクス収集にPrometheus、可視化・通知にGrafana、通知先としてSlackを使用します。
PrometheusとGrafanaはKubernetes基盤にデプロイしたものを使用します。
Kubernetes基盤(オンプレ)の構築については以下のREADMEを参考にしてください。
PrometheusとGrafanaのデプロイについては以下のREADMEを参考にしてください。
(Djangoの勉強用に作ったプログのコンフィグリポジトリ)
Grafanaログイン
Grafanaにログインします。
ユーザ名、パスワードを入力して「Login」をクリック。
※上記手順でGrafanaを入れた方はadmin/passwordで入れます。
データソースの設定
グラフを作成するためのデータソースを設定します。
今回はデータソースに同じkubernetes基盤にデプロイしたPrometheusを使用します。
画面左のサイドバーの設定アイコン→「Data Sources」をクリック。
上記手順で作成するとすでにデフォルトのデータソースとして「Prometheus」がありますが
今回は気にせず右上の「Add data source」をクリック
するとデータソース候補一覧が出てくるので、
一番上にある「Prometheus」の「Select」ボタンをクリック。
画面右上に「Datasource added」と表示されます。
次にデータ取得先となるURLを入力するのですが、
今回は同じ基盤にあるPrometheusuを使用するためPrometheusサービスのClusterIPを指定してみます。
上記手順でデプロイした方は以下のコマンドをクラスタで実行します。
# kubectl get svc -o wide -n myblog-system | grep myprometheus myprometheus-alertmanager ClusterIP 10.104.159.212 <none> 80/TCP 5d8h app=prometheus,component=alertmanager,release=myprometheus myprometheus-kube-state-metrics ClusterIP 10.101.22.225 <none> 8080/TCP 5d8h app.kubernetes.io/instance=myprometheus,app.kubernetes.io/name=kube-state-metrics myprometheus-node-exporter ClusterIP None <none> 9100/TCP 5d8h app=prometheus,component=node-exporter,release=myprometheus myprometheus-server ClusterIP 10.105.225.16 <none> 80/TCP 5d8h app=prometheus,component=server,release=myprometheus
一番下にある「myprometheus-server」のIPアドレスがそれです。
URLに「http://10.105.225.16」と指定します。
(Podの9090にフォワードされるのでURLは80番ポートで問題ありません)
URLを設定したら画面下部の「Save & Test」をクリックします。
その後、「Data source is working」と表示されればPrometheusと問題なく通信できていることがわかります。
これでデータソースの設定は完了です。
Notification channelsの設定
slackへ通知するためのチャネルを設定します。
サイドメニューの「通知アイコン(Alerting)」 -> 「Notification channels」をクリック。
「New Channel」をクリック。
以下の項目を入力する
- Name:適当な通知設定名
- Type:プルダウンの中からSlackを選択
- Url:通知先となるslackチャネルのwebhookURLを入力*1
入力が終わったら「Send Test」をクリック。
画面右上に「Test notification sent」が表示されれば問題なくSlackへの通知ができています。
「Save」をクリックして設定を保存。
通知が来ているか確認してみましょう。
確かに「[Alerting] Test nofication」が届いています。
カスタムダッシュボードの作成
最後にカスタムダッシュボードを作成して、
実際のメトリクスに対しアラート設定をします。
サイドメニューの追加アイコンから「Dashboard」をクリック。
「Add new panel」をクリック
画面下部の「Query」タブから、設定したデータソースを選択
データソースを選択すると、収集しているメトリクスが選択できるようになるので
今回はkubernetesワーカーノードのメモリ使用率を選択してみます。
画面上部のチャート画面に現在のメトリクス情報が描画されます。
クエリの設定は以上です。
次に「Alert」タブ->「Create Alert」をクリック。
「Alert」タブ内の「Conditions」 -> 「IS ABOVE」に閾値を設定。
今回はアラート通知を確認したいので、閾値を現在のメトリクス値よりも小さい値に設定します。
(すでにアラート状態になるようします)
最後に
- 「Notifications」 -> 「Send to」に作成した通知設定を選択しアラート設定。
- 「Notifications」 -> 「Message」に通知したいメッセージを記載(今回は「メモリ使用率が閾値を超えました」)
これでカスタムダッシュボードが作成され、指定したメトリクスに対してアラート設定がされました。
早速Slackで確認してみましょう。
ちゃんと通知されています!
これでGrafanaからSlackへメトリクスアラートを通知することができました!
Slackの他にもいろんな通知先が設定できるみたいなので、
運用に合った設定を選びましょう。
*1:webhookURLについてはhttps://slack.com/services/new/incoming-webhookから取得する