share facebook facebook2 twitter menu hatena pocket slack

2014.10.30 THU

Windows のイベントログを Nxlog と loggly でカジュアルに管理する

川原 洋平

WRITTEN BY川原 洋平

どうも、cloudpackかっぱ@inokara)です。カジュアル、カジュアル。

はじめに

Windows 上の各種ログを Nxlog というミドルウェアと loggly というログ管理ツールに集約して可視化と検索をカジュアルにやってみたいと思います。

Nxlog と loggly

Nxlog

Nxlog はマルチプラットフォーム対応でモジュール機構、マルチスレッドなログ管理ツールです。UDP や TCP と TLS/SSL を介してログを転送することが出来るようです。

詳細についてはこちらをご一読下さい。

loggly

loggly とはログ管理のクラウドサービスです。簡単なセットアップで色々な環境からログを収集して検索しやすくし、可視化することが出来るようです。API でログを送りこむことが出来ますのでサインアップした後で簡単にログを loggly に収集することが出来るようです。もちろん、fluentd のプラグインもあります!!

loggly のアーキテクチャとしては…

  • Apache Kafka
  • Storm
  • Cassandra も(?)
  • Elasticsearch

が AWS 上で動いているらしいです。

尚、ログを送ることが出来るソースとしては下記のようなソースが対応しているようです。
loggly: サーバーサイド アプリケーションの画面

上記はサーバーサイドのアプリケーション。そして、下記はクライアントサイド。
loggly: クライアントサイド アプリケーションの画面

残念ながらと言うか…もちろん有償となります。以下は価格表です。

プラン 価格 ログ保存量 ログの保存期間 価格に含まれる機能
Lite 無料 200MB/day 7 日 ログの収集と検索、フィルタリング等
Standard $49/month 〜 1G/day 7 日 Lite プラン+三つのソースグループ、アラート通知とダッシュボードのカスタマイズ等
Pro $349/month 〜 7G/day 15 日 Standard プラン+ Amazon S3 へのアーカイブ、電話サポート等

全てのプランで Pro プランで 30 日間のトライアル期間が設けられています。詳細についてはこちらこちらを御覧ください。

Windows のイベントログを Nxlog を介して loggly に送る

チョー簡単

  • 手順はチョー簡単です
  • loggly にサインアップしておきましょう

ダッシュボード

ダッシュボードにログインしたらユーザー名がサブドメインのダッシュボードが提供されます。
loggly: ダッシュボード > Source Setup

そして、Source Setup をクリックするとログの送信元の設定を行うことが出来ます。

Source として Windows を指定すると…

以下のように Windows のイベントログを送信する為の手順が表示されます。
loggly: Source Setup を設定すると、Windowsイベントログ送信手順が表示

お優しいのね。

Nxlog のインストール

手順に従って、まずは Windows 環境(今回は Windows Server 2008 R2)にインストールします。セットアップファイルはこちらをダウンロードしておきます。
Nxlogのインストール画面

ウィザードに従ってインストールしましょう。

Nxlog の設定

手順に従って C:Program Files (x86)nxlogconfnxlog.conf を修正します。

## This is a sample NXLog configuration file created by Loggly. June 2013
## See the nxlog reference manual about the configuration options.
## It should be installed locally and is also available
## online at http://nxlog.org/nxlog-docs/en/nxlog-reference-manual.html

## Please set the ROOT to the folder your nxlog was installed into,
## otherwise it will not start.
#define ROOT C:Program Filesnxlog
#define ROOT_STRING C:Program Files\nxlog
define ROOT C:Program Files (x86)nxlog
define ROOT_STRING C:Program Files (x86)\nxlog
define CERTDIR %ROOT%cert

Moduledir %ROOT%modules
CacheDir %ROOT%data
Pidfile %ROOT%datanxlog.pid
SpoolDir %ROOT%data
LogFile %ROOT%datanxlog.log

# Include fileop while debugging, also enable in the output module below
#<Extension fileop>
#    Module      xm_fileop
#</Extension>

<Extension json>
    Module      xm_json
</Extension>

<Extension syslog>
    Module xm_syslog
</Extension>

<Input internal>
    Module im_internal
    Exec  $Message = to_json();
</Input>

# Watch your own files
<Input file_watch>
    Module   im_file
    File     "%ROOT_STRING%\data\nxlog.log"
    SavePos  TRUE

# Include JSON and raw formats
    Exec  $Message = to_json() + " " + $raw_event;
</Input>

# Windows Event Log
<Input eventlog>
# Uncomment im_msvistalog for Windows Vista/2008 and later
    Module im_msvistalog

#Uncomment im_mseventlog for Windows XP/2000/2003
#Module im_mseventlog

    Exec  $Message = to_json();
</Input>

<Output out>
    Module om_tcp
    Host logs-01.loggly.com
    Port 514

    Exec to_syslog_ietf(); $raw_event = replace($raw_event, 'NXLOG@xxxxx', 'xxxxxxxx-xxxx-xxxxx-xxxx-xxxxxxxxx@xxxxxx tag="windows"] [', 1);

#Use the following line for debugging (uncomment the fileop extension above as well)
#Exec file_write("C:\Program Files (x86)\nxlogdata\nxlog_output.log",  $raw_event);
</Output>

<Route 1>
    Path internal, file_watch, eventlog => out
</Route>

Nxlog の起動

nxlog.conf を修正したら nxlog のプロセスを再起動します。
Nxlog.conf の修正後 nxlog プロセスを再起動

Nxlog を起動したらダッシュボードから Verify します。
nxlog.conf修正後、nxlogプロセス再起動したらVerify

暫くすると…

以下のように Windows のイベントログが蓄積されはじめました…。
logglyにWindowsイベントログが蓄積され始めます

さらに以下のようにログの種類をグラフ化。
logglyで、イベントログをグラフ化できます

severity で絞り込んでいます。
logglyで、Windowsイベントログの絞り込みができます

上記はさらにログの中から Warning で絞り込んでみてます。

ほんと簡単に…

Windows Server のログを検索、可視化出来ました。さらに、検索や可視化についてもとても簡単に出来そうで、ちょっとした環境であれば自前で同じような環境を構築するよりもお手軽だと思いましたが…以下のような点が気になりました。

気になるところ

セキュアなログ転送

上記の nxlog.conf を見ると loggly への転送は…

<Output out>
    Module om_tcp
    Host xxxxxxxxx.loggly.com
    Port 514

上記のように TCP ポート 514 番ポートへ行われているようです。ログの中にはセンシティブな情報が含まれていることが少なくはありませんのでセキュアな転送は必須だと思います。もちろん、セキュアな転送方法(Syslog over TLS)は以下の通り公開されています。

簡単そうなので試してみました。

こちらこちらの証明書をガッチャンコして所定のディレクトリに置くだけ。
Nxlog でセキュアなログ転送を設定

証明書をディレクトリに置いたら nxlog.conf を以下のように修正します。

<Output out>
   Module om_ssl
   Host logs-01.loggly.com
   Port 6514
   CAFile         %CERTDIR%/loggly_full.crt

修正後に nxlog を再起動します。
Nxlog でセキュアなログ転送の動作確認

Nxlog を動作させることによるシステムへの負荷

チョーざっくりとパフォーマンスモニタで Processor Time 等を眺めてみました。
Nxlog動作によるシステムへの負荷の確認

nxlog を稼働状態と稼働させていない状態ではそれほど負荷が掛かっているようには見えません。

但し、他のアプリケーションを稼働させていない状態なのであくまでも参考程度に…。

日本語が…

ログに日本語が含まれていた場合には残念ながら表示されません

最後に

ホントにさらっとで恐縮ですが nxlog と loggly を触ってみました。自分は今まで Windows のログってどんな風にローテーションされていてどうやって見るのかあまり意識したことがありませんでしたが、nxlog と loggly を利用することで簡単に収集と検索と可視化を実現することが出来ました。

引続き loggly や nxlog を詳細に追っていきつつ、fluentd と loggly の組み合わせや fluentd と nxlog と loggly を組み合わせを試してみたいと考えています。

元記事はこちらです。
Windows のイベントログを Nxlog と loggly でカジュアルに管理する