ラージビッグバナー(970x90)

Linux Windows

MySQL(Windows)のレプリケーション状態をZabbixで監視する

投稿日:

ビッグバナー(piglog)728px

ZabbixでMySQLのレプリケーション状態を監視したいというお話(機関車トーマスの冒頭風)。

MySQLはWindows Serverで動いている。LinuxならGoogle先生にきくとちょいちょい教えてくれるんだけど、Windows版はあまり教えてくれない。

ということで、備忘録のためにも記事を残します。

環境と概要

監視サーバは、CentOS7でZabbix3.0/3.4で動作を確認。

監視対象のサーバは、WindowsServer2016/MySQL5.7 が稼働している。

レプリケーション状態の監視と謳ってはおりますが、正確にはスレーブサーバのステータスを監視するというもの。もっというと show slave status コマンドの結果からレプリケーション状態を判定する、という監視内容です。

では設定手順です。

 

MySQLのユーザ作成

MySQLの show slave status のコマンド実行結果から値を取得するために、Zabbix-Agent が MySQLに接続するためのユーザを作成します。

以下は好きなように置き換えてください。

ZabbixAgentUser ZabbixAgentがMySQLに接続する際のMySQLユーザ名
MySQLPassword 上記ユーザのパスワード

次に、作成したMySQLユーザのパスワードファイルを用意します。このファイルはMySQLの設定ファイルです。

 

スレーブのレプリケーションステータスを取得するスクリプト

このスクリプトは Zabbix-Agent が先程作成したMySQLユーザでMySQLに接続して、show slave status コマンドをぶっ叩いて、ずらっと表示される一覧からアイテムキーで指定された項目に紐づくステータスを取得するためのスクリプトです(長い・・・汗)

Windows環境にgrepやらcutやらawkやらをインストールして値を取得するような記事もあったけど、せっかくPowerShellという便利なモノがあるので、Windowsデフォルト環境で頑張ってみる。以外といけるモノです。

cdでディレクトリ移動してから実行しているのは、Command not found.になってしまったから。パスは通っていることは確認済み。スクリプト内にパスを指定すればよかった?フルパスで指定してもだめだったから関係ないか。。。なぜでしょうか。わかる方いたらコメントいただけると喜んで顔がほころびます。

 

ユーザパラメーターファイルの作成

Zabbixで事前に定義されていないAgent監視をする際はこのパラメーターが必要になります。

Linuxの場合はyumでインストールすると最初から用意されているが、WindowsのZabbixAgentだと存在しないので自分で作成する。

構文は以下。

 

今回使うのは以下。

先程作成したPowershell のスクリプトを呼び出しますが、その前に chcp コマンドで文字コードをUTF8に変更しています。じゃないと、文字化けしてうまく実行されない。。。WindowsのデフォルトはSJIS。

最後の $1 はアイテムキーの引数(↑でいうと*の箇所)が指定される。「*」はZabbixのWeb画面のほうから設定するアイテムキーで指定するので、↑のパラメーターは1行で良い。

 

このパラメータファイルをZabbixAgentが読み込めるようにZabbixAgentの設定ファイルにインクルードの設定をしてやる。どこに書いてもいいけどIncludeのセクションがConfの真ん中あたりにありました。

 

ZabbixWeb画面での監視設定

まず、レプリケーション状態の確認コマンドを実行してみます。以下は正常の状態。

↑で表示された項目を監視することができます。例として「Slave_IO_Running」の監視設定をします。

アイテム

アイテムは以下のように指定します。

アイテム名(1) MySQL $1
アイテムキー(2) mysql.slave.status[Slave_IO_Running]
監視間隔(3) 1分(ご自由に)
データ型(4) 文字列
  1. アイテム名の $1はアイテムキーの引数が自動で入る(Zabbixのマクロ)
  2. アイテムキーの引数( [] の中)は show slave status コマンド結果の項目名を指定する。
  3. 監視間隔はご自由に設定してください。
  4. データ型は取得する値に応じて指定してください。おおよそ文字列か整数で良いかと。

トリガー

トリガー名(1) {HOST.NAME} Slave_IO_Running
条件式(2) {HostName:mysql.slave.status[Slave_IO_Running].regexp(Yes)}=0
  1. {HOSTNAME} はZabbixのマクロ機能によって自動でホスト名が表示されます。
  2. regexp(Yes) はステータスがYesではない場合に異常として検知します。

例えば、Slave_IO_State の値を監視する場合の条件式は、以下のように変更すれば良いです。

  • Slave_IO_RunningSlave_IO_State
  • Yes → Waiting for master to send event

まとめ

いかがでしたでしょうか。

MySQLを動かす場合は基本的にLinuxが多いと思いますが、Windows版でもLinuxと同じようにレプリケーション状態(スレーブサーバのステータス)を監視することができます。

Linuxサーバでも基本的に設定することは同じですので、参考にしていただければと思います。

以上です。

 

レクタングル (大)

レクタングル (大)

リンクユニット(レスポンシブ)

-Linux, Windows
-, ,

Copyright© ぴぐろぐ , 2018 All Rights Reserved.