监控开源工具(Prometheus+Grafna)

过去的,未来的
2023-04-22 / 2 评论 / 1 点赞 / 548 阅读 / 881 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2023-07-12,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

image-1682141051768

1、prometheus环境搭建

为了快速搭建,采用docker安装

version: '3'


networks:
    monitor:
        driver: bridge

services:
    prometheus:
        image: prom/prometheus
        container_name: prometheus
        hostname: prometheus
        restart: always
        volumes:
            - ./prometheus.yml:/etc/prometheus/prometheus.yml
        ports:
            - "9090:9090"
        networks:
            - monitor
    grafana:
        image: grafana/grafana
        container_name: grafana
        hostname: grafana
        restart: always
        ports:
            - "3000:3000"
        networks:
            - monitor   
    node-exporter:
        image: quay.io/prometheus/node-exporter
        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:
            - "8899:8080"
        networks:
            - monitor

这里拉取的镜像分别有:

  • cadvisor 用于获取docker容器的指标
  • node-exporter 用户获取服务器的指标
  • grafana 监控的web-ui好用的可视化组件
  • alertmanager 告警组件(目前暂未用到)
  • prometheus 核心监控组件

image-1682141743614

新建prometheus的配置文件prometheus.yml(这份配置其实就是告诉prometheus要去哪个端口中拉取对应的监控数据)

静态配置

global:
  scrape_interval:     15s
  evaluation_interval: 15s
scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['ip:9090']
  - job_name: 'cadvisor'
    static_configs:
    - targets: ['ip:8899']
  - job_name: 'node'
    static_configs:
    - targets: ['ip:9100']

随后在目录下docker-compose up -d启动,于是我们就可以分别访问:

2、使用

prometheus的原生web-ui

image-1682141407751

Grafana登录

初始用户名/密码:admin/admin
image-1682141520211

配置数据源

image-1682141719379

官方已经有现成的模版

模版

例如Docker的监控(上面启动的cadvisor服务就采集了Docker的信息),我们使用模板893来配置监控docker的信息:

image-1682141875337
image-1682141907130

3、springboot监控介入

创建项目,增加jar,pom
  <!--监控-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--适配prometheus-->
        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-registry-prometheus</artifactId>
        </dependency>
增加配置文件
# 监控配置  TODO
management:
  endpoint:
    health:
      show-details: always
    metrics:
      enabled: true
    prometheus:
      enabled: true
  endpoints:
    web:
      exposure:
        include: '*'
  metrics:
    export:
      prometheus:
        enabled: true
    tags:
      application: fengpt

spring:
  application:
    name: fengpt
编写要监控的接口(可选)跳过

注意: @Timed(“base.pay”) 就是增加健康的key

@RequestMapping("/pay")
  @Timed("base.pay")
    public ResultWrapper pay(@RequestBody Map<String, Object> map) {
        log.info("pay param={}", JSON.toJSONString(map));
        try {
            payService.pay(map);
            return ResultWrapper.getSuccessReturn(map);
        } catch (BusinessException e) {
            log.error("pay BusinessException error={}", e.getMessage());
            return ResultWrapper.getFailure(e.getMessage());
        } catch (Exception e) {
            log.error("pay error", e);
            return ResultWrapper.getFailure("操作失败,请检查后重试!");
        }
    }
启动项目

调用接口:http://localhost:8080/actuator/prometheus
就可以看到监控信息。

image-1682142284294

其中也能看到我们刚才编写的接口的base.pay 的调用信息:
image-1682142347496

在prometheus 配置监控

在prometheus.yml 增加获取监控信息的接口地址

- job_name: 'app'
    metrics_path: '/actuator/prometheus'
    static_configs:
    - targets: ['ip:8080']

重启,prometheus

在页面就可以看到项目的健康信息

image-1682142554861

在 Grafana配置监控

那我们继续在Grafana配置对应的监控就好啦。这里我选用了4701模板的JVM监控和SpringBoot监控,可以简单看下他们的效果:
image-1682142639976

单个接口的也可以配置监控

可以采用压测工具,压测接口,看下数据的变化。
base_pay_seconds_count:每秒的访问量
base_pay_seconds_sum:每秒的总访问时长
image-1682142782645

image-1682142986099

1

评论区