ksaitoの日記

日々試したことの覚え書き

Windowsのイベントログ文字化けの対応

移転しました。

自動的にリダイレクトします。

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> 

これで、system.test2を監視してみると見事文字化けは、解消しました。

イベントログの文字化けも原因は同じ

イベントログは、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>


ああ、すっきりした。