[クラウドネイティブ] Prometheus カスタムアラートルール

[クラウドネイティブ] Prometheus カスタムアラートルール

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. アラーム実装プロセス

アラートと通知を設定するための主な手順は次のとおりです。

  1. Prometheus でアラート ルールを構成します。
  2. AlertManager に関連付けるように Prometheus を構成します。
  3. 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上で確認できます。

後はアラームを待つだけです。


<<:  プライベート5Gとエッジコンピューティング:製造業に最適な組み合わせ

>>:  Docker-Composeの上級バージョンについてお話しましょう

推薦する

iOS プロモーションおよび運用のマスターから、iOS チャネルの活用方法など、突然の啓蒙をいただきました。

質問1:iOSチャネルをどこで利用すればよいかわかりません。Androidユーザーはオンラインになっ...

エッジコンピューティングの5つの柱についての簡単な説明

エッジコンピューティングはなぜ必要なのでしょうか?それは何ですか?利点は何ですか?エッジ コンピュー...

企業サイトのSEOデータ分析のやり方

国平先生のSEO理論は、データから始めて科学的かつ制御可能なSEOを行うことです。この概念はSEOを...

#BlackFriday# コンタクト: 「データセンター追加料金」無料、「セットアップ料金」無料、NVMe 50% オフ、VPS、VDS、専用サーバーに適用

Contaboはブラックフライデーのプロモーション情報を公開しました:(1)米国データセンターの場合...

Google I/O 2018: Google Instant Games がすべての Android 開発者に公開

米国現地時間5月8日午前10時(北京時間5月9日)、3日間にわたる2018 Google I/O 開...

デジタル変革、優れた IT コンサルティング サービスを提供するにはどうすればよいでしょうか?中義科技は言いたいことがある

近年、新世代情報技術の継続的な発展と応用により、さまざまな業界が大きく変化しており、ますます多くの企...

「クラウドネイティブ」時代の効率的な開発のためのワンストップチェックイン:マイクロサービスやデータベースもこんな使い方ができることが判明

今週末、古都金陵は輝かしい文化で満ち溢れます。人気のDevRun開発者サロンがひっそりとスタートしま...

123systems - ホスティングレビュー限定オファー 20% オフ?

VPS ベンダーの 123systems は、ホスティング モデムの限定 20% 割引コード「zhu...

あなたはどんな蜘蛛の罠にかかったことがありますか?

企業サイトを運営したことがあるウェブマスターは、企業サイトは一般的に製品の宣伝に使用されるため、企業...

フレンドリーリンクを作成する際に注意すべき点を詳細に分析

ウェブサイトの最適化は、オンサイト最適化とオフサイト最適化に分けられます。オフサイト最適化は、外部リ...

あなたがキーワードを言うと、私は「はい」と言います。

SEO 最適化に関しては、キーワードについて言及することは避けられません。 SEO 最適化に関しては...

K8S で Kafka を実行するのは適切でしょうか?どのような落とし穴に遭遇するでしょうか?

Kubernetes は、ステートレス ワークロードを実行するためにゼロから設計されました。これらの...

なぜ新しいストレージとコンピューティングの分離が主流になるのでしょうか?

「世界は長い分裂の期間の後、最終的には統一され、長い統一の期間の後、最終的には分裂する」という古い格...

海外のドメイン名が大量に盗まれ、販売されている。ドメイン名のセキュリティは真剣に取り組む必要がある

国内のデータセキュリティ問題が注目される中、海外のドメイン名市場で大量のドメイン名が盗まれたことが2...