1. 概要 Prometheus 監視アラート ルールを作成することで、特定の Prometheus インスタンスのアラート ルールを作成できます。アラーム ルールで設定された条件が満たされると、システムは対応するアラーム イベントを生成します。通知を受信する場合は、対応する通知戦略をさらに構成してアラームを生成し、SMS、電子メール、電話、Ding Group ロボット、エンタープライズ WeChat ロボット、または Webhook 経由で通知を送信する必要があります。
Prometheus サーバーからアラートを受信すると、PromQL アラート ルールに基づいてデータが分析されます。 PromQL で定義されたルールが満たされると、アラートが生成され、Alertmanager に送信されます。 Alertmanager は設定に従ってアラート情報を処理し、送信します。したがって、Prometheus のアラーム設定は PromQL と AlertManager に依存します。これら 2 つの紹介については、次の記事を参照してください。 - 【クラウドネイティブ】Prometheus AlertManagerの解説と実践的な操作
- 【クラウドネイティブ】Prometheus PromQLの解説と実践的な操作
- 【クラウドネイティブ】Prometheus Pushgetwayの解説と実践的な操作
- 公式ドキュメント: https://prometheus.io/docs/alerting/latest/overview/
2. アラーム実装プロセスアラートと通知を設定するための主な手順は次のとおりです。 - Prometheus でアラート ルールを構成します。
- AlertManager に関連付けるように Prometheus を構成します。
- AlertManager アラート チャネルを構成します。
3. アラームルール公式ドキュメント: https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/ 1) アラームルールの設定Prometheus 設定 (prometheus.yml) にアラーム ルール設定を追加します。設定ファイル内の rule_files は、アラーム ルール ファイルを指定するために使用されます。次の構成では、アラーム ルールを保存するディレクトリが /etc/prometheus であり、ルール ファイルが rules.yml であることを指定します。 ルールファイル: - /etc/prometheus/rules.yml アラームルールを設定するには: アラート ルールを使用すると、Prometheus 式言語の式に基づいてアラート条件を定義し、アラートがトリガーされたときに外部の受信者 (Alertmanager) に通知を送信できます。アラート ルールは主に次の部分で構成されます。 - alert - アラート ルールの名前。
- expr——アラームルールを実行するために使用される PromQL クエリステートメントです。
- for——アラームを評価するための保留期間。
- ラベル - カスタム ラベル。ユーザーがアラートに添付する追加ラベルのリストを指定できるようにします。
- 注釈 - アラーム情報の表示など、追加情報を保存するために使用されます。
以下はrules.ymlの例です。 グループ: -名前:例 ルール: -警告:メモリ不足 # メモリ使用量が10 %を超えて1分間続くと、アラームがトリガーされます 式: 100 - ( ( node_memory_MemAvailable_bytes {インスタンス= "192.168.182.110:9100" 、ジョブ= "node_exporter" } * 100 ) / node_memory_MemTotal_bytes {インスタンス= "192.168.182.110:9100" 、ジョブ= "node_exporter" } ) > 90 : 1 m ラベル: 重大度:ページ 注釈: 要約:スパイクメモリ 2) サーバーがオンラインかどうかを監視するPrometheus によって監視されるサーバーには、サービスがオンラインかどうかを知るためのアップインジケーターがあります。 up == 0 #サービスはオフラインです。 up == 1 #サービスはオンラインです。 [例] グループ: - name : Test - Group - 001 # グループの名前。このファイル内で一意である必要があります ルール: -アラート: InstanceDown # アラートの名前。グループ内で一意である必要があります expr : up == 0 # 式、実行結果がtrueの場合:アラームが必要であることを示します for : 1 m # アラームと見なされるまでにどれくらいの時間がかかりますか(つまり、 up == 0 がどれくらい続く必要がありますか) ラベル: 重大度:警告 # タグを定義する 注釈: 概要: 「サービス {{ $labels.instance }} はオフラインです」 説明: 「ジョブ {{ $labels.job }} の {{ $labels.instance }} が 1 分以上ダウンしています。」 知らせ: - for は、アラームしきい値に達した後、アラーム データを送信する前に一貫性がどのくらい持続するかを指定します。
- ラベルにカスタムラベルを指定できます。定義されたラベルがすでに存在する場合は上書きされます。テンプレートが使えます。
- 注釈内のデータにはテンプレートを使用でき、$labels はアラーム データのラベルを表し、{{$value}} は時系列の値を表します。
3) 警報データのステータス- 非アクティブ - アラームしきい値に達していない、つまり expr 式が真ではないことを示します。
- 保留中 - アラームしきい値に達したことを示します。つまり、expr 式は確立されていますが、アラーム期間、つまり for の値は満たされていません。
- 発火 - しきい値に達し、アラーム持続時間が満たされました。
[ヒント] テストによると、同じアラーム データが Firing に到達した場合、アラームが解決されない限り、アラーム データは再度生成されません。
4. 実際の操作 1) node_exporterをダウンロードする Node-exporter は、zabbix 監視システムの zabbix-agent と同様に、ノードの CPU、負荷、ファイルシステム、メモリ情報、ネットワーク、その他の基本的な監視インジケーターを含むノード操作インジケーターを収集するために使用されます。
ダウンロードアドレス: https://github.com/prometheus/node_exporter/releases/ https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gzをダウンロードしてください tar - xzf node_exporter - 1.5 .0 .linux - amd64 .tar .gz 2) node_exporterを起動する ln -s / opt / prometheus / exporter / node_exporter / node_exporter - 1.5.0.linux - amd64 / node_exporter / usr / local / bin / node_exporter # 指定されたポートを開始します。デフォルトポート: 9100 node_exporter --web.listen-address=":9100" node_exporter.service を起動するように設定する # デフォルトポート 9100 cat > /usr/lib/systemd/system/node_exporter.service << EOF [ユニット] 説明notallow = node_exporter 後=ネットワーク.ターゲット #対応するユーザーとグループを作成して開始することができます #ユーザー=プロメテウス #グループ=プロメテウス
[サービス] ExecStart =/ opt / prometheus / exporter / node_exporter / node_exporter - 1.5 .0 .linux - amd64 / node_exporter --web.listen-address=:9100 [インストール] WantedBy =マルチユーザー.target 終了 サービスを開始する systemctlデーモン-reload systemctl ノードエクスポーターを起動します systemctl ステータス node_exporter systemctl を有効にする node_exporter 診る curl http : // localhost : 9100 /メトリック 3) Prometheusを設定してnode_exporterをロードする設定prometheus.ymlを追加または変更する 再起動して設定をロードします systemctl でプロメテウスを再起動します。 # 1.キルメソッド #kill -HUP pid # 2. curl メソッド (推奨) #curl - X POST http : // IP /-/リロード # [注意] 起動コマンドラインにパラメータ--web.enable-lifecycleを追加する必要があります。 カール- # 3.再起動します(推奨されません。再起動すると、すべての接続が一時的に中断されます) systemctl でプロメテウスを再起動します。 ウェブをチェック: http://ip:9090/targets 4) アラームルールの設定Prometheus 構成ファイル rometheus.yml で、次のように構成します。 /etc/prometheus/rule.yml の設定は次のとおりです。 グループ: - name : Test - Group - 001 # グループの名前。このファイル内で一意である必要があります ルール: -アラート: InstanceDown # アラートの名前。グループ内で一意である必要があります expr : up == 0 # 式、実行結果がtrueの場合:アラームが必要であることを示します for : 1 m # アラームと見なされるまでにどれくらいの時間がかかりますか(つまり、 up == 0 がどれくらい続く必要がありますか) ラベル: 重大度:警告 # タグを定義する 注釈: 概要: 「サービス {{ $labels.instance }} はオフラインです」 説明: 「ジョブ {{ $labels.job }} の {{ $labels.instance }} が 1 分以上ダウンしています。」 リロード curl - X POST http : // localhost : 9090 /-/リロード アラームルールはWeb上で確認できます。 5) シミュレーションアラーム手動シャットダウン sudo シャットダウン-h今 しばらくすると、アラームのステータスが保留に変わります。 しばらくすると、警報が発射に変わります 6) アラームチャンネルを設定するここでは電子メールアラートを例に挙げますが、他のものも同様です。変更する前に、以前の構成をバックアップしておくことをお勧めします。 cp アラートマネージャー.ymlアラートマネージャー.bak 【1】alertmanager.ymlの設定 グローバル: 解決タイムアウト: 5分 ## QQ メールボックスの SMTP サービス アドレスは次のとおりです。公式アドレスはsmtp.qq.comで、ポートは465または587です。同時に、POP3 / SMTP サービスを設定して有効にする必要があります。 smtp_smarthost : 'smtp.qq.com:465' SMTP_from : '[email protected]' smtp_auth_username : '[email protected]' #QQメールボックスサーバーでPOP3 / SMTPサービスを有効にすると、パスワードではなく認証コードが求められます smtp_auth_password : 'xxxxxxxx' smtp_require_tls :偽
#1。テンプレート テンプレート: - '/opt/prometheus/alertmanager/alertmanager-0.24.0.linux-amd64/templates/email.tmpl'
#2。ルーティング ルート: group_by : [ 'アラート名' ] グループ待機: 10秒 グループ間隔: 10秒 繰り返し間隔: 1時間 #郵便 受信者: 'メール'
受信者: -名前: 'メール' 電子メール設定: ## アラートメールを受信する(テンプレートファイルで定義された変数はこちら) -宛先: '{{ template "email.to"}}' ## 送信するメールの内容(テンプレートファイルを呼び出す) html : '{{ テンプレート "email.to.html" .}}' 送信解決: true
# サプレッサーの設定 禁止ルール: -ソースマッチ: 重大度: 「重大」 ターゲットマッチ: 重大度: '警告' # 抑制するには、この構成のラベルの内容が同じであることを確認してください。つまり、抑制するアラームには、これら 3 つのラベル値が必要です。 等しい: [ 'alertname' , 'dev' , 'instance' ] 【2】テンプレートalert.tmpl テンプレート ファイルは、email.from、email.to、email.to.html の 3 つのテンプレート変数を構成します。これらは、alertmanager.yml ファイルで直接構成および参照できます。ここで、email.to.html は送信される電子メール コンテンツであり、Html およびテキスト形式をサポートします。きれいに表示するために、情報をシンプルに表示する HTML 形式を使用します。次の {{ range .Alerts }} はループ構文であり、一致するアラートの情報をループして取得するために使用されます。 { { "email.from"を定義します} } xxxxxxxx@qq .com { {終了} } { { "email.to"を定義する} } xxxxxxxx@163 .com { {終了} } { { "email.to.html"を定義します} } { {範囲.アラート} } =========開始===========< br > アラートプログラム: prometheus_alert < br > 警告レベル: { { .Labels .severity } }レベル< br > アラートタイプ: { { .Labels .alertname } } < br > 障害のあるホスト: { { .Labels .instance } } < br > アラート件名: { { .Annotations .summary } } < br > アラートの詳細: { { .Annotations .description } } < br > トリガー時刻: { { .StartsAt .Format "2019-08-04 16:58:15" } } < br > =========終了===========< br > { {終わり} } { {終わり} } 【ヒント】必ずご自身のメールアドレスに置き換えてください! ! !
アラートマネージャを再起動する systemctl アラートマネージャを再起動します 対応するアラーム情報はWeb上で確認できます。 後はアラームを待つだけです。
|