在本站我们我们介绍过prometheus+grafana相关的教程。本文记录下使用docker-compose搭建prometheus+grafana+node-exporter系统,监控springboot项目的教程。
一、准备docker+docker-compose
这里的话首先我们需要在服务器上安装docker环境及docker-compose环境,这里我们已经安装好了,示例如下:
二、准备prometheus+grafana+node-exporter配置文件
这里的话,我们进行如下的操作:
1)创建目录
这里我们在服务器上创建一个目录,所有的配置文件都放在里面,示例如下:
#创建目录 mkdir -p /home/pubserver/monitor #进入目录 cd /home/pubserver/monitor
2)创建配置文件
接下来我们创建三个配置文件,并且把内容粘贴进去
创建prometheus.yml文件,并且把如下的内容复制进去
# 配置全局配置 global: # 数据拉取间隔 scrape_interval: 15s # 规则(主要是报警规则)拉取间隔 evaluation_interval: 15s # 单次数据拉取超时,当报context deadline exceeded错误时需要在特定的job下配置该字段 scrape_timeout: 10s # 配置告警插件告警插件 alerting: alertmanagers: - static_configs: - targets: - alertmanager:9093 # 配置告警规则,直接引用相关的目录即可 rule_files: - "node_exporter_rules.yml" # 触动采集的job配置 scrape_configs: - job_name: "prometheus" static_configs: - targets: ["192.168.31.254:9090"] - job_name: "node-exporter" static_configs: - targets: ["192.168.31.254:9100"] - job_name: "alertmanager" static_configs: - targets: ["192.168.31.254:9093"] - job_name: "spring-boot" metrics_path: '/actuator/prometheus' static_configs: - targets: ["192.168.31.115:8080"] #多个服务模块对应端口
创建altermanager.yml文件,并且把如下的内容复制进去
#配置全局配置,主要是邮件的信息,可以根据需要配置的邮件信息进行配置 global: smtp_smarthost: 'mail.xx.com:465' smtp_from: 'monitor@xx.com' smtp_auth_username: 'monitor@xx.com' smtp_auth_password: '123456789' smtp_require_tls: false #配置告警路由 route: group_by: ['alertname'] group_wait: 10s group_interval: 10s repeat_interval: 24h receiver: 'wechat' #配置警报接收者 receivers: #邮件发送 - name: 'mail' email_configs: - to: 'user@xxxx.com' #微信发送 - name: 'wechat' wechat_configs: - corp_id: 'id' agent_id: 1000001 api_secret: 'xxxxxxxxxxxxxxx' to_user: 'wxuid' send_resolved: true
创建node_exporter_rules.yml文件,并且把如下的内容复制进去:
# 服务器资源告警策略 groups: - name: 服务器资源监控 rules: - alert: 内存使用率过高 expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 90 for: 5m # 告警持续时间,超过这个时间才会发送给alertmanager labels: severity: 严重告警 annotations: summary: "{{ $labels.instance }} 内存使用率过高,请尽快处理!" description: "{{ $labels.instance }}内存使用率超过90%,当前使用率{{ $value }}%." - alert: 服务器宕机 expr: up == 0 for: 3m labels: severity: 严重告警 annotations: summary: "{{$labels.instance}} 服务器宕机,请尽快处理!" description: "{{$labels.instance}} 服务器延时超过3分钟,当前状态{{ $value }}. " - alert: CPU高负荷 expr: 100 - (avg by (instance,job)(irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 90 for: 5m labels: severity: 严重告警 annotations: summary: "{{$labels.instance}} CPU使用率过高,请尽快处理!" description: "{{$labels.instance}} CPU使用大于90%,当前使用率{{ $value }}%. " - alert: 磁盘IO性能 expr: avg(irate(node_disk_io_time_seconds_total[1m])) by(instance,job)* 100 > 90 for: 5m labels: severity: 严重告警 annotations: summary: "{{$labels.instance}} 流入磁盘IO使用率过高,请尽快处理!" description: "{{$labels.instance}} 流入磁盘IO大于90%,当前使用率{{ $value }}%." - alert: 网络流入 expr: ((sum(rate (node_network_receive_bytes_total{device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[5m])) by (instance,job)) / 100) > 102400 for: 5m labels: severity: 严重告警 annotations: summary: "{{$labels.instance}} 流入网络带宽过高,请尽快处理!" description: "{{$labels.instance}} 流入网络带宽持续5分钟高于100M. RX带宽使用量{{$value}}." - alert: 网络流出 expr: ((sum(rate (node_network_transmit_bytes_total{device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[5m])) by (instance,job)) / 100) > 102400 for: 5m labels: severity: 严重告警 annotations: summary: "{{$labels.instance}} 流出网络带宽过高,请尽快处理!" description: "{{$labels.instance}} 流出网络带宽持续5分钟高于100M. RX带宽使用量{$value}}." - alert: TCP连接数 expr: node_netstat_Tcp_CurrEstab > 10000 for: 2m labels: severity: 严重告警 annotations: summary: " TCP_ESTABLISHED过高!" description: "{{$labels.instance}} TCP_ESTABLISHED大于100%,当前使用率{{ $value }}%." - alert: 磁盘容量 expr: 100-(node_filesystem_free_bytes{fstype=~"ext4|xfs"}/node_filesystem_size_bytes {fstype=~"ext4|xfs"}*100) > 90 for: 1m labels: severity: 严重告警 annotations: summary: "{{$labels.mountpoint}} 磁盘分区使用率过高,请尽快处理!" description: "{{$labels.instance}} 磁盘分区使用大于90%,当前使用率{{ $value }}%."
这是网上关于springboot相关的告警配置,大家根据实际情况调整即可。
三、创建docker-compose.yml配置
接下来我们就需要编写docker-compose的配置了,这里需要启动的实例有:
1、prometheus 2、node-exporter 3、altermanager 4、grafana
所以这里我们在docker-compose.yml配置文件中配置的内容是:
version: '3.3' services: prometheus: image: prom/prometheus container_name: prometheus hostname: prometheus restart: always ports: - "9090:9090" volumes: - "/home/pubserver/monitor/prometheus.yml:/etc/prometheus/prometheus.yml" - "/home/pubserver/monitor/node_exporter_rules.yml:/etc/prometheus/node_exporter_rules.yml" node-exporter: image: quay.io/prometheus/node-exporter container_name: node-exporter hostname: node-exporter restart: always ports: - "9100:9100" alertmanager: image: prom/alertmanager container_name: alertmanager hostname: alertmanager restart: always volumes: - "/home/pubserver/monitor/alertmanager.yml:/etc/alertmanager/alertmanager.yml" ports: - "9093:9093" grafana: image: grafana/grafana container_name: grafana hostname: grafana restart: always ports: - "3000:3000" networks: default: name: net-monitor
这里的docker-compose.yml文件我们也是放在/home/pubserver/monitor目录下的。
四、配置springboot
这里既然我们需要监控springboot项目,那么需要找一个测试用例,需要在maven的pom里面添加如下的依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency>
这里我们不需要填写版本号,springboot-parent里面已经自带了这些组件,主要是把他利用起来而已。然后我们在application.yml文件中进行如下的配置:
management: endpoints: web: exposure: include: '*' metrics: export: prometheus: enabled: true tags: application: ${spring.application.name}
然后我们把项目启动起来:
五、启动docker实例
接下来我们去服务器上把docker-compose实例启动起来
#进入到monitor目录 cd /home/pubserver/monitor #启动实例 docker-compose up -d
启动之后,使用docker ps就能看到所有的实例了:
六、查看监控是否生效
接下来我们访问下prometheus,查看下监控是否正确开启,首先访问:http://192.168.31.254:9090(需要把ip修改为自己部署机器的ip)
这里点击Status选项,然后点击Targets,示例图如下:
看到所有的状态都是up即可,示例图如下:
上面示例图全是up,说明都是生效的,也就是正在采集springboot的信息,如果不是up状态,大家检查下对应的服务是否有问题即可。
七、配置grafana
接下来我们就登录grafana的dashboard了,访问:http://192.168.31.254:3000(需要把ip修改为自己的ip)。默认的用户名和密码是admin
登录进去之后,找到左侧菜单,选择Add New Connection:
点击添加一个数据源,然后选择prometheus:
在connection里面添加prometheus的url,如下图:
其他的选项不用填写,拉到最下面,我们点击Save & test,之后就可以在数据源看到刚才添加的prometheus的数据源了:
接着我们找到左侧导航,选择Dashboards
在这里我们直接点击创建一个dashboard
点击这里的Create Dashboard之后,会弹出如下图所示:
点击第三个 Import Dashboard按钮,会出现如下的界面:
这里主要是添加仪表盘,在grafana的官网里面提供了很多的仪表盘,我们找一个来使用即可,点击这上面的网址:
就会跳到grafana的仪表盘仓库地址,我们搜索下springboot:
然后找一个比较多的仪表盘,右键,选择复制链接地址,把想要的仪表盘地址复制出来,然后再进入到我们刚才的grafana界面上,把他填进去:
然后点击load就可以看到确认引入的信息:
然后选择我们刚才配置的prometheus数据源,
再点击import,就可以看到完整的仪表盘了。
以上就是使用使用prometheus+grafana+node-exporter监控springboot案例教程,大家可以尝试一下,然后根据自己的情况来进行调整即可。
还没有评论,来说两句吧...