ZabbixでWindowsのイベントログの監視を設定したのですが文字化けしてしまいました。
mysqlのデフォルトキャラクタセットの問題でした。
正しく設定すれば発生しない問題なので、原因切り分けのためにやったことを備忘録として書いておきます。
バージョン
Ubuntuのパッケージでzabbixは、1.8.1、mysqlは、5.1です。
$ dpkg -l | grep zabbix ii zabbix-agent 1:1.8.1-1ubuntu1 network monitoring solution - agent ii zabbix-frontend-php 1:1.8.1-1ubuntu1 network monitoring solution - PHP front-end ii zabbix-server-mysql 1:1.8.1-1ubuntu1 network monitoring solution - server (using $ dpkg -l | grep mysql-server ii mysql-server 5.1.41-3ubuntu12.10 MySQL database server (metapackage depending ii mysql-server-5.1 5.1.41-3ubuntu12.10 MySQL database server binaries ii mysql-server-core-5.1 5.1.41-3ubuntu12.10 MySQL database core server files
原因の切り分け
以下のように原因切り分けをしました。
zabbix_getを使ってWindows上のzabbix-agentで文字化けがないか確認
zabbixサーバ側でzabbix_getを使うとzabbix_agentdが返すデータを確認することができます。
残念なことにzabbix_getは、イベントログの情報を収集するアクティブのアイテムには使えません。
$ zabbix_get -s winxp -k eventlog[system] Accessible only as active check!
そこで、Windows上のzabbix_agentd.confにテスト用のアイテムを追加してagentを再起動します。
\bin\zabbix\test.txtにテストメッセージをutf8で作成します。
UserParameter=system.test2,type \bin\zabbix\test.txt
再度、zabbixサーバからzabbix_getで文字化けがないか確認します。
$ zabbix_get -s winxp.sa.local -k system.test2 テスト $
これでzabbix_agentdでは、文字化けしないことを確認できました。
※zabbix_agentd.confにEncoding=utf8の設定を指摘する情報が多数見つかりましたが、最新のエージェントでは、指定しなくても文字化けしませんでした。
zabbix-serverからmysqlでの文字化け
以前の記事 でmysqlのデータベースを作成するときにデフォルトキャラクタセットの指定を忘れたときの対処を書きました。
設定変更してもイベントログは文字化けが治らずにかなり悩みました。
その時の設定をよくみるとtableのDEFAULT CHARSET以外にフィールドにもCHARACTER SET latin1というのが設定されていました。(ガーン)
フィールドの設定もalter tableで変更できました。
mysql> show create table zabbix.history_text; +--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | history_text | CREATE TABLE `history_text` ( `id` bigint(20) unsigned NOT NULL DEFAULT '0', `itemid` bigint(20) unsigned NOT NULL DEFAULT '0', `clock` int(11) NOT NULL DEFAULT '0', `value` text CHARACTER SET latin1 NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `history_text_2` (`itemid`,`id`), KEY `history_text_1` (`itemid`,`clock`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | +--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> alter table zabbix.history_text CHANGE value value TEXT CHARACTER SET utf8; Query OK, 19 rows affected (0.41 sec) Records: 19 Duplicates: 0 Warnings: 0 mysql> show create table zabbix.history_text; +--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | history_text | CREATE TABLE `history_text` ( `id` bigint(20) unsigned NOT NULL DEFAULT '0', `itemid` bigint(20) unsigned NOT NULL DEFAULT '0', `clock` int(11) NOT NULL DEFAULT '0', `value` text, PRIMARY KEY (`id`), UNIQUE KEY `history_text_2` (`itemid`,`id`), KEY `history_text_1` (`itemid`,`clock`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | +--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql>
イベントログの文字化けも原因は同じ
イベントログは、history_logテーブルでやはり同じように解決することができました。
mysql> alter table zabbix.history_log change value value TEXT CHARACTER SET utf8; Query OK, 10670 rows affected (2.02 sec) Records: 10670 Duplicates: 0 Warnings: 0 mysql>
Windowsから日本語のイベントログを追加してみると文字化けせず表示されることが確認できました。
C:\bin\zabbix>eventcreate /ID 100 /L system /SO Cmd /T Information /D "テストメッセージ" 成功: 'Information' の種類のイベントが 'Cmd' ログ/ソースに作成されました。 C:\bin\zabbix>