Zabbix 5.0 + Zabbix Agent 2でMySQLのPing監視ができない→解決

zabbix-mysql-ping
LINEで送る
Pocket

以前、Zabbix Serverを3系から5.0アップグレードした記事をご紹介した際、ついでにエージェントZabbix Agent2に入れ替えました。

前回はCentOSを7から8にアップグレードしましたので、しばらく古いバージョンのまま使っていたZabbixも、これを機に一気に5.0へアップグレードしたいと思います。と言っても、OSをアップグレードするより簡単にできますので、アップグレード後の問題点をメモしておきます。Zabbix 5.0 アップグレードZabbixのアップグレードはバージョン3→4でも、4→5でも基本的には同じですので、詳細は省略させていただき、参考サイトのリンクを貼っておきます。手順としては以下の通りです。サービスを停止するバックアップを取る(特にDBや設定ファ...

MySQLMariaDB)を入れているデータベースサーバZabbixエージェントも同じように入れ替えたところ、正常に稼働しているにも関わらず、何故かずっと「MySQL is down」の障害が常に表示されるようになりました。
これをアップグレード前と同じように正常な監視ができるように解決しました!

解決できなかったパターン

よく目にする情報では、エージェント側の/etc/zabbix/zabbix_agent2.d/配下にuserparameter_mysql.confというファイルを作成するといったもの。
書き方は違えど、大体こんな感じですね。

UserParameter=mysql.ping, mysqladmin --defaults-extra-file=/etc/zabbix/mysql/my.cnf ping | grep -c alive

ここに出てくる「my.cnf」とは、DB接続情報を記したファイルです。
内容はこのようなものです。

[client]
user=[ユーザー名]
password=[パスワード]

ちなみに、公式ので公開しているuserparameterの内容ではこんな感じ。

UserParameter=mysql.ping[*], mysqladmin -h"$1" -P"$2" ping

いずれもUserParametermysql.pingキーを指定し、mysqladminコマンドDBに対して疎通確認を行うもの。
しかし、上記のように設定してエージェントを再起動しても正常に起動せず、ログに以下のようなエラーが吐かれます。

ERROR: cannot initialize user parameters: cannot register user parameter "[userparameterの内容]": key already used

これをGoogle翻訳で直訳すると、

エラー:ユーザーパラメータを初期化できません:ユーザーパラメータ "[userparameterの内容]"を登録できません:キーはすでに使用されています

とのこと。
注目すべきは「キーはすでに使用されています」ってところです。
それでは本当にキーが設定されているか、Zabbix Serverの管理画面から、

  • [設定]→[テンプレート]→[Template App MySQL]→[アイテム]→[MySQL status]

を見てみましょう。
確かに、キーの項目に「mysql.ping」が存在しました。
これは想像ですが、Zabbix Serverの4系まではこのキーがなく別の方法で監視していて、5.0(またはZabbix Agent2)以降の場合は一旦アイテムを削除してuserparameterを追加するか、既存のアイテムを改造するかの2択だと思いました。


解決したパターン

ここからいよいよ本題です!
調べていくと、そもそも監視ができてない理由は、上記のmy.cnfのようなDBへの接続情報が無かったからだと思われます。
まずは、Zabbix公式サイトに掲載されている、こちらのページをご覧ください。


今回はZabbix Agent2を対象としていますので、[Available solutions]の[Template DB MySQL By Agent2]タブをクリックしてください。
それから下に進み、[Items collected]章にあるテーブルの1行目をご覧ください。
Name項目がアイテム名同じ、[MySQL: Status]となっています。
注目すべきは右側の[Key and additional info]の内容です。
[mysql.ping]の後ろにデフォルトのアイテム設定にはないマクロ3つあると思います。

名前 説明
{$MYSQL.DSN} tcp://host:port や unix:/path/to/socket/などのシステムデータソース名
{$MYSQL.USER} MySQLユーザー名
{$MYSQL.PASSWORD} MySQLユーザーパスワード

これは、同じページの[Zabbix configuration]章の[Macros used]の中に説明があります。
つまり、先程のアイテムキーをこの内容に書き換え、監視対象のホスト(ここではDBサーバ)のマクロに、この3つ追加してあげればと考えました。

[MySQL status]アイテムのキーを更新

上記と同様にアイテム設定に進み、

  • [設定]→[テンプレート]→[Template App MySQL]→[アイテム]→[MySQL status]

キーの項目を以下のように変更します。

mysql.ping["{$MYSQL.DSN}","{$MYSQL.USER}","{$MYSQL.PASSWORD}"]

一応「」してみて、監視できることを確認できれば「更新」ボタンを押して登録完了です。

ホストのマクロに値を登録

次に、上記のキーに設定した3つのマクロに、それぞれ値を登録してあげます。
対象ホストマクロの設定画面に進み、

  • [設定]→[ホスト]→[監視対象ホスト]→[マクロ]

追加」をクリックして、マクロと値、説明(任意)を3つ登録します。

マクロ 説明
{$MYSQL.DSN} [192.168.XXX.XXXやlocalhostなど] データソース名
{$MYSQL.USER} zabbixagent MySQLユーザー名
{$MYSQL.PASSWORD} ******** MySQLユーザーパスワード

以上を入力して「更新」ボタンを押下したら設定完了です。
これで、正常にMySQL監視ができたと思います。

余談

ちなみに、[Template App MySQL]テンプレートにもマクロを登録すると、ホストマクロの「継承したマクロとホストマクロ」にテンプレートから継承されたマクロが表示されます。
しかし、テンプレートマクロに登録した値は、ホストマクロでは変更することができません。
もし、同じテンプレートを使用して複数のDBサーバ(MySQL)を監視する場合に困りますので、ここはホストマクロに登録した方が無難だと思いましたとさ。

この記事が気に入ったら
いいね ! しよう

Twitter で
LINEで送る
Pocket


コメントを残す

Scroll Up