开始前首先要问一个问题,Grafana 到底是什么。
Grafana 是一个监控仪表系统,它是由 Grafana Labs 公司开源的的一个系统监测 (System Monitoring) 工具。它可以大大帮助你简化监控的复杂度,你只需要提供你需要监控的数据,它就可以帮你生成各种可视化仪表。同时它还有报警功能,可以在系统出现问题时通知你。
Grafana 不对数据源作假设,它支持以下各种数据,也就是说如果你的数据源是以下任意一种,它都可以帮助生成仪表。同时在市面上,如果 Grafana 称第二,那么应该没有敢称第一的仪表可视化工具了。因此,如果你搞定了 Grafana,它几乎是一个会陪伴你到各个公司的一件称心应手的兵器。
Prometheus 是一个时间序列数据库。但是,它不仅仅是一个时间序列数据库。它涵盖了可以绑定的整个生态系统工具集及其功能,非常适合Kubernetes集群的监控。Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、网络等等)。Promethus有以下特点:
把 车辆 类比为 计算机系统 或者一个 软件系统:Grafana就是仪表盘,它和车辆的速度表、水温表是一类的,通过这些表盘你可以实时了解系统运行情况。而Prometheus作为一个时序数据库,其实它和大家熟知的Mysql是一类的东西,都是存储数据,提供查询的,它存储了计算机系统在各个时间点上的监控数据。而Grafana仪表盘上的数据,就是通过查询Prometheus获取的。
这套监控主要用到了 SpringBoot Actuator + Prometheus + Grafana 三个技术模块,轻量可扩展。
docker pull bitnami/prometheus:2.47.2
docker pull grafana/grafana:10.2.0
docker run--name grafana -d grafana/grafana:10.2.0
mkdir ./root/docker/Grafana/
docker container cp grafana:/etc/grafana/ ./root/docker/Grafana/
/root/docker/Grafana/grafana/grafana.ini
# The http port to use
http_port = 4000
type=mysql
host=你的mysqlip:3306
name=grafana
user=数据库账户
password=数据库密码
在/root/docker/Grafana/grafana/provisioning/datasources目录下新建配置文件datasource.yml
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
access: proxy
url: http://你的Prometheus服务ip地址:9090
isDefault: true
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'x-api-app'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: [ '192.168.1.1:7070' ]
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
docker compose up -d
如果要停止服务,在docker-compose.yml目录下输入docker compose stop命令即可
org.springframework.boot
spring-boot-starter-actuator
io.micrometer
micrometer-registry-prometheus
org.aspectj
aspectjweaver
/**
* @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接口")
http://你的Grafana服务ip:4000
默认账户密码均为admin,第一次进入需要更改密码
欸,怎么你的是中文界面?当然,这是可以设置的
最后再讲下自定义仪表吧!
进入JVM仪表盘,在右上角位置点击添加可视化
然后会进入到自定义界面
在这里,你可以选择显示的数据,你在springboot那定义的切面数据名可以在这里找到,点击数据,并点击右上角的Run queries
然后对应的数据图表的出来了
在右侧可对图表进行定制化的样式设置
点击Apply应用图表到仪表盘
在仪表盘界面,可对图表进行拖动位置,调整大小等操作,很方便!
最后,在仪表盘界面保存设置(这点很重要,不然功亏一篑)
更后面多细节就靠自己挖掘啦~