Windowsサーバに対するスクリプト実行での2バイト文字の取り扱い

お世話になっております。

Windowsサーバに対してAgent経由でスクリプト実行を試みているのですが、標準出力に2バイト文字が含まれる場合、Zabbixサーバに返却される実行結果が文字化け(???)します。
LogRemoteCommandsを有効にして実行ログを取得してみたところ、スクリプトの実行自体は正しく行われ2バイト文字を返却しています。
結果をZabbix Serverに対して返却する際のログについても2バイト文字が正しく表示されていますが、それを受信したZabbix Serverでは実行結果が「????」のようになっています。

状況から推察するとWindows版のZabbix AgentからZabbix Serverに実行結果を送信する際の文字コードがZabbix Serverで要求する文字コードと異なっているのではと思うのですが、Windowsにおけるリモートコマンド実行では2バイト文字の結果を返却することができないのでしょうか?

何かご存知の方がいらっしゃいましたらご教示いただければと思います。

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー TNK の写真

Zabbixが受け取れるようにするためには、文字コードをUTF-8にしな
ければならないと思います。

日本語Windowsでコマンド実行した場合は、文字コードがCP932(Shift
-JIS改)になると思いますので、それらを変換してZabbixに返すか、
結果をテキストファイルに出力して、log[]で文字コードを指定して
読み込むなどの対応が必要になるのではないでしょうか。

ユーザー mkt の写真

回答ありがとうございます。

やはりそうなのですね。
変換するにはZabbix Agentの改造ですよね。。。

実現方式について、色々悩んでみようと思います。

ありがとうございました。

ユーザー mkt の写真

ソースコード(str.c)を確認してみましたが、Windowsが場合分けされていますが

wcommand = zbx_utf8_to_unicode(full_command);

のような記述があり、UTF-8で標準出力を処理しているようですね。
バッチファイルを作って

@echo off
chcp 65001
echo あいうえお

としてみましたが、Zabbixに返却されるのは「あいぁE??ぁE」という文字列でした。

これは、以下のような現象が発生しているためだと思われます。

  1. 「あいうえお」をUTF-8で出力
  2. Shift_JISでUTF-8の「あいうえお」を読み込み
  3. UTF-8に変換してZabbix Serverに送信

あくまでスクリプト実行のみのインタフェースで実行→結果受信をしたいので、前に教えていただいたログ監視による方式は使えません。
やはりZabbix Agent自体の改修が必要ということなんでしょうか。

ユーザー TNK の写真

確認させてください。
そのバッチファイルは、どの文字コードで作成されたものですか?

ユーザー mkt の写真

バッチファイルの文字コードはUTF-8です。
改行コードはCR+LFです。

ユーザー TNK の写真

Zabbix 2.0.9の環境を構築して試してみましたが、Zabbix
エージェントがバッチファイルの結果を受け取る時点で文字
化けしてしまっていました。

バッチファイルの実行結果をutf8にしても、Zabbixサーバ側
では正常に受け取れなさそうです。
できると思っていたのですが、できませんでした失礼いたしま
した。
恐らく、Zabbixエージェントの改修が必要になると思われます。

ユーザー mkt の写真

ありがとうございました。
問題の切り分けまでできたので、あとは方針を考えたいと思います。

ユーザー TNK の写真

いくつか試してみたのですが、通常のMS932のバッチファイルで、
ファイルを一時経由すれば、以下のようなスクリプトにすると、
マルチバイトでも返せそうです。
nkfや一時ファイルのパスなどは、適宜変更してください。

----- ここから -----
@echo off
echo あいうえお | C:\Batch\nkf.exe -w > C:\Batch\return.txt
type C:\Batch\return.txt
----- ここまで -----

ユーザー mkt の写真

ありがとうございます。試してみます。

何も対処せずにスクリプトを実行すると、zbx_utf8_to_unicodeでコマンドの結果を変換するところで情報が失われていると考えれば良いのですよね。
だからAgentの改造が必要だと理解しています。