No ecossistema moderno de observabilidade, os logs são elementos fundamentais para rastrear o comportamento de aplicações, identificar falhas e monitorar performance. Embora o .NET forneça mecanismos nativos de logging via ILogger
, muitas empresas utilizam Zabbix como plataforma de monitoramento, integrando logs e métricas em um ambiente centralizado.
Este artigo explora como mapear logs de aplicações .NET utilizando o ILogger
e integrá-los ao Zabbix, trazendo detalhes técnicos e arquiteturais para implementação.
⚙️ Arquitetura da Solução
A arquitetura de integração entre .NET e Zabbix segue este fluxo:
-
Aplicação .NET gera logs usando
ILogger
. - Os logs podem ser processados e enviados por um Zabbix Sender.
- O Zabbix Server recebe os eventos.
- Os logs ficam disponíveis em dashboards do Zabbix para análise.
🏗️ Configuração no .NET
1. Criando o Projeto
dotnet new webapi -n DotNetZabbixDemo
cd DotNetZabbixDemo
2. Configurando o Logging com ILogger
No arquivo Program.cs
:
var builder = WebApplication.CreateBuilder(args);
// Configuração de logging padrão
builder.Logging.ClearProviders();
builder.Logging.AddConsole();
var app = builder.Build();
app.MapGet("/health", (ILogger<Program> logger) =>
{
logger.LogInformation("Health check chamado em {time}", DateTime.UtcNow);
return Results.Ok("API está saudável");
});
app.Run();
📡 Enviando Logs para o Zabbix
O Zabbix não possui conector nativo para ILogger
, mas podemos usar o Zabbix Sender.
1. Instalar o Zabbix Sender
No servidor de aplicação:
sudo apt-get install zabbix-sender
2. Enviar Logs
No .NET, podemos invocar o zabbix_sender
via Process.Start
:
using System.Diagnostics;
public static class ZabbixLogger
{
public static void SendToZabbix(string host, string key, string value)
{
var process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "zabbix_sender",
Arguments = $"-z zabbix.server.com -s {host} -k {key} -o \"{value}\"",
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false,
CreateNoWindow = true
}
};
process.Start();
process.WaitForExit();
}
}
Uso dentro de um endpoint:
app.MapGet("/order/{id}", (int id, ILogger<Program> logger) =>
{
logger.LogInformation("Consulta de pedido {id}", id);
ZabbixLogger.SendToZabbix("dotnet-api", "order.request", $"Pedido consultado: {id}");
return Results.Ok(new { Id = id, Status = "Processado" });
});
📊 Configuração no Zabbix
- Criar Host no Zabbix com o nome do servidor da aplicação.
- Criar Item para chave
order.request
. - Visualizar logs recebidos em Latest Data.
- Criar Dashboard/Zabbix Screens para exibir métricas e logs recebidos.
🔍 Boas Práticas
✔️ Estruturar logs com ILogger
para facilitar parsing.
✔️ Criar chaves específicas no Zabbix para cada tipo de evento.
✔️ Usar níveis de log (Information, Warning, Error) para priorização.
✔️ Integrar alertas do Zabbix com canais como Slack, Teams ou e-mail.
✅ Conclusão
A integração entre .NET e Zabbix permite centralizar logs e métricas em um único ambiente de observabilidade. Embora não exista integração nativa, o uso de Zabbix Sender torna o processo simples e altamente eficaz. Essa abordagem garante maior visibilidade, ajudando equipes a reagirem rapidamente a falhas e a manterem aplicações em alta disponibilidade.
🤝 Conecte-se Comigo
Se você trabalha com .NET moderno e quer dominar arquitetura, logging, DevOps ou interoperabilidade, vamos conversar:
💼 LinkedIn
✍️ Medium
📬 contato@dopme.io
⁶ Levantai os vossos olhos para os céus, e olhai para a terra em baixo, porque os céus desaparecerão como a fumaça, e a terra se envelhecerá como roupa, e os seus moradores morrerão semelhantemente; porém a minha salvação durará para sempre, e a minha justiça não será abolida.
Isaías 51:6
Top comments (0)