技術検証：Windowsサーバーでデスクトップ上のログファイルを監視し、"ERROR" を検出してアラートを発生させる方法

## はじめに
Datadogは、インフラやアプリケーションの監視を一元管理できるプラットフォームで、AWS、GCP、Azureとも簡単に統合できます。

:::note warn
**今回は、Datadog Agentの導入が完了したので、実際に監視設定を作成する手順をまとめます。**
:::

システムの状態をリアルタイムで把握したい、インシデント対応をスムーズにしたいと考えている場合は、  

***無料トライアルで試してみるのもおすすめです！***

## 書こうと思ったきっかけ
受講しているITスクールのチーム開発において、今回は運用監視をDatadogで一元管理することにしました。

![Screenshot 2025-01-25 at 1.44.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/c06d3316-95b7-4b5d-61e1-67827deee5e2.png)

一部AWSのCloudWatchやLambdaといったサーバーレスアーキテクチャを構築していますが、基本的なリソース監視やログ監視はDatadogを活用する方針です。

**その中で、今回トライアル期間を活用して実装を進めてみようと思い、改めてDatadogについてキャッチアップしていきます。**

## Datadogとは？
Datadog は、**クラウドやオンプレミス環境の 監視・分析 を行うための SaaS型オブザーバビリティプラットフォーム** です。

![Screenshot 2025-01-30 at 16.24.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/baef2fa2-d514-c1e6-1c87-77008f6818c2.png)
引用画像：https://www.datadoghq.com/ja/blog/network-performance-monitoring/

サーバー・コンテナ・アプリケーション・ネットワーク・セキュリティ など、システム全体のパフォーマンスを リアルタイムに可視化・監視 できます。

**Datadogに関する基本的な内容については、過去の記事でまとめていますので、そちらも参考にしてみてください。**

https://qiita.com/free-honda/items/b2b106918c78c516382c

## 実際にやってみた
ここでは、**AWS上のWindowsサーバーにDatadog Agentが既に導入されていることを前提** に進めます。

まだ導入が完了していない場合は、以下の記事で詳しく解説しているので、参考にしてください。

**Datadog Agentの導入手順**

https://qiita.com/free-honda/items/baa7dad12e43906a9636

### 事前準備

Datadog Agent の実行ユーザー（例: `ddagentuser`）に、**ログファイルを読み取る権限を付与** する必要があります。  

:::note warn
**そのため、**ローカルの Administrators グループに追加** しました。**
:::

**以下のように設定しました。**

![Screenshot 2025-01-31 at 8.02.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/0e67c140-df90-9e55-8355-02347a782bdd.png)

### Datadog Agent のログ監視を有効化

Datadog Agent のログ収集が有効になっているか確認し、設定を行います。  

Datadog のメイン設定ファイル (`datadog.yaml`) を編集し、ログ収集を有効化します。

**設定ファイルを開く**

以下のコマンドを実行して、設定ファイルを開きます。

```powershell
notepad "C:\ProgramData\Datadog\datadog.yaml"
```

**設定の変更**

設定ファイル内で、以下の行を追加または変更します。

```yaml
logs_enabled: true
```

変更を保存したら、**Datadog Agent を再起動** します。

```powershell
restart-service datadogagent
```

**再起動時のエラー対応**

Windows Server で `restart-service datadogagent` コマンドを実行すると、以下のエラーが発生することがあります。

```powershell
Cannot stop service 'Datadog Agent (datadogagent)' because it has dependent services.
It can only be stopped if the Force flag is set.
```

このエラーは、Datadog Agent に依存する別のサービスがあるため、通常の方法では停止できない ことを意味します。

そのため、依存するサービスも含めて強制的に再起動する必要があります。

```powershell
restart-service datadogagent -Force
```

:::note warn
**※注意:**
***`-Force` オプションを使用すると、Datadog Agent に依存するサービスも強制的に停止される可能性があるため、事前に datadogagent に依存するサービスを確認することをおすすめします。***
:::

### 監視対象のログファイルを設定
次に、**デスクトップ上のログファイルを監視対象として設定** します。  
Datadog の `conf.d` ディレクトリ内に、ログ監視用の設定ファイルを作成します。

**設定ファイルを作成（`custom_log.d/conf.yaml`）**

以下のコマンドを実行し、ログ監視用の設定ファイルを開きます。

```powershell
notepad "C:\ProgramData\Datadog\conf.d\custom_log.d\conf.yaml"
```

**設定を追加**

以下の内容を `conf.yaml` に追加し、保存します。

```yaml
logs:
  - type: file
    path: "C:/Users/Administrator/Desktop/test.log"
    service: custom-app
    source: custom_log
    log_processing_rules:
      - type: include_at_match
        name: "error_filter"
        pattern: "ERROR"
```

** 設定のポイント**

- **特定のログファイルを `path` で指定**
- **`log_processing_rules` を使用して、"ERROR" を含むログのみをDatadogに送信**
- **不要なログを除外することで、ログデータ量を最適化**


**設定を保存し、Datadog Agent を再起動**

設定を反映させるため、Datadog Agent を再起動します。

```powershell
restart-service datadogagent
```

### **Datadog でログ監視ルール（Monitor）を作成**

Datadog のダッシュボードで、**"ERROR" を含むログが記録された際にアラートを発生** させるように設定します。

**Monitor の作成**
1. **Datadog ダッシュボードにログイン**
2. **「Monitors」 → 「New Monitor」 をクリック**
3. **「Log Monitor」 を選択**

![Screenshot 2025-01-31 at 8.07.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/4ddc4440-b8a3-c616-db3c-c6fb98a828c2.png)

**クエリの入力**

検索バーに以下のクエリを入力し、**"ERROR" を含むログのみを監視対象** にします。


```bash
source:custom_log "ERROR" host:xxx 
```

**アラートの条件を設定**

- トリガー条件: `"ERROR"` のログが 1 回でも発生した場合にアラートを発生
- 通知の設定: メール、Slack などの通知先を指定

![Screenshot 2025-01-31 at 8.10.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/06021bd3-f062-d7c3-7f6b-d30936df8724.png)

**アラートメッセージのテンプレート**

以下は、一例としてのアラートメッセージのテンプレートになります。

```html
🚨【アラート】ログファイルに "ERROR" が検出されました 🚨

📌 **発生ホスト**: {{host.name}}
📌 **ログパス**: C:\Users\Administrator\Desktop\test.log

🛠 **対応方法**
1. ログファイルを確認し、"ERROR" の内容を調査
2. システムやアプリケーションの状態を確認
3. 必要に応じて修正作業を実施

🔍 **詳細確認**
- Datadog ログビュー: [ログの詳細](https://app.datadoghq.com/logs)
- Ops Guide: [対応手順](http://ops.myorg.com/guide)

🔔 **通知先:** @xxx
```

上記以外は特に変更せず、デフォルトの設定のまま進めました。

![Screenshot 2025-01-31 at 8.11.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/7d9ddf4a-4035-9835-dbed-4128f0229152.png)

## ログファイルに "ERROR" の文字列を出力してみた

ここでは、以下のように **`echo` コマンド** を使って、あらかじめ準備しておいたログファイルに "ERROR" を出力しました。

```powershell
echo "ERROR" >> "C:\Users\Administrator\Desktop\test.log"
```

**実際の出力画面**

![Screenshot 2025-01-31 at 8.25.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/902b34fd-b571-1427-db8d-a75ecfefc057.png)

## Datadog管理コンソール側で確認してみた
Datadog の 「Logs」メニュー で、"ERROR" を含むログが表示されているか確認しました。

すると、Datadog の監視結果が更新され、ホストの状態が緑色マークから赤色マークに変化し、アラートが発生した ことを確認しました。

![Screenshot 2025-01-31 at 8.26.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/34bf8e11-b0ac-2214-37f8-77b4faa07488.png)

その結果、想定通りのアラートメールが届いていることを確認 できたため、今回の検証は成功と言えます。

**受信したアラートメール**

![Screenshot 2025-01-31 at 8.28.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/2fc26239-f948-d296-19cb-7bf478da933f.png)

## まとめ

Windows サーバー上で **Datadog を使い、デスクトップ上のログファイルを監視し、"ERROR" を含むログを検出してアラートを発生させる方法** を解説しました。

:::note warn
**今回も少し苦戦しましたが、最終的に **うまく実装できて一安心** しています。**
:::

次回は、**他のサービス監視やプロセス監視の設定** についても試していこうと思いますので、興味のある方はぜひ読んでみてください！