Windowsで発生するいろいろにいろいろできるようにするEventWatch略してewatch Wiki

Windowsで発生するいろいろにいろいろできるようにするEventWatch略してewatch とは

Windowsの中でいつのまにか発生しているエラーを通知できる環境を作ろうと考えています。

今の段階で監視対象として考えているのは、イベントログ(ApplicationおよびSystem)とテキスト形式のログファイルです。 ついでに UNIX/Linux で使われる syslog の転送にも対応して、複数のOSの通知を一括して管理できるようにしようとしています。 とはいいながらも、本格的な統合監視をするならやはり zabbix 等を使った方が良いです。 ewatch は1台からでも使える手軽な監視ツールという位置付けで考えています。

プログラム構成

* EWatch

Windowsサービスとして動作する本体のプログラム。 設定ファイルに従ってイベントログやログファイルを監視し、指定されたアクションを実行します。

* EWatchCLI

EWatchサービスに対するコマンドラインツールです。次の操作が行えます。
version EWatchサービスのバージョン情報を表示します。
info EWatchサービスが読み込んだ設定ファイル内容の簡易的な情報と、それが適用された日時を表示します。
reload EWatchサービスを再起動せずに設定ファイルを再読み込みします。
put EWatchサービスにJSON形式でイベントデータを渡します。

* EWatchUI

今のところ、単なる設定ファイル編集ツールです。

アクション

ここでは概要だけを記します。詳細については Actions を参照してください。

* forward: 他のサーバーへの転送

EWatch サービスが別のサーバーで稼働している場合、イベントを転送する事ができます。 forward を使うと、複数サーバー構成でメール送信等の通知設定を一か所にまとめる事ができます。

* execute: コマンド実行

指定したコマンドを実行できます。コマンドの引数にログの内容を渡す事ができます。

* smtp: Eメール送信

指定したEメールアドレスにログの内容を送ります。

* syslog: syslog転送

指定した syslog サーバーにログを送ります。

* mantis: MantisBT登録

指定したURLのMantisBTに障害として登録します。

* redmine: Redmineチケット登録

指定したURLのRedmineにチケットを登録します。

* slack: Slack通知

Slack の webhook で通知します。

設定ファイルの例

notepad等でサッと編集しようとすると XML は面倒くさいので、json形式で記述するようにしています。

  1. {
  2. Actions: [
  3. {
  4. /* ローカルホストに転送 */
  5. name: 'forwardToLocal', type: 'forward', Destination: '127.0.0.1'
  6. },
  7. {
  8. /* growl で通知 */
  9. name: 'growl', type: 'execute', CommandLine: '"C:\\Program Files (x86)\\Growl for Windows\\growlnotify.exe" /t:EWatch "$message"'
  10. },
  11. {
  12. /* メールで通知 */
  13. name: 'mail', type: 'smtp', FromAddress:'???@gmail.com', ToAddress:'???@gmail.com,???@gmail.com', ServerHost:'localhost:25'
  14. },
  15. {
  16. /* syslog 転送 */
  17. name: 'syslog', type: 'syslog', RemoteHost: '192.168.0.2'
  18. },
  19. {
  20. /* test.bat実行 */
  21. name: 'test', type: 'execute', CommandLine:'C:\\test.bat "$timestamp" "$hostname" "$source" "$level" "$code" "$message"'
  22. }
  23. ],
  24. EventLog: {
  25. Application: [
  26. /* エラーを growl で通知 */
  27. { logLevel:'E', match:null, ignore:null, actions:[ 'growl' ]},
  28. ],
  29. System: [
  30. /* エラーをメールで通知 */
  31. { logLevel:'E', match:null, ignore:null, actions:[ 'mail' ]},
  32. /* エラー以外を syslog で通知 */
  33. { logLevel:'', match:null, ignore:null, actions:[ 'syslog' ]},
  34. ]
  35. },
  36. File: {
  37. /* test.log に [ERROR] が含まれていればコマンド(test.bat)を実行 */
  38. "C:\\test.log" :[
  39. { match:'\\[ERROR\\]', ignore:null, actions:[ 'test' ]},
  40. ]
  41. },
  42. Syslog: {
  43. /* 514ポートで待ち受け、ERR が含まれていれば growl で通知 */
  44. "514" : [
  45. { match:'ERR', ignore:null, actions:[ 'growl' ]},
  46. ]
  47. },
  48. Server: {
  49. /* 31301 ポートで待ち受け、転送されてきたイベントを通知 */
  50. Port: 31301,
  51. Rules: [
  52. { match:null, ignore:null, actions:[ 'mail' ] }
  53. ]
  54. }
  55. }

アクション実行制限

例えばメール通知設定をしている状態でアクションが大量に発生すると、読み切れないほどのメールが送信されるかもしれません。 また、もしかしたら SMTP サーバー側の制限にひっかかってしばらく接続拒否されたり、サーバー管理者の人に叱られるかもしれ ません。 そういう状態に陥ることを防ぐために、アクション実行を制限する事ができます。 制限は、一定時間数に何件まで、という設定をします。 この制限は、どのアクションにも指定することができます。 下記の例では、300秒に5件の通知までという制限をします。

  1. {
  2. name: "smtpTest",
  3. type:"smtp",
  4. FromAddress:"user@example.com",
  5. ToAddress:"user2@example.com,user@example.com",
  6. ServerHost:"localhost:25",
  7. "ActionLimit": "5/300",
  8. }

監視設定

イベントログ、ファイル、syslog、TCPサーバー(他サーバーからの転送を受けるもの)、それぞれで設定をします。

* イベントログ監視設定

イベントログは Application ログ、System ログに対して監視設定をすることができます。 (Security ログに対しては確認した事がありません。) 設定できる項目には次のものがあります。
logLevelログレベル(EかWかI)
eventIdイベントID
sourceイベントソース
match対象とするメッセージにマッチさせるパターン
ignore対象外とするメッセージにマッチさせるパターン

* ファイル監視設定

MS932またはUTF-8のテキストファイルを監視することができます。 MS932で監視する場合はファイルパスの先頭に [932] を追加します。
  1. "File": {
  2. "[932]C:\\Program Files\\xxx\\logs\\error.log": [ /* MS932のファイル([932]を付ける) */
  3. { "match": "failure", "ignore": "", "actions": [ "slackTest" ] }
  4. ],
  5. "C:\\ProgramData\\xxx\\logs\\error.log": [ /* UTF8のファイル */
  6. { "match": "ERROR", "ignore": "", "while": "[^0-9].*", "whileMax":30, "actions": [ "slackTest" ] }
  7. ]
  8. }
Javaや.NETのスタックトレースのような複数行の情報を通知できるようにするために while と whileMax という 設定項目を用意しています。 設定できる項目には次のものがあります。
match対象とするメッセージにマッチさせるパターン
ignore対象外とするメッセージにマッチさせるパターン
while同じイベントとして扱いたい連続する行にマッチさせるパターン
whileMax同じイベントとして扱いたい行の最大数

* syslog受信設定

設定をすることで、syslogプロトコルを受けることができます。 設定できる項目には次のものがあります。
hostname対象とするホスト名/IPアドレスにマッチさせるパターン
match対象とするメッセージにマッチさせるパターン
ignore対象外とするメッセージにマッチさせるパターン

* TCPサーバー受信設定

設定をすることで、他のサーバー上で稼働している EWatch からの forward による転送データを受けることができます。 設定できる項目には次のものがあります。
hostname対象とするホスト名/IPアドレスにマッチさせるパターン
match対象とするメッセージにマッチさせるパターン
ignore対象外とするメッセージにマッチさせるパターン

その他

Latest File Release

ewatch (2.0.37)2023-03-24 18:55

Recent Tickets

(empty)