应用Prometheus监控由阿里云提供,是一款收费的云产品,按照应用上报的监控指标数量收费。注意:应用上报的监控指标对应阿里云Prometheus中的自定义指标,是需要收费的,所以在接入prometheus之前,需要先开通服务。
参考文档:
2021-04-07注:
暂时只支持Java SpringBoot应用的接入,其他语言正在支持中,有需求可以直接联系@杭羽。
严格来说,Prometheus监控和ARMS应用监控都是属于应用实时监控下的一款子产品,可以看成是平行关系,产品购买和费用都是分开的,在使用上可以也相互补充。应用监控更注重应用进程本身的性能、接口性能、调用链路、JVM运行时、PHP工作线程等等。Prometheus则是是云原生生态下的一套监控和报警标准,任何实现了这一标准的应用或者中间件均能无缝对接,由于社区发展比较好,Prometheus的二方和三方 Exporter已经比较全面,很多都能较为简单的接入。( Exporter可以理解为一个黑盒子,它能将各类数据转为Prometheus标准的metric,并进行暴露,Prometheus server即可将数据采集存储,然后通过grafana这样的开源视图方便地呈现)
|
ARMS应用监控 |
Prometheus监控 |
备注 |
产品特点 |
应用性能监控(APM)产品,帮助快速定位错误接口和慢接口、异常失误,慢查询等 |
全面对接开源的Prometheus生态,只要应用满足标准,就能上报指标和查看大盘。支持各类自定义指标的上报,可以在应用代码中手动打点 |
|
收费 |
按探针收费,一个容器一个探针,按量付费的话每探针每天6.72元 |
按总的指标数量收费,例如0-50(百万条)之间,收费0.8元/百万条 |
|
使用流程 |
组件安装 应用配置 应用发布 查看视图 |
组件安装 应用配置 应用发布 查看大盘 |
接入流程类似,只是组件和配置不一样 |
聚石塔控制台-资源视图-应用实时监控服务-Prometheus监控。
默认会自动开通试用版,试用期内不会收费。试用期结束后,如果仍需要采集监控数据,则需要开通Prometheus专家版。
1)运维中心-插件管理,找到Prometheus插件;
2)选中集群进行安装;
路径:云应用 -> 环境 -> 管理 -> 部署配置。
开发语言和类型:选择相应的语言和数据上报类型,决定了监控大盘的呈现方式;
监控路径:Prometheus采集数据时访问应用的路径;
监控端口:Prometheus采集数据时访问应用的端口;
举个例子,示例中配置了JAVA类型的应用,使用的springboot集成micrometer的方式暴露指标(即埋点),Prometheus通过访问应用8081端口的/actuator/prometheus能够查询到符合prometheus标准的数据,如下图:
应用自身需要暴露相应的prometheus格式的指标,才能够被采集,所以可能需要一定程度的改造适配;根据开发语言的不同,改造的方式不同,具体可以参考下面文档中“应用指标上报”的介绍。
应用监控-Prometheus监控。这里是阿里云prometheus提供的grafana大盘。特别的,示例图中的大盘为定制的JVM大盘,适用于springboot集成micrometer的方式。
这里以springboot2.x为例进行说明,
参考:https://blog.csdn.net/aixiaoyang168/article/details/100866159
① maven依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency>
这里依赖io.micrometer,起到了exporter的作用,即对prometheus进行了兼容,将jvm或java的数据转化为标准的prometheus监控指标暴露出去。
② application.properties 暴露管理端口和endpoint
management.server.port=8081 management.endpoints.web.exposure.include=*
这里 management.endpoints.web.exposure.include=* 配置为开启 Actuator 服务,因为Spring Boot Actuator 会自动配置一个 URL 为 /actuator/prometheus 的 HTTP 服务来供 Prometheus 抓取数据。
综上,经过这两步配置,访问应用的8081端口/actuator/prometheus,即可抓取到应用的监控数据,这也是需要在环境配置中配上该端口和路径。
Tomcat应用监控需要用户镜像提供prometheus数据拉取的端口和路径,为了方便用户使用我们提供了一个官方镜像tomcat8-prom
,镜像使用jmx,将自动的提取用户应用的运行数据和tomcat运行数据暴露到镜像的30013端口的/路径下,使用官方镜像不需要额外配置,即可接入prometheus,接入官方的镜像一共需要以下两个步骤:
① 环境配置
选择官方镜像,运行环境选择 jstopen/tomcat8-prom 。
② 监控配置
监控配置中选择开发语言为JAVA,类型为Tomcat JMX,并且配置监控路径为/,监控端口为30013即可。具体事例如下:
如果用户应用有自己的数据暴露方式,可以配置自己的监控端口和监控路径并进行配置。
官方镜像的具体原理为tomcat启动时,将同时通过jmx同时启动jmx-exporter的agent,jmx-exporter将会收集tomcat运时的网络数据和JVM数据,将数据暴露在30013端口下。因此完成配置后,访问应用的30013端口,即可抓取到应用的监控数据。
请注意:如果使用官方镜像,则不支持更改监控端口和监控路径,监控端口配置必须为30013,监控路径配置必须为/。
JAVA应用监控需要用户镜像提供prometheus数据拉取的端口和路径,为了方便用户使用我们提供了一个官方镜像java8-prom
,镜像使用jmx,将自动的提取用户应用的运行数据暴露到镜像的30013端口的/路径下,使用官方镜像不需要额外配置,即可接入prometheus,接入官方的镜像一共需要以下两个步骤:
1)环境配置
选择官方镜像,运行环境选择jstopen/java8-prom。
2)监控配置
配置JAVA应用监控只需要在监控配置中选择开发语言为JAVA,类型为JAVA JMX,并且配置监控路径为/,监控端口为30013。具体事例如下:
如果用户应用有自己的数据暴露方式,可以配置自己的监控端口和监控路径并进行配置。
具体原理为JAVA应用启动时,将同时通过jmx同时启动jmx-exporter的agent,jmx-exporter将会收集运行时JVM数据,将数据暴露在30013端口下。因此完成配置后,访问应用的30013端口,即可抓取到应用的监控数据。
请注意:JAVA应用不支持更改监控端口和监控路径,监控端口配置必须为30013,监控路径配置必须为/。
PHP应用监控需要用户镜像提供prometheus数据拉取的端口和路径,为了方便用户使用我们提供了一个官方镜像php72-prom
,镜像使用php-fpm-eporter,将自动的提取php-fpm运行数据暴露到镜像的30003端口的/metrics路径下,使用官方镜像不需要额外配置,即可接入prometheus,接入官方的镜像一共需要以下三个步骤:
① 选择环境官方镜像php72-prom
接入官方镜像请选择php72-prom镜像。
② Prometheus接入配置
开发语言选择PHP,类型选择Default,监控路径必须为/metrics,监控端口必须为30003。
注意:如果选择使用官方镜像,不支持修改监控路径和监控端口。
ps. 如果用户应用有自己的数据暴露方式,可以配置自己的监控端口和监控路径并进行配置。
③ 容器配置
如果端口映射中没有30003端口映射,请添加30003的端口映射。如果已经存在请勿修改。
注意:请确保端口映射配置中有下图标红所示的30003端口映射。
ps. 如果用户应用有自己的数据暴露方式,此处应容器端口映射应与监控端口相同。
经过如上配置,通过环境发布应用,访问容器的30003
端口的/metrics
路径,就能够获取到监控数据。
NodeJS监控基于prom-client,这里以基于express框架的实例应用为例,nodejs监控为侵入式监控,需要修改代码,实现监控进行说明:
1)安装相关依赖;
npm install express --save npm install prom-client --save
这里依赖prom-client为数据采集的依赖,express为实例应用web框架依赖。
2) 通过代码配置采集数据并暴露数据采集端口和路径;
import express from 'express'; import { collectDefaultMetrics, register } from 'prom-client'; // 采集默认数据 collectDefaultMetrics(); // 通过express暴露采集路径 const app = express(); app.get('/', async (_req, res) => { try { res.set('Content-Type', register.contentType); res.end(await register.metrics()); } catch (err) { res.status(500).end(err); } }); // 通过express设置采集端口 app.listen(30013, '0.0.0.0');
以上代码首先通过collectDefaultMetric
函数,配置了采集数据为默认设定数据。通过express框架将数据暴露在/
路径下,并监听30013端口将数据暴露出来。
3)平台发布配置;
a. 环境配置
镜像选择官方镜像中的任意版本nodejs镜像即可,同时选择应用监控Prometheus接入为开启,事例如下图所示:
b. Prometheus接入配置
开发语言选择NodeJS,类型选择Default,监控路径为代码中所配置的应用监控暴露的路径,监控端口填写配置应用监控暴露的端口。在本例中,因为我的代码中配置为30013端口下的/路径暴露监控数据,所以我的监控路径填写/,监控端口填写30013
注意:此配置用于prometheus发现服务,请确保监控路径和监控端口设置正确,否则接入将会失败。
c. 容器端口映射
在端口映射中加入所配置的监控端口,将应用监控端口暴露出容器。
综上,经过所有配置,通过环境发布应用,访问应用的30013
端口的/
,即可抓取到应用的监控数据。