这个实验通过远端环境来完成体验数据生成与灵活的可视化监控,我们会使用已经部署在远端的 InfluxDB 和 Grafana 来帮助我们完成这个实验
InfluxDB 和 Grafana 是两个用于监控和可视化的开源工具,它们经常结合在一起以提供全面的监控解决方案。

- InfluxDB:
- 简述: InfluxDB 是一个时间序列数据库管理系统(TSDB),专门设计用于处理大量时间序列数据,如服务器性能监控、传感器数据等。
- 特点: 高性能、可扩展、支持 SQL 查询语言,适用于存储和检索时间相关的数据。
- 用途: 适用于大规模的监控、度量和事件数据的存储,提供实时查询和分析。
- Grafana:
- 简述: Grafana 是一个开源的数据可视化和监控平台,支持多种数据源,包括 InfluxDB、Prometheus、Elasticsearch 等。
- 特点: 提供丰富的图表和面板,支持灵活的查询语言,可用于创建仪表盘以可视化和分析数据。
- 用途: 主要用于构建实时监控仪表盘,对数据进行可视化和分析,帮助用户更好地理解和管理系统的性能。
- 结合优势:
- 数据存储与可视化一体化: 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/
使用如下账户登入:
登入后,如果代码一直在运行,就可以看到如下所示的监控指标了。如果看到指标都是No Data,那么请调整右上角的数据展示时间为Last 15 minutes

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