基于Centos7.4搭建prometheus+grafana+altertManger监控Spring Boot微服务(docker版)
目的:给我们项目的微服务应用都加上监控告警。在这之前你需要将 Spring Boot Actuator引入
本章主要介绍
- 如何集成监控告警系统Prometheus 和图形化界面Grafana
- 如何自定义监控指标
- Prometheus 如何集成 Alertmanager 进行告警
基本概念
Prometheus
Prometheus 中文名称为普罗米修斯,受启发于Google 的Brogmon 监控系统,从2012年开始由前Google工程师在Soundcloud 以开源软件的形式进行研发,2016年6月发布1.0版本。Prometheus 可以看作是 Google 内部监控系统Borgmon 的一个实现。
下图说明了Prometheus 的体系结构及其部分生态系统组件。其中 Alertmanager 用于告警,Grafana 用于监控数据可视化,会在文章后面继续提到。
在这里我们了解到Prometheus 这几个特征即可:
- 数据收集器,它以配置的时间间隔定期通过HTTP提取指标数据。
- 一个时间序列数据库,用于存储所有指标数据。
- 一个简单的用户界面,您可以在其中可视化,查询和监视所有指标。
详细了解请阅读Prometheus 官方文档
Grafana
Grafana 是一款采用 go 语言编写的开源应用,允许您从Elasticsearch,Prometheus,Graphite,InfluxDB等各种数据源中获取数据,并通过精美的图形将其可视化。
除了Prometheus的AlertManager 可以发送报警,Grafana 同时也支持告警。Grafana 可以无缝定义告警在数据中的位置,可视化的定义阈值,并可以通过钉钉、email等平台获取告警通知。最重要的是可直观的定义告警规则,不断的评估并发送通知。
由于Grafana alert告警比较弱,大部分告警都是通过Prometheus Alertmanager进行告警.
请注意Prometheus仪表板也具有简单的图形。 但是Grafana的图形化要好得多。
延伸阅读:
Alertmananger
Prometheus 监控平台中除了负责采集数据和存储,还能定制事件规则,但是这些事件规则要实现告警通知的话需要配合Alertmanager 组件来完成。
AlertManager 支持告警分组(将多个告警合并一起发送)、告警抑制以及告警静默(同一个时间段内不发出重复的告警)功能。
延伸阅读:官网对Alertmanager的介绍
监控Java 应用
监控模式
目前,监控系统采集指标有两种方式,一种是『推』,另一种就是『拉』:
推的代表有 ElasticSearch,InfluxDB,OpenTSDB 等,需要你从程序中将指标使用 TCP,UDP 等方式推送至相关监控应用,只是使用 TCP 的话,一旦监控应用挂掉或存在瓶颈,容易对应用本身产生影响,而使用 UDP 的话,虽然不用担心监控应用,但是容易丢数据。
拉的代表,主要代表就是 Prometheus,让我们不用担心监控应用本身的状态。而且可以利用 DNS-SRV 或者 Consul 等服务发现功能就可以自动添加监控。
如何监控
Prometheus 监控应用的方式非常简单,只需要进程暴露了一个用于获取当前监控样本数据的 HTTP 访问地址。这样的一个程序称为Exporter,Exporter 的实例称为一个 Target 。Prometheus 通过轮训的方式定时从这些 Target 中获取监控数据样本,对于应用来讲,只需要暴露一个包含监控数据的 HTTP 访问地址即可,当然提供的数据需要满足一定的格式,这个格式就是 Metrics 格式.
metric name>{<label name>=<label value>, ...}
主要分为三个部分
各个部分需符合相关的正则表达式
- metric name:指标的名称,主要反映被监控样本的含义
a-zA-Z_:*
_ - label name: 标签 反映了当前样本的特征维度
[a-zA-Z0-9_]*
- label value: 各个标签的值,不限制格式
需要注意的是,label value 最好使用枚举值,而不要使用无限制的值,比如用户 ID,Email 等,不然会消耗大量内存,也不符合指标采集的意义。
前面简述了Prometheus 监控的原理。那么我们的Spring Boot 应用怎么提供这样一个 HTTP 访问地址,提供的数据还得符合上述的 Metrics 格式 ?
Spring Boot 提供了所谓的 endpoints (下文翻译为端点)给外部来与应用程序进行访问和交互。
打比方来说,/health
端点 提供了关于应用健康情况的一些基础信息。metrics
端点提供了一些有用的应用程序指标(JVM 内存使用、系统CPU使用等)。
这些 Actuator 模块本来就有的端点我们称之为原生端点。根据端点的作用的话,我们大概可以分为三大类:
- 应用配置类:获取应用程序中加载的应用配置、环境变量、自动化配置报告等与Spring Boot应用密切相关的配置类信息。
- 度量指标类:获取应用程序运行过程中用于监控的度量指标,比如:内存信息、线程池信息、HTTP请求统计等。
- 操作控制类:提供了对应用的关闭等操作类功能。
详细的原生端点介绍,请以官网为准,这里就不赘述徒增篇幅。
需要注意的就是:
- 每一个端点都可以通过配置来单独禁用或者启动
- 不同于Actuator 1.x,Actuator 2.x 的大多数端点默认被禁掉。 Actuator 2.x 中的默认端点增加了
/actuator
前缀。默认暴露的两个端点为/actuator/health
和/actuator/info
端点暴露配置
我们可以通过以下配置,来配置通过JMX 和 HTTP 暴露的端点。
Property | Default |
---|---|
management.endpoints.jmx.exposure.exclude |
|
management.endpoints.jmx.exposure.include |
* |
management.endpoints.web.exposure.exclude |
|
management.endpoints.web.exposure.include |
info, healt |
可以打开所有的监控点
management.endpoints.web.exposure.include=*
也可以选择打开部分,"*" 代表暴露所有的端点,如果指定多个端点,用","分开
management.endpoints.web.exposure.exclude=beans,trace
Actuator 默认所有的监控点路径都在/actuator/*
,当然如果有需要这个路径也支持定制。
management.endpoints.web.base-path=/minitor
设置完重启后,再次访问地址就会变成/minitor/*
。
现在我们按照如下配置:
# "*" 代表暴露所有的端点 如果指定多个端点,用","分开 | |
management.endpoints.web.exposure.include=* | |
# 赋值规则同上 | |
management.endpoints.web.exposure.exclude= |
启动DEMO程序,访问http://localhost:8080/actuator
,查看暴露出来的端点:
搭建部分
基础环境Centos7 docker搭建
离线安装,下载如下4个 rpm 包
[root@jws-ftp docker]# ll
总用量 104280
-rw-r--r--. 1 root root 34677436 2月 19 11:41 containerd.io-1.4.3-3.1.el7.x86_64.rpm
-rw-r--r--. 1 root root 27887312 2月 19 11:41 docker-ce-20.10.3-3.el7.x86_64.rpm
-rw-r--r--. 1 root root 34721064 2月 19 11:41 docker-ce-cli-20.10.3-3.el7.x86_64.rpm
-rw-r--r--. 1 root root 9486464 2月 19 11:41 docker-ce-rootless-extras-20.10.3-3.el7.x86_64.rpm
[root@jws-ftp docker]#
#本地安装
[root@jws-ftp docker]# yum localinstall -y *.rpm
启动docker并设置开机自启动
[root@jws-ftp docker]# systemctl start docker [root@jws-ftp docker]# systemctl enable docker
查找远端是否有 prometheus 镜像
[root@jws-ftp docker]# docker search prometheus
由于本人是内网环境,所以需要配置代理(可直接联网的忽略此操作),代理使用CCproxy,(CCproxy配置指导)
#yum配置代理
[root@jws-ftp docker.service.d]# echo 'proxy=http://10.153.49.7:8888' >> /etc/yum.conf
#查看docker环境
[root@jws-ftp docker.service.d]# systemctl show --property=Environment docker
#配置docker代理
[root@jws-ftp docker.service.d]# mkdir -p /etc/systemd/system/docker.service.d
[root@jws-ftp docker.service.d]# cat /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://10.153.49.7:8888/"
[root@jws-ftp docker.service.d]#
[root@jws-ftp docker.service.d]# systemctl daemon-reload
[root@jws-ftp docker.service.d]# systemctl restart docker
#确认docker环境配置
[root@jws-ftp docker.service.d]# systemctl show --property=Environment docker
一、Prometheus 安装与配置
代理配置完成后,拉取prometheus镜像
#拉取prometheus镜像
[root@jws-ftp docker.service.d]# docker pull prom/prometheus
#查看镜像
[root@jws-ftp docker.service.d]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
prom/prometheus latest a618f5685492 4 weeks ago 175MB
[root@jws-ftp docker.service.d]# #拉取grafana镜像
[root@jws-ftp docker.service.d]# docker pull grafana/grafana
#查看镜像
[root@jws-ftp docker.service.d]#
[root@jws-ftp docker.service.d]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
prom/prometheus latest a618f5685492 4 weeks ago 175MB
grafana/grafana latest db33d19bd973 4 weeks ago 198MB
[root@jws-ftp docker.service.d]#
配置prometheus.yml,创建docker容器时将配置文件挂载至容器目录
[root@jws-ftp prometheus]# cat /jws/prometheus/prometheus.yml
global:
scrape_interval: 60s
evaluation_interval: 60s scrape_configs:
- job_name: 'springboot-actuator-prometheus-test' # job name
metrics_path: '/actuator/prometheus' # 指标获取路径
scrape_interval: 5s # 间隔
static_configs:
- targets: ['10.153.49.7:8080'] # 实例的地址,默认的协议是http
labels:
instance: springboot-actuator-prometheus-test [root@jws-ftp prometheus]#
重点请关注这里的配置:
- job_name: 'springboot-actuator-prometheus-test' # job name
metrics_path: '/actuator/prometheus' # 指标获取路径
scrape_interval: 5s # 间隔
static_configs:
- targets: ['10.153.49.7:8080'] # 实例的地址,默认的协议是http
labels:
instance: springboot-actuator-prometheus-test
测试
配置完成之后,我们启动Prometheus 测试一下,如果你是docker 方式的话,在prometheus.yml
文件所在目录执行如下命令,即可启动Prometheus:
[root@jws-ftp prometheus]# docker run -d -p 9090:9090 --name prometheus -v /jws/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
- 访问
http://ip:9090
,可看到如下界面:
- 点击
Insert metric at cursor
,即可选择监控指标;点击Graph
,即可让指标以图表方式展示;点击Execute
按钮,即可看到类似下图的结果
你也可以在输入框中输入PromQL来进行更高级的查询。
PromQL是Prometheus 的自定义查询语言,通过PromQL用户可以非常方便地对监控样本数据进行统计分析。
- 配置热加载
curl -X POST http://ip:9090/-/reload
二、Grafana安装和配置
可以看到,Prometheus 自带的监控面板非常“简陋”。所以引入Grafana 来实现更友好、更贴近生产的监控可视化。
1. 启动
[root@jws-ftp prometheus]# mkdir /jws/grafana-storage #创建收集信息的目录
[root@jws-ftp prometheus]#chmod 777 /jws/grafana-storage #给予777权限
[root@jws-ftp prometheus]# docker run -d -p 3000:3000 --name=grafana -v /jws/grafana-storage:/var/lib/grafana grafana/grafana #因为镜像在之前步骤中已经pull下来,所以直接启动容器
2. 登录
访问 http://ip:3000/login
,初始账号/密码为:admin/admin
,第一次登录会让你修改密码。
3. 配置数据源
- 点击
Configuration
中Add Data Source
,会看到如下界面:
- 这里我们选择Prometheus 当做数据源,这里我们就配置一下Prometheus 的访问地址,点击
Save & Test
:
4. 创建监控Dashboard
- 点击导航栏上的
+
按钮,并点击Dashboard,将会看到类似如下的界面:
- 点击
Add Query
,即可看到类似如下的界面:
在Metrics
处输入要查询的指标,指标的取值详见Spring Boot应用的 /actuator/prometheus
端点,例如jvm_memory_used_bytes
、jvm_threads_states_threads
、jvm_threads_live_threads
等,Grafana会给你较好的提示,并且可以用PromQL
实现较为复杂的计算,例如聚合、求和、平均等。如果想要绘制多个线条,可点击Add Query
按钮,
- 再点击下面那个
Visualization
,可以选择可视化的类型和一些相关的配置。这里就不多赘述,留给读者自己探索。
- 再点击下一步
General
进行基础配置,不赘述:
5. Dashboard 市场
到这里,我想聪明的读者们应该已经学会如何去可视化一个指标数据了。但是应该很多人都会觉得,如果有好多指标的话,配置起来实际上是蛮繁琐的。
是否有开箱即用、通用型的DashBoard模板呢?
前往 Grafana Lab - Dashboards ,输入关键词即可搜索指定Dashboard。你就可以获得你想要的。
另外,这些已有的dashboard也可以让我们更快掌握一些panel的配置和dashboard的使用。
6. 引入dashboard
这里直接给出两款我觉得比较好用的dashboard:
- JVM (Micrometer)
- Spring Boot Statistics
这一款我需要提一下,刚开始我引入的时候是无效的,不知道读者会不会遇到和我一样的问题,如果遇到了,请到dashboard的设置里面,修改 variables 中
$application
和$instance
两个变量的Definition
。
还有我个人是推荐,在这两款dashboard上面做一些定制化操作,或者说把两者的panel结合起来。
- 引入的操作很简单,首选你要在 Grafana Lab - Dashboards中选好你心仪的dashboard,然后记下它的ID
- 就是点击
Import
按钮:
- 输入ID 之后,完成配置,点击
Import
按钮:
- 效果如下:
三、添加Alertmanager监控告警
AlertManager:用来接收prometheus发送来的报警信息,并且执行设置好的报警方式、报警内容。
下载镜像
[root@pro-gra-alt jws]# docker pull alertmanager #下载alertmanager镜像
基于alertmanager运行一台容器
[root@pro-gra-alt jws]# docker run -d --name alertmanager -p 9093:9093 prom/alertmanager:latest
配置路由转发
[root@pro-gra-alt jws]# echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf
[root@pro-gra-alt jws]# sysctl -p
在部署alertmanager之前,我们需要对它的配置文件进行修改,所以我们先运行一个容器,先将其配置文件拷贝出来。
[root@pro-gra-alt jws]# docker cp alertmanager:/etc/alertmanager/alertmanager.yml ./ #拷贝alertmanager的配置文件到本地
修改alertmanager的配置文件
配置文件简单介绍
AlertManager:用来接收Prometheus发送的报警信息,并且执行设置好的报警方式,报警内容。 AlertManager.yml配置文件: global:全局配置,包括报警解决后的超时时间、SMTP相关配置、各种渠道通知的API地址等消息。 route:用来设置报警的分发策略。 receivers:配置报警信息接收者信息。 inhibit_rules:抑制规则配置,当存在与另一个匹配的报警时,抑制规则将禁用用于有匹配的警报。
修改配置文件
[root@jws-ftp jws]# cat alertmanager.yml
global:
resolve_timeout: 5m
smtp_smarthost: 'smtp.163.com:465' #使用的是哪个邮箱,比如163或者QQ+端口
smtp_from: '123456@qq.com' #自己邮箱地址
smtp_auth_username: '123456@qq.com.com'
smtp_auth_password: '123456' #邮箱密码
smtp_require_tls: false
smtp_hello: '163.com' route:
group_by: ['alertname']
group_wait: 5s
group_interval: 5s
repeat_interval: 5m
receiver: 'email' receivers:
- name: 'email'
email_configs:
- to: '{{ template "email.to" . }}'
html: '{{ template "email.to.html" . }}'
send_resolved: true [root@jws-ftp jws]#
以上配置我反复试验后,发现不同的环境参数配置也不一样,调试期间出现了各种报错问题,将其中几个关键的配置说明一下:
1.smtp_smarthost: 这里为 QQ 邮箱 SMTP 服务地址,官方地址为 smtp.qq.com 端口为 465 或 587,同时要设置开启 POP3/SMTP 服务。 smtp_auth_password: 这里为第三方登录 QQ 邮箱的授权码,非 QQ 账户登录密码,否则会报错,获取方式在 QQ 邮箱服务端设置开启 POP3/SMTP 服务时会提示。
3.smtp_require_tls: 是否使用 tls,根据环境不同,来选择开启和关闭。如果提示报错 email.loginAuth failed: 530 Must issue a STARTTLS command first,那么就需要设置为 true。着重说明一下,如果开启了 tls,提示报错 starttls failed: x509: certificate signed by unknown authority,需要在 email_configs 下配置 insecure_skip_verify: true 来跳过 tls 验证。
重新运行 alertmanager 容器
[root@jws-ftp jws]# docker rm -f alertmanager #删除alertmanager容器
[root@jws-ftp jws]# docker run -d --name alertmanager -v /root/alertmanager.yml:/etc/alertmanager/alertmanager.yml -p 9093:9093 prom/alertmanager:latest #运行一台新的alertmanager容器,记得挂载配置文件
Prometheus配置和alertmanager报警规则
创建存放规则的目录
[root@docker01 ~]# mkdir -p prometheus/rules #创建规则目录
[root@docker01 ~]# cd prometheus/rules/
编写规则
[root@jws-ftp rules]# cat node-up.rules
groups:
- name: springboot-actuator-prometheus-test
rules:
- alert: springboot-actuator-prometheus-test
expr: up{job="springboot-actuator-prometheus-test"} == 0 ##{job="springboot-actuator-prometheus-test"}中的springboot-actuator-prometheus-test需要和prometheus配置文件23行的相同
for: 15s
labels:
severity: 1
team: node
annotations:
summary: "{{ $labels.instance }} 已停止运行超过 15s!"
[root@jws-ftp rules]#
说明:该 rules 目的是监测 node 是否存活,expr 为 PromQL 表达式验证特定节点 job="node-exporter" 是否活着,for 表示报警状态为 Pending 后等待 15s 变成 Firing 状态,一旦变成 Firing 状态则将报警发送到 AlertManager,labels 和 annotations 对该 alert 添加更多的标识说明信息,所有添加的标签注解信息,以及 prometheus.yml 中该 job 已添加 label 都会自动添加到邮件内容中,更多关于 rule 详细配置可以参考 这里。
修改 prometheus配置文件
[root@jws-ftp prometheus]# cat prometheus.yml
global:
scrape_interval: 60s
evaluation_interval: 60s scrape_configs:
- job_name: 'springboot-actuator-prometheus-test'
metrics_path: '/actuator/prometheus'
scrape_interval: 5s
static_configs:
- targets: ['10.153.49.7:8080']
labels:
instance: springboot-actuator-prometheus-test alerting:
alertmanagers:
- static_configs:
- targets:
- 10.153.61.49:9093
rule_files:
- "/usr/local/prometheus/rules/*.rules" #添加(这个路径是prometheus容器内的路径)
[root@jws-ftp prometheus]#
注意: 这里 rulefiles 为容器内路径,需要将本地 node-up.rules 文件挂载到容器内指定路径,修改 Prometheus 启动命令如下,并重启服务。
重新运行prometheus 容器
[root@jws-ftp rules]# docker rm -f prometheus #删除prometheus容器
[root@jws-ftp rules]# docker run -d -p 9090:9090 --name prometheus --net=host -v /root/prometheus.yml:/etc/prometheus/prometheus.yml -v /root/prometheus/rules/node-up.rules:/usr/local/prometheus/rules/node-up.rules prom/prometheus #运行一台新的alertmanager容器,记得挂载规则文件
浏览器验证一下http://10.153.61.49:9090/rules
这里说明一下 Prometheus Alert 告警状态有三种状态:Inactive、Pending、Firing。
Inactive:非活动状态,表示正在监控,但是还未有任何警报触发。
Pending:表示这个警报必须被触发。由于警报可以被分组、压抑/抑制或静默/静音,所以等待验证,一旦所有的验证都通过,则将转到 Firing 状态。
Firing:将警报发送到 AlertManager,它将按照配置将警报的发送给所有接收者。一旦警报解除,则将状态转到 Inactive,如此循环。
停止微服务后,会收到告警邮件
这里有几个地方需要解释一下:
每次停止/恢复服务后,15s 之后才会发现 Alert 状态变化,是因为 prometheus.yml中 global -> scrape_interval: 15s 配置决定的,如果觉得等待 15s 时间太长,可以修改小一些,可以全局修改,也可以局部修改。例如局部修改 node-exporter 等待时间为 5s。
... - job_name: 'node-exporter' scrape_interval: 5s file_sd_configs: - files: ['/usr/local/prometheus/groups/nodegroups/*.json'] Alert 状态变化时会等待 15s 才发生改变,是因为 node-up.rules 中配置了 for: 15s 状态变化等待时间。 报警触发后,每隔 5m 会自动发送报警邮件(服务未恢复正常期间),是因为 alertmanager.yml 中 route -> repeat_interval: 5m 配置决定的。
AlertManager自定义邮件模板
创建模板目录
[root@pro-gra-alt ~]# mkdir /jws/alertmanager/alertmanager-tmpl #创建AlertManager模板目录
[root@pro-gra-alt ~]# cd /jws/alertmanager/alertmanager-tmpl #进入模板目录
看到上边默认发送的邮件模板,虽然所有核心的信息已经包含了,但是邮件格式内容可以更优雅直观一些,那么,AlertManager 也是支持自定义邮件模板配置的,首先新建一个模板文件
编写模板规则
[root@pro-gra-alt alertmanager-tmpl]# cat email.tmpl
{{ define "email.from" }}123456@qq.com{{ end }}
{{ define "email.to" }}123456@qq.com{{ end }}
{{ define "email.to.html" }}
{{ range .Alerts }}
=========start==========<br>
告警程序: prometheus_alert <br>
告警级别: {{ .Labels.severity }} 级 <br>
告警类型: {{ .Labels.alertname }} <br>
故障主机: {{ .Labels.instance }} <br>
告警主题: {{ .Annotations.summary }} <br>
告警详情: {{ .Annotations.description }} <br>
触发时间: {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }} <br>
=========end==========<br>
{{ end }}
{{ end }}
[root@pro-gra-alt alertmanager-tmpl]#
简单说明一下,上边模板文件配置了 email.from、email.to、email.to.html 三种模板变量,可以在 alertmanager.yml 文件中直接配置引用。这里 email.to.html 就是要发送的邮件内容,支持 Html 和 Text 格式,这里为了显示好看,采用 Html 格式简单显示信息。下边 {{ range .Alerts }} 是个循环语法,用于循环获取匹配的 Alerts 的信息,下边的告警信息跟上边默认邮件显示信息一样,只是提取了部分核心值来展示。
触发时间 ,配置文件解释
(.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" 这里定义的时间为go 语言的诞生时间!!!切记不能乱填,Add 28800e9 是增加8个小时,系统默认为UTC实际因此增加8小时变为CST时间
另外alertmanager 是由go 语言开发的,所以他要遵循这个时间。如果随意填写时间,出现的告警时间是错的
然后,需要增加 alertmanager.yml 文件 templates 配置如下:
修改alertmanager的配置文件
[root@pro-gra-alt alertmanager]# cat alertmanager.yml
global:
resolve_timeout: 5m
smtp_smarthost: 'smtp.qq.com:465'
smtp_from: '123456@qq.com'
smtp_auth_username: '123456@qq.com'
smtp_auth_password: '123456'
smtp_require_tls: false
smtp_hello: 'qq.com' templates: #添加模板
- '/etc/alertmanager-tmpl/email.tmpl' #添加路径 route:
group_by: ['alertname']
group_wait: 5s
group_interval: 5s
repeat_interval: 5m
receiver: 'email' receivers:
- name: 'email'
email_configs:
- to: '{{ template "email.to" . }}'
html: '{{ template "email.to.html" . }}'
send_resolved: true inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
[root@pro-gra-alt alertmanager]#
重新运行 alertmanager 容器
[root@docker01 ~]# docker stop alertmanager && docker rm alertmanager #删除alertmanager容器
[root@docker01 ~]# docker run -d --name alertmanager -v /jws/alertmanager/alertmanager-tmpl/:/etc/alertmanager-tmpl/ -v /jws/alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml -p 9093:9093 prom/alertmanager:latest #运行一台新的alertmanager容器,记得挂载配置文件
注:
prometheus和ELK关于spring boot需要添加修改的依赖和配置汇总:
1、需要的依赖包:
///Prometheus需要的依赖包
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
///logshash需要的依赖包
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>5.1</version>
</dependency>
2、application.properties 配置修改
Prometheus的配置
management.endpoints.web.exposure.include=* logshash的配置
logging.config = classpath:logback-spring.xml 3、logshash在resource下添加logback-spring.xml,IP修改为logstash服务端IP地址
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml" /> <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>10.10.10.10:9061</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
</appender> <root level="INFO">
<appender-ref ref="LOGSTASH" />
<appender-ref ref="CONSOLE" />
</root>
</configuration>
可参考资料(侵删):
https://ricstudio.top/archives/spring_boot_actuator_learn
https://ricstudio.top/archives/monitorintegrateprometheusgrafana
https://www.cnblogs.com/zqj-blog/p/12205063.html
https://blog.51cto.com/u_14320361/2461666
基于Centos7.4搭建prometheus+grafana+altertManger监控Spring Boot微服务(docker版)的更多相关文章
- Spring Boot 微服务应用集成Prometheus + Grafana 实现监控告警
Spring Boot 微服务应用集成Prometheus + Grafana 实现监控告警 一.添加依赖 1.1 Actuator 的 /prometheus端点 二.Prometheus 配置 部 ...
- Spring Boot微服务电商项目开发实战 --- 基础配置及搭建
根据SpringBoot实现分布式微服务项目近两年的开发经验,今天决定开始做SpringBoot实现分布式微服务项目的系列文章,帮助其他正在使用或计划使用SringBoot开发的小伙伴们.本次系列文章 ...
- Spring Boot微服务框架的搭建
(1)spring boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发 ...
- spring boot 2.0.3+spring cloud (Finchley)8、微服务监控Spring Boot Admin
参考:Spring Boot Admin 2.0 上手 Spring Boot Admin 用于管理和监控一个或多个Spring Boot程序,在 Spring Boot Actuator 的基础上提 ...
- [转帖]基于docker 搭建Prometheus+Grafana
基于docker 搭建Prometheus+Grafana https://www.cnblogs.com/xiao987334176/p/9930517.html need good study 一 ...
- Prometheus+Grafana企业监控系统
Prometheus+Grafana企业监控系统 作者 刘畅 实验配置: 主机名称 Ip地址 controlnode 172.16.1.70/24 slavenode1 172.16.1.71/24 ...
- Docker监控平台prometheus和grafana,监控redis,mysql,docker,服务器信息
Docker监控平台prometheus和grafana,监控redis,mysql,docker,服务器信息 一.通过redis_exporter监控redis 1.1 下载镜像 1.2 运行服务 ...
- 在阿里云容器服务上开发基于Docker的Spring Cloud微服务应用
本文为阿里云容器服务Spring Cloud应用开发系列文章的第一篇. 一.在阿里云容器服务上开发Spring Cloud微服务应用(本文) 二.部署Spring Cloud应用示例 三.服务发现 四 ...
- Spring Cloud第十三篇 | Spring Boot Admin服务监控
本文是Spring Cloud专栏的第十三篇文章,了解前十二篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Clo ...
随机推荐
- Dynamics CRM实体系列之窗体
本节开始讲Dynamics CRM的窗体排版和设计,窗体也就是我们实际可以看到的表单界面.Dynamics CRM提供了一套独立的表单模板设计引擎,可以很方便的为开发者提供无代码开发,只需要简单的拖动 ...
- 数据结构☞二叉搜索树BST
二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它可以是一棵空树,也可以是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值: 若它 ...
- Java性能优化的十条小技巧
1 System.nanoTime 测试性能时,System.nanoTime比System.currentTimeMills更精确,前者使用纳秒计时,且对系统影响更小. 具体来说: System.c ...
- (十三)VMware Harbor 身份验证模式
VMware Harbor 修改Harbor仓库admin用户 参考:https://blog.csdn.net/qq_40460909 https://blog.csdn.net/qq_404609 ...
- Git分支及其协同开发
目录 Git分支 Git是如何保存数据的 Git分支的本质 Git分支的操作 远程仓库与本地仓库分支开发 一个项目多个远程仓库 远程仓库操作命令 协同开发 Git flow工作流 GitLub安装搭建 ...
- SpringBoot开发秘籍 - 集成Graphql Query
概述 REST作为一种现代网络应用非常流行的软件架构风格受到广大WEB开发者的喜爱,在目前软件架构设计模式中随处可见REST的身影,但是随着REST的流行与发展,它的一个最大的缺点开始暴露出来: 在很 ...
- Springboot项目中使用@RestControllerAdvice注解不生效排查思路
说明: 在后端编写业务逻辑时,可能会遇到异常抛出处理的情况,后端通常会通过throw出一个异常,然后通过@RestControllerAdvice注解标注自定义类进行统一处理,前端再将接收到的结果解析 ...
- Day13_73_死锁
死锁 什么是死锁? - 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去. 死锁出现的原因? (1) 因为系统资源不足. 如果系统资源充足 ...
- 「跬步千里」详解 Java 内存模型与原子性、可见性、有序性
文题 "跬步千里" 主要是为了凸显这篇文章的基础性与重要性(狗头),并发编程这块的知识也确实主要围绕着 JMM 和三大性质来展开. 全文脉络如下: 1)为什么要学习并发编程? 2) ...
- Python中Selenium模块的使用
目录 Selenium的介绍.配置和调用 Selenium的配置 Selenium的调用 Selenium的使用 定位 定位元素的使用 定位下拉标签元素 在iframe框架之间切换 上传文件 Webd ...