Windows Serverのログ管理を中央集約:Grafana Alloy & Lokiで「手動ログ確認」に終止符を

Monitoring tutorial - IT technology blog
Monitoring tutorial - IT technology blog

システム障害時の「イベントビューアー」という悪夢

システム管理者なら、深夜2時に「サーバーがダウンした!」というアラートを受け取った経験があるはずです。これまでの古い手順はこうでした。RDPを開き、各サーバーにログインし、eventvwr.mscを入力して、何千行ものシステムログやアプリケーションログを必死にフィルタリングする。20〜30台েরサーバーを管理している場合、これは「干し草の山から針を探す」ような作業です。

本来、私たちがログを探しに行くべきではありません。ログの方からこちらに来るようにすべきです。**Grafana Alloy**とLokiを組み合わせれば、Windows Server群のすべてのイベントログを単一のストレージに集約できます。各マシンにログインして30分費やす代わりに、Grafanaでクエリを1回実行するだけで、わずか30秒でエラーの正確な場所を特定できます。

本記事では、Grafana Alloyを使用してこのシステムを構築する方法を解説します。AlloyはGrafana Agentに代わる次世代ツールであり、優れたパフォーマンスと高い柔軟性を備えています。

5分でクイックスタート

すでにLokiクラスターがあることを前提とします。もし持っていない場合は、Grafana Cloud(月間50GBのログが無料)を使用してすぐにテストできます。

ステップ1:Grafana Alloyのインストール

まず、Grafana LabsのGitHubから.msiインストーラーをダウンロードします。Windows Server上で実行し、デフォルトのオプションのまま進めます。インストール後、AlloyはWindowsサービスとして自動的に実行され、リソース消費はわずか40〜60MBのRAMと非常に軽量です。

ステップ2:config.alloyファイルの設定

C:\Program Files\GrafanaLabs\Alloy\config.alloyにある設定ファイルを開きます。デフォルトの内容を削除し、以下の最小構成のコードに置き換えてください。

loki.source.windowsevent "windows_logs" {
  event_log_name = "System,Application,Security"
  forward_to     = [loki.write.central_loki.receiver]
}

loki.write "central_loki" {
  endpoint {
    url = "http://<LOKIのIPアドレス>:3100/loki/api/v1/push"
  }
}

注意:<LOKIのIPアドレス>を実際のサーバーのアドレスに置き換えるのを忘れないでください。

ステップ3:再起動と結果の確認

**Services.msc**を開き、**Grafana Alloy**を探して**Restart**をクリックします。次にGrafanaを開き、ExploreメニューからLokiソースを選択します。クエリ{job="windows_logs"}を実行すると、Windowsからのログがリアルタイムで流れ込んでくるのが確認できるはずです。

なぜPromtailではなくGrafana Alloyを選ぶべきなのか?

まだPromtailを使っている方も多いかもしれませんが、これからはAlloyの時代です。Alloyはログ収集だけでなく、OpenTelemetry標準に基づいたメトリクスやトレースの処理も可能です。

Alloyの構造は**コンポーネント**に基づいています。機能ブロックを宣言し、レゴを組み立てるようにそれらを接続します。このアプローチにより、ログのフィルタリングやラベル付け(labeling)が非常に明快になります。特に、AlloyはWindowsログの処理がスムーズで、ログ量が急増した際にもパイプラインの詰まりが発生しにくいのが特徴です。

実践的な設定:不要なログをフィルタリングしてリソースを節約する

すべての「Information」ログをサーバーに送信するのは大きな間違いです。帯域幅を浪費するだけでなく、ディスク容量もすぐに使い果たしてしまいます。私の経験上、**Error**(レベル1)と**Warning**(レベル2)のログのみを取得することをお勧めします。

以下は、実際のプロジェクトで私がよく使用する設定ファイルです:

loki.source.windowsevent "windows_critical_logs" {
  event_log_name = "System,Application"
  # CPU負荷を軽減するためXPathで直接フィルタリング
  xpath          = "*[System[(Level=1 or Level=2)]]"
  forward_to     = [loki.relabel.add_labels.receiver]
}

loki.relabel "add_labels" {
  forward_to = [loki.write.central_loki.receiver]

  rule {
    target_label = "hostname"
    replacement  = "SRV-DB-PROD-01"
  }
  rule {
    target_label = "tier"
    replacement  = "database"
  }
}

loki.write "central_loki" {
  endpoint {
    url = "http://192.168.1.100:3100/loki/api/v1/push"
    auth {
      username = "loki_user"
      password = "your_secure_password"
    }
  }
}

xpathを使用すると、ソース側でログをフィルタリングできます。この方法により、ネットワーク経由で送信される不要なデータを70〜80%削減できます。

プロのようにログを管理するための3つのヒント

1. セキュリティログを監視してブルートフォース攻撃を検知する

イベントID 4625(ログオン失敗)に注目してください。1分間に数百件のこのログが発生している場合、サーバーが攻撃を受けている可能性があります。Grafanaでアラートを設定し、Telegram経由で即座に通知を受け取ることができます。

2. コミュニティダッシュボードを活用する

ダッシュボードをゼロから作成する手間を省きましょう。Grafana Dashboardsにアクセスし、ID 12239 またはキーワード「Windows Logs」で検索してください。このIDをインポートするだけで、サーバーの状態を視覚化するグラフがすぐに手に入ります。

3. ログが表示されない場合の対処法

設定が正しいのにログが全く表示されない場合は、Alloyのログファイル(C:\ProgramData\GrafanaLabs\Alloy\data\alloy.log)を確認してください。エラーの多くは、LokiのURLの間違いや、ファイアウォールによるポート3100の遮断が原因です。

結論

Grafana Alloyによるログの中央管理への移行は、インフラの近代化に向けた正しいステップです。作業が楽になり、システムがより安定し、何より深夜の電話を恐れる必要がなくなります。わずか5分で設定できるので、ぜひ今日から試してみてください。その価値は非常に大きいものです。

Share: