1. 環境の紹介
この記事の環境とこの記事で使用したデータベースは以下のとおりです。GreatSQL 8.0.32-24
$ cat /etc/system-release
Red Hat Enterprise Linux Server release 7.9 (Maipo)
$ uname -a
Linux gip 3.10.0-1160.el7.x86_64 #1 SMP Tue Aug 18 14:50:17 EDT 2020 x86_64 x86_64 x86_64 GNU/Linux
$ ldd --version
ldd (GNU libc) 2.17
前回の記事【写真と文章の組み合わせ | Prometheus+Grafana+GreatSQL パフォーマンス監視システム構築ガイド(前編)】では監視システムの構築方法を紹介しましたが、今回はGrafanaプラットフォームの使い方とアラーム機能について紹介します。アラートマネージャーモジュール。
2. Grafana メールアラート
ここでは電子メールアラートを取り上げ、例として QQ メールボックスを使用します。
1.電子メールサービスを有効にする
QQ メールボックスにログインした後、[設定] -> [アカウント] -> [POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV サービスを有効にする] をクリックします。
すでにオンにしています。オンになっていない場合は、オンにできます。次に、 をクリックし、生成授权码
認証コードを忘れずに保存してから、grafana 電子メール構成を変更します。
$ vim /usr/local/prometheus/grafana-10.1.1/conf/defaults.ini
/smtp
メール設定を見つけた領域を使用し、以下の例に示すように変更します。
Grafana サービスを再起動します
$ systemctl restart grafana-server.service
次に、Grafana Web ページにログインしhttp://172.17.137.104:3000/
、電子メール アラートを追加します。
に入力しName
、Addresses
情報が表示されるのを待って、Test
「テスト」をクリックします。
電子メールが受信され、テストが成功したことがわかります。
2. アラームルールを追加する
アラート ルールは Grafana に追加できます。たとえば、GreatSQL 接続を作成しました。この値を監視しますmysql_up
。値が 0 の場合、GreatSQL に接続できません。
編集パネルに入ると、アラーム オプションがあることがわかりAlert
、次にクリックします。Create alert rule from this panel
この時点で、アラーム ルール設定パネルに入ります。
まず、最初の部分で设置警报规则名称
あるアラーム ルール名の設定について説明します。
(前半)
2 番目の部分は外部に表示するデータで、Expressions
次のステップはアラーム条件を設定することです。
(後半)
最初の項目は最新のデータを表しますが、最大値を示すlast()
など、その他にもさまざまなオプションがありますが、一般的にはmax()
last()
2 番目の項目は、どのクエリから来たのかを示すものです。クエリは 1 つしかないため、選択します。A
3 番目の項目は、監視するトリガー値を指定します。トリガー判定は前のオプションです。図にあるものはこれより上を示します。他にも、以下、範囲外、範囲内IS ABOVE
などのいくつかのオプションがあります。値はありません。ここでは を選択します。合成式は、値が 1 未満の場合にトリガーされます。IS BELOW
IS OUTSIDE RANGE
IS WITHIN RANGE
HAS NO VALPUE
IS ABOVE
mysql_up
3 番目の部分では、ルールが保存されるフォルダーFolder
と評価するグループを作成します。Evaluation group
同じグループ内のルールは、同じ時間間隔内で順番に評価されます。
(第三部)
Pending period
アラームをトリガーした後の遅延を示します
4 番目のセクションは、コメントのSummary
概要、何が起こったのか理由の短い概要、Description
アラート ルールの機能の説明、およびRunbook URL
Runbook URL (アラート Runbook を保存するための Web ページ) を追加するために使用されます。
5 番目の部分では、通知を構成します。これは、カスタム ラベルを追加して通知のルーティング方法を変更するために使用されます。一致するポリシーが設定されていない場合、すべてのアラート インスタンスはデフォルト ポリシーによって処理されます。
右上隅をクリックしてルールを保存すると、設定したばかりのアラーム ルールがページに表示されます。
3. テストメールアラート
次に、GreatSQL の停止をシミュレートして、アラーム ルールがトリガーされ、電子メール アラームが送信されるかどうかを確認します。
$ systemctl stop greatsql
1 分に設定しているため、GreatSQL の接続ステータスが再度チェックされるまでに 1 分かかります。
下の図にあるように、GreatSQL に接続できないことが検出され、保留状態になっています。
設定された遅延時間が経過すると、Firing
電子メールが送信されたことが表示されます。
QQ メールボックスにアラームメールが受信されていることがわかります。
次に、GreatSQL を再度開始します
$ systemctl start greatsql
解決策が完了すると、解決済みのメールが届きます。1 resolved instances
3. Grafana の DingTalk アラート
以前の記事で、DingTalk Alert Prometheus+Grafana+DingTalk を使用してスタンドアロンの MySQL 監視およびアラーム システムをデプロイすることについて説明しましたが、使用される Alertmanager は Grafana ではなく Pumi のアラーム モジュールであるため、ここでは Grafana を使用して設定する方法を紹介します。 .DingTalk アラート。
ただし、2023 年 9 月 1 日以降、DingTalk は非内部グループと内部グループの両方のカスタム ロボットの作成をサポートしなくなります。内部アプリケーション ロボットを作成するには、 DingTalk 開発者バックエンドにログインし、開発者権限を申請する必要があります。具体的な方法はここでは紹介しませんので、必要であればDingTalkで詳しく紹介しています。
Prometheus+Grafana+DingTalk のスタンドアロン MySQL 監視および警報システムを展開する方法に従って、最初に DingTalk ロボットを作成し、次にGrafana にContact points
コンタクト ポイントを追加します。
次に、ドロップダウン ボックスName
に入力して、 DingTalk ロボットの URL を見つけます。Integration
DingDing
Webhook:
Message Type
カード モードとリンク モードの 2 つのオプションがあり、タイトル タイトルとメッセージ メッセージを選択し、[テスト] をクリックしてアラーム情報が送信できるかどうかをテストします。アラーム テストが送信されます。いいえ、ご質問がある場合は、下の青いボタンをクリックしてください。Save contact point
DingTalk アラートを選択したい場合は、オプションでNotification policies
選択できますEdit
DingTalk アラート方式に変更しDefault contact point
、変更後クリックします。Update default policy
次に、テストのために、GreatSQL シミュレーションをオフにして、アラーム メッセージが送信されるかどうかを確認します。
$ systemctl stop greatsql
問題ありません。アラーム メッセージは正常に受信されました
4. Alertmanager の電子メール アラート
前回の記事でインストールした Alertmanager を覚えていますか? 実はこれにもアラーム機能があります。Prometheus には、AlertManager であるアラーム モジュールが含まれています。Alertmanager は、主に Prometheus から送信されたアラーム情報を受信するために使用されます。さまざまなアラーム通知チャネルをサポートしており、アラーム情報の重複排除、ノイズ除去、グループ化などが簡単に行えます。前回の記事では、いくつかのルールも追加しました。忘れた場合は、前の記事をもう一度読んでください。Alertmanager は、DingTalk に警告するためにも使用できます。Prometheus にスタンドアロンの MySQL 監視およびアラーム システムをデプロイするための概要があります。 +Grafana+DingTalk.こちらです Alertmanager のメールアラートのご紹介
Prometheus がアラームをトリガーするプロセス
1. アラートマネージャーの設定
AlertManager のデフォルトの設定ファイルは でalertmanager.yml
、パスは です./usr/local/prometheus/alertmanager-0.26.0.linux-amd64/alertmanager.yml
次に、アラーム情報を通知するために電子メールを使用するように設定しましょう. ここでは例として QQ メールボックスを取り上げます. 設定は次のとおりです:
global:
resolve_timeout: 5m
smtp_from: '填写邮箱@qq.com'
smtp_smarthost: 'smtp.qq.com:465'
smtp_auth_username: '填写邮箱@qq.com'
smtp_auth_password: '填写QQ邮箱授权码'
smtp_require_tls: false
smtp_hello: 'qq.com'
route:
group_by: ['alertname']
group_wait: 5s
group_interval: 5s
repeat_interval: 5m
receiver: 'email'
receivers:
- name: 'email'
email_configs:
- to: '填写邮箱@qq.com'
send_resolved: true
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
yml にはインデントの要件があります。よく確認してください。
主要なパラメータの詳細な紹介:
グローバル
グローバル構成。主に電子メール、Webhook などのアラーム メソッドを構成します。
-
resolve_timeout
: タイムアウト、デフォルトは 5 分 -
smtp_auth_password
: QQ メールボックス認証コードと非 QQ アカウントのログイン パスワードを覚えておいてください。 -
smtp_require_tls
: tlsを使用するかどうかは、環境に応じてオンまたはオフを選択できます。エラーが報告された場合はemail.loginAuth failed: 530 Must issue a STARTTLS command first
、true に設定する必要があります。starttls failed: x509: certificate signed by unknown authority
tls が有効でエラーが報告された場合、tls 検証をスキップするには、email_configs で insecure_skip_verify: true を構成する必要があることに注意することが重要です。
ルート
アラートの設定に使用される配布戦略
group_by
:グループ集約に使用します。アラーム通知はラベルごとにグループ化されます。同じラベルまたは同じアラーム名(alertname)を持つアラーム通知はグループに集約され、1 つの通知として送信されます。集約を完全に無効にしたい場合は、group_by: [...] を設定できます。group_wait
: 新しいアラーム グループが作成されると、最初の通知を送信する前に「group_wait」待機する必要があります。これにより、同じラベルを持つより多くのアラームを送信して待機する前に集約し、最終的に 1 つの通知に結合して送信できるようになります。group_interval
: 最初のアラーム通知が送信され、新しい評価サイクルでグループの最新のアラームが受信された後、グループに対してトリガーされた新しいアラームの送信を開始する前に、「group_interval」時間待機する必要があります。 as、group チャネルに相当します。repeat_interval
: アラーム通知が正常に送信された後、問題が回復していない場合は、間隔を再度繰り返す必要があります。receiver
: 以下の設定に対応して、アラーム メッセージ受信者を設定します。たとえば、一般的に使用される電子メール、wechat、slack、webhook、その他のメッセージ通知方法です。
受信機
アラーム情報受信者情報の設定
to
:アラートメールを受信send_resolved
:障害復旧後の通知
禁止ルール
別のセット (ソース) に一致するアラートがある場合に、あるセット (ターゲット) に一致するアラートを無効にする抑制ルールの設定
設定が完了したら再起動するだけですsystemctl restart alertmanager.service
起動に失敗した場合は、自分でトラブルシューティングを行うことができ
journalctl -u alertmanager.service -f
、インデントの問題がないかどうかを注意深く確認してください。
次に、AlertManager のアラート ルールを設定しますが、これについては前回の記事でも説明し、ルールを格納するための rules フォルダーも作成しましたので、前回の記事の方法に従うだけです。
2. テストメールアラート
http://172.17.137.104:9090/rules
次に、 Rules of Prometheusにログインして、いくつかのアラームが追加されているかどうかを確認します。
ここでは、Prometheus Alert アラーム ステータスについて説明します。これには、 、 、 の 3 つの状態がありInactive
ますPending
。Firing
Inactive
: 非アクティブなステータス。監視されているが、アラームはまだトリガーされていないことを示します。Pending
: このアラームをトリガーする必要があることを示します。アラームはグループ化、抑制/抑制、またはサイレント/サイレントに設定できるため、検証を待機し、すべての検証に合格すると起動状態に移行します。Firing
: アラートを AlertManager に送信すると、設定に従ってすべての受信者にアラートが送信されます。アラームがクリアされると、ステータスは非アクティブに変更され、サイクルが継続します。
次に、GreatSQL を閉じてmysql_up = 0
アラーム ルールをトリガーし、アラーム電子メールが送信されるかどうかを確認します。
$ systemctl stop greatsql
サービスを停止すると、アラート ページが绿色 Inactive
ステータスからステータスに変わり黄色 Pending
、ステータスに変わるまで待機し続けることで红色 Firing
、アラーム情報が AlertManager に送信されます。このとき、AlertManager は設定ルールに従って受信者に電子メール アラートを送信します。
黄色保留中
レッドファイアリング
その後、警告メールが届きました
上の図からわかるように、デフォルトの電子メール テンプレートのタイトルと本文には、以前に構成されたラベルと注釈の情報が含まれており、サービスが通常に戻り警報が解除されるまで、5 分ごとに自動的に送信されます。アラームが送信されます メッセージを閉じます。
アラームがトリガーされた後、設定によって決定される5 分ごとにアラーム電子メールが自動的に送信されます (サービスが正常に復元されない場合) alertmanager.yml
。route -> repeat_interval: 5m
3.AlertManagerのメール内容を変更する
この手順は必須ではありませんが、メールの内容をより洗練された直感的なものにしたい場合は、この手順を参照してください。
すべての主要な情報が含まれていますが、電子メール形式のコンテンツはよりエレガントで直感的になる可能性があり、AlertManager はカスタム電子メール テンプレート設定の変更もサポートしています。
という名前の新しいテンプレート ファイルを作成する必要があります。email.tmpl
$ vim /usr/local/prometheus/alertmanager-0.26.0.linux-amd64/email.tmp
次のように書きます
{{ define "email.from" }}填入邮箱@qq.com{{ end }}
{{ define "email.to" }}填入邮箱@qq.com{{ end }}
{{ define "email.to.html" }}
{{- if gt (len .Alerts.Firing) 0 -}}{{ range .Alerts }}
<h2>@告警通知</h2>
告警程序: prometheus_alert <br>
告警级别: {{ .Labels.severity }} 级 <br>
告警类型: {{ .Labels.alertname }} <br>
故障主机: {{ .Labels.instance }} <br>
告警主题: {{ .Annotations.summary }} <br>
告警详情: {{ .Annotations.description }} <br>
触发时间: {{ .StartsAt.Local.Format "2006-01-02 15:04:05" }} <br>
{{ end }}{{ end -}}
{{- if gt (len .Alerts.Resolved) 0 -}}{{ range .Alerts }}
<h2>@告警恢复</h2>
告警程序: prometheus_alert <br>
故障主机: {{ .Labels.instance }}<br>
故障主题: {{ .Annotations.summary }}<br>
告警详情: {{ .Annotations.description }}<br>
告警时间: {{ .StartsAt.Local.Format "2006-01-02 15:04:05" }}<br>
恢复时间: {{ .EndsAt.Local.Format "2006-01-02 15:04:05" }}<br>
{{ end }}{{ end -}}
{{- end }}
上記のテンプレート ファイルでは、ファイル内で直接参照できる3 つのテンプレート変数email.from
、email.to
、およびを構成します。email.to.html
alertmanager.yml
email.to.html
送信するメールの内容はHtml形式とText形式に対応していますが、美しく表示するためにHtml形式で情報をシンプルに表示しています。以下は{{ range .Alerts }}
、ループ内で一致するアラート情報を取得するために使用されるループ構文です。以下のアラート情報は、いくつかのコア値が表示用に抽出されることを除いて、上記のデフォルトの電子メール表示情報と同じです。alertmanager.yml
次に、次のようにファイル構成を追加する必要がありますtemplates
。
$ vim /usr/local/prometheus/alertmanager-0.26.0.linux-amd64/alertmanager.yml
global:
resolve_timeout: 5m
smtp_from: '填入邮箱@qq.com'
smtp_smarthost: 'smtp.qq.com:465'
smtp_auth_username: '填入邮箱@qq.com'
smtp_auth_password: '填写QQ邮箱授权码'
smtp_require_tls: false
smtp_hello: 'qq.com'
templates:
- '/usr/local/prometheus/alertmanager-0.26.0.linux-amd64/email.tmp'
route:
group_by: ['alertname']
group_wait: 5s
group_interval: 5s
repeat_interval: 5m
receiver: 'email'
receivers:
- name: 'email'
email_configs:
- to: '{{ template "email.to" . }}'
html: '{{ template "email.to.html" . }}'
send_resolved: true
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
次に、GreatSQL の停止をシミュレートし、アラーム ルールをトリガーし、アラーム電子メールが送信されるかどうかを確認します。
問題ありません。警告メールは正常に受信しました。
さて、Prometheus+Grafana+GreatSQL パフォーマンス監視システム構築ガイドはこれで終わりです。始めましょう~
GreatSQL をお楽しみください :)
GreatSQL について
GreatSQL は、金融レベルのアプリケーションに適した国産の独立したオープンソース データベースです。高性能、高信頼性、高い使いやすさ、高セキュリティなどの多くのコア機能を備えており、MySQL サーバーや Percona Server のオプションの代替として使用できます。オンライン実稼働環境で使用され、完全に無料で、MySQL または Percona Server と互換性があります。
関連リンク: GreatSQL コミュニティ Gitee GitHub Bilibili
GreatSQL コミュニティ:
コミュニティの報酬に関する提案とフィードバック: https://greatsql.cn/thread-54-1-1.html
コミュニティ ブログ賞を受賞した投稿の詳細: https://greatsql.cn/thread-100-1-1.html
(記事について質問がある場合、または独自の洞察がある場合は、公式コミュニティ Web サイトにアクセスして質問したり共有したりできます~)
技術交流グループ:
WeChat & QQ グループ:
QQグループ: 533341697
WeChat グループ: GreatSQL コミュニティ アシスタント (WeChat ID: wanlidbc
) を友達として追加し、コミュニティ アシスタントがあなたをグループに追加するまで待ちます。