環境
PrometheusはDockerコンテナ上で動かしています。
クラウド環境:Azure
Dockerホスト:CentOS7.3
Dockerコンテナ:(prometheusサーバ)CentOS7.3
<監視対象>
Dockerホスト:CentOS7.3
Dockerコンテナ:CentOS7.3 (Webサーバを想定してApacheを起動)
前提条件
・Prometheusサーバのインストールが完了していること
PrometheusをCentOS7.3&Docker上にインストールしてみた
AlertManagerのインストール
1.AlertMananagerのURLコピー
Prometheus公式サイト からAlertManagerをダウンロードします。
今回の環境では、次のものを選択します。
Operating system: linux
Architecture: amd64
alertmanagerを探して、リンクのアドレスをコピーしてください。
2.ダウンロード
<Promethusサーバ>
## cd /usr/local/src
## wget https://github.com/prometheus/alertmanager/releases/download/v0.5.1/alertmanager-0.5.1.linux-amd64.tar.gz
## tar xfvz alertmanager-0.5.1.linux-amd64.tar.gz
## cd alertmanager-0.5.1.linux-amd64/
## cp -p alertmanager /usr/bin/.
3.設定ファイルの配置
<Promethusサーバ>
## cd /etc/prometheus
## wget https://raw.githubusercontent.com/alerta/prometheus-config/master/alertmanager.yml
(Default状態)
## cat /etc/prometheus/alertmanager.yml
global:
# The smarthost and SMTP sender used for mail notifications.
smtp_smarthost: 'localhost:25'
smtp_from: 'alertmanager@example.org'
route:
receiver: "alerta"
group_by: ['alertname']
group_wait: 30s
group_interval: 5m
repeat_interval: 2h
receivers:
- name: "alerta"
webhook_configs:
- url: 'http://localhost:8080/webhooks/prometheus'
send_resolved: true
4.自動起動設定
AlertManagerもしっかりと自動起動するようにしましょう。
<Promethusサーバ>
## vi /etc/default/alertmanager
OPTIONS="-config.file /etc/prometheus/alertmanager.yml"
## vi /usr/lib/systemd/system/alertmanager.service
[Unit]
Description=Prometheus alertmanager Service
After=syslog.target.prometheus.alertmanager.service
[Service]
Type=simple
EnvironmentFile=-/etc/default/alertmanager
ExecStart=/usr/bin/alertmanager $OPTIONS
PrivateTmp=true
[Install]
WantedBy=multi-user.target
## systemctl enable alertmanager.service
Created symlink from /etc/systemd/system/multi-user.target.wants/alertmanager.service to /usr/lib/systemd/system/alertmanager.service.
## systemctl start alertmanager
5.アラート設定前準備(メール設定)
メール送信の仕組みは、環境に合わせて実施しましょう。
今回は、AzureのVM上で環境を組み立てていることもあり、こちらを参考にメール送信の機能を具備します。
Azureのメール送信はSendGrid
6.アラート設定
「3.設定ファイルの配置」のconfigファイルを編集しましょう。
今回は、Mailアラートの設定を入れます。値はDefault値から変えています。
<Promethusサーバ>
## cat alertmanager.yml
global:
# The smarthost and SMTP sender used for mail notifications.
smtp_smarthost: 'smtp.sendgrid.net:25' ★ SendGrid のSMTP接続先
smtp_from: '****************@******' ★ SendGrid 登録メールアドレス
smtp_auth_username: '****@azure.com' ★ SendGrid で払い出されたUserName
smtp_auth_password: '*******' ★ SendGrid で設定したパスワード(平文で記載するのはちょっとね)
smtp_auth_secret: '*********' ★ SendGrid で払い出されたAPIキー
route:
receiver: "mail"
group_by: ['alertname', 'instance', 'severity'] ★ 同一アラート名、同一インスタンス、同一サービスのアラートに対して
group_wait: 30s ★ 30秒以内のアラートは同一アラートと見なす
group_interval: 10m ★ 10分毎に通知
repeat_interval: 1h ★ 一度通知したアラートは 1時間後に通知
# receiver: "slack-notifications"
# group_by: ['alertname', 'instance']
receivers:
- name: 'mail'
email_configs:
- to: *****@********,####@###### ★ アラート送信先のアドレス(複数あるときは、, カンマ区切り)
★ ㏄は、頑張ったけどできない。。。
★ toを分けたいときは、-to: を同じように記載すればOK
inhibit_rules:
- source_match:
severity: 'critical' ★ アラートの深刻度(severity) が critical の場合、
target_match: ★ 同一のアラート名で warning のものは通知しない。
severity: 'warning'
equal: ['alertname']
7.ルール設定
ルール設定は、自分で必要となるルールを検討してみてください。
<Promethusサーバ>
## cat /etc/prometheus/alert.rules
ALERT instance_down
IF up == 0
FOR 2m
LABELS { severity = "critical" }
ANNOTATIONS {
summary = "Instance {{ $labels.instance }} down",
description = "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 2 minutes.",
}
ALERT cpu_threshold_exceeded
IF (100 * (1 - avg by(instance)(irate(node_cpu{job='node',mode='idle'}[5m])))) > THRESHOLD_CPU
ANNOTATIONS {
summary = "Instance {{ $labels.instance }} CPU usage is dangerously high",
description = "This device's cpu usage has exceeded the threshold with a value of {{ $value }}.",
}
ALERT mem_threshold_exceeded
IF (node_memory_MemFree{job='node'} + node_memory_Cached{job='node'} + node_memory_Buffers{job='node'})/1000000 < THRESHOLD_MEM
ANNOTATIONS {
summary = "Instance {{ $labels.instance }} memory usage is dangerously high",
description = "This device's memory usage has exceeded the threshold with a value of {{ $value }}.",
}
ALERT filesystem_threshold_exceeded
IF node_filesystem_avail{job='node',mountpoint='/'} / node_filesystem_size{job='node'} * 100 < THRESHOLD_FS
ANNOTATIONS {
summary = "Instance {{ $labels.instance }} filesystem usage is dangerously high",
description = "This device's filesystem usage has exceeded the threshold with a value of {{ $value }}.",
}
ALERT node_high_loadaverage
IF rate(node_load1[1m]) > 2
FOR 10s
LABELS { severity = "warning" }
ANNOTATIONS {
summary = "High load average on {{$labels.instance}}",
description = "{{$labels.instance}} has a high load average above 10s (current value: {{$value}})"
}
8.prometheus に組み込み
PrometheusにAlertmanagerを組み込みましょう。
/etc/prometheus/prometheus.yml の末尾に追加します。
alerting:
alertmanagers:
- scheme: http
static_configs:
- targets: ['<ホスト名>.japaneast.cloudapp.azure.com:9093']
9.最後に
設定ファイルの記載が正しいかちゃんと確認しましょう。
<Promethusサーバ>
## promtool check-config /etc/prometheus/prometheus.yml
## promtool check-config /etc/prometheus/alertmanager.yml
alertmanager、Prometheusを再起動して完了です。
<Promethusサーバ>
## systemctl restart alertmanager
## systemctl restart prometheus
10.動作確認
適当に監視対象のサーバを止めてみましょう。
メールが飛んできます。