Prometheus + Grafana 构建强大的监控和数据可视化系统(最新推荐)

 更新时间:2024年05月14日 11:34:02   作者:牵着猫散步的鼠鼠  
Prometheus 是一个时间序列数据库,但是,它不仅仅是一个时间序列数据库,它涵盖了可以绑定的整个生态系统工具集及其功能,非常适合Kubernetes集群的监控,这篇文章主要介绍了Prometheus + Grafana 构建强大的监控和数据可视化系统,需要的朋友可以参考下

前言

1. Grafana 是什么

开始前首先要问一个问题,Grafana 到底是什么。

Grafana 是一个监控仪表系统,它是由 Grafana Labs 公司开源的的一个系统监测 (System Monitoring) 工具。它可以大大帮助你简化监控的复杂度,你只需要提供你需要监控的数据,它就可以帮你生成各种可视化仪表。同时它还有报警功能,可以在系统出现问题时通知你。

Grafana 不对数据源作假设,它支持以下各种数据,也就是说如果你的数据源是以下任意一种,它都可以帮助生成仪表。同时在市面上,如果 Grafana 称第二,那么应该没有敢称第一的仪表可视化工具了。因此,如果你搞定了 Grafana,它几乎是一个会陪伴你到各个公司的一件称心应手的兵器。

2.Prometheus是什么

Prometheus 是一个时间序列数据库。但是,它不仅仅是一个时间序列数据库。它涵盖了可以绑定的整个生态系统工具集及其功能,非常适合Kubernetes集群的监控。Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、网络等等)。Promethus有以下特点:

  • 支持多维数据模型:由度量名和键值对组成的时间序列数据
  • 内置时间序列数据库TSDB
  • 支持PromQL查询语言,可以完成非常复杂的查询和分析,对图表展示和告警非常有意义
  • 支持HTTP的Pull方式采集时间序列数据
  • 支持PushGateway采集瞬时任务的数据
  • 支持服务发现和静态配置两种方式发现目标
  • 支持接入Grafana

3.Grafana与Prometheus之间的关系

把 车辆 类比为 计算机系统 或者一个 软件系统:Grafana就是仪表盘,它和车辆的速度表、水温表是一类的,通过这些表盘你可以实时了解系统运行情况。而Prometheus作为一个时序数据库,其实它和大家熟知的Mysql是一类的东西,都是存储数据,提供查询的,它存储了计算机系统在各个时间点上的监控数据。而Grafana仪表盘上的数据,就是通过查询Prometheus获取的。

监控仪表盘效果预览

监控系统搭建

这套监控主要用到了 SpringBoot Actuator + Prometheus + Grafana 三个技术模块,轻量可扩展。

1.环境搭建(Docker部署Prometheus和Grafana)

拉取镜像

docker pull bitnami/prometheus:2.47.2
docker pull grafana/grafana:10.2.0

2.配置grafana

运行grafana镜像,拷贝配置文件

docker run--name grafana -d grafana/grafana:10.2.0
mkdir ./root/docker/Grafana/
docker container cp grafana:/etc/grafana/ ./root/docker/Grafana/

grafana.ini配置文件,路径如下

/root/docker/Grafana/grafana/grafana.ini

修改grafana服务端口

# The http port  to usehttp_port = 4000

修改grafana服务的mysql配置

type=mysql
host=你的mysqlip:3306
name=grafana
user=数据库账户
password=数据库密码

接下来配置数据源,这里我们使用的是Prometheus数据源

在/root/docker/Grafana/grafana/provisioning/datasources目录下新建配置文件datasource.yml

apiVersion: 1
datasources:
  - name: Prometheus
    type: prometheus
    access: proxy
    url: http://你的Prometheus服务ip地址:9090
    isDefault: true

3.配置Prometheus

新建配置文件/root/docker/Grafana/prometheus/prometheus.yml

targets参数为你要监控的应用的ip地址

global:
  scrape_interval: 15s
scrape_configs:
  - job_name: 'x-api-app'
    metrics_path: '/actuator/prometheus'
    static_configs:
      - targets: [ '192.168.1.1:7070' ]

在/root/docker/Grafana目录下新建docker-compose.yml文件,方便统一启动

version: '1'
# 启用脚本;docker-compose -f docker-compose.yml up -d
services:
  # 数据采集
  prometheus:
    image: bitnami/prometheus:2.47.2
    container_name: prometheus
    restart: always
    ports:
      - 9090:9090
    volumes:
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
  # 监控界面
  grafana:
    image: grafana/grafana:10.2.0
    container_name: grafana
    restart: always
    ports:
      - 4000:4000
    depends_on:
      - prometheus
    volumes:
      - ./grafana:/etc/grafana

在/root/docker/Grafana目录下执行compose运行指令

docker compose up -d

如果要停止服务,在docker-compose.yml目录下输入docker compose stop命令即可

查看是否正常启动

4.springboot应用导入

以上我们成功部署了监控环境,接下来我们会讲述如何在springboot程序中引入监控

导入maven依赖

<!-- 监控;actuator-上报、prometheus-采集、grafana-展示 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
</dependency>

actuator、prometheus 是监控所需的内容,aspectjweaver 是使用 prometheus 添加自定义的埋点,而这个会用到切面。

编写配置类PrometheusConfiguration启动监听服务

/**
 * @author www.luckysj.top kitie
 * @description 启动监听服务
 * @create 2023/12/17 15:25:15
 */
@EnableAspectJAutoProxy
@Configuration
public class PrometheusConfiguration {
    @Bean
    public CollectorRegistry collectorRegistry() {
        return new CollectorRegistry();
    }
    @Bean
    public PrometheusMeterRegistry prometheusMeterRegistry(PrometheusConfig config, CollectorRegistry collectorRegistry) {
        return new PrometheusMeterRegistry(config, collectorRegistry, Clock.SYSTEM);
    }
    @Bean
    public TimedAspect timedAspect(MeterRegistry registry) {
        return new TimedAspect(registry);
    }
    @Bean
    public CountedAspect countedAspect(MeterRegistry registry) {
        return new CountedAspect(registry);
    }
}

自定义监控埋点

在需要监控的方法上添加这个注解,其中value为监控埋点名称,在grafana仪表盘添加仪表时可根据这个名称找到相关的监测值

@Timed(value="chat_completions_http",description="xxxx接口")

5.仪表盘配置

访问grafana仪表盘,访问地址如下

http://你的Grafana服务ip:4000

默认账户密码均为admin,第一次进入需要更改密码

接下来我们导入jvm仪表盘

仪表盘代码输入4701,这是使用较多的jvm仪表盘,他会根据代码自动下载对应仪表盘

点击load,仪表盘加载完成,即可进入JVM仪表盘界面了

欸,怎么你的是中文界面?当然,这是可以设置的

6.自定义仪表

最后再讲下自定义仪表吧!

进入JVM仪表盘,在右上角位置点击添加可视化

然后会进入到自定义界面

在这里,你可以选择显示的数据,你在springboot那定义的切面数据名可以在这里找到,点击数据,并点击右上角的Run queries

然后对应的数据图表的出来了

在右侧可对图表进行定制化的样式设置

点击Apply应用图表到仪表盘

在仪表盘界面,可对图表进行拖动位置,调整大小等操作,很方便!

最后,在仪表盘界面保存设置(这点很重要,不然功亏一篑)

更后面多细节就靠自己挖掘啦

到此这篇关于Prometheus + Grafana 构建强大的监控和数据可视化系统的文章就介绍到这了,更多相关Prometheus 数据可视化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 8种类型极品程序员,不知你属于哪一种?

    8种类型极品程序员,不知你属于哪一种?

    这篇文章主要介绍了8种类型极品程序员,不知你属于哪一种?本文总结归纳了8种程类型的程序员,总结的非常精辟,来看看你是属于哪一种吧~
    2014-09-09
  • 如何部署kubernetes-dashboard改成http免密登录

    如何部署kubernetes-dashboard改成http免密登录

    这篇文章主要介绍了如何部署kubernetes-dashboard改成http免密登录,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-03-03
  • thymeleaf实现th:each双重多重嵌套功能

    thymeleaf实现th:each双重多重嵌套功能

    今天给大家分享一个使用 thymeleaf 实现一个动态加载一二级文章分类的功能,本文通过代码讲解的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧
    2019-11-11
  • 使用Git向GitHub上传更新内容

    使用Git向GitHub上传更新内容

    这篇文章介绍了使用Git向GitHub上传更新内容的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • 编程知识点(1)关键词之存储类型

    编程知识点(1)关键词之存储类型

    这篇文章主要介绍了编程知识点(1)关键词之存储类型的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-07-07
  • Typora 0.11.18免费版本安装使用教程(亲测可用)

    Typora 0.11.18免费版本安装使用教程(亲测可用)

    Typora是一款非常使用的笔记工具,对于程序员非常友好,在2021年11月23日,Typora 正式发布 1.0 版本,进入了付费时代,Typora免费版本0.11.18(最后的免费版),本文给大家分享Typora免费获取方法及安装使用教程,感兴趣的朋友参考下吧
    2022-07-07
  • IE条件语句 IE hack大全

    IE条件语句 IE hack大全

    条件注释只有在IE浏览器被支持,因此仅适用于IE的特殊指令。从IE5起都支持
    2012-05-05
  • VsCode运行html界面的实战步骤

    VsCode运行html界面的实战步骤

    在VSCode中默认编写的HTML页面是不能运行的,下面这篇文章主要给大家介绍了关于VsCode运行html界面的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-10-10
  • DevOps,CI,CD,自动化简述

    DevOps,CI,CD,自动化简述

    这篇文章主要介绍了DevOps,CI,CD,自动化简单介绍,通过本文给大家简单介绍DevOps,CI,CD,自动化这四者的基本概念,需要的朋友可以参考下
    2021-07-07
  • 趁热打铁!HTTPGet与HTTPPost的区别详解

    趁热打铁!HTTPGet与HTTPPost的区别详解

    这篇文章主要介绍了趁热打铁!HTTPGet与HTTPPost的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10

最新评论