Olá pessoal, hoje eu vou falar um pouco sobre o application insights do Microsoft Azure para telemetria de informações. Muitos analistas e arquitetos não pensam ou até pensam na parte de logar erro no sistemas, mas por algum motivo não desenvolve essa parte e o sistema vai crescendo até se tornar um monstro.
Após o sistema pronto, alguém pensa: poxa, tenho que ter o log das pessoas que estão utilizando o sistema. O grande problema é desenvolver com banco de dados o log de tudo, em toda classe e todos os métodos.
Para sanar o problema e ter tudo registrado, achei melhor fazer uma telemetria dos dados que eu desejo para guardar no Microsoft Azure. O primeiro ponto Ă© importar a classe ApplicationInsights.
CĂłdigo 1.1 - Importe
using Microsoft.ApplicationInsights;
Depois de importar em seu sistema, basta utilizar a classe TelemetryClient para registar o evento chamado TrackEvent. O legal com ele é que pode ser registrado qualquer propriedade como um dicionário, usando chave e valor. No meu caso, criei uma classe com Get e Set utilizando todas as propriedades que eu preciso.
O que eu preciso registrar é o nome da api, o usuário, o nome do método, a excessão e todos os dados da excessão. Isso porque eu quero registrar todos os erros ocorridos no sistema para dentro do Microsoft Azure.
CĂłdigo 1.2 - Classe com Get e Set
/// <summary>
/// Objects da classe
/// </summary>
public class ElementTelemetryObjects
{
/// <summary>
///
/// </summary>
public string apiName { get; set; }
/// <summary>
/// User Id
/// </summary>
public string userId { get; set; }
/// <summary>
/// MĂ©todo
/// </summary>
public string method { get; set; }
/// <summary>
/// InnerHTML
/// </summary>
public string innerHTML { get; set; }
/// <summary>
/// Message
/// </summary>
public string exceptionMessage { get; set; }
/// <summary>
/// A excecao ocorrida
/// </summary>
public string dataException { get; set; }
}
Depois de ter gerado as propriedades que eu preciso, criei uma classe que receber a classe de propriedade e registra todos os dados. O método chamado Register(ElementTelemetryObjects) prepara as propriedades e registra no Azure através do EventTrack.
O cĂłdigo 1.3 mostra toda a classe preparada com chave e valor com o objeto.
CĂłdigo 1.3 - MĂ©todo principal que registra o EventTrack.
/// <summary>
/// Classe que registra os eventos no telemetry azure
/// </summary>
public class EventTelemetryRegister
{
/// <summary>
/// Telemetry Azure
/// </summary>
protected TelemetryClient Telemetry = new TelemetryClient();
/// <summary>
/// MĂ©todo que registra os Eventos no Telemetry
/// Envie os objetos ElementTelemetryObjects
/// </summary>
/// <param name="objects">ElementTelemetryObjects</param>
public void Register(ElementTelemetryObjects objects)
{
EventTelemetry eventTelemetry = new EventTelemetry(objects.apiName);
eventTelemetry.Properties.Add("UserId", objects.userId);
eventTelemetry.Properties.Add("Method", objects.method);
if (!String.IsNullOrEmpty(objects.innerHTML))
eventTelemetry.Properties.Add("InnerHTML", objects.innerHTML);
if (!String.IsNullOrEmpty(objects.exceptionMessage))
eventTelemetry.Properties.Add("Message", objects.exceptionMessage);
if (!String.IsNullOrEmpty(objects.dataException))
eventTelemetry.Properties.Add("Exception", objects.dataException);
Telemetry.TrackEvent(eventTelemetry);
}
}
Como meu objetivo era registrar todo erro jundo ao Azure, criei os objetos, criei a classe principal e agora eu preciso colocar dentro dos métodos já desenvolvidos. Dentro da Controller do Web API eu coloquei na exception a chamada do método RegistrarTelemetry.
Agora, todo o método da minha controller terá essa chamada para registrar o erro e assim eu vou saber qual usuário chamou, qual a API, qual o erro causado, qual método e tudo mais. Assim eu posso verificar qualquer problema ocorrido dentro do sistema de serviços.
///Pega os documentos locais vinculados no banco de dados
public GetDocumentsResponse GetDocumentsLocais([FromUri] GetDocumentsRequest request)
{
try
{
return DocumentBo.GetDocumentsLocais(request);
}
catch (Exception ex)
{
RegistrarTelemetry(ex, "GetDocumentsLocais");
throw ex;
}
}
Dentro do Azure existe o Application Insights dentro da aplicação. Basta clicar lá e ver quase em tempo real os erros ocorridos dentro do aplicativo ou software que chama a Controller, no meu caso o serviço.
Espero que tenha gostado e qualquer dĂşvida pode entrar em contato pelo site https://www.mauriciojunior.org.