Windowsサーバに対するスクリプト実行での2バイト文字の取り扱い
お世話になっております。
Windowsサーバに対してAgent経由でスクリプト実行を試みているのですが、標準出力に2バイト文字が含まれる場合、Zabbixサーバに返却される実行結果が文字化け(???)します。
LogRemoteCommandsを有効にして実行ログを取得してみたところ、スクリプトの実行自体は正しく行われ2バイト文字を返却しています。
結果をZabbix Serverに対して返却する際のログについても2バイト文字が正しく表示されていますが、それを受信したZabbix Serverでは実行結果が「????」のようになっています。
状況から推察するとWindows版のZabbix AgentからZabbix Serverに実行結果を送信する際の文字コードがZabbix Serverで要求する文字コードと異なっているのではと思うのですが、Windowsにおけるリモートコマンド実行では2バイト文字の結果を返却することができないのでしょうか?
何かご存知の方がいらっしゃいましたらご教示いただければと思います。
TNK - 投稿数: 4769
Zabbixが受け取れるようにするためには、文字コードをUTF-8にしな
ければならないと思います。
日本語Windowsでコマンド実行した場合は、文字コードがCP932(Shift
-JIS改)になると思いますので、それらを変換してZabbixに返すか、
結果をテキストファイルに出力して、log[]で文字コードを指定して
読み込むなどの対応が必要になるのではないでしょうか。
mkt - 投稿数: 41
回答ありがとうございます。
やはりそうなのですね。
変換するにはZabbix Agentの改造ですよね。。。
実現方式について、色々悩んでみようと思います。
ありがとうございました。
mkt - 投稿数: 41
ソースコード(str.c)を確認してみましたが、Windowsが場合分けされていますが
wcommand = zbx_utf8_to_unicode(full_command);
のような記述があり、UTF-8で標準出力を処理しているようですね。
バッチファイルを作って
@echo off
chcp 65001
echo あいうえお
としてみましたが、Zabbixに返却されるのは「あいぁE??ぁE」という文字列でした。
これは、以下のような現象が発生しているためだと思われます。
あくまでスクリプト実行のみのインタフェースで実行→結果受信をしたいので、前に教えていただいたログ監視による方式は使えません。
やはりZabbix Agent自体の改修が必要ということなんでしょうか。
TNK - 投稿数: 4769
確認させてください。
そのバッチファイルは、どの文字コードで作成されたものですか?
mkt - 投稿数: 41
バッチファイルの文字コードはUTF-8です。
改行コードはCR+LFです。
TNK - 投稿数: 4769
Zabbix 2.0.9の環境を構築して試してみましたが、Zabbix
エージェントがバッチファイルの結果を受け取る時点で文字
化けしてしまっていました。
バッチファイルの実行結果をutf8にしても、Zabbixサーバ側
では正常に受け取れなさそうです。
できると思っていたのですが、できませんでした失礼いたしま
した。
恐らく、Zabbixエージェントの改修が必要になると思われます。
mkt - 投稿数: 41
ありがとうございました。
問題の切り分けまでできたので、あとは方針を考えたいと思います。
TNK - 投稿数: 4769
いくつか試してみたのですが、通常のMS932のバッチファイルで、
ファイルを一時経由すれば、以下のようなスクリプトにすると、
マルチバイトでも返せそうです。
nkfや一時ファイルのパスなどは、適宜変更してください。
----- ここから -----
@echo off
echo あいうえお | C:\Batch\nkf.exe -w > C:\Batch\return.txt
type C:\Batch\return.txt
----- ここまで -----
mkt - 投稿数: 41
ありがとうございます。試してみます。
何も対処せずにスクリプトを実行すると、zbx_utf8_to_unicodeでコマンドの結果を変換するところで情報が失われていると考えれば良いのですよね。
だからAgentの改造が必要だと理解しています。