PrometheusとGrafanaを使用したMySQLサーバーのパフォーマンス監視の詳細な説明

PrometheusとGrafanaを使用したMySQLサーバーのパフォーマンス監視の詳細な説明

概要

Prometheus は、HTTP プロトコルを介してリモート マシンからデータを収集し、ローカルの時系列データベースに保存するオープン ソースのサービス監視システムです。シンプルな Web インターフェイス、強力なクエリ言語、HTTP インターフェイスなどを提供します。 Prometheus は、リモート マシンにインストールされたエクスポーターを介して監視データを収集します。ここでは、次の 2 つのエクスポーターが使用されます。

  1. node_exporter – マシンシステムデータ用
  2. mysqld_exporter – MySQL サーバーデータ用

Grafana は、時系列データの視覚化によく使用される、オープンソースで機能豊富なデータ視覚化プラットフォームです。次のデータ ソースのサポートが組み込まれています。

サポートされるデータ ソースはプラグインを通じて拡張できます。

アーキテクチャ図

以下はこの展開のアーキテクチャ図です。

Prometheusをインストールして実行する

1. モニターにPrometheusをインストールする

/opt/prometheusにインストールする

https://github.com/prometheus/prometheus/releases/download/v1.5.2/prometheus-1.5.2.linux-amd64.tar.gz をダウンロードしてください
$ tar zxvf prometheus-1.5.2.linux-amd64.tar.gz
$ mv prometheus-1.5.2.linux-amd64 /opt/prometheus

2. インストールディレクトリにある設定ファイルprometheus.ymlを編集します。

vim /opt/prometheus/prometheus.yml
# 私のグローバル設定
グローバル:
 scrape_interval: 15s # スクレイプ間隔を 15 秒ごとに設定します。デフォルトは 1 分ごとです。
 evaluation_interval: 15s # 15 秒ごとにルールを評価します。デフォルトは 1 分ごとです。
 # scrape_timeout はグローバルデフォルト (10 秒) に設定されています。
 # 通信時に、これらのラベルを任意の時系列またはアラートに添付します。
 # 外部システム (フェデレーション、リモート ストレージ、Alertmanager)。
 外部ラベル:
 モニター: 'codelab-monitor'
# ルールを一度読み込み、グローバル 'evaluation_interval' に従って定期的に評価します。
ルールファイル:
 # - "最初のルール"
 # - "second.rules"
# スクレイピングするエンドポイントを 1 つだけ含むスクレイピング設定:
# ここでは Prometheus そのもの。
scrape_configs:
 # ジョブ名は、この設定から取得されたすべての時系列にラベル `job=<job_name>` として追加されます。
 - ジョブ名: 'プロメテウス'
 # metrics_path のデフォルトは '/metrics' です
 # スキームのデフォルトは 'http' です。
 静的設定:
 - ターゲット: ['localhost:9090']
 # 以下は追加された部分です - job_name: linux
 静的設定:
 - ターゲット: ['172.30.251.214:9100']
 ラベル:
 インスタンス: db1
 - ジョブ名: mysql
 静的設定:
 - ターゲット: ['172.30.251.214:9104']
 ラベル:
 インスタンス: db1

そのうち、172.30.251.214 は MySQL の IP アドレスであり、ポートはエクスポータの対応するリスニング ポートです。

3. Prometheusを起動する

[loya@centos6 プロメテウス]$ ./プロメテウス
INFO[0000] Prometheusを起動しています (バージョン=1.5.2、ブランチ=master、リビジョン=bd1182d29f462c39544f94cc822830e1c64cf55b) ソース=main.go:75
INFO[0000] ビルドコンテキスト (go=go1.7.5、user=root@a8af9200f95d、date=20170210-14:41:22) source=main.go:76
INFO[0000] 設定ファイル prometheus.yml を読み込んでいます source=main.go:248
INFO[0000] シリーズマップとヘッドチャンクを読み込んでいます... source=storage.go:373
INFO[0000] 0 シリーズがロードされました。ソース = storage.go:378
INFO[0000] ターゲット マネージャーを起動しています... source=targetmanager.go:61
INFO[0000] :9090でリッスンしています ソース=web.go:259

Prometheus には、http://monitor_host:9090 からアクセスできる組み込みの Web インターフェースがあります。

[ステータス] -> [ターゲット] ページには、構成した 2 つのターゲットが表示され、そのステータスは [ダウン] になっています。

4. 次に、監視対象マシンにエクスポーターをインストールして実行する必要があります。

エクスポーターをダウンロードして解凍します:

$ mkdir /opt/prometheus/prometheus_exporters
$ cd /opt/prometheus/prometheus_exporters
$ wget https://github.com/prometheus/node_exporter/releases/download/v0.14.0-rc.1/node_exporter-0.14.0-rc.1.linux-amd64.tar.gz
https://github.com/prometheus/mysqld_exporter/releases/download/v0.9.0/mysqld_exporter-0.9.0.linux-amd64.tar.gz をダウンロードしてください
$ tar zxvf node_exporter-0.14.0-rc.1.linux-amd64.tar.gz
$ tar zxvf mysqld_exporter-0.9.0.linux-amd64.tar.gz
# それぞれの実行ファイルを /opt/prometheus/prometheus_exporters に移動します
$ ll /opt/prometheus/prometheus_exporters
合計 24464
-rwxr-xr-x 1 ルート ルート 12182376 2月23日 19:01 mysqld_exporter
-rwxr-xr-x 1 ルート ルート 12862209 2月23日 19:01 node_exporter

node_exporterを実行する

$ cd /opt/prometheus/prometheus_exporters
$ ./node_exporter 
INFO[0000] node_exporter を起動しています (バージョン=0.14.0-rc.1、ブランチ=master、リビジョン=5a07f4173d97fa0dd307db5bd3c2e6da26a4b16e) ソース="node_exporter.go:136"
INFO[0000] ビルドコンテキスト (go=go1.7.4、user=root@ed143c8f2fcd、date=20170116-16:00:03) source="node_exporter.go:137"
INFO[0000] ディレクトリが指定されていません。--collector.textfile.directory source="textfile.go:57" を参照してください。
INFO[0000] 有効なコレクター: source="node_exporter.go:156"
INFO[0000] - エントロピーソース="node_exporter.go:158"
情報[0000] - loadavg ソース="node_exporter.go:158"
情報[0000] - 統計ソース="node_exporter.go:158"
情報[0000] - ディスク統計ソース="node_exporter.go:158"
INFO[0000] - テキストファイルソース="node_exporter.go:158"
情報[0000] - vmstat ソース="node_exporter.go:158"
INFO[0000] - meminfo ソース="node_exporter.go:158"
INFO[0000] - ファイルfdソース="node_exporter.go:158"
INFO[0000] - ファイルシステムソース="node_exporter.go:158"
情報[0000] - mdadm ソース="node_exporter.go:158"
情報[0000] - netdevソース="node_exporter.go:158"
情報[0000] - sockstat ソース="node_exporter.go:158"
INFO[0000] - 時間ソース="node_exporter.go:158"
情報[0000] - zfsソース="node_exporter.go:158"
情報[0000] - edac ソース="node_exporter.go:158"
情報[0000] - hwmonソース="node_exporter.go:158"
情報[0000] - netstatソース="node_exporter.go:158"
情報[0000] - uname ソース="node_exporter.go:158"
情報[0000] - conntrackソース="node_exporter.go:158"
INFO[0000] :9100でリッスンしています source="node_exporter.go:176"

mysqld_exporter は MySQL に接続する必要があるため、MySQL 権限が必要です。そのためのユーザーを作成し、必要な権限を付与します。

mysql> 'abc123' によって識別される 'prom'@'localhost' に、*.* のレプリケーション クライアント、プロセスを許可します。
mysql> performance_schema.* に対して 'prom'@'localhost' の SELECT 権限を付与します。

.my.cnf ファイルを作成し、mysqld_exporter を実行します。

$ cd /opt/prometheus/prometheus_exporters
$
$ cat << EOF > .my.cnf
[クライアント]
ユーザー=プロム
パスワード=abc123
終了
$
$ ./mysqld_exporter -config.my-cnf=".my.cnf"
INFO[0000] mysqld_exporter を起動しています (バージョン=0.9.0、ブランチ=master、リビジョン=8400af20ccdbf6b5e0faa2c925c56c48cd78d70b) ソース=mysqld_exporter.go:432
INFO[0000] ビルドコンテキスト (go=go1.6.3、user=root@2c131c66ca20、date=20160926-18:28:09) source=mysqld_exporter.go:433
INFO[0000] :9104 でリッスンしています ソース=mysqld_exporter.go:451

Prometheus Web インターフェースの Status->Targets に戻ると、2 つのターゲットのステータスが UP になっていることがわかります。

Grafanaをインストールして実行する

インストール:

Grafana のインストールに関する公式ドキュメントは非常に明確なので、ここでは詳細には触れません。

構成:

設定ファイル /etc/grafana/grafana.ini を編集し、dashboards.json セクションの 2 つのパラメータの値を変更します。

[ダッシュボード]
有効 = true
パス = /var/lib/grafana/dashboards

Prometheus ダッシュボードをインポートします。

$ git クローン https://github.com/percona/grafana-dashboards.git
$ cp -r grafana-dashboards/ダッシュボード /var/lib/grafana

起動する:

$ /etc/init.d/grafana-serverを起動します

http://monitor_host:3000 経由で Grafana Web インターフェースにアクセスします (デフォルトのユーザー名/パスワードは admin/admin です)

ログイン後、「データ ソース」ページからデータ ソースを追加します。

次に、さまざまなダッシュボード (左上) と期間 (右上) を選択してグラフをレンダリングできます。

システム概要:

MySQL の概要:

要約する

上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に少しでもお役に立てれば幸いです。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM をご愛顧いただき、ありがとうございます。

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

<<:  Javascriptジェネレータの紹介と使用

>>:  Linux で ping は成功するがポートが利用できない問題を解決する方法

推薦する

Hyper-V インストール CentOS 8 の問題の分析

CentOS 8 がリリースされてから随分経ちました。Linux 仮想マシンをいじっている人間として...

MySQL 8.0.12 の詳細なインストールおよびアンインストール チュートリアル

1. MySQL 8.0.12 バージョンのインストール手順。 1. ダウンロードhttps://d...

MySQL 内部結合の使用例 (必読)

文法規則 列名を選択 テーブル名1から INNER JOIN テーブル名2 ON テーブル名1.列名...

MySQL のインデックス障害の一般的なシナリオと回避方法

序文これまでにも、一部の SQL ステートメントを不適切に使用すると MySQL インデックスが失敗...

要素複数フォーム検証の実装

プロジェクトでは、フォーム テストが頻繁に発生します。単一のフォーム テストについては、詳細な紹介が...

VMware ESXi6.7 の簡単なセットアップ(画像とテキスト付き)

1. VMware vSphere の概要VMware vSphere は、業界をリードする最も信...

Linuxはjoin -a1を使用して2つのファイルを結合します

次の2つのファイルを結合するには、それらを結合して1.txtに結合します。 # 1.txt ジェリー...

webpack-dev-server のコア概念とケースの詳細な説明

webpack-dev-server コアコンセプトWebpack の ContentBase と ...

Vue3 ベースのフルスクリーン ドラッグ アップロード コンポーネント

この記事は主に、みんなで共有できるVue3ベースのフルスクリーンドラッグアップロードコンポーネントを...

MySQL データ型 DECIMAL の詳細な分析

序文:金額の保存など、小数点数を保存し、精度要件がある場合、通常は DECIMAL フィールド タイ...

Docker を使用してフロントエンド アプリケーションをデプロイする方法

Dockerはますます普及しています。環境を軽量かつ柔軟に分離し、容量を拡張し、運用保守管理を容易に...

Dreamweaver で Zen コーディングを使用する方法

前回の記事「Zen Coding: HTML/CSS コードを素早く記述する方法」を公開した後、一部...

HTML で dl(dt,dd)、ul(li)、ol(li) を使用する方法

HTML <dl> タグ#定義と使用法<dl> タグは定義リストを定義します...

CSS変換ページめくりアニメーションレコードの実装

ページめくりの問題のシナリオBとCは同じページ(表と裏)にありますページをめくって A をカバーした...