Prometheus 查看jvm监控端口 prometheus监控springboot项目_centos


SpringBoot程序通过Actuator接口访问,每次只能拿到当前状态的数据,如果想要统计分析监控数据,那么应该拿到每一个时刻的监控数据,存储到数据库中,并进行可视化展示。

在微服务场景下,针对于SpringBoot程序的监控,Spring全家桶提供有SpringBootAdmin组件。如果不考虑微服务的情况,可以使用NodeExporter监控SpringBoot程序所运行的主机信息(Cpu、内存等),使用Actuator监控SpringBoot程序的运行信息。使用Prometheus采集监控数据存储到Nosql数据库中,使用Grafana将监控数据作为图表展示。

Prometheus 查看jvm监控端口 prometheus监控springboot项目_前端_02

准备3台服务器,分别当作服务主机、数据采集服务器和可视化服务器。

No.

主机名

作用

运行程序

1

centos7001

服务主机

SpringBoot、PrometheusActuator、NodeExporter

2

centos7002

数据采集服务器

Prometheus、AlterManager

3

centos7003

可视化服务器

Grafana

一、 NodeExporter服务搭建

node_exporter用于采集服务器层面的运行指标,包括机器的loadavg、filesystem、meminfo等基础监控

登录Prometheus的官方站点进行NodeExporter的下载(官方站点地址)。

Prometheus 查看jvm监控端口 prometheus监控springboot项目_spring boot_03


点击DOWNLOAD下载node_exporter

Prometheus 查看jvm监控端口 prometheus监控springboot项目_数据_04


选择Linux版本下载,点击下载。

Prometheus 查看jvm监控端口 prometheus监控springboot项目_前端_05


使用ftp工具将node_exporter上传至centos7001的usr/local/software文件夹下。

Prometheus 查看jvm监控端口 prometheus监控springboot项目_spring boot_06


解压node_exporter:

tar -zxvf node_exporter-1.3.0.linux-amd64.tar.gz

切换到node_exporter-1.3.0.linux-amd64文件夹,发现只有node_exporter文件一个可执行文件。编写脚本,将其添加到系统服务中,这样可以在系统启动时自动启动node_exporte服务。

Prometheus 查看jvm监控端口 prometheus监控springboot项目_spring boot_07

vi /etc/systemd/system/node-exporter.service

粘贴脚本,ExecStart需要指定node_exporter的执行文件。

[Unit]
Description=Prometheus Node Exporter

[Service]
User=root
ExecStart=/usr/local/software/node_exporter-1.3.0.linux-amd64/node_exporter
TimeoutStopSec=10
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

重新加载,设置开启自启动。

systemctl daemon-reload
systemctl enable node-exporter
systemctl start node-exporter

查看node-exporter服务状态,启动后的node_exporter会占用9100端口。

systemctl status node-exporter.service

Prometheus 查看jvm监控端口 prometheus监控springboot项目_spring boot_08


设置防火墙开放9100端口,否则其他主机无法访问node_exporter。

firewall-cmd --zone=public -add-port=9100/tcp --permanent

重启防火墙,激活上一步的配置。

firewall-cmd --reload

二、Prometheus监控数据提供

如果想要使用Prometheus监控SpringBoot程序,那么应该将Actuator监控得到的数据提供给Prometheus。

项目引入micrometer-registry-prometheus依赖。

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

micrometer-registry-prometheus组件可以将Actuator监控到的数据转换为符合Prometheus格式要求的数据,只需要进行端口的开放即可。

server:
  port: 8080
management:
  server:
    port: 9090
  endpoints:
    web:
      exposure:
        include: "*"
      base-path: /actuator

执行bootJar任务,将SpringBoot程序打成jar包,使用ftp工具上传到centos7001中的usr/local/software/jar文件夹。

Prometheus 查看jvm监控端口 prometheus监控springboot项目_spring boot_09


后台启动SpringBoot程序:

java -jar spring-boot-actuator-project-1.0.0.jar&

Prometheus 查看jvm监控端口 prometheus监控springboot项目_spring boot_10


开启8080端口和9090端口,并重启防火墙。

firewall-cmd --zone=public -add-port=8080/tcp --permanent
firewall-cmd --zone=public -add-port=9090/tcp --permanent
firewall-cmd --reload

在外部使用浏览器访问:http://centos7001:9090/actuator/health,出现status=up,则配置成功。

Prometheus 查看jvm监控端口 prometheus监控springboot项目_数据_11

三、搭建Prometheus服务端

在官方站点下载Prometheus(下载地址)。

Prometheus 查看jvm监控端口 prometheus监控springboot项目_数据_12


使用ftp工具将prometheus压缩包上传至centos7002的/usr/local/software文件夹下。

Prometheus 查看jvm监控端口 prometheus监控springboot项目_java_13


解压prometheus安装包。

tar -zxvf prometheus-2.31.1.linux-amd64.tar.gz

为方便配置,重命名prometheus安装目录。

mv prometheus-2.31.1.linux-amd64 ./prometheus

进入目录,修改prometheus.yml文件。

cd prometheus
vim prometheus.yml

Prometheus 查看jvm监控端口 prometheus监控springboot项目_前端_14

# 全局配置
global:
  scrape_interval: 15s # 数据的抓取间隔
  evaluation_interval: 15s # 数据评估的间隔时间
  # scrape_timeout is set to the global default (10s).

# 警告配置
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

# 规则文件
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["centos7002:9999"]
  - job_name: "node"
    static_configs:
      - targets: ["centos7001:9100"]
        labels:
          instance: spring-boot-app
  - job_name: "springboot"
    scrape_interval: 10s # 数据的抓取间隔
    scrape_timeout: 5s # 5s未获取的数据则超时
    metrics_path: '/actuator/prometheus' # actuator提供prometheus格式数据的接口
    static_configs:
      - targets: ["centos7001:9090"]

检查配置文件是否正确。

./promtool check config prometheus.yml

将prometheus注册到service,设置开机时自启动。

vi /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus

[Service]
User=root
ExecStart=/usr/local/software/prometheus/prometheus \
          --config.file=/usr/local/software/prometheus/prometheus.yml \
          --storage.tsdb.path=/usr/local/software/prometheus/data \
          --web.listen-address=0.0.0.0:9999 --web.enable-lifecycle
TimeoutStopSec=10
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

加载全部服务文件:systemctl daemon-reload 配置prometheus 服务自启动:systemctl enable prometheus

启动prometheus 服务:systemctl start prometheus

查看prometheus 服务状态:systemctl status prometheus

Prometheus 查看jvm监控端口 prometheus监控springboot项目_数据_15


查看prometheus 占用端口:

netstat -nptl

Prometheus 查看jvm监控端口 prometheus监控springboot项目_java_16


开启9999端口并重启防火墙。

firewall-cmd --zone=public -add-port=9999/tcp --permanent
firewall-cmd --reload

prometheus 配置完成后,通过浏览器访问监控界面,访问路径:http://centos7002:9999

Prometheus 查看jvm监控端口 prometheus监控springboot项目_前端_17


可以直接在搜索框查询监听的内容:

Prometheus 查看jvm监控端口 prometheus监控springboot项目_前端_18


点击Targets可以查看监听数据的来源。

Prometheus 查看jvm监控端口 prometheus监控springboot项目_centos_19


Prometheus 查看jvm监控端口 prometheus监控springboot项目_java_20

四、Grafana图表统计

使用Grafana能够将监控到的数据进行更加清晰的统计展示,此次在centos7003上部署Grafana服务(Grafana下载地址)。

Prometheus 查看jvm监控端口 prometheus监控springboot项目_centos_21


切换到/usr/local/software文件夹,执行wget命令获取grafana安装包。

wget https://dl.grafana.com/enterprise/release/grafana-enterprise-8.2.5.linux-amd64.tar.gz

Prometheus 查看jvm监控端口 prometheus监控springboot项目_java_22


解压到当前文件夹:tar -zxvf grafana-enterprise-8.2.5.linux-amd64.tar.gz 重命名解压文件夹:mv grafana-8.2.5 grafana进入grafana文件夹,查看目录结构:

Prometheus 查看jvm监控端口 prometheus监控springboot项目_centos_23


同上面安装的NodeExporter和Prometheus一样,为grafana创建服务并配置开机自启动。

新建grafana服务配置文件。

vi /etc/systemd/system/grafana.service
[Unit]
Description=Grafana

[Service]
User=root
ExecStart=/usr/local/software/grafana/bin/grafana-server \
          -config /usr/local/software/grafana/conf/defaults.ini \
          -homepath /usr/local/software/grafana
TimeoutStopSec=10
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

加载全部服务文件:systemctl daemon-reload 配置grafana服务自启动:systemctl enable grafana

启动grafana服务:systemctl start grafana

查看grafana服务状态:systemctl status grafana

Prometheus 查看jvm监控端口 prometheus监控springboot项目_java_24


grafana服务启动后会占用3000端口,需要对外暴露3000端口并重启防火墙。

firewall-cmd --zone=public -add-port=3000/tcp --permanent
firewall-cmd --reload

Grafana配置完成后,访问:http://centos7003:3000进入到登录页。

Prometheus 查看jvm监控端口 prometheus监控springboot项目_数据_25


输入默认的用户名:admin,密码:admin,进入Grafana控制台。

Prometheus 查看jvm监控端口 prometheus监控springboot项目_前端_26


此时的Grafana并不能取得监控数据,需要在控制台配置Prometheus数据源,这样才能生成数据报表。

点击:设置–>Add data source

Prometheus 查看jvm监控端口 prometheus监控springboot项目_前端_27


选择Prometheus。

Prometheus 查看jvm监控端口 prometheus监控springboot项目_java_28


Prometheus 查看jvm监控端口 prometheus监控springboot项目_前端_29


Prometheus 查看jvm监控端口 prometheus监控springboot项目_数据_30


数据源配置完成后,点击Dashboard进行面板的创建,此时可选择监控数据的类型。

Prometheus 查看jvm监控端口 prometheus监控springboot项目_java_31


返回到主页后,监控的数据已经可以用折线图显示了。

Prometheus 查看jvm监控端口 prometheus监控springboot项目_前端_32

五、AlterManager警报服务

altermanager是prometheus下的一个子模块,可以在prometheus监控数据异常时发出警报。此次在centos7002上安装altermanager,altermanager可以在prometheus官网直接下载(下载地址)。

Prometheus 查看jvm监控端口 prometheus监控springboot项目_spring boot_33


将下载好的安装包使用ftp工具上传到centos7002的/usr/local/software文件夹下。

Prometheus 查看jvm监控端口 prometheus监控springboot项目_java_34


解压安装包:tar -zxvf alertmanager-0.23.0.linux-amd64.tar.gz 重命名文件夹:mv alertmanager-0.23.0.linux-amd64 alertmanager进入altermanager文件夹,查看其文件结构如下:

Prometheus 查看jvm监控端口 prometheus监控springboot项目_centos_35


警报信息在altermanager.yml文件中配置。

global配置项:

No

配置项

解释

1

resolve_timeout

解析超时配置

2

smtp_from

发件人邮箱地址

3

smtp_smarthost

发件人对应邮件提供商的smtp地址

4

smtp_auth_username

发件人的登陆用户名,默认和发件人地址一致

5

smtp_auth_password

发件人的登陆密码,有时候是授权码

6

smtp_require_tls

是否需要tls协议。默认是true

7

wechart_api_url

微信api地址

8

wechart_api_secret

密码

9

wechat_api_corp_id

corp id 信息

route配置项:

No

配置项

解释

1

group_by

数据路由配置

2

group_wait

等待时间

3

group_interval

分组间隔

4

repeat_interval

邮件重复发送间隔

5

receiver

警告媒体类型

vim alertmanager.yml
global:
  resolve_timeout: 5m
  smtp_smarthost: 'smtp.qq.com:25'
  smtp_from: '2337878268@qq.com'
  smtp_auth_username: '2337878268@qq.com'
  smtp_auth_password: 'xxxxxxxx' # 你自己的密码
  smtp_require_tls: false
route:
  group_by: ['alertname']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 1h
  receiver: 'mail'
receivers:
- name: 'mail'
  email_configs:
  - to : '2337878268@qq.com'

检查配置文件是否正确。

./amtool check-config alertmanager.yml

Prometheus 查看jvm监控端口 prometheus监控springboot项目_前端_36


将altermanager注册到service,设置开机时自启动。

vim /etc/systemd/system/altermanager.service
[Unit]
Description=Altermanager

[Service]
User=root
ExecStart=/usr/local/software/alertmanager/alertmanager  \
          --config.file=/usr/local/software/alertmanager/alertmanager.yml 
TimeoutStopSec=10
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

加载全部服务文件:systemctl daemon-reload 配置altermanager服务自启动:systemctl enable altermanager

启动altermanager 服务:systemctl start altermanager

查看altermanager服务状态:systemctl status altermanager

Prometheus 查看jvm监控端口 prometheus监控springboot项目_java_37


alertmanager启动后会占用9093和9094两个端口,防火墙打开这两个端口。

Prometheus 查看jvm监控端口 prometheus监控springboot项目_前端_38

firewall-cmd --zone=public -add-port=9093/tcp --permanent
firewall-cmd --zone=public -add-port=9094/tcp --permanent
firewall-cmd --reload

此时虽然配置好了alertmanager服务,但是其没有和prometheus产生关联。

修改prometheus的配置文件:

vim /usr/local/software/prometheus/prometheus.yml
# 警告配置
alerting:
  alertmanagers:
    - static_configs:
        - targets:
           - centos7002:9093

配置报警规则:

mkdir -p  /usr/local/software/prometheus/rules

创建两个规则,一个针对微服务,一个针对服务器主机。

vim /usr/local/software/prometheus/rules/springboot-acutator-rule.yml
groups:
- name: springboot.actuator.rules
  rules:
  - alert: MicrobootInstanceDown
    expr: up{job="springboot"} == 0
    for: 1m
    labels:
      severity: warning
    annotations:
      description: "微服务 {{ $labels.instance }} 关闭"
      summary: "运行在 {{ $labels.instance }} 主机中的 {{ $labels.job }} 微服务已经关闭了!"
vim /usr/local/software/prometheus/rules/springboot-node.yml
groups:
- name: springboot.node.rules
  rules:
  - alert: NodeCPUUsage
    expr: 100 - (avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance) * 100) > 80
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: "微服务运行主机 {{ $labels.instance }} 中的CPU使用率过高"
      description: "微服务运行主机 {{ $labels.instance }} 中的CPU使用大于80%,当前值: “{{ $value }}”"
  - alert: NodeMemoryUsage
    expr: 100 - (node_memory_MemFree_bytes+node_memory_Cached_bytes+node_memory_Buffers_bytes) / node_memory_MemTotal_bytes * 100 > 80
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: "微服务运行主机 {{ $labels.instance }} 中的内存使用率过高"
      description: "微服务运行主机 {{ $labels.instance }} 内存使用大于 80%,当前值: {{ $value }}"
  - alert: NodeFilesystemUsage
    expr: 100 - (node_filesystem_free_bytes{fstype=~"ext4|xfs"} / node_filesystem_size_bytes{fstype=~"ext4|xfs"} * 100) > 90
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: "微服务运行主机 {{ $labels.instance }}中的“{{ $labels.mountpoint }}” 分区使用过高"
      description: "微服务运行主机 {{ $labels.instance }} 中 {{ $labels.mountpoint }} 分区使用大于80%,当前值: {{ $value }}"

修改了prometheus配置文件,指定规则的位置。

rule_files:
  - "rules/*.yml"

再次检查配置文件格式是否正确:./promtool check config ./prometheus.yml

Prometheus 查看jvm监控端口 prometheus监控springboot项目_java_39


由于修改了prometheus配置文件,想要修改项生效,则需重启prometheus服务。

systemctl restart prometheus

访问prometheus控制台:http://centos7002:9999/alerts,发现规则全部配置成功。

Prometheus 查看jvm监控端口 prometheus监控springboot项目_数据_40