プロメテウスの監視と学習の道(4)
プロメテウスアラーム設定
アラーム機能概要
インジケータとアラームを収集および保存するPrometheusの機能は、Prometheus ServerとAlertmanagerの2つの独立したコンポーネントに分けられます。前者は、アラーム通知を生成するための「アラームルール」のみを担当し、特定のアラーム操作は後者によって完了します。
Alertmanagerは、クライアントから送信されたアラーム通知の処理を担当します。
- クライアントは通常PrometheusServerですが、他のツールからのアラートの受信もサポートしています
- Alertmanagerは、アラート通知をグループ化し、重複排除後のルーティングルールに従って、電子メール、SMS、Dingdingなどのさまざまな受信者にルーティングします。
Prometheus監視システムのアラームロジック
まず、PrometheusをAlertmanagerのアラートクライアントとして構成する必要があります。次に、Alertmanagerもアプリケーションであり、Prometheusの監視ターゲットにも含める必要があります。
構成ロジック:
Alertmanagerで受信者を定義します。通常、受信者は特定のメディアに基づいてアラートメッセージを受信できる特定のユーザーです。
- 電子メール、WeChat、Slack、Webhookは、アラート情報を送信するための一般的なメディアです
- メディアが異なれば、アラームメッセージの受信者のアドレスの表現も異なります。
受信したアラーム通知を必要に応じて個別に処理できるようにAlertmanagerでルーティングルールを定義し、Prometheusでアラーム通知を生成してAlertmanagerに送信するようにアラームルールを定義します
Alertmanager
Alertmanagerは、基本的なアラーム通知機能に加えて、重複排除、グループ化、抑制、無音、アラームのルーティングなどの機能もサポートしています。
- グループ化:類似のアラームを単一のアラーム通知に結合するメカニズム。グループ化メカニズムにより、システムが大面積の障害によってアラーム波をトリガーしたときに、ユーザーが大量のアラームノイズに圧倒されて隠蔽につながるのを防ぐことができます。重要な情報の
- 禁止:システム内のコンポーネントまたはサービスの障害によってアラーム通知がトリガーされた後、コンポーネントまたはサービスに依存する他のコンポーネントまたはサービスもアラームをトリガーする場合があります。禁止は、同様のカスケードアラームを回避する1つの方法です。この機能により、ユーザーは次のことができます。本当の過ちに焦点を合わせる
- サイレント:特定の時間枠内にアラーム通知を受信した場合でも、Alertmanagerが実際にユーザーにアラーム情報を送信しない動作を指します。通常、システムの定期メンテナンス中に、警報システムのサイレント機能をアクティブにする必要があります
- ルート:Alertmanagerが受信する特定のタイプのアラート通知を処理する方法を構成するために使用されます。その基本的なロジックは、ルートマッチングルールのマッチング結果に基づいて、現在のアラート通知を処理するパスと動作を決定することです。
Alertmanagerを構成します
Altermanagerは、独立した展開とメンテナンスを必要とする独立したgoバイナリプログラムです。
tar xf alertmanager-0.21.0.linux-amd64.tar.gz -C /usr/local/
mv /usr/local/alertmanager-0.21.0.linux-amd64 /usr/local/alertmanager
Alertmanager構成ファイルを変更します
vim alertmanager.yml
global:
resolve_timeout: 5m
route:
group_by: ['alertname']
group_wait: 10s
group_interval: 10s
repeat_interval: 1h
receiver: 'email'
receivers:
- name: 'email'
email_configs:
- to: '***@163.com'
from: '***@163.com'
smarthost: 'smtp.163.com:25'
auth_username: '***@163.com'
auth_identity: '***@163.com'
auth_password: 'OTFXYHONWUFELOTN'
require_tls: false
ここでは、163メールボックスが使用されます。auth_passwordは、メールボックスにログインするために、パスワードの代わりに163メールボックスsmtpのパスワードを使用する必要があります。
- 起動
Prometheus構成ファイルを変更し、アラームルールを構成します
- ここでのファイルベースの検出
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- file_sd_configs:
- files:
- "target/alertmanagers*.yaml"
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
- "rules/*.yaml"
- "alert_rules/*.yaml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
file_sd_configs:
- files:
- target/prometheus-*.yaml
refresh_interval: 2m
# All nodes
- job_name: 'nodes'
file_sd_configs:
- files:
- target/nodes-*.yaml
refresh_interval: 2m
- job_name: 'alertmanagers'
file_sd_configs:
- files:
- target/alertmanagers*.yaml
refresh_interval: 2m
- ノードファイルの書き込み
vim /usr/local/prometheus/target/nodes.yaml
- targets:
- 192.168.0.181:9100
- 192.168.0.179:9100
labels:
app: node-exporter
job: node
vim /usr/local/prometheus/target/prometheus-servers.yaml
- targets:
- 192.168.0.181:9090
labels:
app: prometheus
job: prometheus
vim /usr/local/prometheus/target/alertmanagers.yaml
- targets:
- 192.168.0.181:9093
labels:
app: alertmanager
- アラームルールを設定する
vim /usr/local/prometheus/alert_rules/instance_down.yaml
groups:
- name: AllInstances
rules:
- alert: InstanceDown
# Condition for alerting
expr: up == 0
for: 1m
# Annotation - additional informational labels to store more information
annotations:
title: 'Instance down'
description: Instance has been down for more than 1 minute.'
# Labels - additional labels to be attached to the alert
labels:
severity: 'critical'
ここでのポイントは、exprがPrometheusのインジケーター名とそれに対応する値に対応し、条件を満たしたときにアラームをトリガーすることです。
- Prometheusを開始します
- ノードのnode_exporterを停止し
、メールボックスを確認するために約1分待ちます