Exchange

Exchange Server Study (2-3). Mail Flow - Message Tracking

Pepuri 2022. 1. 18. 20:04
반응형

이전 포스팅

2022.01.15 - [Exchange] - Exchange Server Study (2-2). Mail Flow - Connector - Outbound

 

이전에도 메시지 추적(Message Tracking) 대해서 다룬 적이 있습니다. 복습 차원에서 다시 한번 작성하였습니다.

Protocol Log 보다는 Message Tracking 현실적으로 쉽고 도움되는 경우가 많다고 생각합니다.

아래의 기술자료를 기준으로 Self Study 진행하였습니다.

Message tracking | Microsoft Docs

Configure message tracking | Microsoft Docs

Search message tracking logs | Microsoft Docs

 

Structure of the message tracking log files

 

로그의 기본 위치는 다음과 같습니다.

%ExchangeInstallPath%TransportRoles\Logs\MessageTracking

 

다만 Mail Flow - Connector 포스팅을 참고하여 로그 위치를 일괄적으로 변경하셨다면, 아래와 같이 변경되었을 것입니다.

Connector Log 포스팅을 읽었다면 modertated transport 제외한 나머지 서비스가 의미하는 바가 쉽게 다가 것이라 생각합니다.

예를 들면, 테스트 환경의 Exchange 3대중 1번서버는 MSGTRK~ 로그만 확인됩니다.

3번서버에서는 MD, MS 끝나는 로그들도 확인됩니다.

Connector Study 진행할 , 수발신을 진행한 Mailbox 3 서버에서 활성화 되어 있었기 때문입니다.

<Inbound 테스트 시나리오>

<Outbound 테스트 시나리오>

파일들을 열어보면 몇가지 내용을 지우면 CSV 동일하게 필터링할 있는 구조로 되어 있습니다.

파일들을 열어보면 몇가지 내용을 지우면 CSV 동일하게 필터링할 있는 구조로 되어 있습니다.

그리고 순환 로깅(Circular logging) 켜져 있을 경우, 아래의 조건에 해당하면 오래된 파일부터 제거한다고 나와 있습니다. 아래의 내용은 기억해야 합니다.

1. Maximum age 도달하였을

2. Maximum size 도달하였을

Fields, Event types, Source values in the message tracking log files

기술 자료상에서 해당 내용들은 자세히 설명되어 있습니다. 항목들을 이해하려면 다양한 케이스를 경험해야 합니다. 이번 포스팅에서는 아래의 내용들은 다루지 않습니다.

 

<Field name>

<Event name>

<Source value>

아래의 자료에서는 Message Tracking Log Set-TransportService 명령어를 통해서 변경하는 방법에 대해서 다루고 있습니다.

Configure message tracking | Microsoft Docs

 

아래의 자료는 Get-MessageTrackingLog 대한 기본 명령어가 설명되어 있습니다.

Search message tracking logs | Microsoft Docs

 

Get-MessageTrackingLog TrackingLog 폴더에 있는 로그를 조건에 맞게 검색을 도와줍니다.

 

우선 Get-MessageTrackingLog 입력하면, Exchange Management Shell 연결한 기본 로그들이 추출됩니다.

 

모든 서버의 Message Tracking Log 추출하려면 다음과 같은 형태로 명령어를 입력합니다.

Get-TransportService|Get-MessageTrackingLog

Get-TransportService|Get-MessageTrackingLog -Resultsize Unlimited|Export-Csv -Path C:\csv\Logtest.csv -Encoding UTF8 

 

첫째줄만 제거한 , Excel Open 합니다.

 

명령어를 통해서 모든 항목이 출력되는 같지만 아래와 같이 일부 항목이 올바르게 표시되지 않습니다.

 

그래서 저같은 경우에는 다음 명령어 구조로 내보내기를 진행합니다.

Get-TransportService | Get-MessageTrackinglog -ResultSize Unlimited |Select-Object Timestamp,ClientIp,ClientHostname,ServerIp,ServerHostname,SourceContext,ConnectorId,Source,EventId,InternalMessageId,MessageId,NetworkMessageId,@{Name="Recipients";Expression={$_.recipients}},@{Name="RecipientStatus";Expression={$_.recipientstatus}},TotalBytes,RecipientCount,RelatedRecipientAddress,@{Name="Reference";Expression={$_.Reference}},MessageSubject,Sender,ReturnPath,Directionality,TenantId,OriginalClientIp,MessageInfo,MessageLatency,MessageLatencyType,@{Name="EventData";Expression={$_.EventData}},TransportTrafficType | export-csv c:\csv\logtest2.csv -Encoding UTF8

.

이전 명령어로 표시 못했던 영역이 올바르게 표시되는 것을 확인할 있습니다.

 

실제 운영하는 서버에서는 로그 용량이 상당하기 때문에 전체 기록을 조회하기는 어렵습니다.

그래서 필요한 정보를 중심으로 추출하는 것을 권장드립니다.

 

Sender Recipient 지정하는 형태

Get-TransportService | Get-MessageTrackinglog -Sender limcmfz@hotmail.co.kr -Recipients onprem-1@contoso.kr -ResultSize Unlimited |Select-Object Timestamp,ClientIp,ClientHostname,ServerIp,ServerHostname,SourceContext,ConnectorId,Source,EventId,InternalMessageId,MessageId,NetworkMessageId,@{Name="Recipients";Expression={$_.recipients}},@{Name="RecipientStatus";Expression={$_.recipientstatus}},TotalBytes,RecipientCount,RelatedRecipientAddress,@{Name="Reference";Expression={$_.Reference}},MessageSubject,Sender,ReturnPath,Directionality,TenantId,OriginalClientIp,MessageInfo,MessageLatency,MessageLatencyType,@{Name="EventData";Expression={$_.EventData}},TransportTrafficType | export-csv c:\csv\logtest3.csv -Encoding UTF8

 

위의 추출된 내용중 Connector-Inbound에서 다뤘던 수신된 메일을 확인해 보겠습니다.

먼저 제목으로 필터링합니다.

그리고 Timestamp 오름차순으로 정렬합니다.

같은 건에 대해서 Message ID NetworkMessage ID 전부 동일합니다. 하지만 Internal Message ID 다를 있습니다.

InternalId=71481140707329 HAREDIRECT 동작이 이루어지고 이후에 새로운 Internal ID 관련된 HARECEIVE, HADISCARD 확인되는 것을 있습니다.

HA 시작하는 이벤트는 shadow message DAG 관련된 부분으로 기회가 되면 나중에 자세히 다루도록 하겠습니다.

지금 단계에서는 메시지의 복사본을 만약을 대비해서 생성하고 버리는 과정이 진행되었다고 이해해도 무방할 같습니다.

 

Connector ID 보면 Transport Service 구간만 나타나는 것으로 확인됩니다

 

 

반응형