当前位置: 首页 > news >正文

【实时Linux实战系列】实时系统的可观测性:Prometheus 与 Grafana 集成

在实时系统中,系统的性能和稳定性是至关重要的。实时系统通常用于对时间敏感的应用场景,如工业自动化、航空航天、金融交易等。这些场景要求系统能够在严格的时间约束内完成任务,任何延迟都可能导致严重的后果。因此,实时系统的可观测性变得尤为重要。可观测性指的是能够通过外部测量来了解系统内部状态的能力。通过监控关键指标,如任务延迟、CPU利用率等,可以及时发现并解决潜在问题,确保系统的稳定运行。

Prometheus 和 Grafana 是目前最流行的开源监控工具组合。Prometheus 是一个强大的时间序列数据库,用于收集和存储监控数据;Grafana 则是一个功能强大的可视化工具,可以将 Prometheus 中的数据以直观的图表形式展示出来。通过将实时系统的延迟指标(如 cyclictestftrace 的结果)导出为 Prometheus 指标,并使用 Grafana 创建可视化仪表盘,我们可以实现对系统实时性能的持续监控和告警。

掌握 Prometheus 和 Grafana 的集成对于开发者来说具有重要的价值。它不仅可以帮助开发者更好地理解和优化实时系统,还可以在实际项目中提高系统的可靠性和性能。

核心概念

实时任务的特性

实时任务是指那些对时间有严格要求的任务。它们通常需要在规定的时间内完成,否则可能导致系统不稳定或数据错误。实时任务的关键特性包括:

  • 时间约束:任务必须在规定的时间内完成。

  • 优先级:高优先级的任务优先执行。

  • 确定性:任务的执行时间是可以预测的。

Prometheus

Prometheus 是一个开源的监控系统,主要用于收集和存储时间序列数据。它的核心概念包括:

  • 指标:Prometheus 中的数据以指标的形式存储。指标可以是计数器(Counter)、计时器(Gauge)、直方图(Histogram)等。

  • 目标:Prometheus 通过 HTTP API 从目标(如服务或设备)中抓取指标。

  • 存储:Prometheus 将抓取的指标存储在本地的时间序列数据库中。

Grafana

Grafana 是一个开源的可视化工具,用于展示 Prometheus 中的数据。它的核心概念包括:

  • 数据源:Grafana 可以连接到多种数据源,如 Prometheus、InfluxDB 等。

  • 仪表盘:Grafana 通过仪表盘展示数据。仪表盘可以包含多个图表,如折线图、柱状图等。

  • 告警:Grafana 可以设置告警规则,当数据超过阈值时发送通知。

环境准备

软硬件环境

  • 操作系统:Ubuntu 20.04 或更高版本

  • 开发工具:Prometheus、Grafana、cyclictestftrace

  • 版本信息

    • Prometheus:2.30.0

    • Grafana:8.0.0

    • cyclictest:5.10.0

    • ftrace:5.10.0

环境安装与配置

安装 Prometheus
  1. 下载 Prometheus:

  2. wget https://github.com/prometheus/prometheus/releases/download/v2.30.0/prometheus-2.30.0.linux-amd64.tar.gz
  3. 解压并安装:

    tar xvfz prometheus-2.30.0.linux-amd64.tar.gz
    cd prometheus-2.30.0.linux-amd64
  4. 配置 Prometheus:

    编辑 prometheus.yml 文件,配置 Prometheus 从目标抓取指标:

    global:scrape_interval: 15sscrape_configs:- job_name: 'prometheus'static_configs:- targets: ['localhost:9090']
  5. 启动 Prometheus:

  6. ./prometheus --config.file=prometheus.yml
安装 Grafana
  1. 添加 Grafana 的官方仓库:

  2. sudo apt-get install -y apt-transport-https
    sudo apt-get install -y software-properties-common wget
    wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
    echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
  3. 安装 Grafana:

    sudo apt-get update
    sudo apt-get install grafana
  4. 启动 Grafana:

  5. sudo systemctl start grafana-server
    sudo systemctl enable grafana-server
安装 cyclictestftrace
  1. 安装 cyclictest

  2. sudo apt-get install rt-tests
  3. 启用 ftrace

  4. sudo echo 1 > /sys/kernel/debug/tracing/tracing_on
    sudo echo function > /sys/kernel/debug/tracing/current_tracer

实际案例与步骤

步骤 1:导出 cyclictest 指标

  1. 运行 cyclictest

  2. cyclictest -t -p 80 -n -i 1000 -l 100000

    这条命令会以 1000 微秒的间隔运行 cyclictest,持续 100000 次。

  3. 导出指标

    创建一个简单的 Prometheus 导出器脚本 cyclictest_exporter.py

    #!/usr/bin/env python3
    import subprocess
    import time
    from prometheus_client import start_http_server, GaugeCYCLICTEST_CMD = "cyclictest -t -p 80 -n -i 1000 -l 100000"
    CYCLICTEST_GAUGE = Gauge('cyclictest_latency', 'Cyclictest latency')def run_cyclictest():process = subprocess.Popen(CYCLICTEST_CMD.split(), stdout=subprocess.PIPE)while True:output = process.stdout.readline()if not output:breaklatency = float(output.split()[1])CYCLICTEST_GAUGE.set(latency)if __name__ == '__main__':start_http_server(8000)while True:run_cyclictest()time.sleep(1)
  4. 启动导出器

  5. python3 cyclictest_exporter.py

步骤 2:配置 Prometheus 抓取 cyclictest 指标

  1. 编辑 Prometheus 配置文件

    prometheus.yml 文件中添加一个新的抓取任务:

  2. scrape_configs:- job_name: 'cyclictest'static_configs:- targets: ['localhost:8000']
  3. 重启 Prometheus

  4. ./prometheus --config.file=prometheus.yml

步骤 3:配置 Grafana

  1. 添加 Prometheus 数据源

    打开 Grafana 的 Web 界面(默认地址为 http://localhost:3000),登录后进入设置页面,添加 Prometheus 作为数据源。

  2. 创建仪表盘

    创建一个新的仪表盘,添加一个图表,选择 cyclictest_latency 指标作为数据源。

  3. 配置告警

    在 Grafana 中设置告警规则,当 cyclictest_latency 超过某个阈值时发送通知。

步骤 4:导出 ftrace 指标

  1. 运行 ftrace

  2. sudo echo 1 > /sys/kernel/debug/tracing/tracing_on
    sudo echo function > /sys/kernel/debug/tracing/current_tracer
  3. 导出指标

    创建一个简单的 Prometheus 导出器脚本 ftrace_exporter.py

  4. #!/usr/bin/env python3
    import subprocess
    import time
    from prometheus_client import start_http_server, GaugeFTRACE_CMD = "cat /sys/kernel/debug/tracing/trace"
    FTRACE_GAUGE = Gauge('ftrace_latency', 'Ftrace latency')def run_ftrace():process = subprocess.Popen(FTRACE_CMD.split(), stdout=subprocess.PIPE)while True:output = process.stdout.readline()if not output:breaklatency = float(output.split()[1])FTRACE_GAUGE.set(latency)if __name__ == '__main__':start_http_server(8

 

  1. while True: run_ftrace() time.sleep(1)


3. **启动导出器**:```bash
python3 ftrace_exporter.py

步骤 5:配置 Prometheus 抓取 ftrace 指标

  1. 编辑 Prometheus 配置文件

    prometheus.yml 文件中添加一个新的抓取任务:

  2. scrape_configs:- job_name: 'ftrace'static_configs:- targets: ['localhost:8001']
  3. 重启 Prometheus

  4. ./prometheus --config.file=prometheus.yml

步骤 6:在 Grafana 中添加 ftrace 指标

  1. 添加图表

    在 Grafana 的仪表盘中添加一个新的图表,选择 ftrace_latency 指标作为数据源。

  2. 配置告警

    设置告警规则,当 ftrace_latency 超过某个阈值时发送通知。

常见问题与解答

Q1: Prometheus 无法抓取指标

问题描述:Prometheus 无法从目标中抓取指标。

解决方案

  1. 确保目标服务正在运行,并且端口已正确配置。

  2. 检查 Prometheus 的配置文件,确保抓取任务的配置正确。

  3. 使用 curl 测试目标服务是否可以访问:

  4. curl http://localhost:8000/metrics

Q2: Grafana 无法显示指标

问题描述:Grafana 无法显示 Prometheus 中的指标。

解决方案

  1. 确保 Grafana 已正确添加 Prometheus 作为数据源。

  2. 检查 Grafana 的查询语句是否正确。

  3. 确保 Prometheus 中的指标名称和 Grafana 中的查询一致。

Q3: 告警规则无法触发

问题描述:Grafana 中的告警规则无法触发。

解决方案

  1. 确保告警规则的阈值设置合理。

  2. 检查告警规则的查询语句是否正确。

  3. 确保 Prometheus 中的指标数据是实时更新的。

实践建议与最佳实践

调试技巧

  1. 使用 Prometheus 的 Web 界面:Prometheus 提供了一个 Web 界面,可以用来测试查询语句和查看指标数据。

  2. 查看 Grafana 的日志:如果 Grafana 无法显示数据,可以通过查看 Grafana 的日志来排查问题。

性能优化

  1. 合理设置抓取间隔:抓取间隔过短会增加系统负担,过长则可能导致数据不及时。建议根据实际需求设置合理的抓取间隔。

  2. 优化 Grafana 的查询语句:复杂的查询语句会影响 Grafana 的性能,建议优化查询语句以提高性能。

常见错误解决方案

  1. 指标名称冲突:如果 Prometheus 中存在多个相同名称的指标,可能会导致数据不一致。建议为指标添加唯一的标签。

  2. 数据源连接失败:如果 Grafana 无法连接到 Prometheus 数据源,可能是由于网络问题或配置错误。建议检查网络连接和数据源配置。

总结与应用场景

通过本教程,我们学习了如何将实时系统的关键延迟指标(如 cyclictestftrace 的结果)导出为 Prometheus 指标,并使用 Grafana 创建可视化仪表盘。我们还探讨了如何配置 Prometheus 和 Grafana,以及如何解决常见问题。掌握这些技能对于开发者来说具有重要的价值,可以帮助他们在实际项目中更好地监控和优化实时系统的性能。

实时系统的可观测性是确保系统稳定运行的关键。通过 Prometheus 和 Grafana 的集成,我们可以实现对系统实时性能的持续监控和告警。希望读者能够将所学知识应用到真实项目中,提高系统的可靠性和性能。

http://www.dtcms.com/a/464912.html

相关文章:

  • HTML 元素:构建网页的基础
  • HTML应用指南:利用GET请求获取全国中国建设银行网点位置信息
  • AI编程 | 基于飞书知识库+多模态大模型,打造B站视频AI笔记自动生成系统
  • 专门做预售的网站做app需要学什么编程
  • [VoiceRAG] RAG工具集 | attach_rag_tools | _search_tool | _report_grounding_tool
  • ppo笔记2
  • 小九源码-springboot082-java旅游攻略平台
  • 从 Kotlin 编译器 API 的变化开始: 2.2.2X -> 2.3.0-Beta1
  • go中调用合约
  • 用Python可视化国庆期间旅游概况与消费趋势
  • InitLWIP() 初始化
  • Python爬虫实战:获取新浪旅游热门景点排行榜及数据分析
  • C++设计模式之行为型模式:中介者模式(Mediator)
  • 为什么苏州网络进不了网站ps设计网站
  • [C# starter-kit] Domain Entities | `AuditableEntity`基类 | 跟踪变化 | 软删除
  • 深度复盘+完整源码:我把 libuv 的高性能内存池,用现代 C++ 给你扒了个底朝天
  • GUI 自动化与接口自动化:概念、差异与协同落地
  • 网站建设公司是怎么找客户idc网站模板源码下载
  • kafka的数据消费通过flinksql 入数到Doris的报错(Connection timed out)
  • 【汽车篇】AI深度学习在汽车零部件外观检测——石墨电极板的应用
  • 花型图案设计网站做网站自己能做百度推广吗
  • Java求职面试实战:从Spring Boot到微服务架构的技术探讨
  • 网站做要钱提高美誉度的网络营销方式
  • 自己动手制作鲁大师AiNas手机无线数据线,Termux 安装kod桌面浏览器,打造私人NAS云盘,让电脑和手机零配置无线传输文件
  • 【开题答辩全过程】以 爱心捐赠物资管理系统为例,包含答辩的问题和答案
  • python进阶_Day3
  • 工控机如何联网
  • 温岭市住房和城乡建设局网站云阳如何做网站
  • 大模型应用比赛-表格知识挑战赛总结
  • 通过0x80软件中断执行系统调用