四、案例实操:以服务器性能监控为例

4.1 模拟数据生成

为了更直观地展示 Grafana 与 InfluxDB 的集成效果,我们通过 Python 脚本模拟生成服务器性能相关的时间序列数据。以下是一个简单的 Python 脚本示例,用于生成 CPU 使用率和内存使用量数据:

 

import random

import time

from datetime import datetime

# 模拟生成CPU使用率数据

def generate_cpu_usage():

return round(random.uniform(10, 90), 2)

# 模拟生成内存使用量数据(单位:MB)

def generate_memory_usage():

return round(random.uniform(500, 1500), 2)

while True:

cpu_usage = generate_cpu_usage()

memory_usage = generate_memory_usage()

timestamp = int(time.time() * 1000) # 毫秒级时间戳

print(f"cpu_usage,host=server1 value={cpu_usage} {timestamp}")

print(f"memory_usage,host=server1 value={memory_usage} {timestamp}")

time.sleep(5) # 每5秒生成一次数据

在上述脚本中,generate_cpu_usage函数使用random.uniform方法生成 10 到 90 之间的随机浮点数,模拟服务器的 CPU 使用率;generate_memory_usage函数生成 500 到 1500 之间的随机浮点数,模拟内存使用量。通过while True循环和time.sleep(5)语句,每 5 秒生成一组数据,并打印出符合 InfluxDB 数据格式的字符串,包含测量值(如cpu_usage、memory_usage)、标签(如host=server1)、字段值(如 CPU 使用率、内存使用量)和时间戳。这样的模拟数据生成方式可以方便地用于测试和演示 InfluxDB 的数据写入以及 Grafana 的数据可视化功能。

4.2 数据写入 InfluxDB

使用 InfluxDB 的命令行工具或客户端库,将模拟生成的数据写入 InfluxDB。以下是使用 Python 的influxdb库进行数据写入的示例代码:

 

from influxdb import InfluxDBClient

# 连接到InfluxDB

client = InfluxDBClient('localhost', 8086, 'root', 'root','mydb')

# 模拟生成并写入数据

while True:

cpu_usage = generate_cpu_usage()

memory_usage = generate_memory_usage()

timestamp = int(time.time() * 1000) # 毫秒级时间戳

json_body = [

{

"measurement": "cpu_usage",

"tags": {

"host": "server1"

},

"time": timestamp,

"fields": {

"value": cpu_usage

}

},

{

"measurement": "memory_usage",

"tags": {

"host": "server1"

},

"time": timestamp,

"fields": {

"value": memory_usage

}

}

]

client.write_points(json_body)

print(f"Data written: cpu_usage={cpu_usage}, memory_usage={memory_usage}")

time.sleep(5) # 每5秒写入一次数据

在这个示例中,首先使用InfluxDBClient类连接到本地的 InfluxDB 服务器,指定服务器地址为localhost,端口为 8086,用户名和密码均为root,数据库名为mydb。然后,在循环中,每次生成新的 CPU 使用率和内存使用量数据,并创建一个符合 InfluxDB 数据格式的 JSON 体json_body。这个 JSON 体包含了测量值(measurement),如cpu_usage和memory_usage;标签(tags),这里只有host标签,值为server1;时间(time),以毫秒级时间戳表示;以及字段(fields),即实际的性能指标值,如value字段存储 CPU 使用率和内存使用量。最后,使用client.write_points(json_body)方法将数据写入 InfluxDB,并通过time.sleep(5)实现每 5 秒写入一次数据,同时打印出写入的数据,以便确认数据写入操作的执行情况。这样,模拟生成的服务器性能数据就能够持续、准确地存储到 InfluxDB 中,为后续的可视化分析提供数据支持。

4.3 Grafana 可视化展示

在 Grafana 中创建对应的仪表板和面板,展示服务器性能数据的折线图、柱状图等,实现实时监控和趋势分析。具体步骤如下:

  1. 创建仪表板:点击 Grafana 界面左侧菜单栏中的加号图标 “+”,选择 “Dashboard” 选项,创建一个新的仪表板,命名为 “Server Performance Monitoring”。
  1. 添加 CPU 使用率面板:在仪表板中点击 “Add new panel” 按钮,进入面板编辑界面。在 “Visualization” 选项卡中选择 “Graph”(折线图)作为面板类型。在 “Queries” 选项卡中,选择之前配置的 InfluxDB 数据源,编写查询语句以获取 CPU 使用率数据:
 

SELECT mean("value") FROM "cpu_usage" WHERE "host" ='server1' AND time > now() - 1h GROUP BY time(1m)

上述查询语句表示从cpu_usage测量值中,筛选出host为server1,且时间在过去 1 小时内的数据,并按每分钟进行分组,计算每组的平均值。在 “Visualization” 选项卡中,可以进一步设置折线图的颜色、线条粗细、数据点样式等,使图表更加美观和易于阅读。例如,将折线颜色设置为蓝色,线条粗细设置为 2 像素,数据点设置为圆形。在 “General” 选项卡中,设置面板标题为 “CPU Usage in the Past Hour”,并添加一些描述信息,如 “展示过去 1 小时内服务器的 CPU 使用率平均值,每分钟统计一次”,方便用户理解面板内容。

3. 添加内存使用量面板:再次点击 “Add new panel” 按钮,创建一个新面板用于展示内存使用量。选择 “Bar Chart”(柱状图)作为面板类型。在 “Queries” 选项卡中,选择 InfluxDB 数据源,编写查询语句:

 

SELECT mean("value") FROM "memory_usage" WHERE "host" ='server1' AND time > now() - 1h GROUP BY time(5m)

此查询语句从memory_usage测量值中,筛选出host为server1,时间在过去 1 小时内的数据,按每 5 分钟进行分组,并计算每组的平均值。在 “Visualization” 选项卡中,设置柱状图的颜色、柱子宽度等。比如,将柱子颜色设置为绿色,宽度设置为 80%。在 “General” 选项卡中,设置面板标题为 “Memory Usage in the Past Hour”,描述为 “展示过去 1 小时内服务器的内存使用量平均值,每 5 分钟统计一次”。

4. 调整仪表板布局:通过拖动面板,将 CPU 使用率折线图和内存使用量柱状图放置在合适的位置,使仪表板布局合理、美观。可以将相关的面板放在相邻位置,方便对比和分析数据。例如,将 CPU 使用率面板放在上方,内存使用量面板放在下方,这样用户在查看仪表板时,可以更直观地同时观察到两个性能指标的变化情况。

5. 保存仪表板:完成所有面板配置和布局调整后,点击仪表板页面右上角的 “Save dashboard” 按钮,保存仪表板设置。此时,在 Grafana 的仪表板中,就可以实时看到服务器 CPU 使用率和内存使用量的可视化展示,通过折线图和柱状图的变化,清晰地了解服务器性能的实时状态和趋势。

五、高级应用与优化

5.1 自定义查询与表达式

在 Grafana 与 InfluxDB 集成的环境中,深入掌握 InfluxQL 或 Flux 查询语言的高级应用,对于实现复杂的数据过滤、聚合计算等操作至关重要。以 InfluxQL 为例,在服务器性能监控场景下,若要查询特定时间段内所有服务器 CPU 使用率的最大值、最小值和平均值,可使用如下查询语句:

 

SELECT max("usage"), min("usage"), mean("usage")

FROM "cpu_usage"

WHERE "host" != '' AND time >= '2024-10-01T00:00:00Z' AND time <= '2024-10-02T00:00:00Z'

GROUP BY "host"

在上述查询中,通过WHERE子句限定了时间范围为 2024 年 10 月 1 日 0 点至 10 月 2 日 0 点,且过滤出了host不为空的数据;GROUP BY子句按照host进行分组,以便分别统计每台服务器的 CPU 使用率指标;max("usage")、min("usage")和mean("usage")分别用于计算每组数据中的最大值、最小值和平均值。

对于更复杂的数据过滤,如查询 CPU 使用率超过 80% 且内存使用率超过 70% 的服务器记录,可使用如下查询:

 

SELECT *

FROM "server_performance"

WHERE "cpu_usage" > 80 AND "memory_usage" > 70

此查询从server_performance测量值中筛选出满足 CPU 使用率和内存使用率条件的数据,帮助运维人员快速定位性能异常的服务器。

在 Flux 语言中,若要实现类似的功能,查询过去 1 小时内所有服务器的平均 CPU 使用率,可使用如下表达式:

 

from(bucket: "mydb")

|> range(start: -1h)

|> filter(fn: (r) => r._measurement == "cpu_usage")

|> group(columns: ["host"])

|> aggregateWindow(every: 1m, fn: mean)

在这个 Flux 表达式中,from(bucket: "mydb")指定了数据源为mydb存储桶;range(start: -1h)设置时间范围为过去 1 小时;filter(fn: (r) => r._measurement == "cpu_usage")用于过滤出measurement为cpu_usage的数据;group(columns: ["host"])按host进行分组;aggregateWindow(every: 1m, fn: mean)则按每分钟计算每组数据的平均值。

再如,若要查询过去 24 小时内,每个服务器每 5 分钟的磁盘 I/O 读写总量,并按读写总量降序排列,Flux 表达式如下:

 

from(bucket: "mydb")

|> range(start: -24h)

|> filter(fn: (r) => r._measurement == "disk_io")

|> group(columns: ["host"])

|> aggregateWindow(every: 5m, fn: sum)

|> sort(columns: ["_value"], desc: true)

此表达式通过sum函数计算磁盘 I/O 读写总量,sort函数按_value(即读写总量)降序排列,方便运维人员快速了解磁盘 I/O 负载较高的服务器及其负载情况。

5.2 告警设置

在 Grafana 中基于 InfluxDB 数据设置告警规则,能够及时发现服务器性能指标的异常情况,保障系统的稳定运行。以服务器性能监控为例,当服务器性能指标超出阈值时发送通知是非常关键的。

在 Grafana 的仪表板中,找到需要设置告警的面板,点击面板标题右侧的三个点,选择 “Edit” 进入面板编辑模式。在编辑模式下,切换到 “Alert” 选项卡,开始配置告警规则。首先,设置告警名称,如 “Server CPU Usage Alert”,以便于识别和管理告警。接着,定义触发条件,即设置阈值。例如,当 CPU 使用率在过去 5 分钟内的平均值持续超过 80% 时触发告警。在 “Condition” 下拉菜单中选择 “Mean”(表示计算平均值),在右侧的输入框中输入 “80”,并选择时间范围为 “5m”。这样,当 CPU 使用率在连续 5 分钟内的平均值都高于 80% 时,告警条件将被触发。

设置告警通知方式。点击 “Notifications” 选项,添加通知渠道。Grafana 支持多种通知方式,如邮件、Webhook、钉钉、Slack 等。以邮件通知为例,在 “Type” 中选择 “Email”,然后填写接收告警邮件的邮箱地址。如果需要发送更详细的告警信息,可以在 “Message” 文本框中自定义告警内容,如 “Server [host] CPU usage has been above 80% for the past 5 minutes. Current average usage is [value]%.”,其中[host]和[value]会在告警触发时被实际的服务器主机名和 CPU 使用率值替换。

配置告警的严重级别和其他高级选项。在 “Severity” 下拉菜单中选择告警的严重程度,如 “Critical”(严重)、“Warning”(警告)等,以便根据不同的严重级别采取不同的处理措施。还可以设置告警的重复间隔,即每隔多长时间重复发送一次告警通知,避免频繁发送相同的告警信息给用户造成干扰。例如,设置重复间隔为 “15m”,表示如果告警条件持续满足,每 15 分钟发送一次告警通知。完成所有配置后,点击 “Save” 按钮保存告警规则,此时 Grafana 将开始实时监控 InfluxDB 中的数据,一旦触发告警条件,将按照设置的通知方式发送告警通知。

5.3 性能优化

提升 Grafana 与 InfluxDB 集成系统的性能,可从数据库配置、查询优化、缓存设置等多个方面着手。在数据库配置方面,合理调整 InfluxDB 的存储配置参数至关重要。例如,优化数据保留策略(Retention Policy),根据实际业务需求,精准设置数据的保留时间。对于一些实时性要求高但历史数据价值较低的监控数据,如服务器实时性能指标,可将保留时间设置为较短,如一周或一个月;而对于一些重要的历史数据,如金融交易数据或长期的业务统计数据,则可设置较长的保留时间,甚至永久保留。通过这种方式,既能确保重要数据的完整性,又能有效节省磁盘空间,提高数据库的存储效率。同时,调整 InfluxDB 的写入缓存大小,根据服务器的内存资源和数据写入负载情况,适当增大写入缓存,可减少磁盘 I/O 操作的次数,从而显著提升数据写入性能。例如,在内存充足的情况下,将写入缓存大小从默认的 100MB 调整为 500MB,可使数据写入更加高效,尤其适用于高并发写入的场景。

查询优化也是提升系统性能的关键环节。在编写 InfluxDB 查询语句时,应避免全表扫描,尽量使用索引来提高查询效率。在查询服务器 CPU 使用率时,若数据中包含host标签,可通过WHERE "host" ='server1'这样的条件语句利用host标签的索引,快速定位到特定服务器的数据,而不是扫描整个数据库表。对于复杂的查询,可使用连续查询(Continuous Query)预先计算并存储聚合结果,减少实时查询时的计算量。比如,对于每天统计一次的服务器平均 CPU 使用率,可以创建一个连续查询,每天定时计算并存储结果,当需要查询时,直接获取预先计算好的结果,而无需在查询时进行实时计算,大大缩短了查询响应时间。

合理设置缓存能有效减少 Grafana 与 InfluxDB 之间的数据传输和查询次数,提高系统的响应速度。Grafana 自身提供了缓存机制,可配置面板缓存和仪表盘缓存。通过设置面板缓存,将常用面板的数据缓存起来,在一定时间内,当用户再次访问该面板时,直接从缓存中获取数据,而无需重新查询 InfluxDB,减少了数据传输和查询的开销。例如,将面板缓存时间设置为 5 分钟,对于一些实时性要求不是特别高的监控面板,如每日业务统计面板,5 分钟内的数据变化可能不大,通过缓存可以显著提高访问速度。还可以配置 InfluxDB 的查询缓存,InfluxDB 会缓存查询结果,当相同的查询再次发起时,直接返回缓存中的结果,避免重复执行查询操作,提高查询性能。在高并发查询的场景下,查询缓存能够极大地减轻数据库的负载,提高系统的整体性能。

六、总结与展望

Grafana 与 InfluxDB 的深度集成,为数据可视化和分析带来了强大的解决方案。通过详细的安装步骤、精准的集成配置以及丰富的案例实操,我们成功搭建了一个高效的服务器性能监控系统,实现了数据的实时采集、存储与直观展示。在高级应用与优化部分,自定义查询与表达式让我们能够根据具体需求灵活处理数据,告警设置为系统的稳定运行提供了有力保障,性能优化则进一步提升了系统的整体效能。

展望未来,随着物联网、大数据等技术的持续发展,数据量将呈指数级增长,Grafana 与 InfluxDB 的集成在更多领域的应用前景将更加广阔。在智能工厂中,二者的集成可用于实时监控生产设备的运行状态,预测设备故障,实现预防性维护,提高生产效率和产品质量;在城市交通管理中,能够整合交通流量、车辆位置等数据,实现智能交通调度,缓解交通拥堵。随着人工智能和机器学习技术的融入,它们将能够对数据进行更深入的分析和预测,为决策提供更具前瞻性的支持。相信在未来,Grafana 与 InfluxDB 的集成将在更多领域发挥关键作用,助力各行业实现数字化转型和智能化发展。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/95916.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/95916.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/95916.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.net印刷线路板进销存PCB材料ERP财务软件库存贸易生产企业管理系统

# 印刷线路板进销存PCB材料ERP财务软件库存贸易生产企业管理系统 # 开发背景 本软件原为给苏州某企业开发的pcb ERP管理软件&#xff0c;后来在2021年深圳某pcb 板材公司买了我们的软件然后在此基础上按他行业的需求多次修改后的软件&#xff0c;适合pcb板材行业使用。 # 功能…

基于飞算JavaAI的可视化数据分析集成系统项目实践:从需求到落地的全流程解析

引言&#xff1a;为什么需要“可视化AI”的数据分析系统&#xff1f; 在数字化转型浪潮中&#xff0c;企业/团队每天产生海量数据&#xff08;如用户行为日志、销售记录、设备传感器数据等&#xff09;&#xff0c;但传统数据分析存在三大痛点&#xff1a; 技术门槛高&#xff…

MqSQL中的《快照读》和《当前读》

目录 1、MySQL读取定义 1.1、锁的分类 1.2、快照读与当前读 1.3、使用场景 1.4、区别 2、实现机制 2.1、实现原理 2.2、隔离级别和快照联系 1、隔离级别 2、快照读 2.3、快照何时生成 3、SQL场景实现 3.1、快照读 3.2、当前读 4、锁的细节&#xff08;与当前读相…

【Docker项目实战】使用Docker部署Notepad轻量级记事本

【Docker项目实战】使用Docker部署Notepad轻量级记事本一、 Notepad介绍1.1 Notepad简介1.2 Notepad特点1.3 主要使用场景二、本次实践规划2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本四、下载Note…

开疆智能ModbusTCP转Ethernet网关连接FBOX串口服务器配置案例

本案例是串口服务器通过串口采集第三方设备数据转成ModbusTCP的服务器后欧姆龙PLC通过Ethernet连接到网关&#xff0c;读取采集到的数据。具体配置过程如下。配置过程&#xff1a;Fbox做从站FBox采集PLC数据&#xff0c;通过Modbus TCP Server/Modbus RTU Server协议配置地址映…

Vue中的数据渲染【4】

目录1.页面样式绑定&#xff1a;1.概述&#xff1a; 2.绑定方式&#xff1a;1.通过类名绑定&#xff1a;1.通过动态类名绑定&#xff1a;&#xff08;&#xff1a;class&#xff09;2.通过类名数组绑定&#xff1a;3.通过类名对象进行绑定&#xff1a;2.内联样式绑定&#xff1…

LeeCode 39.组合总和

给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates 中的 同一个 数字可以 无限制重复被选取 。如果…

基于Python3.10.6与jieba库的中文分词模型接口在Windows Server 2022上的实现与部署教程

该教程详细阐述了在Windows Server 2022上基于Python3.10.6与jieba库实现并部署中文分词模型接口的完整流程&#xff0c;涵盖技术栈&#xff08;Python3.10.6、jieba、Flask、Waitress、Nginx、NSSM等&#xff09;与环境准备&#xff08;Python安装、虚拟环境配置、依赖包安装及…

java基础(九)sql基础及索引

一、NoSQL 和 SQL 数据库的区别1. 基本概念SQL 数据库&#xff08;关系型数据库&#xff09; 代表产品&#xff1a;SQL Server, Oracle, MySQL (开源), PostgreSQL (开源)。 存储方式&#xff1a;结构化数据&#xff0c;逻辑上以二维表&#xff08;行 & 列&#xff09;形式…

ffmpeg-调整视频分辨率

ffmpeg -i input.mp4 -vf scale1280:720 output_1280x720.mp4-i input.mp4: 指定输入视频文件。-vf scale1280:720: 使用 scale 视频滤镜&#xff0c;将视频宽度设置为 1280 像素&#xff0c;高度设置为 720 像素。output_1280x720.mp4: 指定输出视频文件。 16&#xff1a;9 常…

前端vue3+后端spring boot导出数据

有个项目需要提供数据导出功能。 该项目前端用vue3编写&#xff0c;后端是spring boot 2&#xff0c;数据库是mysql8。 工作流程是&#xff1a;1&#xff09;前端请求数据导出 2&#xff09;后端接到请求后&#xff0c;开启一个数据导出线程&#xff0c;然后立刻返回信息到前端…

基于RK3588的微电网协调控制器:实现分布式能源的智能调控与优化运行

微电网协调控制器方案通过集成先进算法和实时数据技术&#xff0c;实现分布式能源的光伏、储能、风电等设备的智能协调与优化运行‌12。关键功能包括&#xff1a;‌协同优化调度‌&#xff1a;采用模型预测控制&#xff08;MPC&#xff09;动态调整光伏出力、储能充放电策略和负…

机器学习——TF-IDF文本特征提取评估权重 + Jieba 库进行分词(以《红楼梦》为例)

使用 Jieba 库进行 TF-IDF 关键词提取&#xff08;以《红楼梦》为例&#xff09;在中文文本分析中&#xff0c;TF-IDF&#xff08;Term Frequency - Inverse Document Frequency&#xff09; 是最常用的关键词提取方法之一。它通过评估词在单个文档中的出现频率和在所有文档中的…

一周学会Matplotlib3 Python 数据可视化-多子图及布局实现

锋哥原创的Matplotlib3 Python数据可视化视频教程&#xff1a; 2026版 Matplotlib3 Python 数据可视化 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 课程介绍 本课程讲解利用python进行数据可视化 科研绘图-Matplotlib&#xff0c;学习Matplotlib图形参数基本设置&…

Spark执行计划与UI分析

文章目录1.Spark任务阶段划分1.1 job&#xff0c;stage与task1.2 job划分1.3 stage和task划分2.任务执行时机3.task内部数据存储与流动4.根据sparkUI了解Spark执行计划4.1查看job和stage4.2 查看DAG图4.3查看task1.Spark任务阶段划分 1.1 job&#xff0c;stage与task 首先根据…

16-docker的容器监控方案-prometheus实战篇

文章目录一.前置知识1.监控与报警2.监控系统的设计3.监控系统的分类二、prometheus概述1.什么是prometheus2.prometheus的历史3.为什么要学习prometheus4.prometheus的使用场景5.prometheus的宏观架构图6.prometheus软件下载地址三、部署prometheus server监控软件1.同步集群时…

集成电路学习:什么是Image Processing图像处理

Image Processing,即图像处理,是计算机视觉、人工智能、多媒体等领域的重要基础。它利用计算机对图像进行分析、加工和处理,以达到预期目的的技术。以下是对图像处理的详细解析: 一、定义与分类 定义: 图像处理是指用计算机对图像进行分析,以达到所需结果的技术,又称…

基于Android的随身小管家APP的设计与实现/基于SSM框架的财务管理系统/android Studio/java/原生开发

基于Android的随身小管家APP的设计与实现/基于SSM框架/android Studio/java/原生开发

Web 开发 16

1 在 JavaScript&#xff08;包括 JSX&#xff09;中&#xff0c;函数体的写法和返回值处理在 JavaScript&#xff08;包括 JSX&#xff09;中&#xff0c;函数体的写法和返回值处理确实有一些简洁的语法规则&#xff0c;尤其是在箭头函数中。这些规则常常让人混淆&#xff0c;…

超高车辆碰撞预警系统如何帮助提升城市立交隧道安全?

超高车辆带来的安全隐患立交桥和隧道的设计通常基于常规车辆的高度标准。然而&#xff0c;随着重型运输业和超高货车的增加&#xff0c;很多超高车辆会误入这些限高区域&#xff0c;造成潜在的安全隐患。超高车辆与立交桥梁或隧道顶盖发生碰撞时&#xff0c;可能导致结构受损&a…