考虑从Munin迁移到Prometheus ⑤ 〜 迁移评估 第二部分 〜
目前为止,已经基本完成了对服务器资源、Nginx和phpfpm的监控。在这里,我们将设置各种警报邮件。
建立规则
以下是可供选择的种类:
– cpu.yml
– disk.yml
– memory.yml
– nginx.yml
– php-fpm.yml
– system.yml(包括实例宕机和负载平均)
我只以经常查看的部分作为警报对象。
警報邮件的样本
我并没有检查所有的邮件通知设置。
从一开始我就是摸索着进行的,所以可能会有些错误。
中央处理器
- 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分経過してます"
硬盘
我本来想用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分経過してます"
记忆
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 – 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 }}"
PHP-FPM
我把它做得与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 }}"
系统
虽然只是实例下降,但希望借助“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。
使用grafana让人很愉快,而且对于警报控制似乎确实很强大。
不过,alertmanager的warning和critical的汇总处理不够完善,
导致两者都一起通知,所以需要进一步确认这个问题。