vague memory

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

DatadogAgent を Windows10(日本語環境) へインストール

今更ながら、初めて Windows へ DatadogAgent をインストールしました。
Linux との違いを中心にメモ。

基本的には公式ドキュメント一読でほぼ事足ります。

目次

インストール

環境

Agent version
    5.17.2
Platform
    Windows-10-10.0.15063
Python version
    2.7.12, 64bit

以下デフォルトインストールです。

f:id:htnosm:20170923014827p:plain

起動/停止

Datadog Agent Manager

GUIで各種操作を行えるツールです。

  • Setting・・・Datadog.conf、各種インテグレーションファイルの編集
  • Log and Status・・・Agent Status、各種ログの参照
  • Actions・・・Agent起動・停止、サポートケース起票(Flare)

f:id:htnosm:20170923014828p:plain f:id:htnosm:20170923014829p:plain

各種インテグレーションファイルの編集は、[Save] しただけでは有効化されないため、[Enable] を押下して有効化する必要があります。

Service

Windowsサービスからも起動/停止が可能です。

f:id:htnosm:20170923014830p:plain

各種ディレクト

インストールディレクト

C:\PROGRAM FILES\DATADOG\DATADOG AGENT
├─agent
├─bin
├─dist
├─embedded
└─LICENSES

設定ファイル・ログ

Datadog Agent Manager を使用せずに直接参照・編集も可能です。
因みに、Datadog Agent Manager の [Enable/Disable] は conf.d 配下の 〜.yaml をリネームしています。

C:\PROGRAMDATA\DATADOG
│  datadog.conf    # Datadog Agent の設定ファイル
├─checks.d         # カスタムチェックファイル
├─conf.d           # Integrations の設定ファイル
└─logs             # 各種ログファイル
        collector.log
        dogstatsd.log
        forwarder.log
        service.log

Event Viewer Integration

WindowsイベントログをDatadogへ連携するインテグレーションが用意されています。

type でエラーレベルでの絞り込みができるようになっていますが、 マルチバイト(というかマルチロケーション)非対応で、 日本語環境では動作しません。 以下のように元のインテグレーションファイルを編集して、カスタムチェックを作成して回避しました。

  • win32_event_log_ja(差分)
--- win32_event_log.py
+++ win32_event_log_ja.py
@@ -1,3 +1,12 @@
+#!/usr/bin/python
+# -*- coding: cp932 -*-
+'''
+日本語環境用イベントログ監視
+'''
+import sys
+reload(sys)
+sys.setdefaultencoding('cp932')
+
 # (C) Datadog, Inc. 2010-2016
 # All rights reserved
 # Licensed under Simplified BSD License (see LICENSE)
@@ -87,6 +96,19 @@
         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'] = []
@@ -223,9 +245,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 に格納して使用します。

f:id:htnosm:20170923014831p:plain

WindowsでのカスタムCheckのテスト

日本語ドキュメントには shell.exe を使用するように記載がありますが、agent version 5.12 以上の場合の確認方法は下記になります。 (現時点で日本語ドキュメントには旧バージョンの確認方法しか記載がありません。)

<INSTALL_DIR>/embedded/python.exe <INSTALL_DIR>agent/agent.py check <CHECK_NAME>

今回インテグレーションは Event Viewer のみ導入しましたが、他にもロケール問題が出る物があるのかもしれません。 (イベントログのエラーレベル位、Windows側が英語で出力すれば良いのではと思いますが)
Datadog公式でマルチロケール対応が成されることを期待します。