vague memory

うろ覚えを無くしていこうともがき苦しむ人の備忘録

Datadog win32_event_log (v6 日本語環境) 訂正

以前 Datadog Agent Version 6 で日本語環境でのイベントログ取得を確認したのですが、 検証に誤りがありました。

htnosm.hatenablog.com

再度確認した所、Agent Version 5 同様、 マルチバイトでは動作しませんでした。

Event Viewer Integration

WindowsイベントログをDatadogへ連携するインテグレーションが用意されていますが、 現時点では日本語環境ではエラーレベルでの絞り込みが行なえません。

カスタムチェック

version 6でも 5 同様のカスタムチェックを作成することで動作が確認できました。

win32_event_log.py から win32_event_log_ja.py を作成します。

  • win32_event_log.py
C:\Program Files\Datadog\Datadog Agent\embedded\Lib\site-packages\datadog_checks\win32_event_log\win32_event_log.py
  • win32_event_log_ja(差分) v6対応版
--- win32_event_log.py
+++ win32_event_log_ja.py
@@ -1,3 +1,12 @@
+#!/usr/bin/python
+# -*- coding: cp932 -*-
+'''
+日本語環境用イベントログ監視(v6)
+'''
+import sys
+reload(sys)
+sys.setdefaultencoding('cp932')
+
 # (C) Datadog, Inc. 2010-2017
 # All rights reserved
 # Licensed under Simplified BSD License (see LICENSE)
@@ -96,6 +105,18 @@
         if ltypes:
             query['Type'] = []
             for ltype in ltypes:
+                if ltype == 'Critical':
+                    ltype = '重大'
+                elif ltype == 'Error':
+                    ltype = 'エラー'
+                elif ltype == 'Warning':
+                    ltype = '警告'
+                elif ltype == 'Information':
+                    ltype = '情報'
+                elif ltype == 'Audit Success':
+                    ltype = '成功の監査'
+                elif ltype == 'Audit Failure':
+                    ltype = '失敗の監査'
                 query['Type'].append(('=', ltype))
         if source_names:
             query['SourceName'] = []
@@ -233,9 +255,11 @@
     def _alert_type(self):
         event_type = self.event['Type']
         # Convert to a Datadog alert type
-        if event_type == 'Warning':
+        if event_type == '警告':
             return 'warning'
-        elif event_type == 'Error':
+        elif event_type == '重大':
+            return 'error'
+        elif event_type == 'エラー':
             return 'error'
         return 'info'

win32_event_log_ja.py を checks.d、win32_event_log_ja.yaml(中身はwin32_event_log.yamlと同じ) を conf.d に格納して使用します。

C:\PROGRAMDATA\DATADOG
├─checks.d
│      win32_event_log_ja.py
├─conf.d
│  ├─win32_event_log_ja.d
│  │      conf.yaml

実行結果例

f:id:htnosm:20190111044426p:plain f:id:htnosm:20190111043855p:plain

システムアカウントの言語設定

尚、ログインユーザの言語設定が日本語でも、 システムアカウントの言語設定を英語としておけば、 そのまま win32_event_log を利用できます。

  • [コントロールパネル] -> [地域] -> [管理] -> [設定のコピー]

f:id:htnosm:20190111044155p:plain

ようこそ画面の欄がシステムアカウント設定も含むようです。