文档中心 > 聚石塔

云应用接入Prometheus监控

更新时间:2023/04/13 访问次数:6556

一、写在前面


应用Prometheus监控由阿里云提供,是一款收费的云产品,按照应用上报的监控指标数量收费。注意:应用上报的监控指标对应阿里云Prometheus中的自定义指标,是需要收费的,所以在接入prometheus之前,需要先开通服务。

参考文档:

1)什么是阿里云Prometheus监控

2)阿里云Prometheus收费标准

 

2021-04-07注:

暂时只支持Java SpringBoot应用的接入,其他语言正在支持中,有需求可以直接联系@杭羽。

 

二、ARMS应用监控与Prometheus监控对比


严格来说,Prometheus监控和ARMS应用监控都是属于应用实时监控下的一款子产品,可以看成是平行关系,产品购买和费用都是分开的,在使用上可以也相互补充。应用监控更注重应用进程本身的性能、接口性能、调用链路、JVM运行时、PHP工作线程等等。Prometheus则是是云原生生态下的一套监控和报警标准,任何实现了这一标准的应用或者中间件均能无缝对接,由于社区发展比较好,Prometheus的二方和三方 Exporter已经比较全面,很多都能较为简单的接入。( Exporter可以理解为一个黑盒子,它能将各类数据转为Prometheus标准的metric,并进行暴露,Prometheus server即可将数据采集存储,然后通过grafana这样的开源视图方便地呈现)


 

ARMS应用监控

Prometheus监控

备注

产品特点

应用性能监控(APM)产品,帮助快速定位错误接口和慢接口、异常失误,慢查询等

全面对接开源的Prometheus生态,只要应用满足标准,就能上报指标和查看大盘。支持各类自定义指标的上报,可以在应用代码中手动打点

 

收费

按探针收费,一个容器一个探针,按量付费的话每探针每天6.72元

按总的指标数量收费,例如0-50(百万条)之间,收费0.8元/百万条

 

使用流程

组件安装

应用配置

应用发布

查看视图

组件安装

应用配置

应用发布

查看大盘

接入流程类似,只是组件和配置不一样


三、使用步骤

1. 开通服务


聚石塔控制台-资源视图-应用实时监控服务-Prometheus监控。


image.png


默认会自动开通试用版,试用期内不会收费。试用期结束后,如果仍需要采集监控数据,则需要开通Prometheus专家版。


2. 安装集群插件


1)运维中心-插件管理,找到Prometheus插件;


image.png


2)选中集群进行安装;


image.png


3. 开启监控配置


路径:云应用 -> 环境 -> 管理 -> 部署配置。


image.png


开发语言和类型:选择相应的语言和数据上报类型,决定了监控大盘的呈现方式;

监控路径:Prometheus采集数据时访问应用的路径;

监控端口:Prometheus采集数据时访问应用的端口;

 

举个例子,示例中配置了JAVA类型的应用,使用的springboot集成micrometer的方式暴露指标(即埋点),Prometheus通过访问应用8081端口的/actuator/prometheus能够查询到符合prometheus标准的数据,如下图:


image.png


4. 应用指标上报


应用自身需要暴露相应的prometheus格式的指标,才能够被采集,所以可能需要一定程度的改造适配;根据开发语言的不同,改造的方式不同,具体可以参考下面文档中“应用指标上报”的介绍。


5. 查看监控大盘


应用监控-Prometheus监控。这里是阿里云prometheus提供的grafana大盘。特别的,示例图中的大盘为定制的JVM大盘,适用于springboot集成micrometer的方式。


image.png

 

四、应用指标上报

1. JAVA类应用


1)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,即可抓取到应用的监控数据,这也是需要在环境配置中配上该端口和路径。

 

2)Tomcat

Tomcat应用监控需要用户镜像提供prometheus数据拉取的端口和路径,为了方便用户使用我们提供了一个官方镜像tomcat8-prom,镜像使用jmx,将自动的提取用户应用的运行数据和tomcat运行数据暴露到镜像的30013端口的/路径下,使用官方镜像不需要额外配置,即可接入prometheus,接入官方的镜像一共需要以下两个步骤:

① 环境配置

选择官方镜像,运行环境选择 jstopen/tomcat8-prom


image.png


② 监控配置

监控配置中选择开发语言为JAVA,类型为Tomcat JMX,并且配置监控路径为/,监控端口为30013即可。具体事例如下:


image.png


如果用户应用有自己的数据暴露方式,可以配置自己的监控端口和监控路径并进行配置。

官方镜像的具体原理为tomcat启动时,将同时通过jmx同时启动jmx-exporter的agent,jmx-exporter将会收集tomcat运时的网络数据和JVM数据,将数据暴露在30013端口下。因此完成配置后,访问应用的30013端口,即可抓取到应用的监控数据。

 

请注意:如果使用官方镜像,则不支持更改监控端口和监控路径,监控端口配置必须为30013,监控路径配置必须为/。

 

3)JAVA应用

JAVA应用监控需要用户镜像提供prometheus数据拉取的端口和路径,为了方便用户使用我们提供了一个官方镜像java8-prom,镜像使用jmx,将自动的提取用户应用的运行数据暴露到镜像的30013端口的/路径下,使用官方镜像不需要额外配置,即可接入prometheus,接入官方的镜像一共需要以下两个步骤:

1)环境配置

选择官方镜像,运行境选择jstopen/java8-prom


image.png


2)监控配置

配置JAVA应用监控只需要在监控配置中选择开发语言为JAVA,类型为JAVA JMX,并且配置监控路径为/,监控端口为30013。具体事例如下:


image.png


如果用户应用有自己的数据暴露方式,可以配置自己的监控端口和监控路径并进行配置。

具体原理为JAVA应用启动时,将同时通过jmx同时启动jmx-exporter的agent,jmx-exporter将会收集运行时JVM数据,将数据暴露在30013端口下。因此完成配置后,访问应用的30013端口,即可抓取到应用的监控数据。

 

请注意:JAVA应用不支持更改监控端口和监控路径,监控端口配置必须为30013,监控路径配置必须为/。

 

2. PHP应用


PHP应用监控需要用户镜像提供prometheus数据拉取的端口和路径,为了方便用户使用我们提供了一个官方镜像php72-prom,镜像使用php-fpm-eporter,将自动的提取php-fpm运行数据暴露到镜像的30003端口的/metrics路径下,使用官方镜像不需要额外配置,即可接入prometheus,接入官方的镜像一共需要以下三个步骤:

① 选择环境官方镜像php72-prom

接入官方镜像请选择php72-prom镜像。


image.png


② Prometheus接入配置

开发语言选择PHP,类型选择Default,监控路径必须为/metrics,监控端口必须为30003。

注意:如果选择使用官方镜像,不支持修改监控路径和监控端口。


image.png


ps. 如果用户应用有自己的数据暴露方式,可以配置自己的监控端口和监控路径并进行配置。

 

③ 容器配置

如果端口映射中没有30003端口映射,请添加30003的端口映射。如果已经存在请勿修改。

注意:请确保端口映射配置中有下图标红所示的30003端口映射。


image.png


ps. 如果用户应用有自己的数据暴露方式,此处应容器端口映射应与监控端口相同。

经过如上配置,通过环境发布应用,访问容器的30003端口的/metrics路径,就能够获取到监控数据。

 

3. NodeJS应用


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接入为开启,事例如下图所示:


image.png


b. Prometheus接入配置

开发语言选择NodeJS,类型选择Default,监控路径为代码中所配置的应用监控暴露的路径,监控端口填写配置应用监控暴露的端口在本例中,因为我的代码中配置为30013端口下的/路径暴露监控数据,所以我的监控路径填写/,监控端口填写30013

注意:此配置用于prometheus发现服务,请确保监控路径和监控端口设置正确,否则接入将会失败。


image.png


c. 容器端口映射

在端口映射中加入所配置的监控端口,将应用监控端口暴露出容器。


image.png

 

综上,经过所有配置,通过环境发布应用,访问应用的30013端口的/,即可抓取到应用的监控数据。

 

 

 

FAQ

关于此文档暂时还没有FAQ
返回
顶部