目的:给我们项目的微服务应用都加上监控告警。在这之前你需要将 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版)的更多相关文章

  1. Spring Boot 微服务应用集成Prometheus + Grafana 实现监控告警

    Spring Boot 微服务应用集成Prometheus + Grafana 实现监控告警 一.添加依赖 1.1 Actuator 的 /prometheus端点 二.Prometheus 配置 部 ...

  2. Spring Boot微服务电商项目开发实战 --- 基础配置及搭建

    根据SpringBoot实现分布式微服务项目近两年的开发经验,今天决定开始做SpringBoot实现分布式微服务项目的系列文章,帮助其他正在使用或计划使用SringBoot开发的小伙伴们.本次系列文章 ...

  3. Spring Boot微服务框架的搭建

    (1)spring boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发 ...

  4. 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 的基础上提 ...

  5. [转帖]基于docker 搭建Prometheus+Grafana

    基于docker 搭建Prometheus+Grafana https://www.cnblogs.com/xiao987334176/p/9930517.html need good study 一 ...

  6. Prometheus+Grafana企业监控系统

    Prometheus+Grafana企业监控系统 作者 刘畅 实验配置: 主机名称 Ip地址 controlnode 172.16.1.70/24 slavenode1 172.16.1.71/24 ...

  7. Docker监控平台prometheus和grafana,监控redis,mysql,docker,服务器信息

    Docker监控平台prometheus和grafana,监控redis,mysql,docker,服务器信息 一.通过redis_exporter监控redis 1.1 下载镜像 1.2 运行服务 ...

  8. 在阿里云容器服务上开发基于Docker的Spring Cloud微服务应用

    本文为阿里云容器服务Spring Cloud应用开发系列文章的第一篇. 一.在阿里云容器服务上开发Spring Cloud微服务应用(本文) 二.部署Spring Cloud应用示例 三.服务发现 四 ...

  9. Spring Cloud第十三篇 | Spring Boot Admin服务监控

    本文是Spring Cloud专栏的第十三篇文章,了解前十二篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Clo ...

随机推荐

  1. (十八)VMware Harbor 镜像同步

    为什么需要镜像同步 由于对镜像的访问是一个核心的容器概念,在实际使用过程中,一个镜像库可能是不够用的,下例情况下,我们可能会需要部署多个镜像仓库: 国外的公有镜像下载过慢,需要一个中转仓库进行加速 容 ...

  2. JAVAEE_Servlet_21_Cookie

    Cookie * Cookie 是什么? - Cookie翻译过来是曲奇饼干的意思 - Cookie可以保存回话状态,但是这个会话状态是保存在客户端上的,只要清除Cookie,或者 Cookie失效, ...

  3. WebPack系列--开启HappyPack之后,再将项目打包速度缩短5秒

    效果展示 打包时间:缩短了 26.296s-20.586s=5.71s 先看两组测试数据,第一组是没有使用DllPlugin的打包测试数据,测量三次取平均值是26.296s(25.72+25.56+2 ...

  4. Weekly Contest 139

    1071. Greatest Common Divisor of Strings For strings S and T, we say "T divides S" if and ...

  5. 473. Matchsticks to Square

    Remember the story of Little Match Girl? By now, you know exactly what matchsticks the little match ...

  6. Laravel打印sql日志

    直接打印 use Log; use DB; DB::connection()->enableQueryLog(); Log::info(DB::getQueryLog()); //print_r ...

  7. 【CompletableFuture】CompletableFuture测试runAsync()方法调用

    问题 CompletableFuture.runAsync() 返回 CompletableFuture<Void>对象,调用CompletableFuture.allOf(f1,f2). ...

  8. 【JVM】JVM中的垃圾回收算法

    1.标记 -清除算法 "标记-清除"(Mark-Sweep)算法,如它的名字一样,算法分为"标记"和"清除"两个阶段:首先标记出所有需要回收 ...

  9. hdu4756 最小树+树形dp

    题意:       给你一个完全图,让你在上面找到一颗最小树,然后问破坏这个最小树的某一条边后用其他边连接(要求最小)成新的树,然后输出破坏每一条边后最小树中最大的那个. 思路:       先跑出一 ...

  10. 【点分治】2019 首尔 icpc Gene Tree

    题目 链接:https://ac.nowcoder.com/acm/contest/15644/B来源:牛客网 A gene tree is a tree showing the evolution ...