java 应用监控
Prometheus 概述:查看官网描述即可
一:服务器节点监控node-exporter
Prometheus服务器:用于周期性抓取被监控组件的状态
node_exporter
是一个用于采集服务器CPU, 内存,网络,文件系统等主机级别的metrics数据的工具,它是Prometheus监控生态中的一个简单的监控物理机的组件。
-
为Prometheus提供主机级别的监控数据:
node_exporter
能够提供包括CPU、内存、磁盘、网络等在内的主机级别的监控数据。 -
简化监控配置:在服务器上部署
node_exporter
后,你不需要在Prometheus配置文件中手动添加每一个服务器的监控指标,node_exporter
会自动发现并采集这些数据。 -
提高系统可用性:通过监控系统的主要资源,你可以了解系统的运行状况,及早发现潜在的问题
docker 安装node-exporter:
docker run --name node-exporter -d -p 9100:9100 prom/node-exporter:latest
二:服务器监控Alertmanager
Alertmanager是一个告警管理工具,用于接收来自Prometheus等监控系统的告警,并对这些告警进行处理,可以通过电子邮件、短信、微信等方式通知给相关的接收人。
在服务器监控中,我们通常需要对Alertmanager进行监控,以确保它能正确地接收和处理告警。以下是一个使用Prometheus监控Alertmanager的配置示例
alertmanager.yml 其中prometheusalert,后面讲,此处url可以只暂时填自己的机器人链接即可
global:
resolve_timeout: 5m
smtp_from: '自己的邮箱账号@qq.com'
smtp_smarthost: 'smtp.qq.com:465'
smtp_auth_username: '自己的邮箱账号@qq.com'
smtp_auth_password: '自己的邮箱授权密码'
smtp_require_tls: false
smtp_hello: 'qq.com'
route:
receiver: 'default'
group_by: ['alertname']
group_wait: 10s
group_interval: 10s
repeat_interval: 30m
receivers:
- name: 'default'
email_configs:
- to: '自己的邮箱账号@qq.com'
send_resolved: true
webhook_configs:
- url: 'http://安装的prometheusalert的ip:8090/prometheusalert?type=fs&tpl=prometheus-fs&fsurl=https://open.feishu.cn/open-apis/bot/v2/hook/自己的飞书token'
send_resolved: true
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
docker 安装Alertmanager:
docker run -d --name alertmanager -p 9093:9093 -v /data/prometheus/alertmanager.yml:/etc/alertmanager/alertmanager.yml prom/alertmanager:latest
启动成功登录页面如下:
三:服务器监控Prometheus
在路径下:/data/prometheus/ 下创建的文件
prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
# scrape_timeout is set to the global default (10s).# Alertmanager configuration 消息告警通知工具
alerting:
alertmanagers:
- static_configs:
- targets:
- 自己安装Alertmanager 的ip:9093# 告警规则设置文件
rule_files:
- "/usr/local/prometheus/rules/*.rules"# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
#rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['自己安装prometheus的ip:9090']
# 项目部件
- job_name: 'node-exporter'
scrape_interval: 5s
file_sd_configs:
- files:
- '/usr/local/prometheus/groups/nodegroups/node.json'
- job_name: 'zss-boot'
scrape_interval: 5s
metrics_path: '/actuator/prometheus'
file_sd_configs:
- files:
- '/usr/local/prometheus/groups/nodegroups/zss-boot.json'
在路径: /data/prometheus/groups/ 下创建文件
node.json
[
{
"targets": [
"安装node_export的ip:9100"
],
"labels": {
"instance": "vm-安装node_export的ip",
"service": "node-service"
}
}
]
zss-boot.json
[
{
"targets": [
"自己的启动项目的ip:8080"
],
"labels": {
"instance": "zss-boot",
"service": "zss-boot-service"
}
}
]
在路径:/data/prometheus/rules/ 创建报警规则文件
node-up.rules :部件停止发告警通知
groups:
- name: node-up
rules:
- alert: node-up
expr: up{job="zss-boot"} == 0
for: 15s
labels:
severity: 1
team: node
annotations:
summary: "{{ $labels.instance }} 已停止运行超过 15s!"
memory.rules 这边的规则,可以去官网直接复制即可:
Awesome Prometheus alerts | Collection of alerting rules (samber.github.io)
groups:
- name: server-status
rules:
- alert: HostOutOfMemory
expr: (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100 < 10) * on(instance) group_left (nodename) node_uname_info{nodename=~".+"}
for: 2m
labels:
severity: warning
annotations:
summary: Host out of memory (instance {{ $labels.instance }})
description: "Node memory is filling up (< 10% left)\n VALUE = {{ $value }}\n LABELS = {{ $labels }}"
- alert: HostOutOfDiskSpace
expr: ((node_filesystem_avail_bytes * 100) / node_filesystem_size_bytes < 30 and ON (instance, device, mountpoint) node_filesystem_readonly == 0) * on(instance) group_left (nodename) node_uname_info{nodename=~".+"}
for: 2m
labels:
severity: warning
annotations:
summary: Host out of disk space (instance {{ $labels.instance }})
description: "Disk is almost full (< 30% left)\n VALUE = {{ $value }}\n LABELS = {{ $labels }}"
- alert: HostHighCpuLoad
expr: (sum by (instance) (avg by (mode, instance) (rate(node_cpu_seconds_total{mode!="idle"}[2m]))) > 0.6) * on(instance) group_left (nodename) node_uname_info{nodename=~".+"}
for: 10m
labels:
severity: warning
annotations:
summary: Host high CPU load (instance {{ $labels.instance }})
description: "CPU load is > 60%\n VALUE = {{ $value }}\n LABELS = {{ $labels }}"
docker 安装Prometheus:
docker run -d --name myprometheus -p 9090:9090 -v /data/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml -v /data/prometheus/groups/:/usr/local/prometheus/groups/nodegroups/ -v /data/prometheus/rules/:/usr/local/prometheus/rules/ prom/prometheus
启动成功后页面如下:
此时,简单的发邮箱告警可以正常发送了
为了方便测试:HostOutOfMemory我把改成了50就开始告警,然后邮件就收到了告警,如左一。我把HostOutOfMemory改成了10了,就收到了恢复告警,如右一。
此时:飞书还收不到通知,而且在alertmanager.yml 配置了飞书机器人链接不发送不了,飞书消息要有特定的json格式才能发送成功。
四:服务器监控安装Prometheusalert
https://github.com/feiyu563/PrometheusAlert
配置文件app.conf 在如下地址,复制出来即可使用
PrometheusAlert/conf/app-example.conf at master · feiyu563/PrometheusAlert · GitHub
docker 安装Prometheusalert
docker pull feiyu563/prometheus-alert
docker run -d -p 8090:8080 -v /data/prometheus/prometheusalert-center/app.conf:/app/conf/app.conf --name prometheusalert-center feiyu563/prometheus-alert
启动成功后,可以看到界面如下,点飞书进入编辑,机器人地址,点模版测试,即可收到告警消息如下图三
此时更改上面的Alertmanager 的alertmanager.yml 的webhook_configs 的url地址
后续飞书收到通知:
五:服务器监控 Grafana Dashboard
docker 安装
docker run -d -p 3000:3000 --name=grafana grafana/grafana
登录成功后,添加数据源可以参考下面链接:
Spring Boot 使用 Micrometer 集成 Prometheus 监控 Java 应用性能_springboot micrometer-CSDN博客
启动成功登录如下:可以点击红框标注图标进行添加监控指标
可以编辑Alert设置消息告警规则:(折线图和柱状图会有Alert)
配置Alert 其他信息