【性能监控 APM 五】Prometheus + Grafana

【性能监控 APM 一】JMX && jstatd

【性能监控 APM 二】JMC && jvisualvm && jconsole

【性能监控 APM 三】springboot-admin

【性能监控 APM 四】hertzbeat

【性能监控 APM 五】Prometheus + Grafana

 

Prometheus是一个开源系统监控和警报工具包,最初由SoundCloud构建。自2012年成立以来,许多公司和组织都采用了Prometheus,并且该项目拥有非常活跃的开发人员和用户社区。它现在是一个独立的开源项目,独立于任何公司进行维护。为了强调这一点,并澄清项目的治理结构,Prometheus于2016年加入了云原生计算基金会,成为继Kubernetes之后的第二个托管项目。

特性

普罗米修斯的主要特点是:

  • 一个多维数据模型,其时间序列数据由度量名称和键/值对标识
  • PromQL,一种灵活的查询语言,可以利用这个维度
  • 不依赖分布式存储;单个服务器节点是自治的
  • 时间序列收集通过HTTP上的拉取模型进行
  • 通过中间网关支持推送时间序列
  • 通过服务发现或静态配置发现目标
  • 多种模式的绘图和仪表板支持

image

一、部署安装

环境准备: ubuntu22.04、docker 24.06、prometheus 2.47.0、grafana 10.1.2、node-exporter 1.6.1、mysqld-exporter 0.15.0。

1、拉取镜像

docker pull prom/prometheus
docker pull grafana/grafana
docker pull prom/node-exporter
docker pull prom/mysqld-exporter

如果需要拉取指定版本执行:

docker pull prom/prometheus:v2.47.0
docker pull grafana/grafana:10.1.2
docker pull prom/node-exporter:1.6.1
docker pull prom/mysqld-exporter:0.15.0

如果不指定版本,则拉取的是仓库中的最新版本,本例使用默认最新的latest版本 。

2、启动并配置 prometheus

创建并启动容器:

docker run --name prometheus -d -p 9090:9090 prom/prometheus

需要指定版本时:

docker run --name prometheus -d -p 9090:9090 prom/prometheus:v2.47.0

拷贝容器内文件夹prometheus至本地 /service 目录:

docker cp prometheus:/etc/prometheus /service/

/service/prometheus 目录下的配置文件 prometheus.yml 进行配置,这里使用默认配置,复制的目的是为了进行文件挂载,如果已经有 prometheus.yml 的配置文件,可以直接进行挂载启动。
停止并删除原来的启动的容器,假设原来启动的容器ID为d931d9fded6c:

docker stop d931d9fded6c
docker rm d931d9fded6c

挂载配置文件,启动容器:

docker run --name prometheus -d -p 9090:9090 -v /service/prometheus:/etc/prometheus prom/prometheus

浏览器访问:http://ip:9090 如下图表示安装成功
image

3、安装可视化平台 grafana

docker run -d --name=grafana -p 3000:3000 grafana/grafana

浏览器访问:http://ip:3000,初始账号密码 admin/admin

二、监控配置

监控的配置流程总体上分下面几个步骤:

  • 在 grafana 中配置 prometheus 数据源(这样 grafana 中展示的数据来源就是 prometheus),这个只需配置一次就行。

  • 安装部署 prometheus 的 exporter 插件,用来收集监控信息。

  • 在 prometheus 的配置文件 prometheus.yml 中配置已经部署的 exporter 服务,prometheus服务端会自动收集各个 exporter 端收集的数据,新添加一个 exporter 需要重启 prometheus服务。

  • 在 grafana 中下载与 prometheus 中配置的对应 exporter 面板(dashboard)文件进行导入,并选择prometheus数据源,这样就可以在grafana中看到监控信息了。

grafana的DashBoard模板的json文件可以在插件中心中下载,插件中心地址:

https://grafana.com/grafana/dashboards/

1、配置 prometheus 数据源

在 grafana 中配置 prometheus 的数据源,菜单:
connections -> Prometheus -> Add new data source -> Prometheus,填写我们已经部署的Prometheus服务的地址,并填写名称为:Prometheus-docker,然后保存。后续所有 exporter 都将注册到此prometheus数据源中。

image

配置完 prometheus 数据源以后,在 grafana 的可视化插件中心下载名为“Prometheus 2.0 Overview” 的监控面板json文件,然后在dashboard(仪表板)菜单中,点击 new(新建) -> import(导入),将下载的json文件上传,然后选择我们创建的数据源 Prometheus-docker,然后点击导入,就创建了一个监控面板。在监控面板中可以看到 prometheus 本身的状态了。

image

2、使用 node-exporter 可以来收集 Linux 服务器相关的性能指标。

安装node-exporter:

docker run --name node-export -p 9100:9100 -d prom/node-exporter

访问 node-export 地址:http://ip:9100/ ,出现下图表示 exporter 安装成功。
image

配置 node-exporter:

修改prometheus 挂载到本地的配置文件 prometheus.yml,添加 名为linux的作业。targets中是exporter的地址。exporter可以和prometheus部署在不同的机器上。

  - job_name: "linux"
    static_configs:
      - targets: ["ip:9100"]

配置完后重启 prometheus

docker restart prometheus

进行验证,浏览器访问prometheus的服务发现 http://ip:9090/service-discovery ,这里会显示所有接入prometheus中的exporter节点信息。出现如下页面表示配置成功:
image

在grafana中配置 exporter的显示面板

在下载中心下载名为Node Exporter Full的文件https://grafana.com/grafana/dashboards/1860-node-exporter-full/, 然后导入 grafana 中,数据源选择 prometheus-docker 就可以监控 node-exporter 采集的linux节点信息了。
image

3、使用mysql-exporter来收集MySQL信息

首先在本地的 /service/mysql-exporter/ 文件夹下创建配置文件 .my.cnf

在配置文件中对目标MySQL数据库服务进行配置,注意配置的用户名必须有远程连接和相关查询权限。内容如下:

[client]
host=10.533.200.99
port=3306
user=root
password=123456

配置完 mysql-exporter的配置文件之后就启动应用容器:

docker run -d -p 9104:9104 --name mysql-exporter \
-e DATA_SOURCE_NAME="root:123456@(10.533.200.99:3306)/" \
-v /service/mysql-exporter/.my.cnf:/.my.cnf \
prom/mysqld-exporter

在prometheus 中配置 mysql-exporter:

targets中的IP为 mysql-exporter服务所在主机的IP。

  - job_name: "mysql"
    static_configs:
      - targets: ["ip:9104"]

在grafana中配置监控面板:

下载mysql的dashboard文件:https://grafana.com/grafana/dashboards/7362-mysql-overview/ ,然后导入grafana,选择数据源 prometheus-docker ,即可完成监控配置。

4、springboot应用监控

创建springboot-MVC应用,引入监控相关maven依赖

<!--actuator 端点监控-->
<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>

配置 application.yml 文件:

management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    metrics:
      enabled: true #支持metrics
    prometheus:
      enabled: true #支持Prometheus
    health:
      show-details: always
  metrics:
    export:
      prometheus:
        enabled: true
    # 下面选项建议打开,以监控 http 请求的 P99/P95 等,具体的时间分布可以根据实际情况设置
    distribution:
      sla:
        http:
          server:
            requests: 1ms,5ms,10ms,50ms,100ms,200ms,500ms,1s,5s
    # 在 Prometheus 中添加特别的 Labels
    tags:
      # 必须加上对应的应用名,因为需要以应用的维度来查看对应的监控
      application: ${spring.application.name}

验证:启动服务后访问地址:http://ip:port/actuator/prometheus ,出现下面内容表示应用 metrics 监控接口暴露成功。
image

在prometheus 中配置应用的监控

- job_name: "springboot"
  metrics_path: /actuator/prometheus
  static_configs:
    - targets: ["ip:port"]

metrics_path 属性配置的是应用暴露出来的指标地址,供prometheus获取性能数据。
targets 属性中的 ip:port 是应用程序的地址和端口。

在grafana中配置监控面板

下载jvm的dashboard文件:https://grafana.com/grafana/dashboards/4701-jvm-micrometer/ ,然后在grafana中进行导入,数据源选择 prometheus-docker 即可完成监控。
image

 

原创文章,引用或者转载请注明出处: https://www.cnblogs.com/hewei-blogs/articles/17717464.html
posted @ 2023-09-26 11:48  蓝迷梦  阅读(567)  评论(0)    收藏  举报