prometheus + grafna 监控

前提

项目重要技术栈主要是Spring cloud 2.x + docker

现状

项目中使用到Spring boot admin ,zipkin,以及http上报等形式收集数据,mysql持久化必要数据,在superset上连接数据源,以图表的形式展示数据

改进目标

目前有多个纬度,不同的监控平台,需要登陆多个地址去查看不同的数据,稍显繁琐,并且数据统计形式比较乱,查看也不方便,希望有一个统一的监控平台

选型

最后选择Prometheus和Grafna
监控产品有很多,比如Prometheus,Graphite,InfluxDB,OpenTSDB等有很多时间序列数据库。有兴趣可以去官网看下Prometheus和其他产品的对比。

快速搭建过程

这个仅仅是一个快速上手的描述,如果有需要请按照官方文档说下进行按需配置。

  1. 项目中改动:
    引入Jar包,最新版本可以去maven仓库寻找

      io.micrometer
      micrometer-registry-prometheus
      1.0.8
    
  

yml文件中添加配置:

management:
  security:
    enabled: false
  endpoints:
    web:
      exposure:
        include: '*'

ps:这个改动是因为Spring boot 2.x 默认只暴露info和health接口,需要暴露出其他接口。(*是图测试省事,如果服务暴露公网的情况,自己酌情暴露需要的服务,一般情况下是不需要暴露公网的)
这两步过后,启动服务,就会采集一些监控信息,并且通过http://localhost:8080/actuator/prometheus进行暴露出来,可以看到metric数据。原理就是prometheus定时去扫描配置文件中配置的targets,获取metric然后存入prometheus中。

  1. docker启动prometheus+grafna
    编写prometheus.xml的简单配置文件,配置项有很多,详情参考官方文档:
global:
  scrape_interval:     5s
  evaluation_interval: 5s
scrape_configs:
  - job_name: 'metric_job'
    metrics_path: '/actuator/prometheus'
    static_configs:
    - targets: ['localhost:8080'] #Provide your ip and Do not give localhost as we are running the Prometheus in docker
      labels:
        application: demo-service

ps:注意事项
在docker环境下,promethus 配置job扫描机器和 grafna配置数据源都需要使用真实IP。上面targets是写死的机器IP和端口,这个为了灵活性最好配置成类似consul注册中心的形式,prometheus支持主流的配置中心,请移步文档查看。还有生产中请不要单机运行,查看文档如何集群部署。

  1. 编写docker-compose文件
version: '3'

services:
  prometheus:
    image: prom/prometheus
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    ports:
      - 9090:9090
  grafana:
    image: grafana/grafana
    ports:
      - 3000:3000
    depends_on:
      - prometheus
  1. 启动docker容器
docker-compose up -d

启动完成后校验一下:
prometheus访问:http://localhost:9090
grafna 访问:http://localhost:3000

grafna配置监控项

主要配置监控内容:

  1. Basic
    应用启动时间,运行时长,cpu使用率,内存使用率等


    image.png
  2. JVM
    Eden,Survivor,Old,MetaData 等Space,classload数,线程数,gc数,gc停顿时长等信息


    image.png
  3. Http
    Http请求数,Http响应时长,各个状态码等请求数,请求速率(QPS)等


    image.png
  4. Log
    各种级别log等数量,主要关注error和warn~

  5. 其他
    根据actuator/prometheus接口的收集的内容,结合prometheus提供的各种函数,可以根据需求显示自己想要的监控信息。
    ps: 重点!!!理清自己的需求,需要监控那些信息,熟悉prometheus的各种使用方式和函数。官方文档~!
    比如:

topk(5, sum(rate(http_requests_total[$__range])) by (instance))

比如$__range == 1m,统计instance这个实例1m内请求速率等top5

  1. 统计机器信息
    通过在本地安装node_exporter这个go服务,可以收集本地机器的监控信息。具体信息详情查看官方文档
配置grafna等小技巧(官方文档中有):
  1. 配置变量
    在dashboard等setting中配置,下图配置都prometheus都两个变量,application 和 instance,instance根据application来获取的,很方便灵活


    image.png

    使用变量,通过$variable来使用


    image.png

    最后是使用效果,根据配置的变量,选择变量,下面的dashboard会相应的变动。
    image.png

你可能感兴趣的:(prometheus + grafna 监控)