はじめに
2022年9月26日にリリースされた、Percona Monitoring and Management(以下PMM)2.31.0で Percona AlertingがGAとなりました。
本記事では前回の記事では紹介できなかった通知設定に関する紹介をします。
アラートの概要
今回作成するアラート、監視中のDB構成などについて説明します。
なお、PMM ServerはPMM2.32.0を使用します。
DB構成
監視しているDBの構成は以下の図の通りです。
mysql-1はシングル構成です。
mysql-[2-4]はレプリケーションを構成しています。mysql-2がソースでmysql-3,mysql-4がレプリカです。また、mysql-4では毎日バックアップを取得しています。
各DBのservice_nameはmysql-[1-4]
です。またmysql-[1-3]にはenvironmentラベルdc1-tokyo
、mysql-4にはdc2-osaka
を付けています。
作成するアラートについて
-
DB死活監視
- 全ノードを対象
-
接続数の監視
- 全ノードを対象
- mysql-4のみ異なる閾値を設定
-
レプリケーション遅延の監視
- mysql-3,mysql-4を対象
- テンプレートは自作したものを使用
アラート通知の停止時間について
以下のストーリーに基づいて、アラート通知の停止を設定します。
毎週木曜日の10:00-12:00はメンテナンスのためサービスを停止します。DBも停止させるので、この時間帯は全てのアラートを停止させます。
毎日AM2時からmysql-4でバックアップを取得します。その際、レプリケーション遅延が発生することがあるため、2:00-3:00の間はmysql-4のレプリケーション遅延アラートのみ停止します。
アラートの通知先について
接続数とレプリケーション遅延の通知はDB管理チームを含むメーリングリスト(example-db@example.com)に送ります。DBが停止した場合は、部署全員を含むメーリングリスト(example-all@example.com)に通知します。
アラートの設定
アラート作成、及びテンプレート作成の詳細はこちらの記事をご参照ください。
アラート作成
DB死活監視は既存のテンプレートであるMySQL down
を使用します。FolderはMySQLとして、Groupはdefault-alert-group
にします。その他の項目はデフォルト値です。
接続数の監視は既存のテンプレートであるMySQL connections in use
を使用します。
また、今回はmysql-4のみ異なる閾値を設定するため、ラベルによるフィルタリングを行います。
まず、mysql-1,mysql-2,mysql-3の閾値は70に設定し、アラート名はpmm_mysql_too_many_connections Alerting Rule(Tokyo)
とします。
Add Filterのボタンを選択して、Labelをenvironment、OperatorsをMATCH、Regexをdc1-tokyoとします。
FolderはMySQLとして、Groupはdefault-alert-group
にします。
その他の項目はデフォルト値です。
次にmysql-4用のアラートを作成します。アラート名はpmm_mysql_too_many_connections Alerting Rule(Osaka)
とし、閾値は50に設定します。
Add Filterのボタンを選択して、Labelをenvironment、OperatorsをMATCH、Regexをdc2-osakaとします。
その他の項目はpmm_mysql_too_many_connections Alerting Rule(Tokyo)
と同じです。
最後にレプリケーション遅延の監視アラートを作成します。まずは以下のテンプレートを新たに作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
--- templates: - name: mysql_replication_delay version: 1 summary: Replication Lag (Seconds_Behind_Master) expr: |- mysql_slave_status_seconds_behind_master > [[ .threshold ]] params: - name: threshold summary: threshold for Replication Lag type: float for: 1m severity: warning annotations: summary: Warning about Replication Lag ({{ $labels.service_name }}) description: |- Look at the replication lag in {{ $labels.service_name }} |
次にこのテンプレートを用いてアラート作成します。閾値は10(秒)とし、FolderはMySQLとして、Groupはdefault-alert-group
にします。その他の項目はデフォルト値です。
作成したアラートは以下の4つとなります。
Contact points
続いてContact pointsで通知先の設定を行います。
ここでは次の2つの設定が行えます。通知メッセージはテンプレートのままでも問題ありませんが、Contact pointsでは宛先のメールアドレスなど、通知先を設定することが必須となります。
-
Message templates
通知メッセージのテンプレート -
Contact points
通知の送信先の設定
デフォルトでgrafana-default-emailというcontact pointがあるので、まずはそちらを編集していきます。
今回の通知はEmail、Addressesはexample-db@example.com
とします。
Messageには、通知に含めたりメッセージを追加できます。また、Subjectでメールの件名も変更可能です。
ただしメッセージの内容はもとの通知用のテンプレートを上書きします。
デフォルトの通知テンプレートには発生したアラートや対象となるDBの情報が含まれています。
通知用のテンプレートを作りこんだりしない限り、基本的にはこちらのMessageも空欄にするのが無難かと思います。
また、件名もデフォルトではアラート名と一部のラベルの値となっています。
こちらは、{{ template "default.title" . }}
の前に[緊急]
などと付けることで件名にプレフィックスを付与できます。
続いてall-memberというcontact pointを作成します。青色のボタン(New contact point)を選択します。
Nameをall-member、Contact point typeはEmail、Addressesはexample-all@example.comとします。
下部にあるSave contact pointで保存します。
Notification policies
ここでは通知に関するルールを設定できます。
先頭にあるRoot policy - default for all alerts
がデフォルトの設定となります。後で作成するルーティングポリシーに一致しないアラートは全てこのRoot policyで設定した宛先に通知されます。
なお、Root policyに後述のMute timingsを設定することはできません。今回は全てのアラートにMute timingsを設定するため、このRoot policy以外のルーティングポリシーを作成していきます。
まずは、先にMute timingsを設定します。これは通知を一時的にミュートするための設定です。最初に提示した、「アラートの停止時間について」を満たすために2つの設定を作成します。
まずはAdd mute timingを選択します。
NameはThursday_maintenance
とし、Time intervalsは木曜日の10:00-12:00となるように設定します。
注意点として、ここでの設定はUTCで行うため、設定は以下の図のように、01:00-03:00とします。また、Days of the weekはthursdayとします。
設定が完了したらsubmitボタンで保存します。
続いて、毎日2:00-3:00の間通知を停止する設定を作成します。
NameはDaily_backup
Time rangeは17:00-18:00(UTC)とします。
続いてルーティングポリシーを作成していきます。
今回作成するルートは以下3つです。
-
MySQLアラートのデフォルトルート
- DBチームに通知
- ミュートタイミングは木曜日の10:00-12:00
- 基本的にはアラートはこのルートを使用
-
DBが停止した際のルート
- 全メンバーに通知
- ミュートタイミングは木曜日の10:00-12:00
-
mysql-4のレプリケーション遅延
- DBチームに通知
- ミュートタイミングは木曜日の10:00-12:00と毎日2:00-3:00
それぞれ作成していきます。
まずは、MySQLアラートのデフォルトルートを作成します。Matching labelsを grafana_folder=MySQLとして、今後もMySQLのアラートを作成した際に、このルートにマッチするようにできます。また、ミュートタイミングを作成したThursday_maintenance
とします。
続いてDBが停止した際のルートを作成します。今度はアラート名でマッチングし、Contact pointはall-memberにします。ここでも、ミュートタイミングを作成したThursday_maintenance
とします。
最後にmysql-4のレプリケーション遅延用のルートを作成します。
まずはアラート名でマッチングします。
作成後の一覧画面からAdd nested policy
を選択し、今度はservice_name=mysql-4でマッチングさせます。
さらにここでミュートタイミングにDaily_backup
を追加します。
SMTPの設定について
Emailによる通知を行う場合、SMTPの設定が必要となります。
以前のバージョンではこの設定をGUIで行えたのですが、最新バージョンでは設定が行えなくなっています。
こちらでバグとして報告されていて、PMM2.34.0で修正予定となっています。
修正されるまでは/usr/share/grafana/conf/defaults.ini
の[smtp]セクションを直接編集します。
設定方法はこちらのドキュメントをご参照ください。
ミュートの検証
構成したミュートが反映されるかを確認してみます。
木曜日の10時30分(JST)ごろにmysql-1を停止します。
1 2 3 |
# date 2022年 12月 15日 木曜日 10:25:22 JST # systemctl stop mysqld |
しばらくするとmysql-1の死活監視のアラートが発火します。
ミュートは通知に対して行われるものなので、アラート自体のステータスはチェックされ続けます。
一方、アラートの通知先の方を確かめてみると通知Emailは届いていませんでした。
まとめ
今回は通知関連の機能について紹介しました。
特にルーティングポリシーはやや複雑で慣れるのには時間がかかりそうです。一方で、以前のGrafana Alertなどと比較してカスタマイズ性が格段に向上しています。
とにかくアラート通知を送ることができればいい、と言う場合はRoot policyのみを使用し、その他の設定もデフォルトで行う。アラート要件が細かい場合はそれに応じてカスタマイズしていく。そういった使い分けができるようになっているのではないかと思います。