Edited at

Prometheusへmuninから移行を検討⑤ 〜移行検討 その2〜

More than 1 year has passed since last update.

前回まででサーバリソース、Nginx、phpfpmの監視がある程度出来ている状態です。

ここでは各種アラートメールを設定していきます。


ルール構築

種類としては以下を用意

- cpu.yml

- disk.yml

- memory.yml

- nginx.yml

- php-fpm.yml

- system.yml(インスタンスダウンやロードアベレージ)

良く見る部分だけでアラート対象としてみました。


アラートメールのサンプル

以下の設定でメール通知を全てチェックしているわけではないです。

そもそも、手探りなので間違いはあると思います。


cpu


- name: cpu_check
rules:
- alert: cpu_used_warn
# CPU 使用率が 80% を超えた時を条件にしています
expr: 100 * (1 - avg(rate(node_cpu{mode='idle'}[5m])) BY (instance)) > 80
for: 5m
labels:
severity: warning
annotations:
summary: "cpu used over 80%"
description: "CPU使用率が80%を超えて5分経過してます"
- alert: cpu_used_err
# CPU 使用率が 90% を超えた時を条件にしています
expr: 100 * (1 - avg(rate(node_cpu{mode='idle'}[5m])) BY (instance)) > 90
for: 5m
labels:
severity: critical
annotations:
summary: "cpu used over 90%"
description: "CPU使用率が90%を超えて5分経過してます"

ちなみにメールは以下のような感じで通知されました。

スクリーンショット 2018-05-02 18.19.18.png

※IP出てますがローカルIPだし、prometheusの確認用なのでいいかなと。


disk

本当は「/」固定ではなくてsumを使って閾値を設けたかったのですがうまくできませんでした。


groups:
- name: disk_check
rules:
- alert: disk_space_warn
expr: node_filesystem_avail{mountpoint='/', device!~'rootfs'} / node_filesystem_size * 100 < 30
for: 5m
labels:
severity: warnings
annotations:
summary: "running out of hard drive space"
description: "ディスクスペースが70%をきってから5分経過してます"
- alert: disk_space_warn
expr: node_filesystem_avail{mountpoint='/', device!~'rootfs'} / node_filesystem_size * 100 < 20
for: 5m
labels:
severity: critical
annotations:
summary: "running out of hard drive space"
description: "ディスクスペースが80%をきってから5分経過してます"


memory


groups:
- name: memory_check
rules:
- alert: memory_warn
expr: 100 * ((node_memory_MemFree + node_memory_Active_file + node_memory_Inactive_file)/node_memory_MemTotal) < 30
for: 5m
labels:
severity: warning
annotations:
summary: "memory is getting low"
description: "メモリ空き容量が30%以下になって5分経過してます"
- alert: memory_critical
expr: 100 * ((node_memory_MemFree + node_memory_Active_file + node_memory_Inactive_file)/node_memory_MemTotal) < 20
for: 5m
labels:
severity: critical
annotations:
summary: "memory is getting low"
description: "メモリ空き容量が20%以下になって5分経過してます"


nginx

アクティブな接続数で閾値を設けて見ました。

値も見たいので{$labels.value}も使ってます。


groups:
- name: nginx_check
rules:
- alert: status
expr: nginx_up == 0
for: 5m
labels:
severity: critical
annotations:
summary: "nginx down"
description: "nginxが停止してから5分が経過してます"
- alert: active_connections_warn
expr: nginx_connections_current{state="active"} > 700
for: 5m
labels:
severity: warning
annotations:
summary: "active connection over 700"
description: "nginxでアクティブなコネクションが700を超えて5分経過してます 値={{ $labels.value }}"
- alert: active_connections_critical
expr: nginx_connections_current{state="active"} > 900
for: 5m
labels:
severity: critical
annotations:
summary: "active connection over 900"
description: "nginxでアクティブなコネクションが900を超えて5分経過してます 値={{ $labels.value }}"


phpfpm

nginxと似たような感じにしました。


groups:
- name: phpfpm_check
rules:
- alert: process_count_warn
expr: phpfpm_active_max_processes > 700
for: 5m
labels:
severity: warning
annotations:
summary: " process over 700"
description: "phpfpmのプロセスが700を超えて5分経過してます 値={{ $labels.value }}"
- alert: process_count_critical
expr: phpfpm_active_max_processes > 900
for: 5m
labels:
severity: critical
annotations:
summary: "process over 900"
description: "phpfpmのプロセスが900を超えて5分経過してます 値={{ $labels.value }}"


system

インスタンスダウンだけですが、「node_load1」等を使ってロードアベレージも対象にしていきたい。


groups:
- name: system_check
rules:
# alert: アラート名
- alert: InstanceDown
# expr: alert push の閾値
expr: up == 0
for: 5m
labels:
severity: critical
annotations:
summary: "Instance down"
description: "停止してから5分が経過してます"


まとめ

冒頭に記載しているとおり、全てチェックしたものではないです。

あくまでサンプルとして確認してて実際に監視ツールとして活用する場合は、

検証して設定を決めていきます。

一通り触ってみた結果、muninから移行してもいいかなと思いました。

grafanaは見てて楽しいですし、アラート制御がやっぱり強いように思えました。

ただ、alertmanagerのwarningとcriticalの集約がうまくできず、

両方通知されてしまうのでそこは確認していきたい。