TMG 2010 のログ キューについて少しまとめてみたいと思います。
TMG 2010 になりログキューという設定が追加されました。
Forefront TMG ログを構成する
ログ キューの構成
TMG Large Logging Queue: No More SQL Lockdowns?
■ログ キューとは
TMG はログの出力処理による負荷が高くなる、出力先が応答なしの状態になった場合にログの内容をバイナリ形式で
キューとして出力します。
この際、ログ キューを [Large Logging Queue (LLQ)] として特定のディレクトリに出力を行います。
TMG では、ログは SQL Server に蓄積していくことができるのですが、ログの蓄積先の SQL Server が停止している状態や、ファイルとして出力している場合は、ログファイルの出力先の容量が枯渇してしまった場合などにログキューが使用されます。
ログの出力先が正常に使用できるようになると、ログ キューの内容を最終的なログに出力する処理が再開されます。
ファイアウォール製品ですので、証跡管理のためログは重要な要素となります。
そのため、ログが出力できない場合でもその間のログをロストしないようにするためキューに出力がされているのだと思います。
■ログ キューの出力先の設定
ログ キューの出力先ですが、TMG の管理コンソールの、[ログ & レポート] の [ログ キューの構成] で変更することが可能です。
デフォルトでは、[%ProgramFiles%Microsoft Forefront Threat Management GatewayLogs] に出力される設定となっています。
■ログ キューの基本的な動作
日本語のドキュメントは見当たらなかったのですが、TechNet に以下の情報が記載されています。
Overview of the Logging Improvements in Forefront Threat Management Gateway (TMG)
この中に、[Logging Queue] としてログ キューの基本的な動作概要図が記載されています。
ログ キューを [Binary LLQ Data] として出力をして、[ISA Control] が [Log Database] に格納するという流れになっています。
大まかに書くとログ キューが使用されると以下のような経路で DB に格納がされます。
- Binary LLQ Data
これは、ログ キューのディレクトリに出力される、拡張子が [LLQ] のファイルになります。
ログ キューが使用されると、このファイルがログ キュー用のディレクトリに出力されるようになります。
私の環境だと、1 分間で 3 ファイルほど出力がされていました。
そのため、ログ キューの使用が開始されると、ログが使用できるようになるまでかなりのファイルが生成されるようになります。 - ISA Control
ISA Control と書かれていますが、TMG の [Microsoft Forefront TMG コントロール] サービスのことになります。
# サービス名は TMG になっても isactrl だったりするのですが。
ログ キューをログ DB に格納する処理はこのサービスが実施しています。
TMG のコアなサービスになるので、依存関係がかなり多いです。
- Log Database
これは SQL Server のデータベースになります。
TMG をインストールすると [MSFW] というインスタンスが作成されます。
このインスタンスにログ用の DB が作成され、その DB にログが格納されていきます。
ファイアウォール ポリシーと、Web アクセス ポリシーのログは独立した DB に日付単位で格納されます。
■ログ キューの動作を確認してみる
ログ キューの動作を確認してみるのは簡単にできます。
ログで使用している SQL Server のインスタンスのサービスを停止することで、ログに出力が行えなくなりますのでログ キューが使用されるようになります。
サービスから停止してもよいのですが、TMG の管理コンソールからも停止することができます。
TMG のサービスで、サービスが [SQL Server Express] となっているものが、ログに使用しているインスタンスになりますので、このサービスを停止します。
# MSFW のインスタンスが停止されます。
そうすると、ログが SQL Server に格納できなくなりますので、ログがログ キューに出力されるようになります。
ログ キューを使用しているかどうかは、[ログ & レポート] の [ログの状態を表示] から確認することができます。
キューが使われていると以下の状態になります。
# ログの状態が [キューを使用中] になっているとログ キューが使用されています。
SQL Server を起動するとキューがデータベースに書き込まれるようになりますので、ログの状態が以下のようになります。
# 正常な状態ですと、[準備完了] となっています。
■ログ キューがロックしてしまう
原因はわかっていないのですが、ログ キューのファイルが稀にロックしてしまいキューから DB に書き込みが行われなくなることがあります。
TMG コントロールサービスがキューファイルを開いたままになってしまい、処理が継続されない状態になるようです。
# キューとして残っているファイルの更新日時が一番古いファイルがロックされてしまっているファイルになるはずです。
Process Explorer からも [mspadmin.exe] (Microsoft Forefront TMG コントロール サービス) がファイルを使用していることを確認できます。
この状態になった場合、一度 TMG コントロールのサービスを停止してロックしてしまっているファイルを削除し、サービスを開始することでDB への書き込みが再開されます。
# ロックしてしまったファイルが存在していると DB への書き込みが再開されないのですよね…。
FCS のようなウイルススキャンソフトでファイルをロックしてしまっているのかと思っていたのですが、TMG 用に推奨されているスキャンの除外設定をしても現象が発生してしまったのですよね。
プロセスとしても mspadmin.exe がファイルを開いているので、内部的に処理が進んでいないように見受けられるのですが。
TMG コントロールサービスを停止すると TMG のサービスが停止してしまうので、この方法で解消するのは現実問題としては結構難しいですよね。
ログ用のインスタンスを停止して、ログキューのディレクトリを変更することで稀にロックが解除されることもあるのですが、確実な方法ではないのですよね。
これについてはもう少し情報を集めていきたいと思います。
# ファイルがロックしていない状態でもキューが蓄積されていることがあるので、単純にスペックが足りていないだけかもしれませんが。
ログ キューをロックしてテストをしたい場合は、以下のコマンドを PowerShell で実行することで、ファイルをロックすることができます。
# 改行されている箇所は 1 行で実行します。
$file = Get-Item "C:Program FilesMicrosoft Forefront Threat Management GatewayLogs*.llq" | Sort-Object LastWriteTime -Descending | Select-Object -First 1 $fs = New-Object System.IO.FileStream($file, [System.IO.FileMode]::Open, [System.IO.FileAccess]::Read, [System.IO.FileShare]::None) # ファイルのロックを解除するタイミングで実行 $fs.Close()
ログキューが蓄積されすぎると、サーバーの再起動時に TMG のサービスが起動しないことがありますので少し気を付ける必要があると思います。
# ロックダウンモードが働いているのかもしれませんが。
TMG は日本語の情報をあまり見かけないので、情報集めるのも結構大変ですね…。
2010/10/12 追記
TMG 2010 SP1 RU1 を適用したところ、私の環境では解消されました。
Forefront TMG 2010 Service Pack 1 用のソフトウェア更新プログラム 1
この更新プログラムには、以下の修正が含まれていますのでこの対応で現象が解消されているかもしれません。
Forefront TMG 2010 SP1 はローカル SQL Server データベースにログを書き込めない
TMGのログがあふれて、空き容量が無くなるトラブルが出ました。本稿の内容に助けられました。ありがとうございます!
玉屋
13 1月 11 at 17:44