Windowsイベントログにて英文として取得されてしまう

お世話になります。

【Zabbixサーバー】Zabbix 2.2.8
【Zabbixエージェント】Zabbix 2.2.5
【アイテム設定】eventlog[Application,,"Error|Warning","【ソース名】",,,skip]

上記の環境/設定において、Zabbixでは以下の様なイベントログ(値)が取得されます。
The description for Event ID:0 in Source:'【ソース名】' cannot be found. Either the component that raises this event is not installed on your local computer or the installation is corrupted. You can install or repair the component on the local computer. If the event originated on another computer, the display information had to be saved with the event.

しかしながら、実際のイベントログでは以下の様な出力となっております。
-----------------------------------------------------------------------------------------------------------
ソース "【ソース名】" からのイベント ID 0 の説明が見つかりません。このイベントを発生させるコンポーネントがローカル コンピュータにインストールされていないか、インストールが壊れています。ローカル コンピュータにコンポーネントをインストールするか、コンポーネントを修復してください。
イベントが別のコンピュータから発生している場合、イベントと共に表示情報を保存する必要があります。

イベントには次の情報が含まれています:

【以下省略】
-----------------------------------------------------------------------------------------------------------

実際にZabbixにて取得したい部分は、上記【以下省略】の部分です。
どのようにすれば実際のイベントログの通りにZabbixにて取得できるのでしょうか。

宜しくお願いいたします。

コメント表示オプション

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

Zabbix 2.2.7で修正されたeventlog[]の値取得処理で対応できるか
もしれません。
他の不具合もあるので、Zabbixエージェントも2.2.8にバージョン
アップしてみてはいかがでしょうか。

ZBX-8595 : eventlog[] collected wrong messages
https://support.zabbix.com/browse/ZBX-8595

ユーザー KAZ の写真

E231さん

↓この事象だと思います。
ZBX-9183 Failed to get the Windows Eventing 6.0
https://support.zabbix.com/browse/ZBX-9183

上記不具合は2.2.9rc1で対応されます。

尚、上記リンクに2.2.8の試験用exeが添付されています。
※:正式リリースではないのでご使用の際は自己責任で… A(^^;

ユーザー KAZ の写真

E231さん

1点確認になりますが…
【以下省略】の情報を出力しているアプリはそのホストにインストールされていますか?

ユーザー E231 の写真

お世話になっております。
返信が遅くなりまして申し訳ございません。

次期バージョンのエージェントにおいて、
正常に動作する可能性がある点について理解致しました。

しかしながら、ワガママなのは十分承知ですが、
現状の状態で解決したいとも考えております。
【以下省略】の部分に、監視として必要な情報が含まれているため、
何とかして現状の環境のままでイベントログに出力された通りのログを
Zabbixにて取得したいのが心からの希望です。

そもそも、何故このような現象が発生しているのでしょうか。
(ソース "【ソース名】" からのイベント ID 0 の説明が見つかりません。~・・・が大きく関係しているように思われますが・・・)

KAZ様

1点確認になりますが…
【以下省略】の情報を出力しているアプリはそのホストにインストールされていますか?

→ログに出力しているアプリはホストにインストールされております。

ユーザー TNK の写真

そもそも、何故このような現象が発生しているのでしょうか。

私が挙げたものかKAZさんがあげたものかどちらが直接的な原因か
はわかりませんが、どちらも確かZabbixエージェントがWindowsの
APIを利用してメッセージを取得する箇所の不具合であったと思い
ます。

設定だけで回避できるものではありません。

ご自身でZabbixエージェントのソースを修正してコンパイルしなお
して利用するか、修正版のZabbixエージェントのリリースをお待ち
ください。

ユーザー zinten の写真

TNKさん、KAZさん

正常動作じゃないですか?
ZBX-8595は、DLLからメッセージの取得に失敗したときに誤ってOSのエラーメッセージに変換してしまうバグで
ZBX-9183は、イベントビューアでは正常に取得できているログがZabbixでは拾えないというバグなので
今回のイベントビューアでも、Zabbixでもうまく拾えていないケースは違うと思います。

そもそもの原因としてログを出力しているアプリの実装に問題があるか
レジストリかDLLが壊れているとかそういった原因のような気がします。
イベントビューアにて以下のメッセージが出ること事態が問題なのかと…
--------------------------------------------------
ソース "【ソース名】" からのイベント ID 0 の説明が見つかりません。このイベントを発生させるコンポーネントがローカル コンピュータにインストールされていないか、インストールが壊れています。ローカル コンピュータにコンポーネントをインストールするか、コンポーネントを修復してください。
--------------------------------------------------

ユーザー TNK の写真

イベントIDとして0を利用しているのは、そのアプリケーションの
問題だと思いますが、英語でメッセージを取得してしまうのは、
Zabbixエージェントで改善されるべきものだとは思われませんか?

あと、途中で「【以下省略】の部分に、監視として必要な情報が含
まれている」ということで、英語のメッセージかどうかではなく、
「イベントには次の情報が含まれています:」以降の情報をZabbix
で拾えるのかという質問に変わっているように見受けられます。
それに関しては、別途確認してみます。

ユーザー KAZ の写真
TNKさん

イベントIDとして0を利用しているのは、そのアプリケーションの
問題だと思いますが、英語でメッセージを取得してしまうのは、
Zabbixエージェントで改善されるべきものだとは思われませんか?
メッセージ実はハードコーディングだったり…A(^^;

	/* some events dont have enough information for making event message */
	if (NULL == *out_message)
	{
		*out_message = zbx_strdcatf(*out_message, "The description for Event ID:%lu in Source:'%s'"
				" cannot be found. Either the component that raises this event is not installed"
				" on your local computer or the installation is corrupted. You can install or repair"
				" the component on the local computer. If the event originated on another computer,"
				" the display information had to be saved with the event.", *out_eventid,
				NULL == *out_provider ? "" : *out_provider);
	}

	ret = SUCCEED;
ユーザー TNK の写真

ハードコーディングでしたか。
WindowsのAPIを呼び出した時点でNULLが返却されてしまうのであれ
ば、対応は難しいですね。

ユーザー KAZ の写真

zintenさん


そもそもの原因としてログを出力しているアプリの実装に問題があるか
レジストリかDLLが壊れているとかそういった原因のような気がします。
イベントビューアにて以下のメッセージが出ること事態が問題なのかと…

書き込んでから、その点に気づいてメッセージを出すアプリ入ってるかなと…A(^^;

下記のレジストリに各アプリの情報が登録してあるはずで、その情報のdllが無いとzintenさんが言われている状態になりますね。
HKEY_LOCAL_MACHINE¥SYSTEM¥CurrentControlSet¥services¥eventlog¥Application

ユーザー zinten の写真

KAZさん

>下記のレジストリに各アプリの情報が登録してあるはずで、その情報のdllが無いとzintenさんが言われている状態になりますね。
>HKEY_LOCAL_MACHINE¥SYSTEM¥CurrentControlSet¥services¥eventlog¥Application
他にもそもそもレジストリに登録されていないときなどに上記メッセージが出力されるようです。
手元の環境だと「gupdate」のサービスがレジストリに登録されていなくてメッセージが出力されてました。

そういう意味でアプリケーションがメッセージを書くのにレジストリに登録されていないとか、
登録されているけど存在しないDLLを指定しているとか、
EventMessageFileにEventCreate.exeが指定されていてイベントID0を使用するとそうなるとか
アプリ側の実装の問題なのでは?と思った次第です。

ユーザー KAZ の写真

zintenさん


他にもそもそもレジストリに登録されていないときなどに上記メッセージが出力されるようです。
手元の環境だと「gupdate」のサービスがレジストリに登録されていなくてメッセージが出力されてました。

そういう意味でアプリケーションがメッセージを書くのにレジストリに登録されていないとか、
登録されているけど存在しないDLLを指定しているとか、
EventMessageFileにEventCreate.exeが指定されていてイベントID0を使用するとそうなるとか
アプリ側の実装の問題なのでは?と思った次第です。

その可能性が高いですね…

ユーザー fripper の写真

以下の2問題ですね

1.イベントログで、イベントIDが登録されていないような場合に、
  1.1.メッセージがハードコーディングによる英文になってしまう
    → これは、エージェントの実装でなんとかできるかもしれない
      そもそもWindowsAPI関数の段階でNULL応答なので、限界はあり得る
      別のシステムAPIみたいなのがあれば‥可能かも?
  1.2.詳細‥としてイベントビューアから参照できる情報部分が、エージェントからでは取得できない
    → これは、エージェントの実装でなんとかできるかもしれない
      付加情報部分も併せて取得できるようなWindowsAPIがあるならば
      そちらでの実装にすれば可能性あり
      そんなのがなければ、望み薄
2.アプリ側のメッセージ登録段階で、関連DLLとメッセージIDが定義してあって
  なおかつ、エージェントで取得するホストに、当該DLLが登録さえされていれば、回避出来る問題

1.x.系の対処(Zabbix側だけの対応)では、WindowsAPI側にそのような機能が提供されていない限りは
どうしようもない
また、このテのAPIって、Windowsのバージョン間依存(NT4/2k/XP/2k3/Vista/2k8/7/2k12/8‥)で
結構差異が大きく、エージェント側で、「後期バージョンで拡張されたAPIが存在することを前提とした実装」は
エージェントの動作環境を制限してしまうことになるため、Zabbixとしての実装ポリシー的には難しいのではないか

‥といったところですね‥

悲しいですが、現状は諦めるか‥
それとも、別の手段を用いるか‥
・UserParameter等を利用して、独自のメッセージ取得コマンドを内部呼び出し
ですかねぇ‥

ユーザー E231 の写真

皆様

返信が大変遅くなってしまいまして申し訳ございません。
また、多大なる有用な情報をご提供下さいまして誠にありがとうございました。

少なくとも、現状の環境ではアプリ側とZabbix側での問題により、目的は果たせないということが理解出来ました。
また、何故出来ないのかという理由部分まで説明があり、納得することも出来ました。