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

推薦する

Vue でコミュニケーションを実装する 8 つの方法

目次1. コンポーネント通信1. Props 親コンポーネント ---> 子コンポーネント通信...

MySQLデータベースについて学びましょう

目次1. データベースとは何ですか? 2. データベースの分類は? 3. データベースとデータ構造の...

ウェブサイトの速度を上げる6つの方法

1. .js ライブラリ ファイルのアドレスを Google CDN アドレスに置き換えます。 (G...

JavaScript でサウンド効果付きの花火効果を実装する

コードを書くのに 30 分かかりましたが、この HTML5 Canvas New Year Fire...

VScode リモート SSH リモート編集とデバッグコード

Visual Studio Code の最新の Insider バージョンには、コードのリモート デ...

React.cloneElement の使い方の詳しい説明

目次cloneElementの役割使用シナリオ新しい小道具を追加するプロップを変更するイベントカスタ...

n 個のコンテナ要素による無限スクロールの実装コード

シナリオ最大 10000 要素のリストを正しくレンダリングする方法。無限ドロップダウン読み込みテクノ...

MySQLでビューを作成する方法

基本的な構文CREATE VIEW ステートメントを使用してビューを作成できます。構文の形式は次のと...

ウェブページのコピー防止機能の実装方法(クラッキング手法付き)

ソース ファイルを右クリックすると、次のコードが見つかります。 1. CSSを使用してFirefox...

Linux でハードディスクのサイズを確認し、ハードディスクをマウントする方法

Linux には、マウントされたハードディスクとマウントされていないハードディスクの 2 種類のハー...

JavaScriptの構文とコード構造に関する深い理解

目次概要機能性と読みやすさ空白括弧セミコロンインデント身元大文字と小文字を区別予約キーワード概要すべ...

Linux運用保守ツールSupervisor(プロセス管理ツール)のインストールと使用

1. はじめにSupervisor は Python で開発された汎用プロセス管理プログラムです。通...

React 純粋関数コンポーネント setState がページ更新を更新しない問題の解決方法

目次問題の説明:原因分析:解決:補足: Reactでは、フックが使用されている場合、useState...

ハイパーリンクを表示して開く方法

<br />インターネット上の無数の情報は基本的に HTML ドキュメントで構成されてお...

HTML img タグの alt 属性と title 属性の使い方の紹介

ブラウザベンダーが標準を曲げて、ルールに従わないことをすると、問題や少なくとも混乱が生じる可能性があ...