背景:
由于项目上使用spring cloud,需要对一些服务指标就需要进行监控,以便于时刻了解各服务的运行状态。经过搜索材料,发现大多方案直接推荐用微服务最佳实践者——Netflix开源的方案(Atlas+Grafana),试着跟着搜索到的一些资料,并进行了尝试,结果表明成功案例都是在SpringBoot1.x上的;在SpringBoot2.x上,尚无资料表示成功使用上Atlas这方案。
另外,在研究的过程中,发现SpringBoot2.x上已引入第三方实现的metrics Facade(micrometer.io,可以同日志的Facade框架Sl4j等同理解,并已覆盖Atlas、Datadog、Ganglia、Graphite、Influx、JMX、NewRelic、Prometheus、SignalFx、StatsD、Wavefront等业内主流的tsdb实现)。再者,项目最终需要应用kubernetes来进行容器编排,其官方推荐的容器监控服务,就是用Prometheus
配上Grafana
作为监 控展现;为了统一,就转身到Prometheus+Grafana这方案上来。
0. 环境说明:
Ubuntu 16.04
Spring Boot 2.0.0.RELEASE
初识Prometheus:
Prometheus 是由 SoundCloud 开源监控告警解决方案,从 2012 年开始编写代码,再到 2015 年 github 上开源以来,已经吸引了 9k+ 关注,以及很多大公司的使用;2016 年 Prometheus 成为继 k8s 后,第二名 CNCF(Cloud Native Computing Foundation) 成员。
作为新一代开源解决方案,很多理念与 Google SRE 运维之道不谋而合。
从这个架构图,也可以看出 Prometheus 的主要模块包含, Server, Exporters, Pushgateway, PromQL, Alertmanager, WebUI 等。
大致使用逻辑是这样:
了解更多知识,可以到这里了解:Prometheus实战
Spring cloud应用的配置改动:
<dependency> <groupId>io.micrometergroupId> <artifactId>micrometer-coreartifactId> <version>1.0.5version> dependency> <dependency> <groupId>io.micrometergroupId> <artifactId>micrometer-registry-prometheusartifactId> <version>1.0.5version> <exclusions> <exclusion> <groupId>io.micrometergroupId> <artifactId>micrometer-coreartifactId> exclusion> exclusions> dependency>
#服务治理配置
management: security: # 仅限于 开发环境可对security进行关闭。 enabled: false metrics: export: prometheus: enabled: true step: 1m
descriptions: true web: server: auto-time-requests: true endpoints: web: exposure: include: health,info,env,prometheus,metrics,httptrace,threaddump,heapdump
这里为了方便部署监控测试,把服务治理端的相关安全认证选项禁用掉。更多关于metrics的配置说明,请参考官方指引。
关于endpoints,"prometheus"在本例中,是必须声明的项目,否则在后续配置prometheus的job时没有对应的uri可以提供。
由于prometheus是采用主动爬取的方式,所以在SpringCloud的应用里面,无需配置prometheus的服务地址和端口。这点(个人理解),是与Atlas、Ganglia、Graphite、Influx、JMX、StatsD、Wavefront等不同的。
接着启动你的应用,打开浏览器输入http://localhost:PORT/actuator/prometheus,正常情况下你就可以在页面上看到很多键值对(直接返回的是text):
Prometheus配置:
prometheus.yml
改配置:# my global config global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. # scrape_timeout is set to the global default (10s). # Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093 # Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml" # - "second_rules.yml" # A scrape configuration containing exactly one endpoint to scrape: # Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=` to any timeseries scraped from this config.
- job_name: 'prometheus' # metrics_path defaults to '/metrics' # scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
# The job name is added as a label `job=` to any timeseries scraped from this config.
- job_name: 'admin-service' # metrics_path defaults to '/metrics' # metrics_path: /actuator/metrics
metrics_path: /actuator/prometheus
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:8762']
说明:下载下来的配置文件,metrics_path是被注释的。在本例使用的是SpringBoot 2.0.0.RELEASE,默认监控类指标输出,都是在/actuator下。
所以,需要修改为”metrics_path: /actuator/prometheus“,且非注释。
prometheus -config.file=prometheus.yml
,启动成功后,在http://localhost:9090/targets你会看到你所监控的目标:要看有哪些指标可以现成使用的,可以在Graph
菜单下,那个下拉列表中查找:
你可以选中一个指标,然后execute,就可以看到一个简陋的图表,显示指标的数据:
增强配置:
考虑到后续需要对同一个服务增加不用业务类型的监控,或者直接对同一个job应用到不同的host上时,采用static_configs的方式,是需要重启Prometheus服务的。
因此,通过研究,可以通过 file_sd_configs来替代static_configs:
(1). 注释 修改prometheus.yml文件:
#static_configs: #- targets: ['localhost:8762'] file_sd_configs:
- files:
- /YOUR_HOME/softs/prometheus/configs/admin/*.json
(2). 在/YOUR_HOME/softs/prometheus/configs/admin/目录里,创建一个任意名字的json文件。本例是创建base.json文件。内容如下:
[
{
"targets": ["localhost:8762"]
}
]
更多配置说明,请参考官方说明:file_sd_config
更好的监控UI——Grafana:
安装:
同样的进入官网下载,请根据你的操作系统下载。本例下载的版本是grafana_5.1.3_amd64.deb ,需要使用dpkg命令进行安装。安装过程如下:
2. 启动服务: $ sudo systemctl start grafana-server
3. 访问http://localhost:3000你就会看到登录界面,默认的账户和密码都是admin
。
配置:add datasource
,加上Prometheus的数据源配置。
接着我们新加入一个Dashboards:
新增一个Graph:
接着选择edit:
然后在metric中编辑数据源和指标,比如我们新增一个threads(线程数)的指标,完成后就可以看到美丽的图表了
本文转自掘金-Prometheus+Grafana实现SpringCloud服务监控