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 は成功するがポートが利用できない問題を解決する方法

推薦する

適応分析と応答分析の違いを専門用語で詳しく説明

日々の開発経験と関連するオンライン情報に基づいて、アダプティブとレスポンシブの違いをシンプルでわかり...

Windows 8.1 で MySQL5.7 のルート パスワードを忘れた場合の解決方法

【背景】最近勉強中に非常に恥ずかしいことに遭遇しました。MySQL のパスワードを忘れてしまい、My...

HTMLページでよく使われるいくつかの小さなメソッド

<Head>タグに追加する<meta http-equiv="pragm...

CSS 背景画像を設定するための 6 つの興味深いヒント

background-image は、おそらくすべてのフロントエンド開発者がキャリアの中で少なくとも...

CSS で波の効果を作成するためのアイデア

以前、純粋な CSS を使用して波の効果を実現する方法をいくつか紹介しました。それらについては、次の...

Linuxシステムの入出力管理とvimの共通機能の詳細な説明

####システム内の入出力の管理#### 1. システムの入力と出力のリダイレクトを理解する入力リダ...

MySQLの再帰問題

MySQL自体は再帰構文をサポートしていませんが、自己接続を通じていくつかの単純な再帰を実現できます...

Pycharm2017はpython3.6とmysqlの接続を実現します

この記事では、pycharm2017でpython3.6とmysqlを接続する方法を参考までに紹介し...

幅の比率に応じて高さを変えるCSSを実装するいくつかの方法

[解決策1: パディングの実装]原理:要素の padding の値がパーセンテージの場合、このパーセ...

Linuxシステムのログの詳細な紹介

目次1. ログ関連サービス2. システム内の共通ログファイル1. ログ関連サービスCentOS 6....

ECMAScript のイテレータの詳細な説明

目次序文以前のバージョンイテレータパターンイテレータファクトリ関数イテレータプロトコル最後に序文多く...

crontab の実行結果を電子メールでユーザーに通知する方法

症状Centos7 ホストに crontab タスクを設定しましたが、時間が来るとメールを実行して「...

Gearman + MySQL による永続化操作例

この記事では、gearman+mysql メソッドを使用して永続化操作を実装します。ご参考までに、詳...

MYSQLの主キー制約とユニーク制約の違いについて簡単に説明します。

目次主キー制約ユニーク制約主キー制約PRIMARY KRY 主キーは一意です。テーブルには主キーを ...

HTML でよく使われるタグの概要 (必読)

コンテンツ詳細タグ: <h1>~<h6>タイトルタグ<pre>テ...