Zabbix　MMySQL監視の手順（MariaDB）

#MySQL監視テンプレートの設定方法

公式テンプレートの中に、MySQL監視用のテンプレートが入っています。稼動状態を監視するために必要なデータを取得できるのですが、監視ホストにテンプレートを適用しただけではデータを取得できません。

今回は、MySQL監視テンプレートの設定方法を紹介します。
#Zabbixサーバ側の設定

Zabbixをインストールすると Template DB MySQL テンプレートが最初から入っています。

しかしZabbixサーバのMySQLの状態を確認するために、MySQLテンプレートを指定しても、以下のようにエラーになってしまいます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635477/b8098436-ecdd-a1a6-2d50-c494afe35eb0.png)

MySQLのアイテムは、Zabbixエージェントで取得しますが、実際の処理はUser parameterに記載されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635477/673d3a65-14d9-b0cd-770f-ec2e1ed5d17a.png)

アイテムの説明欄に、User parameterに関する記載があります。本来は、テンプレート自体の説明欄に設定方法を記述しておくべきだと思うのですが、V2.x以前はテンプレートに説明欄がなく、アイテムやトリガーにしかなかったので、このような説明しかないのかもしれません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635477/673c474e-6647-a9b9-10d8-4a8eef2d2f9f.png)


##  Zabbix監視用アカウントの作成
MySQLをZabbixで監視する為に、MySQLにZabbix用アカウントを作成します。アカウント名は何でもよいですが、分かり易いように「zabbix」というアカウントを作成します。

```
$ mysql -u root -p
mysql> grant process on *.* to 'zabbix'@'localhost' identified by 'keichan0322';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> select host,user from mysql.user where user='zabbix';
+-----------+--------+
| host      | user   |
+-----------+--------+
| localhost | zabbix |
+-----------+--------+
1 row in set (0.00 sec)

mysql> exit
```
次に、作成したアカウントを、Zabbixエージェントが利用できるように「–defaults-extra-file」で指定するファイルに記載します。このファイルは新規作成で良く、ファイル名は任意で良いみたいですが、MySQLの設定ファイルだと分かり易いように以下では「my.cnf」という名称にしておきます。
```
$ sudo mkdir /etc/zabbix/mysql
$ sudo vi /etc/zabbix/mysql/my.cnf
```
パスワードの確認
```
[root@monitor ~]# grep ^DBPassword  /etc/zabbix/zabbix_server.conf
DBPassword=keichan0322
```
my.cnf の内容は以下になります。

```
[client]
user = zabbix
password = keichan0322
```
–defaults-extra-file が使える状態である事を確認する為、mysqladmin コマンドで利用してみます。以下、1回目は個別でパスワードを打ち込むパターン、2回目は–defaults-extra-fileを指定するパターンです。

```
$ mysqladmin -u root -p ping
Enter password:
mysqld is alive
$ mysqladmin --defaults-extra-file=/etc/zabbix/mysql/my.cnf ping
mysqld is alive
```
問題なく–defaults-extra-file が使える状態である事が確認できました。（パスワードを打ち込まなくてもコマンド実行結果を得る事ができました。）

##userparameter_mysql.conf の設定

引き続き、Zabbixエージェント側の設定となります。

Zabbixエージェントのインストール時にデフォルト配置されている「/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf」に一部設定を追加修正します。

以下の2行が修正対象です。

```
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql-N | awk '{print $$2}'
UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c alive
```
この2行に「–defaults-extra-file=/etc/zabbix/mysql/my.cnf」をそれぞれ追記します。

```
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql --defaults-extra-file=/etc/zabbix/mysql/my.cnf -N | awk '{print $$2}

UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin --defaults-extra-file=/etc/zabbix/mysql/my.cnf ping | grep -c alive
```
keyが mysql.status[*]とmysql.pingはアカウント情報が必要なので、–defaults-extra-fileを設定しています。

keyが mysql.version はアカウント情報は不要なので、–defaults-extra-file は設定していません。
設定後は、Zabbixエージェントを再起動してください

```
$ systemctl restart zabbix-agent

$ systemctl status zabbix-agent
zabbix-agent.service - Zabbix Agent
   Loaded: loaded (/usr/lib/systemd/system/zabbix-agent.service; enabled; vendor preset: disabled)
   Active: active (running) since 月 2020-06-08 14:19:20 JST; 1h 17min ago
  Process: 11997 ExecStop=/bin/kill -SIGTERM $MAINPID (code=exited, status=0/SUCCESS)
  Process: 11999 ExecStart=/usr/sbin/zabbix_agentd -c $CONFFILE (code=exited, status=0/SUCCESS)
 Main PID: 12001 (zabbix_agentd)
   CGroup: /system.slice/zabbix-agent.service
           tq12001 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
           tq12002 /usr/sbin/zabbix_agentd: collector [idle 1 sec]
           tq12003 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection]
           tq12004 /usr/sbin/zabbix_agentd: listener #2 [waiting for connection]
           tq12005 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection]
           mq12006 /usr/sbin/zabbix_agentd: active checks #1 [idle 1 sec]
```

##Zabbixエージェント側での設定作業は以上です。

### zabbix_get コマンドを実行

```
[root@monitor ~]# zabbix_get -s 127.0.0.1 -k mysql.ping
1
[root@monitor ~]# zabbix_get -s 127.0.0.1 -k mysql.status[Uptime]
6495
[root@monitor ~]# zabbix_get -s 127.0.0.1 -k mysql.status[Questions]
115657
```
無事、値が取れているようです。

最後に、Zabbixサーバ側（WebUI）で「Template App MySQL」を監視対象ノードに適用します。そうすると、MySQLの値が取得できるようになります。

なお、値取得の状況は、ZabbixのWeb画面「監視データ」-「最新データ」画面で確認できます。