はじめに
2022年9月26日にリリースされた、Percona Monitoring and Management(以下PMM)2.31.0で Percona AlertingがGAとなりました。
今回はPercona Alertingでアラートのテンプレートを作成する方法を紹介します。
テンプレートの作成
テンプレートのフォーマット
公式マニュアルにテンプレートの例が紹介されています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
--- templates: - name: pmm_mongodb_high_memory_usage version: 1 summary: Memory used by MongoDB expr: |- sum by (node_name) (mongodb_ss_mem_resident * 1024 * 1024) / on (node_name) (node_memory_MemTotal_bytes) * 100 > [[ .threshold ]] params: - name: threshold summary: A percentage from configured maximum unit: "%" type: float range: [0, 100] value: 80 for: 5m severity: warning labels: custom_label: demo annotations: summary: MongoDB high memory usage ({{ $labels.service_name }}) description: |- {{ $value }}% of memory (more than [[ .threshold ]]%) is used by {{ $labels.service_name }} on {{ $labels.node_name }}. |
引用元 :Percona Monitoring and Management | Percona Alerting
閾値を設定するテンプレート
アラートの本体となるのがexpr
の部分です。今回はこのexpr
の部分を既存のダッシュボードのグラフをベースにして作成する方法を紹介します。
まずはMySQL Instance SummaryのMySQL Slow Queriesのグラフをもとにテンプレートを作成していきます。
パネルのメニューからExploreを選択します。
Metrics browserにグラフの式があるのでコピーします。
コピーしたメトリクスが以下となります。
1 2 |
avg by (service_name) (rate(mysql_global_status_slow_queries{service_name=~"mysql-1"}[5m]) or irate(mysql_global_status_slow_queries{service_name=~"mysql-1"}[5m])) |
上記の式の{service_name=~"mysql-1"}
はservice_name
というラベルでフィルタリングをしています。
フィルタリングはアラート作成時に行うため、テンプレートでは行いません。そのため、式の{service_name=~"mysql-1"}
は削除します。
1 2 |
avg by (service_name) (rate(mysql_global_status_slow_queries[5m]) or irate(mysql_global_status_slow_queries[5m])) |
この式に対して、閾値を超えた場合にアラートとしたいので、 > [[ .threshold ]]
とします。
これでexpr
の部分は完成です。
1 2 3 4 |
expr: |- avg by (service_name) (rate(mysql_global_status_slow_queries[5m]) or irate(mysql_global_status_slow_queries[5m])) > [[ .threshold ]] |
閾値(threshold)に関してはparams
で詳細を設定します。今回は必須部分のみを設定します。
1 2 3 4 |
params: - name: threshold summary: threshold for slow queries type: float |
ここで設定できる各項目の意味は以下の通りです。
- name(必須): パラメータの名前
- summary(必須): パラメータの説明
- unit: 単位
- type(必須): データ型
- range: float型の場合、取りうる値の範囲
テンプレート名(name:)や説明(summary:)などはわかりやすい名前や説明を記載します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
--- templates: - name: mysql_slow_query version: 1 summary: Count of Slow Query expr: |- avg by (service_name) (rate(mysql_global_status_slow_queries[5m]) or irate(mysql_global_status_slow_queries[5m])) > [[ .threshold ]] params: - name: threshold summary: threshold for slow queries type: float for: 1m severity: warning annotations: summary: Warning about Slow Queries ({{ $labels.service_name }}) description: |- Look at the slow query log in {{ $labels.service_name }} |
設定が必須な各項目の説明は以下の通りです。
- for: アラートが発生する前に式が満たされる必要がある期間を指定します。この場合1分間スロークエリの発生数が閾値を上回り続ける必要があります。
- severity: デフォルトのアラート重大度レベルを指定します。これはアラート作成時に任意のレベルに変更ができます。
annotationsは必須ではありませんが、生成されたアラートに追加の注釈を設定できます。このdescriptionがアラート通知のメッセージ内容となります。
descriptionで使用している、$labels.service_name
はservice_nameラベルの値となります。
詳しくは、こちらのマニュアルをご参照ください。
ON/OFFを判定するテンプレート
次に閾値ではなく、何らかの値がON/OFF(1/0)となるのを判定したい場合のテンプレート例を紹介します。
今回はシステム変数read_only
がOFFになった場合にアラートとするテンプレートを作成していきます。
read_onlyのメトリクス名はmysql_global_variables_read_only
です。このメトリクスに対して、1(ON)の状態を正とし、0(OFF)の場合はアラートとしたい場合は、== bool 0
という条件にします。
演算子についてはこちらのマニュアルをご参照ください。
テンプレートは以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
--- templates: - name: mysql_read_only version: 1 summary: Check read_only expr: |- mysql_global_variables_read_only == bool 0 for: 1m severity: warning annotations: summary: Warning about read_only ({{ $labels.service_name }}) description: |- read_only = 0 in {{ $labels.service_name }} |
なお、0(OFF)の状態を正とし、1(ON)の場合はアラートとしたい場合は、== bool 1
という条件にします。
テンプレートの追加方法
テンプレートの追加方法を説明します。
画面左側のAlerting
のAlert rule templates
を選択します。
右上にある+ Add
を押すとウィンドウが出るので、テンプレートを張り付けてAdd
を押すとテンプレートが追加されます。
アラートの作成
テンプレートをもとにアラートを作成します。
Alert rules
タブを選択すると下図のような画面が表示されます。
New alert rule
を選択し、アラートを作成していきます。
テンプレートを使用する場合は、Percona templated alert
を選択します。
Templateは作成したテンプレートを選択します。なお、テンプレートのsummaryが表示名となります。
Templateを基にデフォルト値が自動で記入されます。手動で書き換えることも可能です。
Folderはアラートルールのフォルダーです。MySQL関連のアラートであればMySQLのフォルダーに入れておくといいでしょう。
Add Filterでラベルを使用したフィルタリングができます。例えば、以下のように設定するとmysql-1
というサービスのみにこのアラートが適用されます。
まとめ
テンプレートの作成方法とそれを使用したアラートの作成方法を紹介しました。慣れていないとexpr
部分を1から考えるのは難しいので、既存のグラフの式を活用していくといいかと思います。
また、今回はアラートの作成までを紹介し、通知方法などについては触れませんでした。Percona Alertingは通知をグループ化したり、回数制限を設けたりして、類似のアラート通知を何度も送らないように抑制するための機能もあります。次回はこのようなPercona Alertingの通知関連の機能について紹介したいと思います。