随着分布式架构逐渐成为了架构设计的主流,可观测性(Observability)一词也日益被人频繁地提起。,2017 年的分布式追踪峰会(2017 Distributed Tracing Summit)结束后,Peter Bourgon 撰写了总结文章《Metrics, Tracing, and Logging》系统地阐述了这三者的定义、特征,以及它们之间的关系与差异。文中将可观测性问题映射到了如何处理指标(metrics)、追踪(tracing)、日志(logging)三类数据上。,其后,Cindy Sridharan 在其著作《Distributed Systems Observability》中,进一步讲到指标、追踪、日志是可观测性的三大支柱(three pillars)。,
micrometer-spring-boot-starter。micrometer-spring-boot-starter 的具体实现如下。,1.入 Spring Boot Actuator 依赖,进行初始配置,Actuator 默认开启了一些指标的收集,比如 system, jvm, http,可以通过配置关闭它们。其实仅仅是我们需要关闭,因为我们已经接了 jmx exporter 了。,如果不希望 Web 应用的 Actuator 管理端口和应用端口重合的话,可以使用 management.server.port 设置独立的端口。这是好的实践,可以看到针对 actuator 的破坏,但是换了端口号,不暴露公网问题会少很多。,配置 spring bean,TimedAspect 的 Tags.empty() 是故意的,防止产生太长的 class 名称对 prometheus 造成压力。,应用接入时,引入
micrometer-spring-boot-starter 依赖,现在,就可以通过访问
http://ip:port/actuator/prometheus,来查看 Micrometer 记录的数据。,Micrometer 内置了 Counted 和 Timed 两个 annotation。可以通过在对应的方法上加上 @Timed 和 @Counted 注解,来收集方法的调用次数,时间和是否发生异常等信息。,如果想要记录打印方法的调用次数和时间,需要给 print 方法加上 @Timed 注解,并给指标定义一个名称。,在 print 方法上加上 @Timed 注解之后,Micrometer 会记录 print 方法的调用次数(count),方法调用最大耗时(max),方法调用总耗时(sum)三个指标。percentiles = {0.95, 0.99} 表示计算 p95,p99 的请求时间。记录的指标数据如下。,@Timed 注解支持配置一些属性:,@Timed 会记录方法抛出的异常。不同的异常会被记录为独立的数据。代码逻辑是先 catch 方法抛出的异常,记录下异常名称,然后再抛出方法本身的异常:,@Counted,如果不关心方法执行的时间,只关心方法调用的次数,甚至只关心方法调用发生异常的次数,使用 @Counted 注解是更好的选择。recordFailuresOnly = true 表示只记录异常的方法调用次数。,记录的指标数据如下。,counter 是一个递增的数值,每次方法调用后,会自增 1。,Gauge 用来描述在一个范围内持续波动的变量。Gauge 通常用于变动的测量值,例如雪花算法的 workId,打印的模板 id,线程池任务队列数等。,记录的指标数据如下。,如果想要记录指标时间数据的 sla 分布,Micrometer 提供了对应的配置:,记录的指标数据如下。,我们使用 Prometheus 进行指标数据的存储和查询。Prometheus 采用拉取式采集(Pull-Based Metrics Collection)。Pull 就是 Prometheus 主动从目标系统中拉取指标,相对地,Push 就是由目标系统主动推送指标。Prometheus 官方解释选择 Pull 的原因。,Pulling over HTTP offers a number of advantages:,Prometheus 也支持 Push 的采集方式,就是 Pushgateway。,For cases where you must push, we offer the Pushgateway.,为了让 Prometheus 采集应用的指标数据,我们需要做两件事:,应用通过 service 暴露出 actuator 端口,并添加 label: monitor/metrics,添加 ServiceMonitor,Prometheus 会定时访问 service 的 endpoints (
http://podip:port/manage/prometheusMetric),拉取应用的 metrics,保存到自己的时序数据库。,Prometheus 存储的数据是文本格式,虽然 Prometheus 也有 Graph,但是不够炫酷,而且功能有限。还需要有一些可视化工具去展示数据,通过标准易用的可视化大盘去获知当前系统的运行状态。比较常见的解决方案就是 Grafana。Prometheus 内置了强大的时序数据库,并提供了 PromQL 的数据查询语言,能对时序数据进行丰富的查询、聚合以及逻辑运算。通过在 Grafana 配置 Prometheus 数据源和 PromQL,让 Grafana 去查询 Prometheus 的指标数据,以图表的形式展示出来。,1. grafana 配置 Prometheus 数据源,







文章版权声明
1 原创文章作者:cmcc,如若转载,请注明出处: https://www.52hwl.com/17578.html
2 温馨提示:软件侵权请联系469472785#qq.com(三天内删除相关链接)资源失效请留言反馈
3 下载提示:如遇蓝奏云无法访问,请修改lanzous(把s修改成x)
4 免责声明:本站为个人博客,所有软件信息均来自网络 修改版软件,加群广告提示为修改者自留,非本站信息,注意鉴别
微信扫一扫
支付宝扫一扫