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

推薦する

Ubuntu 18.04 コマンドでタッチパッドを無効/有効にする

Ubuntu では、ショートカット キーでタッチパッドをオフにできない状況によく遭遇します。この問題...

Dockerはクロスプラットフォーム機能を実現するためにnet5プログラムを導入

展開環境: ここでは docker コンテナ、Linux システム、VmWare 仮想マシンが使用さ...

Mysql のいくつかの複雑な SQL ステートメント (重複行のクエリと削除)

1. 重複行を見つける blog_user_relation a から * を選択 WHERE (...

Docker で ElasticSearch と Kibana をインストールするためのサンプル コード

1. はじめにElasticsearchは現在非常に人気があり、多くの企業が利用しているため、esを...

mysql8.0.11クライアントがログインできない問題の解決方法

この記事では、mysql8.0.11クライアントがログインできない問題の解決策を紹介します。参考まで...

MySQLファイルストレージの詳細な説明

ファイルシステムとは何かInnoDB や MyIASM などのストレージ エンジンはテーブルをディス...

HTML でフォーム入力やその他のテキスト ボックスを読み取り専用にして編集不可にする方法

場合によっては、フォーム内のテキスト ボックスを読み取り専用にして、ユーザーがその中の情報を変更でき...

一般的でない js 演算演算子の概要

目次2. カンマ演算子3. JavaScript Null 結合演算子 (??) 4. JavaSc...

Nginx ベースのアクセス制御と接続制限の実装

序文Nginxの組み込みモジュールは、同時リクエスト数の制限とリクエストのソースの制限をサポートして...

JSフロントエンドモジュール化のいくつかの仕様についての簡単な説明

目次序文フロントエンドモジュール開発の価値厄介な名前の競合面倒なファイル依存関係モジュール化の利点C...

JavaScript での実行コンテキストと実行スタックの例の説明

JavaScript - 原則シリーズ日常の開発では、既存のプロジェクトを引き継ぐときは常に、まず他...

docker によってプルされたイメージがどこに保存されるかの詳細な説明

docker によってプルされたコマンドは、デフォルトでは /var/lib/docker/ フォル...

Navicat 接続 MySQL エラーの説明分析

目次環境仮想マシンバージョンMySQL バージョン事前準備MySQLの実行ステータスを確認するルート...

React 合成イベントの説明

目次入力ボックスをクリックして開始します拡張機能入力ボックスをクリックすると複数のイベントが発生しま...

動的なセカンダリメニューを実現するためのCSS

シンプルなセカンダリメニューを動的に実装するマウスを第 1 レベルのラベル上に置くと、マウスが小さな...