You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Zabbix Agent采集的监控数据接入C# ASP.NET Web应用

Zabbix监控数据集成到ASP.NET应用实现方案

方案1:对接Zabbix Server API(推荐方案)

Zabbix Agent默认会将所有采集到的指标上报到Zabbix Server,直接对接Zabbix Server提供的官方JSON-RPC API是生产环境最优选择,不需要单独对接每台服务器的Agent,天然支持历史数据查询、批量主机指标拉取,扩展性强。

  • 前置准备:Zabbix Server已正常运行,所有目标服务器的Agent已完成配置并正常上报数据,你持有Zabbix Server的可读写/只读账号,API默认访问地址为http(s)://<Zabbix Server部署IP或域名>/zabbix/api_jsonrpc.php
  • 调用流程:
    1. 首先调用user.login接口传入账号密码,获取授权token,后续所有接口请求都需要携带该token
    2. 调用host.get接口获取所有已接入的主机ID、主机名等基础信息
    3. 调用item.get接口传入指定主机ID,获取该主机下所有已配置的监控项(CPU、内存、磁盘、网络等对应的key)
    4. 调用history.get接口传入监控项ID、时间范围参数,即可拉取对应指标的时序数据
  • ASP.NET集成步骤:
    1. 项目中引入JSON序列化组件,可直接使用.NET内置的System.Text.Json,也可安装Newtonsoft.Json
    2. 封装通用的Zabbix API请求方法,统一处理token自动刷新、异常重试、参数校验逻辑
    3. 根据你的展示需求定时拉取对应指标,存入本地数据库或缓存后返回给前端渲染,建议拉取间隔不低于30s,避免对Zabbix Server造成过大压力
    4. 如果需要展示多维度聚合数据,可将拉取到的原始指标做二次计算后再存储展示

方案2:直接对接Zabbix Agent(仅适合少量服务器测试场景)

如果你没有部署Zabbix Server,仅需要监控少量几台服务器,可以直接主动连接Zabbix Agent拉取实时数据:

  • 前置配置:目标服务器的Zabbix Agent配置文件中开启EnableRemoteCommands=1,Server字段添加你的ASP.NET应用服务器的IP,且放行了Agent默认端口10050的访问权限
  • 实现逻辑:ASP.NET端通过TCP协议连接目标服务器的10050端口,发送对应监控项的key(比如Windows CPU使用率对应perf_counter[\Processor(_Total)\% User Time],Linux CPU使用率对应system.cpu.util),Agent会直接返回当前实时数值
  • 缺点:无历史数据存储能力,需要自行维护所有服务器的IP、监控项列表,扩展性极差,服务器数量超过5台就不建议使用

核心代码示例(ASP.NET Core 调用Zabbix API)

// Zabbix API通用请求实体
public class ZabbixApiRequest
{
    public string Jsonrpc { get; set; } = "2.0";
    public string Method { get; set; }
    public object Params { get; set; }
    public int Id { get; set; }
    public string Auth { get; set; }
}

// 登录获取授权Token
public async Task<string> GetZabbixAuthTokenAsync(string apiUrl, string username, string password)
{
    using var httpClient = new HttpClient();
    var loginRequest = new ZabbixApiRequest
    {
        Method = "user.login",
        Params = new { user = username, password = password },
        Id = 1
    };
    var response = await httpClient.PostAsJsonAsync(apiUrl, loginRequest);
    response.EnsureSuccessStatusCode();
    var result = await response.Content.ReadFromJsonAsync<JsonElement>();
    return result.GetProperty("result").GetString();
}

// 拉取指定主机的监控项列表
public async Task<JsonElement> GetHostItemsAsync(string apiUrl, string authToken, string hostId)
{
    using var httpClient = new HttpClient();
    var itemRequest = new ZabbixApiRequest
    {
        Method = "item.get",
        Params = new { hostids = hostId, output = "extend" },
        Auth = authToken,
        Id = 2
    };
    var response = await httpClient.PostAsJsonAsync(apiUrl, itemRequest);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadFromJsonAsync<JsonElement>();
}

注意:生产环境不要硬编码Zabbix账号密码,建议存入配置文件加密字段或密钥管理服务中,高频率拉取数据建议先做缓存,避免重复请求Zabbix Server。

内容的提问来源于stack exchange,提问作者FH337

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 11:24:10