美文网首页工作生活
Sigar+MQTT+Echarts实现简单的系统监控

Sigar+MQTT+Echarts实现简单的系统监控

作者: voxer | 来源:发表于2019-07-04 19:57 被阅读0次

服务器管理系统可视化监控有很多成熟的框架可以选择,我们用过 zabbix , 功能是很多的,但是我们有一些项目只需要很简单的性能监控,用这种成熟框架就有点大材小用了,笔者这里尝试一个简化的方式。

一. 基本结构

image.png
  • 服务端有一个 agent 应用,不断的轮询发送实时的系统数据,比如 cpu、memory等。以 mqtt 的方式推送到 MQTT Broker.
  • 这个 borker 可以用Apache Apollo或EMQ X.
  • 网页端就是订阅 mqtt 的消息,然后实时绘制折线图

二. 服务端实现

这里主要使用 sigar 来获取系统相关信息,sigar 在不同的操作系统下需要拷贝对应的 dll 或 so 文件,所以我们封装了一个d1.framework.osinfo库来简化操作,拷贝这些文件都是自动的,相关代码参考Git。连接 mqtt borker 并发布消息调用的是自封装的 d1.framework.mqttclient 库,代码参考 Git 。所以最后的主要代码非常少:

@Scheduled(cron = "0/10 * * * * ?") //10秒一次
public void task() {
    //do something
    try {
        OsInfo info = osInfo.getOsInfo();
        mqttService.publish("cpu", info.getFreeCpu());
        mqttService.publish("memory", info.getFreeMemory());
    } catch (Exception e) {
        e.printStackTrace();
    }
    System.out.println("又过了10秒了......");
}

三. 网页端

网页端只是用 IBM 提供的 paho-mqtt js库来订阅 mqtt 消息,然后使用 echarts 来画动态曲线图,代码也很简单。

function initChart(chart, name, xDatas, yDatas) {
  // 指定图表的配置项和数据
  var option = {
    title: {
      text: name+"空闲%"
    },
    tooltip: {},
    legend: {
      data: [name]
    },
    xAxis: {
      data: xDatas
    },
    yAxis: {},
    series: [{
      name: '空闲',
      type: 'line',
      data: yDatas
    }]
  };
  chart.setOption(option)
  return option;
}
//
function initMQTT() {
  // Create a client instance
  var client = new Paho.Client("这里填broker的地址", 8083, "/mqtt", getRandomString());

  // set callback handlers
  client.onConnectionLost = onConnectionLost;
  client.onMessageArrived = onMessageArrived;

  // connect the client
  client.connect({
    userName: "user2",
    password: "password2",
    onSuccess: onConnect,
    onFailure: onFailure
  });

  // called when the client failed to connect
  function onFailure(error) {
    console.log("onFailure:" + JSON.stringify(error));
  }
  // called when the client connects
  function onConnect() {
    // Once a connection has been made, make a subscription and send a message.
    console.log("onConnect");
    client.subscribe("cpu");
    client.subscribe("memory");
  }

  // called when the client loses its connection
  function onConnectionLost(responseObject) {
    if (responseObject.errorCode !== 0) {
      console.log("onConnectionLost:" + responseObject.errorMessage);
    }
  }

  // called when a message arrives
  function onMessageArrived(message) {
    console.log("onMessageArrived:" + JSON.stringify(message));
    
    if (message.payloadString) {
      var temp = message.payloadString;
      if ("cpu" == message.topic) {
        if(yDatasCPU.length>100)//不能无限增长,只保留最新100条
            yDatasCPU.shift();
        yDatasCPU.push(Number.parseFloat(temp.substring(0, temp.length - 1)));
        if(xDatasCPU.length>100)
            xDatasCPU.shift();
        xDatasCPU.push(getNow());
        cpuChart.setOption(cpuOption);
      } else if ("memory" == message.topic) {
        if(xDatasMemory.length>100)
            xDatasMemory.shift();
        xDatasMemory.push(getNow());
        if(yDatasMemory.length>100)
            yDatasMemory.shift();
        yDatasMemory.push(Number.parseFloat(temp.substring(0, temp.length - 1)));
        memoryChart.setOption(memoryOption);
      }
    }
  }
}

只是一个示例,所以最后的效果图比较简陋,每10秒会接受到推送过来的 cpu 和 memory 空闲率,动态显示出来,最多显示最近100条数据。


image.png

所有源码参考 Git

相关文章

  • Sigar+MQTT+Echarts实现简单的系统监控

    服务器管理系统可视化监控有很多成熟的框架可以选择,我们用过 zabbix , 功能是很多的,但是我们有一些项目只需...

  • 监控系统及zabbix介绍

    监控系统的原理探究 监控系统的实现监控系统往往需要对物理硬件和应用软件的性能和参数进行数据汇集,实现集中管理和统一...

  • 分布式系统如何定位压力问题

    监控 简单来说,分布式系统需要实现一个基本的监控工具。最简单的办法是在每个节点上部署一个agent,定时上报该机器...

  • 水利泵站安全隔离防护解决方案

    水利泵站计算机监控系统(简称“监控系统”)是水利综合信息系统的核心。通过监控系统建设,可实现对水泵机组、供配电系统...

  • ELK,你知道吗?

    我给你讲解了监控系统的实现原理,先来简单回顾一下,一个监控系统的组成主要涉及四个环节:数据收集、数据传输、数据处理...

  • 线上监控

    监控类型 系统监控 系统监控更多是关注业务系统所在的环境及其资源的情况,简单理解就是能让系统正常运行起来的先决条件...

  • 哨兵+性测基本指标简介(响应时间、TPS)+Ginder简介

    哨兵系统:(参考) 目的:实现对实例和基本监控项的监控 实际操作: 具体实现这里参考的是redis的哨兵监控 1、...

  • 监控使用CPU或内存前十名进程

    监控使用CPU或内存前十名进程监控目的监控方法监控实现一、监控目的掌握系统进程对系统资源的使用情况,掌握机器的动态...

  • 23运维监控服务

    综合架构监控服务概念对系统不间断实时监控 实现报警通知(邮件/微信/短信/电话/手环)实现反馈系统当前状态保证服...

  • 监控IO使用情况

    监控IO使用情况 监控目的 监控指标 监控命令 监控实现 一、磁盘说明 磁盘在系统中负责存储和读取任务,磁盘的处理...

网友评论

    本文标题:Sigar+MQTT+Echarts实现简单的系统监控

    本文链接:https://www.haomeiwen.com/subject/stqchctx.html