这个实验通过远端环境来完成体验数据生成与灵活的可视化监控,我们会使用已经部署在远端的 InfluxDB 和 Grafana 来帮助我们完成这个实验

InfluxDB 和 Grafana 是两个用于监控和可视化的开源工具,它们经常结合在一起以提供全面的监控解决方案。

  1. InfluxDB:
  • 简述: InfluxDB 是一个时间序列数据库管理系统(TSDB),专门设计用于处理大量时间序列数据,如服务器性能监控、传感器数据等。
  • 特点: 高性能、可扩展、支持 SQL 查询语言,适用于存储和检索时间相关的数据。
  • 用途: 适用于大规模的监控、度量和事件数据的存储,提供实时查询和分析。
  1. Grafana:
  • 简述: Grafana 是一个开源的数据可视化和监控平台,支持多种数据源,包括 InfluxDB、Prometheus、Elasticsearch 等。
  • 特点: 提供丰富的图表和面板,支持灵活的查询语言,可用于创建仪表盘以可视化和分析数据。
  • 用途: 主要用于构建实时监控仪表盘,对数据进行可视化和分析,帮助用户更好地理解和管理系统的性能。
  1. 结合优势:
  • 数据存储与可视化一体化: InfluxDB 作为时间序列数据库,存储了大量的监控数据,而 Grafana 则提供了强大的可视化工具,将这些数据转化为直观的图表和仪表盘。
  • 灵活查询与实时监控: InfluxDB 的 SQL 查询语言使用户能够灵活地提取所需的数据,而 Grafana 则允许用户实时监控和动态调整可视化展示。
  • 跨数据源支持: Grafana 支持多种数据源,因此可以轻松整合其他数据存储系统,提供更全面的监控和分析功能。
  • 社区支持和扩展性: InfluxDB 和 Grafana 都有强大的社区支持,用户可以通过插件和扩展来满足特定需求,定制化监控解决方案。

总体而言,InfluxDB 和 Grafana 的结合为用户提供了一个强大的监控和可视化平台,能够满足复杂系统中的实时数据分析和可视化需求。

找一个适合编程的目录,新建一个项目文件夹,名字自己决定。

在vscode中打开你建立的目录。

在vscode中新建一个python文件,名字叫 utils.py,然后将下列代码拷贝进去并存盘。

import datetime
import influxdb\_client
from influxdb\_client.client.write\_api import SYNCHRONOUS

# InfluxDB Init
token = "s6SUDcsQx1uct15vdQ1-XsBlwYdfZFviYAkB1BBKkdZ7nSabGQJFkUtHRvEmDsvq3LfM5Nuh\_LFmbvs9ec0KwA=="
org = "yeslab"
bucket = "first\_demo"
influx\_server = "http://183.6.42.206:3033"

class DataWriter:
    def \_\_init\_\_(self):
        client = influxdb\_client.InfluxDBClient(url=influx\_server, token=token, org=org)
        self.api\_writer = client.write\_api(write\_options=SYNCHRONOUS)

    def write\_ts\_data(self, pname, field\_tup):
        data\_point = influxdb\_client.Point(pname).field(field\_tup\[0\], field\_tup\[1\])
        self.api\_writer.write(bucket=bucket, org=org, record=data\_point)

结束后你的vscode看起来是这样子。

在vscode中新建一个python文件,名字叫 demo.py,然后将下列代码拷贝进去并存盘。

import time
import numpy as np
from utils import DataWriter

cisco\_writer = DataWriter()

# CPU使用率、内存利用率、
def low\_high\_random(low, high):
    return np.random.rand()\*(high - low) + low

# 丢包数量
def rand\_int(max\_value):
    return np.random.randint(0,max\_value)

# 假设这是一台交换机
def device\_1(name):
    print(f"Device - {name} 开始监控!")
    cpu1 = low\_high\_random(43, 80)
    cpu2 = low\_high\_random(35, 67)
    memory = low\_high\_random(18, 85)
    g1\_drop\_tx\_ps = 0
    g1\_drop\_rx\_ps = rand\_int(10)
    g2\_drop\_tx\_ps = 0
    g2\_drop\_rx\_ps = 0
    g1\_tx\_bandwidth\_utilization = rand\_int(90)
    g1\_rx\_bandwidth\_utilization = rand\_int(100)
    g2\_tx\_bandwidth\_utilization = rand\_int(60)
    g2\_rx\_bandwidth\_utilization = rand\_int(60)
    g1\_tx\_queue = 0
    g1\_rx\_queue = rand\_int(100)
    g2\_tx\_queue = 0
    g2\_rx\_queue = 0

    metric\_list = \[cpu1, cpu2, memory, g1\_drop\_tx\_ps, g1\_drop\_rx\_ps, g2\_drop\_tx\_ps, g2\_drop\_rx\_ps, memory, g1\_tx\_bandwidth\_utilization, g1\_rx\_bandwidth\_utilization, g2\_tx\_bandwidth\_utilization, g2\_rx\_bandwidth\_utilization, g1\_tx\_queue, g1\_rx\_queue, g2\_tx\_queue, g2\_rx\_queue\]
    name\_list = \['cpu1', 'cpu2', 'memory', 'g1\_drop\_tx\_ps', 'g1\_drop\_rx\_ps', 'g2\_drop\_tx\_ps', 'g2\_drop\_rx\_ps', 'memory', 'g1\_tx\_bandwidth\_utilization', 'g1\_rx\_bandwidth\_utilization', 'g2\_tx\_bandwidth\_utilization', 'g2\_rx\_bandwidth\_utilization', 'g1\_tx\_queue', 'g1\_rx\_queue', 'g2\_tx\_queue', 'g2\_rx\_queue'\]

    for i in range(len(metric\_list)):
        cisco\_writer.write\_ts\_data("demo\_device", (name\_list\[i\], metric\_list\[i\]))

while True:
    device\_1('cisco\_switch')
    time.sleep(10)

结束后你的vscode看起来是这样子。

选中 demo.py 并点击右上角的运行图标。

程序开始运行后会慢慢刷新一条命令行回显提示“Device - cisco_switch 开始监控!”

登录远程Grafana Demo平台 http://183.6.42.206:3032/

使用如下账户登入:

  • 账号:netauto
  • 密码:yeslab123

登入后,如果代码一直在运行,就可以看到如下所示的监控指标了。如果看到指标都是No Data,那么请调整右上角的数据展示时间为Last 15 minutes

作为本课程的一个起始点,你已经运行了一份自动化生成数据并可视化的代码,这是一个非常好的开端,继续开心的学习吧!