geek.conf.2

あるインフラエンジニアの備忘録

Zabbixの日本語文字化けを解消する方法

ザビザビしてますか?僕です。

ZabbixのデータベースにMySQLを使っているのですが、ホスト名やトリガー名、ログ監視メッセージに日本語を使っていたら????????になっておりました。 Zabbix画面上では、メディアスクリプトに渡すアクションに登録した"メッセージ"も????????だし、ログ監視で抽出したログ内のログメッセージも????????となります。

これdefault character setがUTF8じゃないことからよく起こりうるので注意が必要です。特にAWSのRDSではlatin1がdefault character setなのでパラメータグループにてUTF8に適切に設定しましょう。 また、zabbix データベースを作成する際にはcharacter set utf8しましょう。

mysql> create database zabbix character set utf8;

んで、もうすでにlatin1で作ってしまった場合、これをUTF8に直す方法をこれから書きます。

まず、

mysql> show variables like 'char%';

mysql> show create table テーブル名;

でCharacter系パラメータがutf8じゃないことを確認します。utf8じゃなかったらまず今回の現象である可能性が高いです。 データベースやテーブルは以下のようにUTF8に変更しておきます。

mysql> alter database zabbix default character set utf8;
mysql> alter table テーブル名 ENGINE=MyISAM DEFAULT CHARSET=utf8;

ここからがUTF8に直す手順です。

  • zabbix serverの停止
# systemctl stop zabbix-server
  • mysqldump実行
# mysqldump -uroot -p -h RDSエンドポイント zabbix > zabbix.dump
# perl -pi -e 's/latin1/utf8/' zabbix.db
  • リストア実行
# mysql -uroot -p -h RDSエンドポイント zabbix < zabbix.dump
  • zabbix server起動
# systemctl start zabbix-server

これでOK。ちなみにあらかじめalter文でdatabaseもtableもutf8にしておけばリストア時にdrop databaseしなくても直ります。