Zabbix 2.2で、 WindowsからZabbix_Senderで日本語文字列(2バイト文字列)を含んだものを送信した場合、残念ながら文字化けします。
ZabbixSeverの内部では、UTF-8で管理されていますが、
Windowsの場合、基本的に文字列はShift-JIS(正確にはWindows-31J,MS932)になるため、
そのまま処理すると、文字化けすることになるようです。
試しに、NKF(Network Kanji Filter)で、SJISからUTF-8(BOM 無し)に変換してあげることで
正しくデータを送信できました。
必要なもの
・Zabbix_Sender.exe
Windows用Zabbix Agentに付属のもの。
zabbix_agent-1.8.15-1.JP_installer.exeでテスト
・nkf.exe nkf32.dll Windows用
http://www.vector.co.jp/soft/dl/win95/util/se295331.html
nkfwin\vc2005\win32(98,Me,NT,2000,XP,Vista,7)Windows-31J\内の
nkf32.exeを利用出来ます。
そのまま日本語文字列を送信した場合
1 |
"C:\Program Files\ZABBIX Agent\zabbix_sender.exe" -c "C:\Program Files\ZABBIX Agent\zabbix_agentd.conf" -s 192.168.29.40 -k snmptraps -o Windowsから日本語を送信します |
1 2 |
Info from server: "processed: 1; failed: 0; total: 1; seconds spent: 0.000046" sent: 1; skipped: 0; total: 1 |
すると、ZabbixServerには、以下のように取り込まれます(文字化けします)。
タイムスタンプ | 値 |
2014/01/13 23:53:22 | Windows?????{?? |
今度は文字コードをNKFを使用してSJISからUTF8(BOM無し)に変換して送信した場合
1 |
echo 192.168.29.40 snmptraps Windowsから日本語を送信します | "C:\wintool\nkfwin\nkf.exe" -w80 | "C:\Program Files\ZABBIX Agent\zabbix_sender.exe" -c "C:\Program Files\ZABBIX Agent\zabbix_agentd.conf" -i - |
1 2 |
Info from server: "processed: 1; failed: 0; total: 1; seconds spent: 0.000066" sent: 1; skipped: 0; total: 1 |
この場合として以下のように正しく取り込まれます。
タイムスタンプ | 値 |
2014/01/13 23:53:57 | Windowsから日本語を送信します |
これを使えば、SNMPgetやSNMPTrap受信でも文字化けせずに取得できるかも・・・・・
そのうち試してみます。
ただ、SNMP関係の文字化けの問題点って、私の環境だと
- 特定WindowsEventlogのSNMPTrap変換(EVNTWIN.exe)の受信
- VMware(vCeneter)からのイベント発生時SNMPTrapメッセージ送信
- WindowsのSNMPAgentの場所(Device location)や連絡先(Device contact details)に
日本語文字列をセットされている場合のSNMP取得
の部分がおかしくなるぐらいなので、なんとか回避策が立てられそうです。