摘要:简介中文名称为普罗米修斯,受启发于的监控系统,从年开始由前工程师在以开源软件的形式进行研发,年月发布版本。拉的代表,主要代表就是,让我们不用担心监控应用本身的状态。这样的一个程序称为,的实例称为一个。
Prometheus 简介
Prometheus 中文名称为普罗米修斯,受启发于Google的Brogmon监控系统,从2012年开始由前Google工程师在Soundcloud以开源软件的形式进行研发,2016年6月发布1.0版本。Prometheus 可以看作是 Google 内部监控系统 Borgmon 的一个实现
首先了解下 prometheus 架构图
目前,监控系统采集指标有两种方式,一种是『推』,另一种就是『拉』:
推的代表有 ElasticSearch,InfluxDB,OpenTSDB 等,需要你从程序中将指标使用 TCP,UDP 等方式推送至相关监控应用,只是使用 TCP 的话,一旦监控应用挂掉或存在瓶颈,容易对应用本身产生影响,而使用 UDP 的话,虽然不用担心监控应用,但是容易丢数据。
拉的代表,主要代表就是 Prometheus,让我们不用担心监控应用本身的状态。而且可以利用 DNS-SRV 或者 Consul 等服务发现功能就可以自动添加监控。
监控java 应用prometheus 监控应用的方式非常简单,只需要进程暴露了一个用于获取当前监控样本数据的HTTP访问地址。这样的一个程序称为Exporter,Exporter的实例称为一个Target。Prometheus通过轮训的方式定时从这些Target中获取监控数据样本,对于java 应用来讲,只需要暴露一个包含监控数据的http访问地址即可,当然提供的数据需要满足一定的格式,这个格式就是 Metrics 格式
Metircs 格式metircs 的格式非常简单
metric name>{
主要分为三个部分
各个部分需符合相关的正则表达式
metric name:指标的名称,主要反映被监控样本的含义 a-zA-Z_:*
label name: 标签 反映了当前样本的特征维度 [a-zA-Z0-9_]*
label value: 各个标签的值,不限制格式
需要注意的是,label value 最好使用枚举值,而不要使用无限制的值,比如用户 ID,Email 等,不然会消耗大量内存,也不符合指标采集的意义
Prometheus定义了4中不同的指标类型(metric type):Counter(计数器)、Gauge(仪表盘)、Histogram(直方图)、Summary(摘要)。
Counter:只增不减的计数器
Gauge:可增可减的仪表盘
Histogram:直方图,内置分析样本的分布情况
Summary:摘要 自定义样本分布情况
prometheus 官方提供了spring boot 的依赖,但是该客户端已经不支持spring boot 2
io.prometheus simpleclient_spring_boot 0.4.0
由于 spring boot 2 的actuator 使用了 Micrometer 进行监控数据统计,
而Micrometer 提供了prometheus 支持,我们可以使用 micrometer-registry-prometheus 来集成 spring boot 2
加入相应依赖
添加监控项 统计http 请求的总数量org.springframework.boot spring-boot-starter-actuator io.micrometer micrometer-core io.micrometer micrometer-registry-prometheus
如果要统计http 请求的总数量,我们可以直接使用prometheus 提供的 Counter 类
首先我们注册一个 Counter 实例到spring 容器
@Bean public Counter requestTotalCountCollector(){ return Counter.build() .name("http_requests_total") .labelNames("path", "method", "code") .help("http请求总计数").register(collectorRegistry); }
继承HandlerInterceptorAdapter ,声明一个拦截器
public class PrometheusInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } }
在 prehandle 中 执行
requestTotalCountCollector.labels(requestURI, method,code).inc();
在配置文件 applicaion.yml 中启用metrics,prometheus监控
management: metrics: export: prometheus: enabled: true endpoint: metrics: enabled: true prometheus: enabled: true endpoints: web: exposure: include: ["prometheus","health"]
启动项目,访问路径下的 /actuator/prometheus,即可看到监控项
自定义一个metrics 收集器
只需要继承 prometheus 的 Collector,重写抽象方法collect
public class RequestTimeCollector extends Collector{ @Override public Listcollect() { } }
注册RequestTimeCollector 到 spring 容器
@Bean @Primary public RequestTimeCollector requestTimeCollector(){ return new RequestTimeCollector("request_time","接口请求时间",Arrays.asList("url","method", "status")).register(collectorRegistry); }
声明一个around 切面拦截controller方法
@Around("execution(* com.xxx.controller..*.*(..))") public Object around(ProceedingJoinPoint joinPoint) throws Throwable { try { requestTimeCollector.setValue(diff, uri, method, String.valueOf(200)); return proceed; } catch (Throwable throwable) { if (throwable instanceof BaseException) { requestTimeCollector.setValue(diff, uri, method, String.valueOf(statEnum.key())); } throw throwable; } } }
启动项目,访问路径下的 /actuator/prometheus,即可看到监控项
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/73919.html
摘要:在发出经过身份验证的请求时,被认为是端点的输入,因此不会缓存响应。自定义端点对或的操作通过使用或通过自动公开。端点范围请求范围请求可以用于请求资源的一部分,当使用或时,操作将返回一个自动支持范围请求的。 50. 端点 Actuator端点让你监视和与应用程序交互,Spring Boot包含许多内置的端点,并允许你添加自己的端点。例如,health端点提供基本的应用程序健康信息。 可以启...
摘要:前言实际项目中,提供接口,对接公司的监控系统,增加服务的可观察性,是一个基本的要求。在中集成,非常简单。由上可知,我们可以访问获取格式的。在层,增加然后具体的逻辑中,直接使用。最后重新启动项目,再次访问可看到自定义的已经存在了。 前言 实际项目中,提供metrics接口,对接公司的监控系统,增加服务的可观察性,是一个基本的要求。在spring boot 1.X 中集成prometheu...
摘要:可简单地认为它是的扩展,负载均衡自然成为不可或缺的特性。类似的特性在项目也有体现,它是另一种高性能代理的方案,提供服务发现健康和负载均衡。 Dubbo Cloud Native 实践与思考 分享简介 Cloud Native 应用架构随着云技术的发展受到业界特别重视和关注,尤其是 CNCF(Cloud Native Computing Foundation)项目蓬勃发展之际。Dubbo...
摘要:以下是它的示例现在,如果需要的话,所有对已修饰的服务块的调用都要符合速率限制器配置。 案例概述 在本文中,我们讨论一下Resilience4j库。该库通过管理远程通信的容错性来帮助实现弹性系统。这个库受到Hystrix的启发,但提供了更方便的API和许多其他特性,如速率限制器(阻塞太频繁的请求)、Bulkhead(避免太多并发请求)等。 Maven设置 首先,我们需要将目标模块添加到我...
摘要:可简单地认为它是的扩展,负载均衡自然成为不可或缺的特性。是基于开发的服务代理组件,在使用场景中,它与和整合,打造具备服务动态更新和负载均衡能力的服务网关。类似的特性在项目也有体现,它是另一种高性能代理的方案,提供服务发现健康和负载均衡。 摘要: Cloud Native 应用架构随着云技术的发展受到业界特别重视和关注,尤其是 CNCF(Cloud Native Computing Fo...
阅读 3766·2021-11-11 11:02
阅读 3495·2021-10-11 10:57
阅读 3608·2021-09-22 16:00
阅读 1843·2021-09-02 15:15
阅读 1322·2019-08-30 15:56
阅读 1005·2019-08-30 15:54
阅读 2731·2019-08-30 12:43
阅读 3539·2019-08-29 16:06