PrometheusはGrafanaディスプレイを使用してMySQLを監視します

PrometheusはGrafanaディスプレイを使用してMySQLを監視します

Prometheusはエクスポーターを介してMySQLを監視し、Grafanaチャートで表示します。

概要:

Prometheus は、SoundCloud によって開発されたオープンソースの監視およびアラーム システムであり、Go 言語に基づく時系列データベースが付属しています。 Prometheus は、設定されたタスク (ジョブ) に従って、指定されたターゲット (ターゲット) のメトリックを定期的にプル方式で取得します。

Prometheus エコシステムには複数のコンポーネントが含まれています。

  • Prometheus サーバー:構成に従って、データ収集、サービス検出、およびデータ保存を完了します。
  • プッシュ ゲートウェイ:いくつかのプッシュ シナリオを処理するために提供されるプラグイン。監視データは最初にプッシュ ゲートウェイにプッシュされ、その後 Prometheus サーバーによって収集およびプルされます。短命で、Prometheus がプルする前に消えてしまう可能性のあるジョブに使用されます (Prometheus サーバーの収集間隔中に Push Gateway のデータが変更されない場合、Prometheus サーバーはタイムスタンプのみが異なる同じデータを 2 回収集します)
  • エクスポーター (プローブ): Prometheus のデータ収集コンポーネントの一種を表す一般的な用語です。ターゲットからデータを収集し、それを Prometheus でサポートされている形式に変換する役割を担います。従来のデータ収集コンポーネントとは異なり、中央サーバーにデータを送信せず、中央サーバーがデータをアクティブにキャプチャするのを待機します。
  • Alertmanager: Prometheus サーバーは、主に PromQL ベースのアラーム ルールに従ってデータを分析する役割を担います。PromQL で定義されたルールが満たされると、アラームが生成され、Alertmanager に送信されます。Alertmanager は、設定に従ってアラーム情報を処理し、送信します。一般的な受信方法には、電子メール、Webhook などがあります。 Alertmanager には、グループ化、抑制、および消音という 3 つの方法でアラーム情報を処理できます。

それではデモンストレーションを始めましょう

1. テストマシン

プロメテウスサーバー 192.168.56.140
MySQL ホスト01 192.168.56.103
MySQLホスト02 192.168.56.104

2. mysql host01 を設定する

使用される MySQL バージョン:

8.0.25 MySQL コミュニティサーバー

3. 輸出者アカウントを作成する

mysqld_exporter は、mysql のステータス テーブルとステータス コマンドを照会してデータを取得します。したがって、まずMySQLで対応するアカウントを作成する必要があります。

'Xiaopang*803' によって識別されるユーザー 'exporter'@'%' を作成します。
'exporter'@'%' に *.* 上のレプリケーション クライアント、プロセスを許可します。
performance_schema.* に対して 'exporter'@'%' の SELECT 権限を付与します。
権限をフラッシュします。

4. mysqld_exporterをダウンロードしてインストールする

https://github.com/prometheus/mysqld_exporter/releases/download/v0.13.0/mysqld_exporter-0.13.0.linux-amd64.tar.gz をダウンロードしてください
tar xvzf mysqld_exporter-0.13.0.linux-amd64.tar.gz -C /usr/local/ を実行します。
cd /usr/local && ln -s mysqld_exporter-0.13.0.linux-amd64/mysqld_exporter

4.1 ファイルを編集してパスワードを入力する

次のファイルを編集し、エクスポーターのユーザー名とパスワードを入力します(上記のMySQLで作成したアカウントとパスワードと同じ)。

[root@host01 mysqld_exporter]# vi .my.cnf
[クライアント]
ユーザー=輸出者
パスワード=Xiaopang*803

4.2 スタートアップサービスファイルの追加

[root@host01 ~]# vi /etc/systemd/system/mysqld_exporter.service

[ユニット]
説明=mysqld_exporter
後=ネットワーク.ターゲット

[サービス]
タイプ=シンプル
ExecStart=/usr/local/mysqld_exporter/mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter/.my.cnf
再起動=失敗時

[インストール]
WantedBy=マルチユーザー.ターゲット

4.3 mysqld_exporterの起動

サービス mysqld_exporter の開始

4.4 テスト検証

mysqld_exporter はデフォルトでポート 9104 を使用します。ブラウザに次のアドレスを入力できます。データ出力があるか確認します。

http://192.168.56.103:9104/metricsと入力してください

出力情報は次のようになります。

# HELP go_gc_duration_seconds ガベージ コレクション サイクルの一時停止期間の概要。
# TYPE go_gc_duration_seconds サマリー
go_gc_duration_seconds{quantile="0"} 2.5395e-05
go_gc_duration_seconds{quantile="0.25"} 3.5372e-05
go_gc_duration_seconds{quantile="0.5"} 3.9393e-05
go_gc_duration_seconds{quantile="0.75"} 5.5068e-05
go_gc_duration_seconds{quantile="1"} 0.062537624
go_gc_duration_seconds_sum 0.453204071
go_gc_duration_seconds_count 2131
# HELP go_goroutines 現在存在する goroutine の数。
# TYPE go_goroutines ゲージ

5. node_exporterをダウンロードしてインストールする

mysqld_exporter のみをインストールすると OS 関連のデータを監視できないため、OS 監視には node_exporter をインストールする必要があります。

https://github.com/prometheus/node_exporter/releases/download/v1.2.2/node_exporter-1.2.2.linux-amd64.tar.gz をダウンロードしてください

tar xvzf node_exporter-1.2.2.linux-amd64.tar.gz -C /usr/local/ を実行します。
cd /usr/local && ln -s node_exporter-1.2.2.linux-amd64/ node_exporter

5.1 スタートアップサービスファイルの追加

[root@host01 ~]# vi /etc/systemd/system/node_exporter.service
[ユニット]
説明=node_export
ドキュメント=https://github.com/prometheus/node_exporter
後=ネットワーク.ターゲット

[サービス]
タイプ=シンプル
ユーザー=root
グループ=ルート
ExecStart=/usr/local/node_exporter/node_exporter
再起動=失敗時
[インストール]
WantedBy=マルチユーザー.ターゲット

5.2 node_exporterを起動する

サービス node_exporter の開始

5.3 テスト検証

デフォルトでは、node_exporter はポート 9100 を使用します。ブラウザに次のアドレスを入力できます。データ出力があるか確認します。

http://192.168.56.103:9100/metricsと入力してください

出力は次のようになります。

# HELP go_gc_duration_seconds ガベージ コレクション サイクルの一時停止期間の概要。
# TYPE go_gc_duration_seconds サマリー
go_gc_duration_seconds{quantile="0"} 2.5934e-05
go_gc_duration_seconds{quantile="0.25"} 4.0072e-05
go_gc_duration_seconds{quantile="0.5"} 4.7616e-05
go_gc_duration_seconds{quantile="0.75"} 6.726e-05
go_gc_duration_seconds{quantile="1"} 0.228887598
go_gc_duration_seconds_sum 0.550266258
go_gc_duration_seconds_count 793
# HELP go_goroutines 現在存在する goroutine の数。
# TYPE go_goroutines ゲージ

6. prometheus+grafanaをインストールする

使用バージョン:

プロメテウス 2.28

グラファナ 6.7.6

6.1 インストール

パッケージをダウンロードする

https://github.com/prometheus/prometheus/releases/download/v2.28.1/prometheus-2.28.1.linux-amd64.tar.gz をダウンロードしてください

6.2 解凍してソフトリンクを追加する

tar xvzf prometheus-2.28.1.linux-amd64.tar.gz -C /usr/local/ を実行します。
/usr/local/ をコピーします
ln -s プロメテウス-2.28.1.linux-amd64/プロメテウス

6.3 スタートアップサービスの追加

[root@prometheus-server prometheus]# vi /etc/systemd/system/prometheus.service
[ユニット]
説明=プロメテウス監視システム
ドキュメント=Prometheus 監視システム

[サービス]
タイプ=シンプル
ユーザー=root
グループ=ルート
ExecStart=/usr/local/prometheus/prometheus \
--config.file=/usr/local/prometheus/prometheus.yml \
--storage.tsdb.path="データ/" \
--storage.tsdb.retention.time=15d \
--web.max-connections=512 \
--web.listen-address=:9090

6.4 MySQL監視の追加

vi /usr/local/prometheus/prometheus.yml

scrape_configs:
# ジョブ名は、この設定から取得されたすべての時系列にラベル `job=<job_name>` として追加されます。

  - ジョブ名: 'mysql'
    静的設定:
      - ターゲット: ['192.168.56.103:9104']
        ラベル:
          インスタンス: mysql_instance1
  - ジョブ名: 'linux'
    静的設定:
      - ターゲット: ['192.168.56.103:9100']
        ラベル:
          インスタンス: mysql_instance1


6.5 プロメテウスを起動する

サービスプロメテウス開始

6.7 プロメテウスを見る

Prometheusのデフォルトの監視ポート

http://192.168.56.140:9090/

ステータス -> ターゲットをクリックします。すべてが正常であれば、mysql/linuxの状態が次のようにUPであることがわかります。

7. Grafanaをダウンロードしてインストールする

https://dl.grafana.com/oss/release/grafana-6.7.6-1.x86_64.rpm を実行します。

rpm -ivh grafana-6.7.6-1.x86_64.rpm

7.1 Grafanaへのアクセス

Prometheusの表示機能は非常に弱いです。グラフィックスをより良く表示するには、Grafanaが必要です。

http://192.168.56.140:3000/ と入力します

データソースをproemtheusのHTTPリンクとして設定します(HTTPSではなくHTTPであることに注意してください)

7.2 MySQL監視テンプレートのインポート

Grafana データの表示はテンプレートを通じて実現されます。 Grafana の Web サイトには、自分で調べることができる共有テンプレートが多数あります。

このテンプレートは次のリンクからダウンロードしました。

https://grafana.com/api/dashboards/9623/revisions/4/download

バージョン不一致の問題

バージョン不一致により、完了後に一部の項目が正常に表示されません。使用されているバージョンは grafana5.0 で、私のバージョンは 6.x です。

しかし、この小さな問題は私にとっては問題ではなく、自分で修正しました。正常に表示できました。以下は修正したJSONファイルです。

josn_jb51.rar

修正プロセス

多くの場合、多くのものはまだ使用できる状態になっていません。ニーズに応じていくつかの変更を加える必要があります。

それを変更する方法を理解するのに約 30 分かかりました。その後、対応するプロジェクトを修正して完了するのにさらに約 2 時間かかりました。

変更プロセス中に発生する問題には、主に 2 つの種類があります。

1) Grafana 5.x および 6.x コンポーネントの名前が変更されました。

6.0 と 5.0 のコンポーネント名が異なるため、「合計 RAM のバッファー プール サイズ」を正しく表示できません。

これを実行するには、pmm-singlestat-panel -> singlestat を置き換えます。

2) エクスポーターによって抽出された属性の名前が変更されました

node_exporter-1.2.2 を使用していますが、OS について抽出されたプロパティが JSON ファイルで定義されたプロパティ名と一致しません。

方法は、「http://192.168.56.103:9100/metrics」で新しい属性名を直接検索し、JSON ファイル内の古い属性名を置き換えることです。

例えば:

node_memory_MemTotal->node_memory_MemTotal_bytes を置き換えます
node_memory_MemTotal->node_memory_MemTotal_bytes を置き換えます

輸入

いくつか修正を加えたので、インポート時にJSONの内容を直接入力できるようになりました。

[ロード] をクリックし、データ ソースとして prometheus を選択します。

7.3 sysbenchストレステストツールを起動する

sysbench ツールを有効にする目的は、ストレス テストを通じてデータの変更を示すグラフを生成することです (そうでない場合、トラフィックがなければデータは移動しません)。

ここでは、リモートでテストしています (別のマシン host02 で sysbench を実行しています)。目的は、ネットワーク トラフィック データを生成することです。

[root@host02 ~]# sysbench /usr/share/sysbench/oltp_read_write.lua --time=9180 --mysql-host=host01 --mysql-port=3306 --mysql-user=dbusr --mysql-password=Xiaopang*803 --mysql-db=db1 --table-size=50000 --tables=15 --threads=15 --report-interval=10 実行
sysbench 1.0.20 (バンドルされた LuaJIT 2.1.0-beta2 を使用)

次のオプションでテストを実行します。
スレッド数: 15
10秒ごとに中間結果を報告します
現在の時刻から乱数ジェネレータを初期化しています


ワーカー スレッドを初期化しています...

スレッドが始まりました!

[ 10 秒 ] スレッド: 15 tps: 112.68 qps: 2268.92 (r/w/o: 1589.76/452.30/226.85) lat (ms,95%): 277.21 エラー/秒: 0.00 偵察/秒: 0.00
[ 20 秒 ] スレッド: 15 tps: 113.91 qps: 2282.81 (r/w/o: 1598.47/456.52/227.81) lat (ms,95%): 211.60 エラー/秒: 0.00 偵察/秒: 0.00
[ 30 秒 ] スレッド: 15 tps: 109.80 qps: 2192.95 (r/w/o: 1536.66/436.69/219.59) lat (ms,95%): 240.02 エラー/秒: 0.00 偵察/秒: 0.00
[ 40 秒 ] スレッド: 15 tps: 112.70 qps: 2265.36 (r/w/o: 1583.17/456.79/225.40) lat (ms,95%): 193.38 エラー/秒: 0.00 偵察/秒: 0.00
[ 50 秒 ] thds: 15 tps: 101.00 qps: 2013.42 (r/w/o: 1413.32/398.10/202.00) lat (ms,95%): 325.98 err/s: 0.00 reconn/s: 0.00

7.4 Grafanaをチェックして完了後の結果を確認する

ここに掲載されているのは一部の図のみです。

これで、Grafana を使用した Prometheus MySQL モニタリングに関するこの記事は終了です。MySQL Grafana に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • PrometheusとGrafanaを使用したMySQLサーバーのパフォーマンス監視の詳細な説明
  • Grafanaのインストールと使用に関する詳細なチュートリアル
  • Grafana を使用して Docker コンテナの監視チャートを表示し、電子メールアラートルールを設定する (図)
  • Prometheus+Grafana を使用した Springboot アプリケーションの監視に関するチュートリアルの詳細な説明
  • Grafana+Prometheus を使用して MySQL サービスのパフォーマンスを監視する
  • docker ベースで Prometheus+Grafana を構築する手順の詳細説明
  • Influx+Grafana のカスタム Python データ収集の概要といくつかの落とし穴
  • SpringBoot+Prometheus+Grafanaでアプリケーション監視とアラームを実装するための詳細な手順
  • Linux で Grafana をインストールし、InfluxDB モニタリングを追加する方法
  • Prometheus+Grafanaによるnginxの監視方法を分析する
  • Ubuntu で Grafana を使用して Docker を監視する方法
  • Docker を使用した JMeter+Grafana+Influxdb 監視プラットフォームの構築に関する詳細なチュートリアル
  • Docker 環境で JMeter+Grafana+influxdb ビジュアル パフォーマンス監視プラットフォームを構築するチュートリアル
  • dockerを使用してGrafana+Prometheus構成をデプロイする
  • ELKとGrafanaが共同でnginxログを分析するための視覚的なモニタリングを開発
  • Grafana のパスワードを忘れても大丈夫です。Grafana の管理者パスワードをリセットする 2 つの方法

<<:  VUEプロジェクトでXSS攻撃に遭遇した実体験

>>:  CSS でよく発生する問題の整理 (ロゴのハッキング/コンテナの固定/画像の垂直方向の中央揃え)

推薦する

Docker に fastdfs イメージをインストールする際の注意事項

1. Docker環境を準備する2. fastdfsイメージを検索する 3. イメージをプルするdo...

MySQL 8.0.23 のレプリケーション アーキテクチャにおけるスレーブ ノードの自動フェイルオーバー

私はしばらく MGR と連絡を取り合ってきました。MySQL 8.0.23 の登場により、MySQL...

MySQL kill コマンドの使用ガイド

KILL [接続 | クエリ] processlist_id MySQL では、各接続は個別のスレ...

JavaScript のガベージコレクションの仕組みの詳細な説明

目次ガベージコレクション (GC) はなぜ必要なのでしょうか?ガベージコレクションとは廃棄物の発生ガ...

Vue3デスクトップアプリケーションの構築方法

この記事では、Vite を使用して Vue 3 デスクトップ プロジェクトを開発する方法について説明...

HTML で色を表すには、6 桁の 16 進コード、RGB、またはキーワードを使用します。

HTML で色を表す方法は 3 つありますが、最もよく使われるのは 6 桁の 16 進コード表現です...

MySQL 結合クエリの原則の知識ポイント

MySQL 結合クエリ1. 基本概念2 つのテーブルの各行をペアで水平に接続して、すべての行の結果を...

レスポンシブデザインについての簡単な説明

1. レスポンシブ デザインとは何ですか?レスポンシブデザインとは、ウェブサイトの開発プロセス中に、...

MySQLでよく使われる4つのストレージエンジンについて簡単に説明します。

よく使われる4つのMySQLエンジンの紹介(1):MyISAMストレージエンジン:トランザクションや...

さまざまなマウスの形状を表現する方法

<a href = "http://" style = "cur...

画像をクリックして切り替えるJavaScript

クリックして画像を切り替えることは、日常生活で非常によく行われることです。今日の練習は、画像を切り替...

今日は、珍しいけれど役に立つJSテクニックをいくつか紹介します

1. 戻るボタンhistory.back() を使用してブラウザの「戻る」ボタンを作成します。 &l...

Vue ドラッグ アンド ドロップのシンプルな実装

この記事では、主に次のような Vue ドラッグ アンド ドロップの簡単な実装を紹介します。レンダリン...

js の関数の長さはどれくらいですか?

目次序文なぜいくらですか?パラメータの数デフォルトパラメータ残りのパラメータ要約する序文今日は関数の...

ページ リファクタリング スキル - Javascript、CSS

JS、CSSについてCS: ...上部のスタイルシートCSS式を避ける外部JS、CSSの使用JSと...