- Possíveis usos para registos de seguimento de mensagens
- Localização e estrutura dos registos de seguimento de mensagens
- Configurar o seguimento de mensagens
- O que está nos registos de seguimento de mensagens
- Utilizar o Get-MessageTrackingLog cmdlet
Message tracking logs são uma valiosa fonte de informação para qualquer administrador de Exchange. Enquanto o Office 365 tem seu rastreamento de mensagens, que funciona muito bem, o Exchange armazena muito mais dados nos logs, o que pode servir a muitos propósitos.
- Possíveis usos para logs de rastreamento de mensagens
- Localização e estrutura dos logs de rastreamento de mensagens
- Configure o rastreamento de mensagens
- O que está nos registos de seguimento de mensagens
- Os campos mais importantes nos registos de seguimento de mensagens
- Usando o Get-MessageTrackingLog cmdlet
- Como obter informações gerais sobre o fluxo de e-mails no Exchange Server
- Como reunir estatísticas usando o Log do Get-MessageTracking
- Como rastrear mensagens específicas usando o Get-MessageTrackingLog
Possíveis usos para logs de rastreamento de mensagens
Good old message tracking logs podem servir para muitos propósitos diferentes:
- Solucionar problemas de entrega – Se sabe o que procura, os registos de seguimento de mensagens podem dizer-lhe porque é que uma mensagem não foi entregue, se a sua entrega foi atrasada e mais (veja o que está nos registos de seguimento de mensagens)
- Estatísticas – Os registos de seguimento de mensagens mantêm vestígios de cada mensagem que passou pelos seus servidores. Há uma maneira bastante fácil de obter alguns dados para análise – quantas mensagens foram processadas, ou quem enviou a maioria das mensagens na empresa.
- Forensics – Digamos que alguém apaga um e-mail e você não tinha um backup de e-mail. O pior é que o e-mail continha informações confidenciais e foi enviado para a sua empresa competitiva. É aí que os registros de acompanhamento de mensagens podem salvá-lo fornecendo algumas informações valiosas em e-mails.
- Litigação – Semelhante à situação acima. Os logs de rastreamento de mensagens podem e são frequentemente usados quando são necessárias provas para fins de litígio.
- Testar regras de transporte – Especialmente útil quando você configurou várias regras de transporte em sua organização. Sempre que uma regra de transporte é aplicada, ela deixa um rastreamento e você pode usar o Get-MessageTrackingLog para ver quando uma regra de transporte ou uma política DLP foi acionada.
Localização e estrutura dos logs de rastreamento de mensagens
O que são logs de rastreamento de mensagens? Os logs de rastreamento de mensagens são arquivos CSV simples (com uma extensão LOG) armazenados no seu servidor Exchange. O caminho padrão para sua localização física é %ExchangeInstallPath%TransportRoles\Logs\MessageTracking. Os logs têm uma convenção de nomenclatura definida. Lembre-se que, embora você possa alterar os nomes dos arquivos nos logs, isso o impedirá de pesquisá-los usando o Get-MessageTrackingLog cmdlet. Além disso, arquivos com nomes alterados não serão contados para o limite do tamanho da pasta. Isso pode levar a exceder os limites que você configurou.
Para gerenciar espaço e quantidade de dados armazenados nos servidores, o Exchange emprega o registro circular. Em outras palavras, os arquivos mais antigos são sobrescritos sempre que uma pasta excede seu tamanho máximo, ou um arquivo de log atinge sua idade máxima. Se você se ater às configurações padrão, a idade máxima para um arquivo de log é de 30 dias, e o tamanho máximo para um único arquivo é de 10 MB. Por padrão, todos os registros de acompanhamento de mensagens no diretório padrão não podem exceder 1 GB. Você pode alterar todos esses limites usando o PowerShell (Veja configurar o rastreamento de mensagens para detalhes)
Cada dia, um novo arquivo de log de rastreamento de mensagens é criado. A convenção de nomenclatura é:
MSGTRKServiceyyyyymmdd-nnnnnn.log onde:
- O serviço depende de qual serviço criou um log. O MSGTRK aponta para os logs criados pelo serviço Transport; cartas adicionais especificam quais outros serviços geraram o log. MA significa Message Approval, MD para o serviço Mailbox Transport Delivery, MS para o serviço Mailbox Transport Submission.
- aaaaammdd especifica a data em que o log de mensagens foi criado.
- nnnn é o número para o ficheiro do log. Sempre que um arquivo de log atingir seu tamanho máximo, uma próxima cópia será criada. O valor é incremental, e todos os dias começa a partir de (bastante logicamente) 1.
I mencionei alguns valores por defeito. Como você pode suspeitar, esses valores podem ser facilmente alterados.
Configure o rastreamento de mensagens
Antes de começar a alterar os valores padrão dos logs de rastreamento de mensagens, certifique-se de que você sabe o que está fazendo. Os registos de seguimento de mensagens podem tornar-se bastante complicados, em termos de tamanho. Além disso, se você decidir coletar dados por um período indefinido, cada busca em larga escala nos logs de rastreamento de mensagens levará um tempo considerável. Especialmente se você não limitar os seus critérios de pesquisa. Se você planeja coletar informações sobre o seu fluxo de e-mails por um período indefinido, considere exportar o conteúdo dos logs de rastreamento de mensagens para arquivos. Depois, pode armazenar dados em todos os e-mails, excluindo aqueles que apontam, por exemplo, para caixas de correio saudáveis.
Pode configurar os registos de seguimento de mensagens usando o cmdlet Set-TransportService. Usando este cmdlet, você pode:
- Ativar ou desativar o rastreamento de mensagens,
- Modificar o local para armazenar logs de rastreamento de mensagens,
- Modificar o tamanho e limites de idade para logs de rastreamento de mensagens,
- Ativar ou desativar o registro de assuntos. Uma palavra de explicação: por padrão, os registros de rastreamento de mensagens não armazenam nenhum conteúdo de e-mails, exceto para a linha de assunto. Enquanto ter a linha de assunto nos logs melhora muito a experiência de rastreamento, algumas organizações requerem desativar esse recurso por razões de segurança ou privacidade.
Aqui está um exemplo que muda todos os parâmetros de uma só vez:
Set-TransportService Mailbox_Server -MessageTrackingLogEnabled $true -MessageTrackingLogPath "M:\logs" -MessageTrackingLogMaxFileSize 30MB -MessageTrackingLogMaxDirectorySize 2.5GB -MessageTrackingLogMaxAge 365.00:00:00
O cmdlet acima ativa o rastreamento de mensagens para Mailbox_Server e configura o armazenamento de logs para M:\logs. O tamanho limite para um único arquivo de log é alterado para 30 MB. É principalmente uma mudança cosmética, que controla o número de arquivos de log – quanto maior o limite, menos csv é criado a cada dia. O tamanho máximo do diretório (antes dos arquivos mais antigos serem sobrescritos) é definido para 2.5GB, e os arquivos de log são mantidos por 365 dias. Configurando o -MessageTrackingLogMaxAge para 00:00:00 permitirá que você mantenha logs de rastreamento de mensagens por um período indefinido. Ou pelo menos antes do tamanho do diretório ser atingido. Mas quem precisa de poupar espaço no Exchange, certo?
O que está nos registos de seguimento de mensagens
Há algumas coisas que precisa de saber sobre como os registos de seguimento de mensagens armazenam as suas entradas.
- Cada mensagem normalmente gera mais do que uma única entrada no registo de seguimento de mensagens.
- Os cabeçalhos nos registos não são os mesmos que os seus correspondentes atributos PowerShell. Por exemplo, o Event-id nos arquivos de log é EventId no PowerShell. O endereço do destinatário nos logs é igual ao dos destinatários no PowerShell. Quando você estiver em dúvida sobre como procurar usando um determinado atributo, use
Get-MessageTrackingLog –ResultSize 1 | FL * or Get-MessageTrackingLog | Get-Member
. Esses cmdlets dar-lhe-ão uma lista completa de atributos. - Alguns campos estão frequentemente vazios nos registos de seguimento de mensagens. Alguns podem não incluir informações que você pode achar importantes ou relevantes.
Os campos mais importantes nos registos de seguimento de mensagens
- Remetente, Destinatário, MessageSubject – bastante auto-explicativo, mostra quem enviou uma mensagem a quem e qual foi o assunto
- TotalBytes – mostra o tamanho de uma mensagem
- Timestamp – dá informações sobre quando o evento teve lugar
- EventID – um dos campos mais importantes nos registos de seguimento de mensagens. É a principal fonte de informação sobre o que aconteceu com a mensagem. Os valores mais comuns são Receive, Send, Submit, and Fail (Esta documentação da Microsoft descreve todos os tipos de eventos de mensagens.)
- MessageInfo e DestinpientStatus dão informações detalhadas sobre o que aconteceu com a mensagem.
- MessageLatency mostra quanto tempo o servidor precisou para processar o e-mail.
A parte mais importante é como usar o PowerShell para obter os dados certos dos logs.
Usando o Get-MessageTrackingLog cmdlet
Get-MessageTrackingLog permite-lhe procurar em todos os logs de seguimento de mensagens. Se você usar o cmdlet sem quaisquer atributos adicionais, ele retornará até 1000 entradas, a maioria das quais provavelmente estará conectada à atividade das caixas postais de saúde. Se você quiser incluir mais de 1000 entradas com um único cmdlet Get-MessageTrackingLog, adicione o atributo -ResultSize unlimited attribute. Ainda assim, tenho a certeza que não pretende usar o cmdlet para monitorizar a actividade das Caixas de Correio Saudáveis. A filtragem certa é a chave para o sucesso. Abaixo, eu apresento algumas técnicas que você pode usar para filtrar os resultados.
Como obter informações gerais sobre o fluxo de e-mails no Exchange Server
Se você pretende obter uma idéia muito geral do fluxo de e-mails recente em sua organização, use a sintaxe descrita abaixo:
Get-MessageTrackingLog -Start (Get-Date).AddDays(-14) -ResultSize Unlimited | Where -Property Recipients -NotLike "*HealthMailbox*" | ConvertTo-Html > "C:\mtl.html"
O cmdlet acima passa pelos últimos 14 dias de logs de rastreamento de mensagens. Você pode se perguntar por que usar a parte Where-Object -Property Recipients -NotLike “HealthMailbox*”. Este filtro apaga todas as entradas dedicadas às caixas de correio HealthMailbox. Se você estiver curioso, você pode comparar resultados com e sem o filtro Where-Object. Finalmente, o último cmdlet no pipeline exporta os resultados para o arquivo mtl.html. Você também pode exportar os resultados para um arquivo CSV, usando o arquivo cmdlet ConvertTo-Csv.
O problema é que, quando você converter os resultados para um arquivo HTML ou CSV, os campos contendo informações sobre os destinatários não serão exibidos corretamente. Ao invés dos valores certos, os campos conterão expressões System.String. Para corrigir isso, você pode precisar passar os resultados para uma cmdlet adicional Select-Object. Enquanto você estiver nele, por que não limitar o output para que ele contenha apenas os campos mais importantes?
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"
Se você quiser registrar todas as entregas falhadas e registrá-las em um arquivo, use o cmdlet abaixo.
Get-MessageTrackingLog -Start (Get-Date).AddHours(-24) -ResultSize Unlimited –EventId Fail | Where -Property Recipients -NotLike "HealthMailbox*" >> "C:\failed deliveries.csv"
A melhor parte é que o sinal >> adiciona novos valores às entregas falhadas.csv, para que você possa executar o cmdlet periodicamente para registrar todos os Eventos de Falha.
Como reunir estatísticas usando o Log do Get-MessageTracking
Se você quiser executar algumas operações mais complicadas nas suas operações de log de rastreamento de mensagens, salve-as em uma variável.
$mtl Get-MessageTrackingLog -Start (Get-Date).AddDays(-2) –eventId Send -ResultSize Unlimited | Where -Property Recipients -NotLike "*HealthMailbox*"
O cmdlet acima armazena informações sobre todas as mensagens enviadas nos últimos dois dias. Para medir quantos e-mails seus usuários enviaram em geral, simplesmente digite:
$mtl | measure
Para informações mais detalhadas, você pode usar alguns cmdlets adicionais para agrupar, ordenar e exibir os resultados. Por exemplo, você pode exibir a contagem de e-mails para usuários específicos, ordenados em ordem decrescente:
$mtl | group-object -property sender | Select-Object name,count | Sort-Object count -desc
Usando o trio Group-Object, Select-Object e Sort-Object, juntamente com o cmdlet Get-MessageTrackingLog permite que você obtenha facilmente qualquer estatística de fluxo de e-mails que desejar.
Como rastrear mensagens específicas usando o Get-MessageTrackingLog
Finalmente, se você quiser verificar o que aconteceu com uma determinada mensagem não entregue, você pode rapidamente mostrar todas as informações mais importantes bombeando sua busca para uma format-List cmdlet:
… | FL –Property Sender, Recipients, MessageSubject, RecipientStatus
>No exemplo acima, pode facilmente ver que a mensagem não foi entregue devido a uma regra de transporte. Aqui, descobriu-se que em algum momento, alguém lançou uma regra de fluxo de correio que bloqueia todas as mensagens que têm um anexo e a palavra-chave Kitten no assunto.
Vamos supor que alguns dados classificados vazaram para fora da empresa. Os registos de seguimento de mensagens podem ajudá-lo a identificar os utilizadores que enviaram e-mails fora da sua empresa, por exemplo para uma determinada empresa competitiva.
Get-MessageTrackingLog –ResultSize Unlimited | Where -Property Recipients -Like "*@competitive-company.com"
A pesquisa permite-lhe encontrar os suspeitos. É claro que você pode precisar ampliar ou apertar os critérios de busca, mas isso depende da quantidade de dados que você tiver. O que você faz com os resultados não é uma discussão para o blog do administrador.
Outras leituras:
- Rastreamento de mensagens no Office 365 (Exchange Online)
- Exchange 2019, 2016, 2013, 2010 backup da caixa de correio pela exportação para PST (PowerShell)