promtool
- 〈このページの構成〉
機能
Prometheus serverの定義ファイルの書式チェックとアラートルールのテストを行うコマンドです。
形式
promtool check config Prometheus設定ファイル名 check rules アラート設定ファイル名 test rules テストファイル名 ・・・
実行権限
なし
格納先ディレクトリ
- Windowsの場合
-
Agentパス\tools\
- Linuxの場合
-
/opt/jp1ima/tools/
引数
- check config Prometheus設定ファイル名
-
Prometheus設定ファイルの書式に誤りがないかをチェックします。
Prometheus設定ファイルの詳細については,「Prometheus設定ファイル(jpc_prometheus_server.yml)」を参照してください。
- check rules アラート設定ファイル名
-
アラート設定ファイルの書式に誤りがないかをチェックします。
アラート設定ファイルの詳細については,「アラート設定ファイル(jpc_alerting_rules.yml)」を参照してください。
- test rules テストファイル名 ・・・
-
テストファイルに記述したアラートルールのテストを実行します。テストファイルは最大10個まで指定できます。
戻り値
0 |
書式正常,アラートルールのテスト成功 |
0以外 |
書式不正,アラートルールのテスト失敗 |
アラートルールのテストファイルの内容
- 形式
-
YAML形式で記述します。
- ファイル
-
任意の名前.yml
- 記述内容
-
項目名
説明
デフォルト値
rule_files:
[ - <file_name> ]
テストのために考慮すべきルールファイルをリストで指定します。
ファイル名はワイルドカードで指定できます。
−
[ evaluation_interval: <duration> | default = 1m ]
アラートルールの評価間隔を指定します。
1m
group_eval_order:
[ - <group_name> ]
グループ名の順序を指定できます。
グループ名の順序は,ルールグループの評価の順序(特定の評価時間)になります。指定した順序は,記述したグループ名に対してだけ保証されます。
すべてのグループを記述する必要はありません。
次に示す記述例のように,<rule_files:>に記述したルールファイルの評価順序を指定できます。
<記述例>
group_eval_order:
- test02.yml
- test01.yml
−
tests:
[ - <test_group> ]
すべてのテストを列挙します。
−
- (凡例)
-
−:該当なし
-
<test_group>
項目名
説明
デフォルト値
interval: <duration>
「input_series:」のデータ発生間隔を指定します。
−
input_series:
[ - <series> ]
シリーズのデータを指定します。
−
[ name: <string> ]
<test group>の名前を指定します。
−
alert_rule_test:
[ - <alert_test_case> ]
アラートルールのテストを指定します。
指定したファイルからアラートルールを検討します。
−
- (凡例)
-
−:該当なし
-
<series>
項目名
説明
デフォルト値
series: <string>
シリーズのデータを次の形式で指定します。
'メトリック名 {ラベル名 = ラベル値, ...}'
<記述例>
series_name{label1="value1", label2="value2"}
go_goroutines{job="prometheus", instance="localhost:9090"}
−
values: <string>
発生するデータをスペース区切りで指定します。
次に示す展開表記を使用できます。
<展開表記の例>
'a+bxc' becomes 'a a+b a+(2*b) a+(3*b) … a+(c*b)'
'a-bxc' becomes 'a a-b a-(2*b) a-(3*b) … a-(c*b)'
<記述例>
'-2+4x3' becomes '-2 2 6 10'
' 1-2x4' becomes '1 -1 -3 -5 -7'
−
- (凡例)
-
−:該当なし
-
<alert_test_case>
項目名
説明
デフォルト値
eval_time: <duration>
テストを評価する(アラートをチェックする)タイミングを「time = 0s」からの経過時間を指定します。
<test_group>の「interval:」に指定したデータ発生間隔で「eval_time:」に指定した経過時間までを評価します。
例えば,<test_group>の「interval:」に指定したデータ発生間隔が1mで,「eval_time:」に指定した経過時間が5mの場合,「input_series:」で指定したデータの6番目を取得したタイミングで評価されます。
−
alertname: <string>
テストするアラートの名前を指定します。
アラート設定ファイルの「alert:」に記述した値を指定します。
−
exp_alerts:
[ - <alert> ]
発生を期待するアラートの内容をリストで指定します。
アラートルールを実行しないことをテストする場合は,「exp_alerts」の指定を空にします。
−
- (凡例)
-
−:該当なし
-
<alert>
項目名
説明
デフォルト値
exp_labels:
[ <labelname>: <string> ]
発生を期待するアラートのラベルを指定します。
ラベルには,アラートに関連付けられたサンプルのラベルも含まれます。
−
exp_annotations:
[ <labelname>: <string> ]
発生を期待するアラートの注釈を指定します。
−
- (凡例)
-
−:該当なし
アラート設定ファイルとアラートルールのテストファイルのサンプル
- ■「up」メトリックの例
-
-
アラート設定ファイルの記述例
groups: - name: alerts rules: - alert: InstanceDown expr: up == 0 for: 5m labels: severity: page annotations: summary: "Instance {{ $labels.instance }} down" description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."
-
アラートルールのテストファイルの記述例
rule_files: - jpc_alerting_rules.yml evaluation_interval: 1m tests: # Test - interval: 1m # Series data. input_series: - series: 'up{job="prometheus", instance="localhost:9090"}' values: '0 0 0 0 0 0 0 0 0 0 0 0 0 0 0' # success # Unit test for alerting rules. alert_rule_test: # Unit test 1. - eval_time: 5m alertname: InstanceDown # alertname: AnotherInstanceDown exp_alerts: # Alert 1. - exp_labels: severity: page instance: localhost:9090 job: prometheus exp_annotations: summary: "Instance localhost:9090 down" description: "localhost:9090 of job prometheus has been down for more than 5 minutes."
-
- ■CPUの例
-
-
アラート設定ファイルの記述例
groups: - name: alerts rules: - alert: cpu_alert_rule expr: sum(rate(windows_cpu_time_total{mode!="idle"}[1m])) < 50 for: 2m labels: severity: page annotations: summary: "CPU alert rule summary" description: "CPU alert rule description"
-
アラートルールのテストファイルの記述例
rule_files: - jpc_alerting_rules.yml evaluation_interval: 1m tests: # Test - interval: 1m # Series data. input_series: - series: 'windows_cpu_time_total' #values: '0+3000x10' # fail values: '0+2800x10' # success # Unit test for alerting rules. alert_rule_test: # Unit test 1. - eval_time: 7m alertname: cpu_alert_rule exp_alerts: # Alert 1. - exp_labels: severity: page exp_annotations: summary: "CPU alert rule summary" description: "CPU alert rule description"
-
- ■メモリーの例(その1)
-
-
アラート設定ファイルの記述例
groups: - name: alerts rules: - alert: memory_alert_rule expr: windows_memory_available_bytes < 1073741824 for: 3m labels: severity: page annotations: summary: "Memory alert rule summary" description: "Memory alert rule description"
-
アラートルールのテストファイルの記述例
rule_files: - jpc_alerting_rules.yml evaluation_interval: 1m tests: # Test - interval: 1m # Series data. input_series: - series: 'windows_memory_available_bytes' values: '1073741822 1073741826 1073741823 1073741823 1073741823 1073741823 1073741828 1073741822' # success #values: '1073741822 1073741822 1073741826 1073741823 1073741823 1073741823 1073741828 1073741822' # fail # Unit test for alerting rules. alert_rule_test: # Unit test 1. - eval_time: 5m alertname: memory_alert_rule exp_alerts: # Alert 1. - exp_labels: severity: page exp_annotations: summary: "Memory alert rule summary" description: "Memory alert rule description"
-
- ■メモリーの例(その2)
-
-
アラート設定ファイルの記述例
groups: - name: alerts rules: - alert: memory_alert_rule expr: windows_memory_available_bytes < 1073741824 for: 3m labels: severity: page annotations: summary: "Memory alert rule summary" description: "Memory alert rule description"
-
アラートルールのテストファイルの記述例
rule_files: - jpc_alerting_rules.yml evaluation_interval: 1m tests: # Test - interval: 1m # Series data. input_series: - series: 'windows_memory_available_bytes' values: '1073741822 1073741826 1073741823 1073741823 1073741823 1073741823 1073741828 1073741822' # success #values: '1073741822 1073741822 1073741826 1073741823 1073741823 1073741823 1073741828 1073741822' # fail # Unit test for alerting rules. alert_rule_test: # Unit test 1. - eval_time: 5m alertname: memory_alert_rule exp_alerts: # Alert 1. - exp_labels: severity: page exp_annotations: summary: "Memory alert rule summary" description: "Memory alert rule description"
-
- ■割り込みの例
-
-
アラート設定ファイルの記述例
groups: - name: alerts rules: - alert: alerts_rules_increase expr: increase(windows_cpu_interrupts_total{core="0,0"}[3m]) > 100 for: 0m labels: severity: critical annotations: summary: "Alert test case of increase." description: "Use increase function in unit test." - alert: alerts_rules_increase_all expr: sum(increase(windows_cpu_interrupts_total[5m])) > 240 for: 0m labels: severity: critical annotations: summary: "Alert test case of increase." description: "Use increase function in unit test."
-
アラートルールのテストファイルの記述例
rule_files: - jpc_alerting_rules.yml evaluation_interval: 1m tests: # Test - interval: 1m # Series data. input_series: - series: 'windows_cpu_interrupts_total{core="0,0"}' #values: '0 10 20 30 110 120 130 140 150 160 170' #fail values: '0+10x3 111+10x6' #success - series: 'windows_cpu_interrupts_total{core="0,1"}' values: '0+10x3 98+13x6' # Unit test for alerting rules. alert_rule_test: # Unit test 1. - eval_time: 4m alertname: alerts_rules_increase exp_alerts: # Alert 1. - exp_labels: core: "0,0" severity: critical exp_annotations: summary: "Alert test case of increase." description: "Use increase function in unit test." - eval_time: 8m alertname: alerts_rules_increase_all exp_alerts: # Alert 1. - exp_labels: severity: critical exp_annotations: summary: "Alert test case of increase." description: "Use increase function in unit test."
-
使用例
-
Prometheus設定ファイルの書式チェックの実行例(書式が正しい場合)
# ./promtool check config jpc_prometheus_server.yml Checking jpc_prometheus_server.yml SUCCESS: 1 rule files found Checking jpc_alerting_rules.yml SUCCESS: 1 rules found
-
Prometheus設定ファイルの書式チェックの実行例(書式が不正な場合)
# ./promtool check config jpc_prometheus_server.yml Checking jpc_prometheus_server.yml FAILED: parsing YAML file jpc_prometheus_server.yml: yaml: line 42: did not find expected key
-
アラート設定ファイルの書式チェックの実行例(書式が不正な場合)
# ./promtool check rules jpc_alerting_rules.yml Checking jpc_alerting_rules.yml SUCCESS: 1 rules found
-
アラート設定ファイルの書式チェックの実行例(書式が不正な場合)
# ./promtool check rules jpc_alerting_rules.yml Checking jpc_alerting_rules.yml FAILED: jpc_alerting_rules.yml: yaml: unmarshal errors: line 10: field aannotations not found in type rulefmt.RuleNode
-
アラートルールのテストの実行例(テストが成功した場合)
# ./promtool test rules alerts_rules_unit_test.yml Unit Testing: alerts_rules_unit_test.yml SUCCESS
-
アラートルールのテストの実行例(テストが失敗した場合(その1))
# ./promtool test rules alerts_rules_unit_test.yml Unit Testing: alerts_rules_unit_test.yml FAILED: alertname:InstanceDown, time:10m, exp:"[Labels:{alertname=\"InstanceDown\", instance=\"localhost:9090\", job=\"prometheus\", severity=\"page\"} Annotations:{description=\"localhost:9090 of job prometheus has been down for more than 5 minutes.\", summary=\"Instance localhost:9090 down\"}]", got:"[]
テストファイルが不正な場合,「exp」に発生が予想されるアラート,「got」に実際に発生したアラートが出力されます。上記の実行例の場合,アラートが1つ出力する想定(「exp」の出力結果)に対して,実際にはアラートが通知されなかった(「got」の出力結果)ことを示します。
-
アラートルールのテストの実行例(テストが失敗した場合(その2))
# ./promtool test rules test_rule_file.yml Unit Testing: test_rule_file.yml FAILED: alertname:InstanceDown, time:5m, exp:"[Labels:{alertname=\"InstanceDown\", instance=\"localhost:9090\", job=\"prometheus\", severity=\"warn\"} Annotations:{description=\"localhost:9090 of job prometheus has been down for more than 5 minutes.\", summary=\"Instance localhost:9090 down\"}]", got:"[Labels:{alertname=\"InstanceDown\", instance=\"localhost:9090\", job=\"prometheus\", severity=\"page\"} Annotations:{description=\"localhost:9090 of job prometheus has been down for more than 5 minutes.\", summary=\"Instance localhost:9090 down\"}]
テストファイルが不正な場合,「exp」に発生が予想されるアラート,「got」に実際に発生したアラートが出力されます。上記の実行例の場合,「severity」の値が「warn」である想定(「exp」の出力結果)に対して,実際には「severity」の値が「page」であった(「got」の出力結果)ことを示します。