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)