Exchange Server におけるメッセージ追跡ログ

  • メッセージ追跡ログの考えられる用途
  • メッセージ追跡ログの場所と構造
  • メッセージ追跡の設定
  • メッセージ追跡ログに何があるか
  • 取得 – 取得の使用法
  • メッセージ追跡ログの使用方法 Message tracking logs (メッセージ追跡ログスイート)MessageTrackingLog コマンドレット

Message Tracking Log は、Exchange 管理者にとって貴重な情報源です。 Office 365 にはメッセージのトレースがあり、それは問題なく機能しますが、オンプレミスの Exchange にはログに多くのデータが保存され、多くの目的に使用することができます。

Message Tracking logs Exchange

Possible uses for message tracking logs

Good old message tracking logs may serve many different purposes:

  • 配送に関する問題の解決 – 何を探すかわかっている場合、メッセージ追跡ログは、メッセージが配送されなかった理由、配送が遅れた場合などを教えてくれます(メッセージ追跡ログの中身を参照)
  • 統計 – メッセージ追跡ログは、サーバーを通過したすべてのメッセージのトレースを保持します。 何通のメッセージが処理されたか、社内で最も多くのメッセージを送信したのは誰かなど、分析のためのデータを得るのは非常に簡単な方法です。
  • フォレンジック – 誰かがメールを削除し、メールのバックアップを取っていなかったとします。 さらに悪いことに、その電子メールには機密情報が含まれており、競合他社に送信されてしまったとします。 そこで、メッセージ追跡ログが e-メールに関するいくつかの貴重な情報を提供することにより、あなたを救うことができます。
  • トランスポート ルールのテスト – 組織で複数のトランスポート ルールを構成している場合に特に有用です。 トランスポートルールが適用されるたびにトレースが残され、Get-MessageTrackingLogを使用して、トランスポートルールまたはDLPポリシーがいつトリガーされたかを確認できます。

メッセージ追跡ログの場所と構造

メッセージ追跡ログとは何ですか? メッセージ追跡ログは、Exchange サーバーに保存される単純な CSV ファイル(LOG 拡張子付き)です。 物理的な場所へのデフォルトのパスは %ExchangeInstallPath%TransportRolesLogs﹑MessageTracking です。 ログには一定の命名規則があります。 ログのファイル名を変更することはできますが、そうすると Get-MessageTrackingLog コマンドレットを使用して検索することができなくなることに注意してください。 さらに、名前を変更したファイルは、フォルダーのサイズ制限にカウントされません。 これは、設定した制限を超える可能性があります。

サーバーに保存されるスペースとデータ量を管理するために、Exchange は循環ログを採用しています。 つまり、フォルダーが最大サイズを超えるか、ログ ファイルが最大年齢に達すると、最も古いファイルが上書きされます。 デフォルトの設定に従えば、ログファイルの最大年齢は 30 日で、1 つのファイルの最大サイズは 10 MB です。 デフォルトでは、デフォルトのディレクトリにあるすべてのメッセージ追跡ログは1GBを超えることはできません。 PowerShellを使用して、これらの制限をすべて変更できます(詳細は、configure message trackingを参照してください)

毎日、新しいメッセージトラッキングログファイルが作成されます。 命名規則は次のとおりです:

MSGTRKServiceyyyymmdd-nnn.log where:

  • Service depends on which service created a log.この命名規則は、どのサービスがログを作成したかに依存します。 MSGTRKはトランスポートサービスが作成したログを指し、追加の文字はログを作成した他のサービスを指定します。 MAはMessage Approval,MDはMailbox Transport Deliveryサービス,MSはMailbox Transport Submissionサービスを表します。
  • yyyymmddはメッセージログが作成された日付を指定します。 ログファイルが最大サイズの制限に達すると,次のコピーが作成されます。 この値はインクリメンタルで、毎日(極めて論理的に)1から始まります。

いくつかのデフォルト値について述べました。

メッセージ追跡の設定

メッセージ追跡ログのデフォルト値を変更し始める前に、自分が何をしているかを確認してください。 メッセージ追跡ログは、サイズ的にかなり面倒になる可能性があります。 さらに、無期限にデータを収集することにした場合、メッセージ追跡ログで大規模な検索を行うたびに、かなりの時間がかかることになります。 特に、検索条件を限定しない場合は、なおさらです。 メールフローに関する情報を無期限に収集する場合は、メッセージトラッキングログの内容をファイルにエクスポートすることを検討してください。 そうすれば、たとえば健康メールボックスなどを指すものを除いた、すべてのメールに関するデータを保存できます。

Set-TransportServiceコマンドレットを使用して、メッセージ追跡ログを構成することができます。 このコマンドレットを使用すると、

  • メッセージ追跡を有効または無効にする、
  • メッセージ追跡ログを保存する場所を変更する、
  • メッセージ追跡ログのサイズおよび年齢制限を変更する、
  • そして件名ログを有効または無効にする、ことが可能です。 説明:デフォルトでは、メッセージ追跡ログは、件名を除いて、メールの内容を保存しません。 ログに件名があることはトラッキングの経験を大きく向上させますが、組織によってはセキュリティやプライバシーの理由からこの機能を無効にする必要があります。

以下は、すべてのパラメーターを一度に変更する例です。 1つのログファイルのサイズ制限を30MBに変更しました。 これはほとんど外観上の変更で、ログファイルの数を制御するものです。制限が大きいと、毎日作成されるcsvが少なくなります。 最大ディレクトリサイズ(最も古いファイルが上書きされる前)は2.5GBに設定され、ログファイルは365日間保持されます。 MessageTrackingLogMaxAgeを00:00:00に設定すると、メッセージ追跡ログを無期限に保持することができます。 少なくとも、ディレクトリのサイズに達するまでは。 しかし、Exchange でスペースを節約する必要がある人はいませんよね。

メッセージ追跡ログにあるもの

メッセージ追跡ログがそのエントリをどのように保存するかについて知っておくべきことがいくつかあります。

  1. 各メッセージは通常メッセージ追跡ログに1つのエントリ以上を生成します。
  2. ログ内のヘッダーに対応する PowerShell属性と同じではありません。 たとえば、ログ ファイル内の Event-id は PowerShell 内の EventId です。 ログのRecipient-addressは、PowerShellのrecipientsと同じです。 特定の属性を使った検索方法に迷ったときは、Get-MessageTrackingLog –ResultSize 1 | FL * or Get-MessageTrackingLog | Get-Memberを使用します。 これらのコマンドレットは、属性の完全なリストを提供します。
  3. Some fields are often empty in the message tracking logs.メッセージ追跡ログのいくつかのフィールドは、しばしば空です。 いくつかのフィールドは、重要または関連すると思われる情報を含んでいないかもしれません。

メッセージ追跡ログで最も重要なフィールド

  • Sender, Recipient, MessageSubject – 誰が誰にメッセージを送ったか、件名が何であるかを示します
  • TotalBytes – メッセージサイズを示します
  • Timestamp – いつイベントが発生したのかについての情報を示します
  • EventID – メッセージ追跡ログで最も重要なフィールドの1つです。 メッセージに何が起こったかについての主要な情報源です。
  • MessageInfo と RecipientStatus は、メッセージに何が起こったかについての詳細情報を提供します。
  • MessageLatency は、サーバーがメールを処理するのにどのくらいの時間が必要かを示します。

最も重要な部分は、ログから正しいデータを取得するためにPowerShellをどのように使用するかです。

Get-MessageTrackingLog コマンドレットの使用

Get-MessageTrackingLog では、すべてのメッセージ追跡ログを検索することができます。 追加属性なしでこのコマンドレットを使用する場合、最大 1000 件のエントリを返しますが、そのほとんどはおそらく Health Mailboxes アクティビティに接続されていることでしょう。 1つのGet-MessageTrackingLogコマンドレットで1000以上のエントリーを含めたい場合は、-ResultSize unlimited属性を追加してください。 それでも、私はあなたがHealth Mailboxesアクティビティを監視するためにコマンドレットを使用する予定がないことをかなり確信しています。 正しいフィルタリングは、成功への鍵です。

How to get general information on mail flow in Exchange Server

If you are aimed to get a very general idea of the recent mail flow in your organization, use the syntax described below:

Get-MessageTrackingLog -Start (Get-Date).AddDays(-14) -ResultSize Unlimited | Where -Property Recipients -NotLike "*HealthMailbox*" | ConvertTo-Html > "C:\mtl.html"

The cmdlet above goes through the last 14 days of message tracking logs. Where-Object -Property Recipients -NotLike “HealthMailbox*” の部分をなぜ使用するのか不思議に思われるかもしれません。 このフィルターは、Health Mailboxに関連するすべてのエントリーを削除します。 もし興味があれば、Where-Objectフィルターを使った場合と使わない場合の結果を比較することができます。 最後に、パイプラインの最後のコマンドレットは、結果を mtl.html ファイルにエクスポートします。 ConvertTo-Csv コマンドレットを使用して、結果を CSV ファイルにエクスポートすることもできます。

問題は、結果を HTML または CSV ファイルに変換するとき、受信者の情報を含むフィールドが正しく表示されないということです。 正しい値の代わりに、フィールドには System.String 式が含まれます。 これを解決するには、Select-Object コマンドレットを追加して結果をパイプライン化する必要があるかもしれません。

Get-MessageTrackingLog -Start (Get-Date).AddDays(-7) -ResultSize Unlimited | Where -Property Recipients -NotLike "*HealthMailbox*" | Select-Object sender,@{Name="Recipients";Expression={$_.recipients}},@{Name="RecipientStatus";Expression={$_.recipientstatus}},messagesubject,totalbytes,eventid,messageinfo,messagelatency | ConvertTo-Html > "C:\mtlx.html"

すべての失敗した配送を登録し、ファイルに登録したい場合、以下のコマンドレットを使用します。csv ファイルに新しい値を追加するので、定期的にコマンドレットを実行してすべての Fail Event を記録することができます。

How to gather statistics using Get-MessageTracking Log

メッセージ追跡ログ操作についてさらに複雑な操作を実行したい場合、それらを変数に保存します。

$mtl Get-MessageTrackingLog -Start (Get-Date).AddDays(-2) –eventId Send -ResultSize Unlimited | Where -Property Recipients -NotLike "*HealthMailbox*"

上のコマンドレットには過去 2 日間に送信したすべてのメッセージに関する情報を保存しています。 ユーザーが一般的にどれだけのメールを送信したかを測定するには、単に次のように入力します:

$mtl | measure

count sent items in message tracking logs

より詳細な情報を得るには、いくつかの追加コマンドレットを使って結果のグループ分け、ソート、表示を行うことが可能です。 たとえば、特定のユーザーの電子メール数を降順に並べ替えて表示することができます。

$mtl | group-object -property sender | Select-Object name,count | Sort-Object count -desc

sorting results in message tracking logs

Group-Object, Select-Object and Sort-Object trio, with the Get-MessageTrackingLog cmdlet を使用すると、簡単に任意のメール フロー統計量を取得することが可能です。

Get-MessageTrackingLogを使用して特定のメッセージを追跡する方法

最後に、特定の未配信メッセージに何が起こったかを確認したい場合、Format-Listコマンドレットに検索をかけることによって、すべての最も重要な情報を迅速に表示することが可能です。

… | FL –Property Sender, Recipients, MessageSubject, RecipientStatus

detailed results info - forensics in message tracking logs

上の例では、トランスポート ルールが原因でメッセージが配信されなかったことが容易にわかります。 ここでは、ある時点で、誰かが、添付ファイルとキーワード Kitten を件名に持つすべてのメッセージをブロックするメール フロー ルールを開始したことが判明しました。

ある機密データが社外に流出したとします。 メッセージ追跡ログは、社外に電子メールを送信したユーザー、たとえば、特定の競合企業に送信したユーザーをピンポイントで特定するのに役立ちます。

Get-MessageTrackingLog –ResultSize Unlimited | Where -Property Recipients -Like "*@competitive-company.com"

検索により、容疑者を見つけることができます。 もちろん、検索条件を広げたり狭めたりする必要があるかもしれませんが、それはデータがどれだけあるかによるのです。 結果をどうするかは、管理人ブログの議論ではありません。

Further Reading:

  • Message tracking in Office 365 (Exchange Online)
  • Exchange 2019, 2016, 2013, 2010 mailbox backup by export to PST (PowerShell)

コメントを残す

メールアドレスが公開されることはありません。