Zabbixを使用してMySQLを監視する方法

Zabbixを使用してMySQLを監視する方法

Zabbix 導入ドキュメント

zabbix導入後

zabbixエージェントの操作

1. MySQLを監視するには、まずMySQLをインストールする必要があります

[root@localhost ~]# yum -y mariadb mariadb-serverをインストールします

2. MySQL監視項目のスクリプトを書く

まずzabbix-agentでユーザーを認証してください。そうしないと、テスト中に権限が与えられなくなります。

[root@localhost ~]# mysql
MariaDB モニターへようこそ。コマンドは ; または \g で終わります。
MariaDB接続IDは33です
サーバーバージョン: 5.5.65-MariaDB MariaDB サーバー

Copyright (c) 2000、2018、Oracle、MariaDB Corporation Ab およびその他。

ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。

MariaDB [(なし)]> '123' で識別される 'check'@'localhost' に *.* 上のすべての権限を許可します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

MySQLモニタリングの主な内容は

  • マスターとスレーブのステータス(最初に以下のマスターとスレーブを設定する必要があります)
  • トラフィックの検出と送信、追加、削除、変更、チェックなどの通常の操作の受け入れ
  • データベースまたはテーブルのサイズ
  • tps (1 秒あたりに処理されるクエリ数) qps (1 秒あたりに処理されるリクエスト数)
[root@localhost ~]# mkdir /etc/zabbix/scipts
[root@localhost ~]# cd /etc/zabbix/scipts/
[root@localhost スクリプト]# vim mysql.sh 
#!/bin/bash
mysql="mysql -ucheck -p123"
ケース$1 
 #mysql マスタースレーブステータス (slave_status)
  $mysql -e "スレーブステータスを表示\G" |grep "はい" |wc -l
 ;; 
 # mysql トラフィックは Bytes_received を受け入れます)
  mysqladmin 拡張ステータス |grep "Bytes_received" |awk '{print $4}'
 ;;
 # mysql トラフィック (送信バイト数)
  mysqladmin 拡張ステータス |grep "Bytes_sent" |awk '{print $4}'
 ;;
 #MySQL の通常操作に Com_insert が追加されました)
  mysqladmin 拡張ステータス |grep -w "Com_insert" |awk '{print $4}'
 ;;
 #Com_delete (mysql ルーチン操作の削除)
  mysqladmin 拡張ステータス |grep -w "Com_delete" |awk '{print $4}'
 ;;
 # mysql ルーチン操作を Com_update に変更します)
  mysqladmin 拡張ステータス |grep -w "Com_update" |awk '{print $4}'
		;;
 # mysql ルーチン操作チェック Com_select)
  mysqladmin 拡張ステータス |grep -w "Com_select" |awk '{print $4}'
 ;;
 #mysql tps
 tps)
  mysqladmin ステータス |awk '{print $6/$2}'
 ;;
 #mysql qps=(ロールバック+コミット)/アップタイム
 qps)
  ロールバック=$(mysqladmin 拡張ステータス |grep -w "Com_rollback" |awk '{print $4}')
  コミット=$(mysqladmin 拡張ステータス |grep -w "Com_commit" |awk '{print $4}')
  稼働時間=$(mysqladmin ステータス |awk '{print $2}')
  カウント=$[$ロールバック+$コミット]
  echo "$count $uptime" > /tmp/a.txt
  cat /tmp/a.txt |awk '{print $1/$2}'
 ;;
 # データベースのサイズ MySQL データベースを例にとります (db)
  $mysql -e "table_schema='mysql' の information_schema.tables から sum(data_length) を選択" |sed -n '2p'
 ;;
 # テーブルサイズ MySQL のユーザーテーブルを例に挙げます (tb)
  $mysql -e "table_schema='mysql' かつ table_name='user' である information_schema.tables から sum(data_length) を選択" |sed -n '2p'
 ;;
エサック

3. キー値をカスタマイズし、zabbix-agentを再起動する

[root@localhost スクリプト]# cd /etc/zabbix/zabbix_agentd.d/
[root@localhost zabbix_agentd.d]# vim mysql.conf
ユーザーパラメータ=mysql[*],/etc/zabbix/scipts/mysql.sh $1
[root@localhost zabbix_agentd.d]# systemctl zabbix-agentを再起動します

4. まずzabbix-serverテストにzabbix-getをインストールします

[root@localhost ~]# yum -y zabbix-getをインストールします

[root@localhost ~]# zabbix_get -s 192.168.27.137 -k mysql[slave_status]
2
[root@localhost ~]# zabbix_get -s 192.168.27.137 -k mysql[受信バイト数]
850970
[root@localhost ~]# zabbix_get -s 192.168.27.137 -k mysql[送信バイト数]
224906
[root@localhost ~]# zabbix_get -s 192.168.27.137 -k mysql[Com_insert]
3001
[root@localhost ~]# zabbix_get -s 192.168.27.137 -k mysql[Com_delete]
135
[root@localhost ~]# zabbix_get -s 192.168.27.137 -k mysql[Com_update]
128
[root@localhost ~]# zabbix_get -s 192.168.27.137 -k mysql[Com_select]
19
[root@localhost ~]# zabbix_get -s 192.168.27.137 -k mysql[qps]
0.864842
[root@localhost ~]# zabbix_get -s 192.168.27.137 -k mysql[tps]
1.92936
[root@localhost ~]# zabbix_get -s 192.168.27.137 -k mysql[db]
555118
[root@localhost ~]# zabbix_get -s 192.168.27.137 -k mysql[tb]
420

エラー処理

[root@localhost ~]# zabbix_get -s 192.168.27.137 -k mysql[slave_status]
sh: /etc/zabbix/scipts/mysql.sh: 権限が不十分です。スクリプト実行権限が不十分です。zabbix-agent に移動して権限を追加してください [root@localhost zabbix_agentd.d]# chmod +x /etc/zabbix/scipts/mysql.sh 

[root@localhost ~]# zabbix_get -s 192.168.27.137 -k mysql[slave_status]
1 行目のエラー 1227 (42000): アクセスが拒否されました。この操作には、SUPER、REPLICATION CLIENT 権限 (少なくとも 1 つ) が必要です。

ユーザーにzabbix-agentを表示する権限がないため、スクリプトに[root@localhost ~]# mysqlを追加する権限をユーザーに付与します。
MariaDB モニターへようこそ。コマンドは ; または \g で終わります。
MariaDB接続IDは33です
サーバーバージョン: 5.5.65-MariaDB MariaDB サーバー

Copyright (c) 2000、2018、Oracle、MariaDB Corporation Ab およびその他。

ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。

MariaDB [(なし)]> '123' で識別される 'check'@'localhost' に *.* 上のすべての権限を許可します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

[root@localhost スクリプト]# vim mysql.sh 
#!/bin/bash
mysql="mysql -ucheck -p123"
ケース$1 
 #mysql マスタースレーブステータス (slave_status)
  $mysql -e "スレーブステータスを表示\G" |grep "はい" |wc -l
 ;;

Zabbixページに監視項目とグラフを追加する

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

MySQLトラフィックデータを表示する

ここに画像の説明を挿入
ここに画像の説明を挿入

MySQL QPS TPS を表示

ここに画像の説明を挿入

MySQL マスタースレーブステータスの表示

ここに画像の説明を挿入

MySQLの一般的な操作を表示

ここに画像の説明を挿入

MySQLデータベーステーブルのサイズを表示する

ここに画像の説明を挿入

mysql マスタースレーブ構成

1. Zabbix サーバー

[root@localhost ~]# vim /etc/my.cnf 

ここに画像の説明を挿入

[root@localhost ~]# systemctl mariadbを再起動します
[root@localhost ~]# mysql
MariaDB モニターへようこそ。コマンドは ; または \g で終わります。
MariaDB接続IDは7です
サーバーバージョン: 5.5.65-MariaDB MariaDB サーバー

Copyright (c) 2000、2018、Oracle、MariaDB Corporation Ab およびその他。

ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。

MariaDB [(なし)]> マスターステータスを表示します。
+------------------+----------+--------------+------------------+
| ファイル | 位置 | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 175170 | | |
+------------------+----------+--------------+------------------+
セット内の 1 行 (0.00 秒)
MariaDB [(なし)]> '123' で識別される 'tom'@'%' に *.* のすべての権限を許可します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

MariaDB [(なし)]> 権限をフラッシュします。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

2. Zabbixエージェント

[root@localhost ~]# vim /etc/my.cnf 

ここに画像の説明を挿入

[root@localhost ~]# systemctl mariadbを再起動します
[root@localhost ~]# mysql
MariaDB モニターへようこそ。コマンドは ; または \g で終わります。
MariaDB接続IDは2です
サーバーバージョン: 5.5.65-MariaDB MariaDB サーバー

Copyright (c) 2000、2018、Oracle、MariaDB Corporation Ab およびその他。

ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。

MariaDB [(なし)]> マスターを
 -> マスターホスト='192.168.27.136',
 -> マスターユーザー='tom'、
 -> マスターパスワード='123',
 -> マスターログファイル='mysql-bin.000001',
 -> マスターログ位置 = 175170;
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

MariaDB [(なし)]> スレーブを起動します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

MariaDB [(なし)]> スレーブステータスを表示します \G;
************************** 1. 行 ****************************
  Slave_IO_State: マスターがイベントを送信するのを待機中
   マスターホスト: 192.168.27.136
   マスターユーザー: tom
   マスターポート: 3306
  接続再試行: 60
  マスターログファイル:mysql-bin.000001
  読み取りマスターログ位置: 175170
  リレーログファイル:mysql-relay.000004
  リレーログ位置: 529
 リレーマスターログファイル: mysql-bin.000001
  スレーブIO実行中: はい
  スレーブSQL実行中: いいえ
  レプリケート_Do_DB: 
  レプリケート_無視_DB: 
  テーブルの複製: 
 無視テーブルを複製: 
 Replicate_Wild_Do_Table: 
 Replicate_Wild_Ignore_Table: 
   最終エラー番号: 1146
   Last_Error: クエリでエラー「テーブル 'zabbix.history_uint' が存在しません」が発生しました。デフォルト データベース: 'zabbix'。クエリ: 'insert into history_uint (itemid,clock,ns,value) values ​​(23287,1602301747,810415730,1)'
   スキップカウンタ: 0
  実行マスターログ位置: 173424
  リレーログスペース: 2565
  Until_Condition: なし
  ログファイルまで: 
  ログ位置まで: 0
  マスターSSL許可: いいえ
  マスターSSLCAファイル: 
  マスターSSLCAパス: 
  マスターSSL証明書: 
  マスターSSL暗号: 
  マスターSSLキー: 
 マスターより遅れている秒数: NULL
Master_SSL_Verify_Server_Cert: いいえ
  最終IOエラー番号: 0
  最後のIOエラー: 
  最終SQLエラー番号: 1146
  Last_SQL_Error: クエリでエラー「テーブル 'zabbix.history_uint' が存在しません」が発生しました。デフォルト データベース: 'zabbix'。クエリ: 'insert into history_uint (itemid,clock,ns,value) values ​​(23287,1602301747,810415730,1)'
 Replicate_Ignore_Server_Ids: 
  マスターサーバーID: 1
セット内の 1 行 (0.00 秒)

エラー: クエリが指定されていません

エラー処理

[root@localhost ~]# vim /etc/my.cnf 

ここに画像の説明を挿入

[root@localhost ~]# systemctl mariadbを再起動します
[root@localhost ~]# mysql
MariaDB モニターへようこそ。コマンドは ; または \g で終わります。
MariaDB接続IDは4です
サーバーバージョン: 5.5.65-MariaDB MariaDB サーバー

Copyright (c) 2000、2018、Oracle、MariaDB Corporation Ab およびその他。

ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。

MariaDB [(なし)]> スレーブステータスを表示します \G;
************************** 1. 行 ****************************
  Slave_IO_State: マスターがイベントを送信するのを待機中
   マスターホスト: 192.168.27.136
   マスターユーザー: tom
   マスターポート: 3306
  接続再試行: 60
  マスターログファイル:mysql-bin.000001
  読み取りマスターログ位置: 199126
  リレーログファイル:mysql-relay.000006
  リレーログ位置: 3950
 リレーマスターログファイル: mysql-bin.000001
  スレーブIO実行中: はい
  スレーブSQL実行中: はい
  レプリケート_Do_DB: 
  レプリケート_無視_DB: 
  テーブルの複製: 
 無視テーブルを複製: 
 Replicate_Wild_Do_Table: 
 Replicate_Wild_Ignore_Table: 
   最終エラー番号: 0
   最終エラー: 
   スキップカウンタ: 0
  実行マスターログポジション: 199126
  リレーログスペース: 4240
  Until_Condition: なし
  ログファイルまで: 
  ログ位置まで: 0
  マスターSSL許可: いいえ
  マスターSSLCAファイル: 
  マスターSSLCAパス: 
  マスターSSL証明書: 
  マスターSSL暗号: 
  マスターSSLキー: 
 マスターより遅れている秒数: 0
Master_SSL_Verify_Server_Cert: いいえ
  最終IOエラー番号: 0
  最後のIOエラー: 
  最終SQLエラー番号: 0
  最後のSQLエラー: 
 Replicate_Ignore_Server_Ids: 
  マスターサーバーID: 1
セット内の 1 行 (0.00 秒)

Zabbix で MySQL を監視する方法についての記事はこれで終わりです。Zabbix で MySQL を監視する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Zabbixは複数のmysqlプロセスの監視を実装します
  • Zabbix を使用して Nginx/Tomcat/MySQL を監視する方法の詳細なチュートリアル
  • Zabbix が MySQL のマスター/スレーブ状態を監視する方法の詳細な説明
  • Zabbix の Percona プラグインを使用して MySQL を監視する方法
  • Zabbix 2.4.5 には MySQL 監視設定チュートリアルが付属しています
  • MySQLを監視するためのZabbixのインストールと設定に関する基本的なチュートリアル
  • Zabbix は MySQL インスタンス メソッドを監視します

<<:  Vueドロップダウンメニューのコンポーネント開発の詳細説明

>>:  MySQL 8.0 のインデックス スキップ スキャン

推薦する

美しい FLASH ウェブサイト デザイン例 50 選

Flashにより、デザイナーや開発者はブラウザ上でリッチなコンテンツを提供し、動き、インタラクティブ...

CSS スティッキーフッタークラシックレイアウトの実装

スティッキーフッターレイアウトとは何ですか?一般的な Web ページのレイアウトは、通常、ヘッダー部...

Vue3+Vantコンポーネントを使用してアプリの検索履歴機能を実装する(サンプルコード)

現在、新しいアプリプロジェクトを開発中です。私にとっても初めてのアプリ開発です。チームで調査と検討を...

Nginx の場所に関する一般的なルールの優先順位の問題

目次1. 場所/マッチング2. 場所 = / 一致Locaitonには、完全一致(=)、プレフィック...

DockerでRedashの中国語版をデプロイしてインストールする方法の詳細な説明

1. インストール手順 Linux 環境でのローカル インストールと比較すると、Docker のイン...

MySQL でよく使われる型変換関数の概要 (推奨)

1. Concat関数。よく使用される接続文字列: concat 関数。たとえば、SQLクエリ条件...

element-plus でオンデマンドインポートとグローバルインポートを実装する方法

目次オンデマンドインポート:グローバルインポートオンデマンドインポート:プラグインをインストールする...

開発者がデータベースロックを詳細に理解する必要がある理由

1.ロックしますか? 1.1 ロックとは何ですか?ロックの本当の意味は、鍵またはコードで開くことがで...

Windows で Graphviz をインストールして開始する方法のチュートリアル

ダウンロードとインストール環境変数の設定インストール環境変数の設定確認基本的な描画の紹介グラフディグ...

IE6 で PNG-24 形式の画像を正常に表示させる 2 つの方法

方法1: </html>の後に次のコードを追加してください。コードをコピーコードは次のと...

SQL文のANDとORの実行順序で発生する問題

質問昨日、データベースSQLを書いているときに問題が発生しました。問題の根本は、SQL ステートメン...

DockerはMysql、.Net6、Sqlserverなどのコンテナをデプロイします

目次CentOS 8にDockerをインストールする1. yumを更新する2. containerd...

JS はデータ URL をどのように理解するのでしょうか?

目次概要データ URL の使用を開始するデータURL構文複数言語の文字列のBase64エンコードとデ...

MySQL テーブル削除操作の実装 (delete、truncate、drop の違い)

この記事では主に、MySQL でテーブルを削除する 3 つの操作、つまり delete ステートメン...