springboot整合prometheus和grafana

准备springBoot服务

pom引入依赖

<!-- 集成micrometer,将监控数据存储到prometheus -->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

application.properties配置

spring.application.name=mall-tiny-grafana
management.endpoints.web.exposure.include=prometheus
management.metrics.tags.application=${spring.application.name}

将服务打包成镜像,上传到本地仓库

不会的参考这个:https://www.cnblogs.com/liufei96/p/16727629.html

使用docker-compose安装prometheus 和 grafana

准备docker-compose.yml 文件

version: '3'  # https://blog.51cto.com/msiyuetian/2369130
networks:
  monitor:
    driver: bridge
  my_mysql_default:
    external: true
services:
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    hostname: prometheus
    restart: always
    volumes:
      - /mydata/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
      - /mydata/prometheus/node_down.yml:/etc/prometheus/node_down.yml
    ports:
      - "9090:9090"
    networks:
      - monitor
  alertmanager:
    image: prom/alertmanager:latest
    container_name: alertmanager
    hostname: alertmanager
    restart: always
    volumes:
      - /mydata/alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml
    ports:
      - "9093:9093"
    networks:
      - monitor
  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    hostname: grafana
    restart: always
    ports:
      - "3000:3000"
    networks:
      - monitor
  node-exporter:
    image: prom/node-exporter:latest
    container_name: node-exporter
    hostname: node-exporter
    restart: always
    ports:
      - "9100:9100"
    networks:
      - monitor
  cadvisor:
    image: google/cadvisor:latest
    container_name: cadvisor
    hostname: cadvisor
    restart: always
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
    ports:
      - "8888:8080"
    networks:
      - monitor
  mall-tiny-grafana:
    image: 192.168.245.132:5000/mall-tiny/mall-tiny-grafana:1.0
    container_name: mall-tiny-grafana
    hostname: mall-tiny-grafana
    restart: always
    external_links:
      - mysql:db #可以用db这个域名访问mysql服务
    environment:
      - spring.profiles.active=qa
      - TZ="Asia/Shanghai"
    volumes:
      - /etc/localtime:/etc/localtime
      - /mydata/app/mall-tiny-grafana/logs:/var/logs
    ports:
      - "8088:8088"
    networks:
      - monitor
      - my_mysql_default

注意:

因为我的mall-tiny-grafana 服务里面用到了mysql。而且我的mysql已经安装好了。所以这里要使用外部的mysql,就加了 external_links 配置
而且我的mysql网络是 my_mysql_default 跟 mall-tiny-grafana 服务的网络不在同一个网络里面,所以就加了

networks:
  my_mysql_default:
    external: true

并且 mall-tiny-grafana 服务的 networks 也加上了 my_mysql_default

prometheus.yml 文件内容

global:
  scrape_interval: 5s

scrape_configs:
  - job_name: 'node-exporter'
    static_configs:
      - targets: ['node-exporter:9100']
  - job_name: 'mall-tiny-grafana'
    metrics_path: '/mall/actuator/prometheus'  # 采集数据路径。根据自己的路径配置
    static_configs:   #采集服务的地址
      - targets: ['mall-tiny-grafana:8088']

node_down.yml 文件内容

groups:
- name: node_down
  rules:
  - alert: InstanceDown
    expr: up == 0
    for: 1m
    labels:
      user: test
    annotations:
      summary: "Instance {{ $labels.instance }} down"
      description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minutes."

alertmanager.yml 文件内容

global:
  smtp_smarthost: 'smtp.163.com:25'          #163服务器
  smtp_from: '18855993840@163.com'       #发邮件的邮箱
  smtp_auth_username: '18855993840@163.com'     #发邮件的邮箱用户名,也就是你的邮箱
  smtp_auth_password: 'xxxx'       #发邮件的邮箱密码
  smtp_require_tls: false        #不进行tls验证

route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 10m
  receiver: live-monitoring

receivers:
  - name: 'live-monitoring'
    email_configs:
      - to: '1583409404@qq.com'       #收邮件的邮箱

使用 docker-compose up -d 运行

运行完之后,查看docker容器


[root@localhost prometheus]# docker ps
CONTAINER ID   IMAGE                                                  COMMAND                  CREATED          STATUS                 PORTS                                                                                                                                                        NAMES
14e0ced0ee83   192.168.245.132:5000/mall-tiny/mall-tiny-grafana:1.0   "java -jar /mall-tin…"   55 minutes ago   Up 55 minutes          0.0.0.0:8088->8088/tcp, :::8088->8088/tcp                                                                                                                    mall-tiny-grafana
fd06fd425a63   grafana/grafana:latest                                 "/run.sh"                18 hours ago     Up About an hour       0.0.0.0:3000->3000/tcp, :::3000->3000/tcp                                                                                                                    grafana
5c8d6fc3de5b   prom/alertmanager:latest                               "/bin/alertmanager -…"   18 hours ago     Up 7 hours             0.0.0.0:9093->9093/tcp, :::9093->9093/tcp                                                                                                                    alertmanager
ca07f5ef64ae   prom/prometheus:latest                                 "/bin/prometheus --c…"   18 hours ago     Up 22 minutes          0.0.0.0:9090->9090/tcp, :::9090->9090/tcp                                                                                                                    prometheus
94ab1295f69e   google/cadvisor:latest                                 "/usr/bin/cadvisor -…"   18 hours ago     Up 7 hours             0.0.0.0:8888->8080/tcp, :::8888->8080/tcp                                                                                                                    cadvisor
6bbed35c17b6   prom/node-exporter:latest                              "/bin/node_exporter"     18 hours ago     Up 7 hours             0.0.0.0:9100->9100/tcp, :::9100->9100/tcp 

访问prometheus。看到下面内容,就说明配置成功了
http://192.168.245.132:9090/targets

1999224-20221006170905453-2007225172.png

配置grafana

访问 http://192.168.245.132:3000/ 账号和密码 admin/admin

配置prometheus


1999224-20221006170905453-2007225172.png

配置好之后,点击 Save & test 按钮,测试下。

去grafana官方下载模板json数据
https://grafana.com/grafana/dashboards/?search=JVM
因为我这里是监控springBoot服务的JVM指标,所以我下载的是JVM相关的模板。自己根据需求下载对应的模板

1999224-20221006170905453-2007225172.png

配置好之后,就可以看到监控数据了。


1999224-20221006170905453-2007225172.png

安装过程遇到的错误

一开始我的prometheus.yml 配置文件钟加了 scrape_timeout: 10s 这个参数。但是prometheus启动一直报错

global:
  scrape_interval: 5s

scrape_configs:
  - job_name: 'node-exporter'
    static_configs:
      - targets: ['node-exporter:9100']
  - job_name: 'mall-tiny-grafana'
    scrape_interval: 5s
    scrape_timeout: 10s
    metrics_path: '/mall/actuator/prometheus'  # 采集数据路径
    static_configs:   #采集服务的地址
      - targets: ['mall-tiny-grafana:8088']

下面是错误内容

ts=2022-10-06T08:16:44.584Z caller=main.go:437 level=error msg="Error loading config (--config.file=/etc/prometheus/prometheus.yml)" err="parsing YAML file /etc/prometheus/prometheus.yml: scra                  pe timeout greater than scrape interval for scrape config with job name \"mall-tiny-grafana\""

从报错内容上,说是解析yml失败。一开始我是怀疑我的文件格式不对,不是yml格式的。找了个yml在线校验工具,发现没有错

然后就改变了这个配置的位置

global:
  scrape_interval: 5s
  scrape_timeout: 10s

scrape_configs:
  - job_name: 'node-exporter'
    static_configs:
      - targets: ['node-exporter:9100']
  - job_name: 'mall-tiny-grafana'
    metrics_path: '/mall/actuator/prometheus'  # 采集数据路径
    static_configs:   #采集服务的地址
      - targets: ['mall-tiny-grafana:8088']

就报了下面的错误

ts=2022-10-06T08:44:29.945Z caller=main.go:437 level=error msg="Error loading config (--config.file=/etc/prometheus/prometheus.yml)" err="parsing YAML file /etc/prometheus/prometheus.yml: glob                  al scrape timeout greater than scrape interval"

从错误上看是说 scrape_timeout的值要大于 scrape_interval

最后调整了下值 scrape_interval: 15s , scrape_timeout: 10s

再重新启动下prometheus ,发现启动正常了

仓库代码

https://github.com/liufei96/mall-learning/tree/main/mall-tiny-grafana

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容