常用监控方案 Prometheus + Grafana 简单使用小结

news2025/1/1 9:38:30

文章目录

  • 前言
  • 一、概念
    • 1.1 发展
    • 1.2 时序数据
    • 1.3 Metric
  • 二、Prometheus
    • 2.1 架构
    • 2.2 配置
    • 2.3 查询语言PromQL
    • 2.4 Exporter
  • 三、Grafana
    • 3.1 数据源
    • 3.2 权限
    • 3.3 面板可视化
    • 3.4 仪表盘
  • 四、实战
    • 4.1 监控 Windows/Linux
    • 4.2 监控 JVM
    • 4.3 监控 MySQL
    • 4.4 监控 Springboot API
  • 参考

前言

​ Prometheus 是用 GO 语言开发的一个开源的系统监控和告警工具包,最初是 2012 年 SoundCloud 发布的,后面被很多大公司组织所使用,于2016年加入了云原生云计算基金会(Cloud Native Computing Foundation,CNCF),并于2018年毕业,它现在是一个独立的开源项目,并独立于任何公司进行维护。

​ Prometheus是一个非常优秀的监控工具,准确的说,更是一套监控方案。Prometheus提供了监控数据收集,存储,处理可视化和告警的一套完整的监控解决方案。

  • 官方网站:https://prometheus.io/

  • github 地址:https://github.com/prometheus/prometheus

​ Grafana 是一个开源的跨平台的度量分析、可视化工具,支持多种数据源,如Prometheus、Elasticsearch、InfluxDB等。它提供了丰富的可视化图表和面板,可以帮助用户更好地理解和分析监控数据。

  • 文档地址:https://grafana.com/docs/grafana/latest/
  • github 地址:https://github.com/grafana/grafana

Prometheus 自身携带一个web UI用来显示数据图表,但是有点简陋,而 Grafana 能够支持精美图表的制作并显示,而且自身支持Prometheus, 所以经典的监控方案就是 Prometheus + Grafana。

一、概念

1.1 发展

运维监控的发展历程可以追溯到计算机技术的早期阶段。随着计算机技术的不断发展,运维监控也在不断地演化和改进。

  • 最初的运维监控主要是通过手动检查系统日志和性能指标来进行的,这种方法非常耗时且容易出错。
  • 随着计算机技术的不断发展,出现了一些基于SNMP 协议的监控工具,例如Nagios、Zabbix等等。这些工具可以自动地收集系统日志和性能指标,并对其进行分析和处理,从而帮助用户更好地了解系统的运行状态。
  • 近年来,随着云计算和容器技术的不断发展,运维监控也在不断地演化和改进。例如 Prometheus就是一种基于云原生技术的开源监控系统,它可以帮助用户更好地管理和监控云原生应用程序。

总之,随着计算机技术的不断发展,运维监控也在不断地演化和改进,从最初的手动检查到基于SNMP协议的监控工具,再到现在的自动化运维监控工具,运维监控为用户提供更好的服务和支持。

1.2 时序数据

时序数据,即时间序列数据(Time Series Data),按时间维度顺序记录且索引的数据。像物联网、车联网、工业互联网等领域各种类型的设备都会产生海量的时序数据,这些数据将占世界数据总量的90%以上。在监控平台,时序数据常常指的是系统的性能指标、日志信息等等带有时间戳的序列数据。

时序数据和传统关系数据的对比,时序数据侧重CRUD中的CR,没有U

1.3 Metric

metric(度量,指标)一个很重要的概念,在运维监控出现的非常高频,是指监控系统中的指标,例如CPU使用率、内存使用率、网络流量等等,在Prometheus 其本质是指存在于数据库的一条记录。

在Prometheus client 中可分为4种类型

  • Counter:一种累积度量,它表示一个单调递增的计数器,其值只能在重新启动时增加或重置为零。例如,可以使用计数器来表示所服务的请求、已完成的任务或错误的数量。
  • Gauge:一个可以任意起伏的单个数值。 测量器通常用于测量值,比如温度或当前内存使用量,但也用于可能上下波动的“计数”,比如并发请求的数量。
  • Histogram:直方图,表示一段时间内的数据采样统计结果,通过分桶(bucket)的方式来统计样本的分布。比如统计接口的耗时,多少的请求落在 10ms - 20ms,多少的请求落在 20ms - 30ms 等。
  • Summary:和Histogram类似,根据样本统计出百分位。例如统计链路耗时,TP99 是多少,TP95 是多少等。

二、Prometheus

2.1 架构

  • Prometheus Server:利用服务发现机制获取需要监控的 target,通过Pull方式从target处拉取指标数据,根据定义的rule,可以提前对指标数据再次进行计算,触发报警的发送到 alertmanager组件,用于收集和存储时间序列数据。

  • PushGateway:各个目标主机可上报数据到 PushGateway,然后Prometheus server统一从pushgateway拉取数据。

  • Exporters:采集已有的第三方服务监控指标并暴露metrics。Prometheus支持多种exporter,通过exporter可以采集metrics数据,然后发送到Prometheus server 端。

  • Alertmanager:组件根据报警的告警方式发送相应的通知。从Prometheus server端接收到alerts 后,会进行去重,分组,并路由到相应的接收方,发出报警,常见的接收方式有:电子邮件,微信,钉钉,slack等。

  • Grafana:数据可视化组件,监控仪表盘,通过PromQL从Prometheus Server查询数据,进行展示

  • Prometheus web UI:简单的Web控制台,默认端口9090

2.2 配置

Prometheus 可以通过 --config.file 命令选项来加载配置文件。

当启用–web.enable-lifecycle,可通过URL /-/reload 发送 POST 请求实现不需要重启Prometheus 加载配置文件

配置文档:https://prometheus.io/docs/prometheus/latest/configuration/configuration/,下面是4个常用的配置大类

  • global

    配置全局的信息,如监控数据的间隔,业务的超时时间,告警规则执行周期等

    • scrape_interval 拉取 targets 的默认时间间隔,默认1m
    • scrape_timeout 拉取超时时间,默认10s
    • evaluation_interval 执行rules间隔时间,默认1m
  • rule_files

    包含两种规则文件:记录规则和告警规则。

    • 记录规则

      记录规则允许预先计算经常需要的或计算成本昂贵的表达式,并将其结果保存为一组新的时间序列。查询预先计算的结果通常会比每次需要时执行原始表达式快得多。这对于仪表板特别有用,它们需要在每次刷新时重复查询相同的表达式。

      文档:https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/

    • 告警规则

      根据PromQL来定义警报条件,并向外部服务发送关于触发警报的通知。

      文档:https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/

  • alerting

    配置管理 Alertmanager

  • scrape_configs

    配置拉取数据节点job,文档:https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config

    • job_name job名字
    • scrape_interval 抓取频率,默认globa.scrape_interval
    • scrape_timeout 抓取超时,默认globa.scrape_timeout
    • metrics_path 抓取路径, 默认/metric
    • static_configs 抓取目标URL地址

2.3 查询语言PromQL

Prometheus 提供了一种名为PromQL(Prometheus Query Language)的函数式查询语言,允许用户实时选择和聚合时间序列数据.文档地址:https://prometheus.io/docs/prometheus/latest/querying/basics/

  • 过滤查询

    通过{} 对结果进行过滤,内部标签值可使用=表示相等,!= 表示不相等,=~表示正则匹配,!~表示正则不匹配

    http_requests_total{method="GET"}
    http_requests_total{environment=~"staging|testing|development",method!="GET"}
    http_requests_total{status!~"4.."}
    
  • 范围时间查询

    可通过[时间值]进行选择,例如

    http_requests_total [5m]
    
  • 偏移时间查询

    通过offset 可以允许更改查询中单个即时向量和范围向量的时间偏移量。例如过去5分钟http请求总数

    http_requests_total offset 5m
    
  • 定点时间查询

    @ 允许更改查询中 单个即时向量和范围向量的计算时间。提供给@修改符的时间是一个unix时间戳,用浮点数表示

    例如:返回在2021-01-04T07:40:00+00:00时的值

    http_requests_total @ 1609746000
    
  • 聚合查询

    Prometheus 提供sum,max,min,avg,count,bottomk,topk等聚合命令查询数据

    sum(http_requests_total)
    sum by (application, group) (http_requests_total)
    topk(5, http_requests_total)
    
  • 函数查询

    Prometheus 提供函数参与计算查询数据,文档:https://prometheus.io/docs/prometheus/latest/querying/functions/

    rate(http_requests_total[5m])[30m:1m]
    

2.4 Exporter

Prometheus通过 Exporter 来获取数据,可以根据文档中的链接按需下载安装:https://prometheus.io/docs/instrumenting/exporters/

三、Grafana

3.1 数据源

grafana_datasource_01.png

3.2 权限

grafana 提供一套权限系统,能够让用户根据不同的角色拥有不同的权限,如面板的查看,编辑等等

权限分为三种:admin, viewer, editer

可通过邀请用户,并向用户发送链接的操作来添加用户,并且可以通过组来通知查看面板的权限控制

3.3 面板可视化

相关文档:https://grafana.com/docs/grafana/latest/panels-visualizations/

  • 面板查询表达式

    grafana_03_create-panel_query.png

  • 面板种类

    最常见的就是Graph,更多的种类可以去官网下载导入,注意下版本

    grafana_04_panel_type.png

  • 面板参数

    y轴的参数如果是百分比可以通过如下控制

    grafana_05_panel_percent.png

3.4 仪表盘

上述多个面板整合在一起就是仪表盘了

  • 导入

    除了可以自定义面板外,还可以使用其他人制作好的面板 https://grafana.com/grafana/dashboards/,通过菜单中的Import导入

  • 查看

    • 查看仪表盘可通过url添加参数&kiosk 隐藏侧边栏和顶部菜单

    • 匿名访问

      修改配置文件conf/defaults.ini

      [auth.anonymous]
      # 设置为true即可匿名访问,不用登陆就可以直接访问url
      enabled = true
      
    • 嵌套允许

      修改配置文件conf/defaults.ini

      # 设置为true即可嵌套
      allow_embedding = true
      
  • 变量

    通过变量可以实现下拉列表选择想要显示的部分:文档:https://grafana.com/docs/grafana/latest/dashboards/variables/

四、实战

4.1 监控 Windows/Linux

windows: 下载Exporter https://github.com/prometheus-community/windows_exporter/releases

linux: 下载 https://github.com/prometheus/node_exporter/releases

下面以windows 为例

windows_exporter.exe --collectors.enabled "[defaults],process,container"
windows_exporter.exe --config.file config.yml

grafana_02_windows.png

监控项

监控指标表达式
CPU 使用率100 - (avg by (instance,region) (irate(windows_cpu_time_total{mode=“idle”}[2m])) * 100)
内存 使用率100-(windows_os_physical_memory_free_bytes/windows_cs_physical_memory_bytes)*100
磁盘总使用率(sum(windows_logical_disk_size_bytes{volume!~“Harddisk."}) by (instance) - sum(windows_logical_disk_free_bytes{volume!~"Harddisk.”}) by (instance)) / sum(windows_logical_disk_size_bytes{volume!~"Harddisk."}) by (instance) *100
各个磁盘使用率100- 100 * (windows_logical_disk_free_bytes/windows_logical_disk_size_bytes)
带宽(sum(irate(windows_net_bytes_total[1m])) > 1)* 8
系统线程windows_system_threads
系统进程windows_os_processes

4.2 监控 JVM

下载Exporter:https://github.com/prometheus/jmx_exporter/releases

java -javaagent:jmx_prometheus_javaagent-0.18.0.jar=12345:config.yml -jar vhr-web-0.0.1-SNAPSHOT.jar
rules:
- pattern: ".*"

grafana_06_panel_jvm.png

监控指标表达式
jvm 堆内存使用jvm_memory_bytes_used{area=“heap”}
Eden 区使用jvm_memory_pool_bytes_used{pool=“PS Eden Space”}
Old 区使用jvm_memory_pool_bytes_used{pool=“PS Old Gen”}
元空间 使用jvm_memory_pool_bytes_used{pool=“Metaspace”}
gc时间increase(jvm_gc_collection_seconds_sum[$__interval])
gc增长次数increase(jvm_gc_collection_seconds_count[$__interval])

4.3 监控 MySQL

https://github.com/prometheus/mysqld_exporter/releases

mysqld_exporter.exe --config.my-cnf config.cnf --web.listen-address=localhost:9104
[client]
user=root
password=

grafana_08_mysql_01.png

监控指标表达式
连接数sum(max_over_time(mysql_global_status_threads_connected[$__interval]))
慢查询数sum(rate(mysql_global_status_slow_queries[$__interval]))
平均运行线程数sum(avg_over_time(mysql_global_status_threads_running[$__interval]))
当前QPSrate(mysql_global_status_queries[$__interval])

4.4 监控 Springboot API

有时候在 Springboot 项目中需要统计 API 接口的调用次数和调用时间,可以使用actuator+micrometer ,已经内置两个注解实现两者功能,因为要使用到aop,所以还需导入aop包

文档:https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.enabling

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>
management:
  metrics:
    tags:
      application: ${spring.application.name}
    web:
      server:
        max-uri-tags: 200
  endpoints:
    web:
      exposure:
        include: prometheus

spring:
  application:
    name: prometheus-test-api
@Bean
public TimedAspect timedAspect(MeterRegistry registry) {
	return new TimedAspect(registry);
}
@GetMapping("/test")
@Timed(value = "test_method",description = "测试接口耗时")
@Counted(value = "test_method", description = "测试接口次数")
public String test() {
    //try {
    //    Thread.sleep(1000);
    //} catch (InterruptedException e) {
    //    throw new RuntimeException(e);
    //}
    return "ok";
}

grafana_09_springboot.png

参考

  1. Prometheus+Grafana 搭建全方位的监控告警系统

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

拿森Onebox 2.0新品发布,已获多家车企定点,明年出货量将达百万台

近日&#xff0c;拿森科技在上海举办了2023年新品发布会&#xff0c;重磅发布了拿森Onebox 2.0集成式智能制动系统&#xff08;NBC&#xff09;。 该产品采用全解耦式制动技术&#xff0c;集成了行车制动、驻车制动、车辆稳定性控制等全部功能&#xff0c;包括协调式能量回收、…

Springboot中使用mail邮件

Springboot中使用mail邮件发送 1、配置邮箱的POP3/SMTP服务和IMAP/SMTP服务2、导入依赖和一些默认#配置新的3、发送邮件4、整合工具类 1、配置邮箱的POP3/SMTP服务和IMAP/SMTP服务 这里使用的是QQ邮箱,进入设置-账户&#xff0c;开启下服务。 开启后获取授权码&#xff0c;保存…

华秋DFM软件迭代升级,让用户拥有更好的体验

华秋DFM软件在不断改进和升级的过程中&#xff0c;积极收集和了解用户的需求和反馈&#xff0c;不断提高软件的功能实用性和用户体验。在本次软件迭代中&#xff0c;华秋DFM软件针对以下功能点进行了优化和改进&#xff0c;以让操作更加便捷、让用户拥有更好的体验&#xff01;…

365天深度学习打卡 第P9周:YOLOv5的backbone实现

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊|接辅导、项目定制 文章目录 一、Backbone模块代码1.1 Conv模块1.2 C3模块Bottleneck模块SPPF模块 二、数据集和相关参数设置2.1 数据集操作2.2 相关参数设置2.3…

chatgpt赋能python:Python修改密码:一种安全可靠、快速高效的方式

Python 修改密码&#xff1a;一种安全可靠、快速高效的方式 在数字化时代&#xff0c;越来越多的信息被存储在计算机系统中&#xff0c;因此密码的保护变得尤为重要。人们需要保证他们的密码是安全可靠的&#xff0c;并定期更换密码。Python作为一种强大而且通用的编程语言&am…

Unity用鼠标拖拽UI,UI跟随鼠标移动

Unity用鼠标拖拽UI&#xff0c;UI跟随鼠标移动 效果一、原理二、源码总结&#x1f4a2;&#x1f4a2;版权声明 效果 先上效果 一、原理 继承几个拖拽的接口 IBeginDragHandler, IDragHandler,IEndDragHandler 计算下偏移量&#xff0c;转换下坐标系 限制下可拖拽的范围&…

Tensorflow2基础代码实战系列之时间序列预测任务

深度学习框架Tensorflow2系列 注&#xff1a;大家觉得博客好的话&#xff0c;别忘了点赞收藏呀&#xff0c;本人每周都会更新关于人工智能和大数据相关的内容&#xff0c;内容多为原创&#xff0c;Python Java Scala SQL 代码&#xff0c;CV NLP 推荐系统等&#xff0c;Spark …

实时时钟 RTC

概述 实时时钟(RTC) 模块可长时间维持精确计时&#xff0c;为系统提供实时时钟和日历。该模块功耗极低&#xff0c;最大程度延长电池寿命。 RTC的主要特点&#xff1a; ⚫ BCD 时间 格式 &#xff0c;完整万年历 ⚫ 支持数字调校&#xff0c; 最高 精度可达 0. 06 ppm ⚫ 可输出…

作为996社畜,如何自学Python?一文讲清楚

作为996社畜&#xff0c;应该如何自学Python&#xff1f;今天就给大家分享一下&#xff0c;工作之余&#xff0c;应该如何学习Python&#xff1f; 1. 明确目标 对于零基础的学员而言&#xff0c;要明确你学习Python仅仅是为了满足好奇心&#xff1f;还是有工作需要&#xff0c…

如何使用ArcGIS制作气温空间分布图

本文使用ArcMap10.2&#xff0c;以湖北省为例&#xff0c;通过空间插值&#xff0c;制作湖北省1981-2010年20年平均气温空间分布图 树谷资料库资源大全 1 数据准备 可在中国气象数据网下载湖北省1981-2010共20年的各区站累年平均气温数据和各区站经纬度数据。打开为txt格式 在…

【三】设计模式~~~创建型模式~~~抽象工厂模式(Java)

【学习难度&#xff1a;★★★★☆&#xff0c;使用频率&#xff1a;★★★★★】 3.1. 模式动机 在工厂方法模式中具体工厂负责生产具体的产品&#xff0c;每一个具体工厂对应一种具体产品&#xff0c;工厂方法也具有唯一性&#xff0c;一般情况下&#xff0c;一个具体工厂中…

【计算机网络】网络基础(一)

首先声明&#xff1a;这是开发中用到的网络的知识点&#xff0c;侧重点在于编程实践&#xff0c;不重视概念。网络基础不在于细节&#xff0c;在于构建宏观的结构。后面重点在于网络套接字编程&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 目录 1.背景知识 …

经典文献阅读之--ERASOR(栅格占用过滤动态障碍物)

0. 简介 之前作者在《激光雷达动态障碍物滤除-调研与展望》以及《3D帧间匹配-----剔除动态障碍物》中提到了如何通过各种方法来完成动态障碍物的滤波。而本文也将围绕着如何完成动态障碍物滤波来展开&#xff0c;来介绍《ERASOR: Egocentric Ratio of Pseudo Occupancy-based …

CentOS系统如何开展爬虫工作

CentOS 系统可以用于进行爬虫工作。实际上&#xff0c;很多大型网站和在线服务都运行在 Linux 系统下&#xff0c;包括 CentOS、Ubuntu、Debian 等&#xff0c;因此 CentOS 系统也常用于进行爬虫工作。 在CentOS系统上开展爬虫工作&#xff0c;可以按照以下步骤进行&#xff1a…

CESSCN安全设计与集成一级-中国通信企业协会通信网络安全服务能力评定证书

通信网络安全设计与集成服务能力评定是依据《通信网络安全防护管理办法》、《电信网与互联网第三方安全服务评定准则》YD/T2669-2013、以及《通信网络安全服务能力评定管理办法》的具体要求&#xff0c;对通信网络安全服务单位的技术能力、服务能力、质量保证能力、人员构成与素…

智能路由器开发之OpenWrt简介

智能路由器开发之OpenWrt简介 1. 引言 1.1 智能路由器的重要性和应用场景 智能路由器作为网络通信的核心设备&#xff0c;具有重要的地位和广泛的应用场景。传统的路由器主要提供基本的网络连接功能&#xff0c;但随着智能家居、物联网和大数据应用的快速发展&#xff0c;对于…

池州控股集团财务共享项目启动啦!

近日&#xff0c;由用友网络承建的池州市投资控股集团有限公司财务共享项目启动会成功举办&#xff0c;也标志着池州控股集团财务共享项目正式启动&#xff01;池州控股集团总经理刘俊、用友国资事业部总经理汪发清及其他相关专家和项目组主要成员参加了此次启动会。 池州投控集…

100种思维模型之全局观思维模型-67

全局观思维模型&#xff0c;一个教我们由点到线&#xff0c;由线到面&#xff0c;再由面到体&#xff0c;不断的放大格局去思考问题的思维模型。 01、何谓全局观思维模型 一、全局观思维 什么叫全局观&#xff1f; 世界上的所有东西&#xff0c;都是被规律作用者的&#xff0c…

Linux网络基础-5

在上一篇博客中我们对网络层的典型协议--IP进行了介绍&#xff0c;那么本篇博客作为网络方面的最后一片博客&#xff0c;我们对网络中最后内容--链路层协议进行讲解。 目录 1.链路层协议 1.1MAC地址 1.1.1类型 1.1.2作用 1.2以太网协议 1.2.1协议格式 1.2.2ARP协议 1.…

现场直击 | 沈阳新技术交流会,实景三维再“出圈”

5月19日&#xff0c;由中国测绘学会、中国地理信息产业协会指导&#xff0c;辽宁省测绘地理信息学会、辽宁省土地学会地理信息专业委员会主办&#xff0c;武汉大势智慧科技有限公司、沈阳市勘察测绘研究院有限公司承办的“全自主、全流程、全覆盖”2023实景三维新技术交流会沈阳…