• Showing Page History #108018

Show page source of FrontPage #108414

= [[ProjectName]] Wiki =

== [[ProjectName]] とは ==

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

今の段階で監視対象として考えているのは、イベントログ(ApplicationおよびSystem)とテキスト形式のログファイルです。
ついでに UNIX/Linux で使われる syslog の転送にも対応して、複数のOSの通知を一括して管理できるようにしようとしています。
とはいいながらも、本格的な統合監視をするならやはり [https://www.zabbix.org/ 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形式で記述するようにしています。

{{{ code javascript
{
  Actions: [
    {
      /* ローカルホストに転送 */
      name: 'forwardToLocal', type: 'forward', Destination: '127.0.0.1'
    },
    {
      /* growl で通知 */
      name: 'growl', type: 'execute', CommandLine: '"C:\\Program Files (x86)\\Growl for Windows\\growlnotify.exe" /t:EWatch "$message"'
    },
    {
      /* メールで通知 */
      name: 'mail', type: 'smtp', FromAddress:'???@gmail.com', ToAddress:'???@gmail.com,???@gmail.com', ServerHost:'localhost:25'
    },
    {
      /* syslog 転送 */
      name: 'syslog', type: 'syslog', RemoteHost: '192.168.0.2'
    },
    {
      /* test.bat実行 */
      name: 'test', type: 'execute', CommandLine:'C:\\test.bat "$timestamp" "$hostname" "$source" "$level" "$code" "$message"'
    }
  ],
  EventLog: {
    Application: [
      /* エラーを growl で通知 */
      { logLevel:'E', match:null, ignore:null, actions:[ 'growl' ]},
    ],
    System: [
      /* エラーをメールで通知 */
      { logLevel:'E', match:null, ignore:null, actions:[ 'mail' ]},
      /* エラー以外を syslog で通知 */
      { logLevel:'', match:null, ignore:null, actions:[ 'syslog' ]},
    ]
  },
  File: {
    /* test.log に [ERROR] が含まれていればコマンド(test.bat)を実行 */
    "C:\\test.log" :[
      { match:'\\[ERROR\\]', ignore:null, actions:[ 'test' ]},
    ]
  },
  Syslog: {
    /* 514ポートで待ち受け、ERR が含まれていれば growl で通知 */
    "514" : [
      { match:'ERR', ignore:null, actions:[ 'growl' ]},
    ]
  },
  Server: {
    /* 31301 ポートで待ち受け、転送されてきたイベントを通知 */
    Port: 31301,
    Rules: [
      { match:null, ignore:null, actions:[ 'mail' ] }
    ]
  }
}
}}}

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

{{{ code javascript
	{
		name: "smtpTest",
		type:"smtp",
		FromAddress:"user@example.com",
		ToAddress:"user2@example.com,user@example.com",
		ServerHost:"localhost:25",
		"ActionLimit": "5/300",
	}
}}}

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

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

* ファイル監視設定

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

* syslog受信設定

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

* TCPサーバー受信設定

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



== その他 ==
[[ReleaseList]]
[[RecentTickets(limit=5)]]