[クラウドネイティブ] 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の上級バージョンについてお話しましょう

推薦する

Amazon EMR の紹介

Amazon EMR は、複数の動的にスケーラブルな Amazon EC2 インスタンスにわたって大...

家具電子商取引の返品率がピークに達し、電子商取引業界はまず自ら改善する必要がある

2012年は電子商取引とオンラインショッピングの年だったと言えるでしょう。Taobao、Tmallな...

アリババのダブル11の取引量は100億元を超え、総取引量は昨年の2倍を超える可能性がある

新浪科技は11月10日夜、毎年恒例の電子商取引「双十一」が本日午前0時に正式にスタートしたと報じた。...

#クリスマス# スピンサーバー: 月額 289 ドル、米国サンノゼ/ダラス、2*e5-2683v4/512gDDR4/8tSSD/10Gbps 帯域幅

今年のクリスマスに向けて、spinserversはダラスとサンノゼのデータセンターの専用サーバーの特...

2019 年のインターネットにおける 6 つの新しいトレンド!

2018年で一番悲しかったことは、子供の頃に尊敬していた多くの巨匠たちと別れを告げたことでした。ホー...

ウェブサイトのコンテンツタイトルを最適化するのは得意ですか?

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています魚が水から...

エッジからクラウドへの進化における4つの課題

世界中の組織は、毎日生成される前例のない量のデータによってますます困難に直面しています。モノのインタ...

ユーザーエクスペリエンスは、eコマースウェブサイトのブランド成長の基盤です

2011年は電子商取引が爆発的に成長した年でした。10年間の発展を経て、この新興産業はついに巨額の資...

分散Redisディープアドベンチャー-Sentinel

1 つのマスターと 1 つのスレーブ、または 1 つのマスターと複数のスレーブの構造では、マスター ...

Prometheus で Kubernetes ジョブを監視する際の誤検知の問題を解決する

昨日、Prometheus コースの指導グループのクラスメートが、Prometheus 監視ジョブ ...

父の日にマーケティングの機会を巧みに活用して愛情を伝える方法

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますブランドが...

クラウドコンピューティング技術の登場により、医療機関は業務をクラウドに移行するのでしょうか?

インターネットの発展に伴い、社会のあらゆる分野がインターネットにますます依存するようになり、ネットワ...

SEOテクノロジーの最適化の成功または失敗は詳細によって決まります

SEO 技術は言うのは簡単ですが、実行するのは非常に困難です。特に、特定の SEO 技術を使用する場...

データベースマーケティングの力

現実世界とネット世界は現代社会の基本的な形態です。インターネットの急速な発展に伴い、ネットユーザーの...