网站首页 > 博客文章 正文
1. 背景
增强服务可观测性,预测与发现系统性能瓶颈,透视系统状态,为系统调优和改进提供可靠数据
2. 规划特性
? 服务日志: 记录时间,用户,用户地点(ip),服务节点(ip),服务名称,模块名称,参数(可配置),支持异步写入,减少服务正常执行影响
? 服务性能指标,RT,请求数(1m/5m/15m),异常数(1m/5m/15m),失败数(1m/5m/15m)
? 服务调用链路,服务调用拓扑,调用关系性能,topN(最忙服务,最慢服务)
? 业务日志,如,拉单每秒字节数,数据笔数,拉单作业数
? 监控门户,仪表盘,告警 Prometheus+grafana(运维);elasticsearch agg+数据可视化(开发)
*日志收集 ELK 不在本次计划
*系统监控,如 cpu,线程数(jvm),内存(jvm),磁盘 io,网络 io 直接使用 Prometheus,不在本平台范
3. 技术架构
测量组件位于可观测架构蓝框部分,负责业务测量/性能测量的构建, 采集,转换和报告
4. 测量组件
测量组件是可观测平台的第三部分,由 metrics,exporter,reporter 3 部分组成
metrics 测量构建/收集/计算组件,业界 metrics 组件选择比较少,主要有 dropwizard-metrics,micrometer 也是源于 dropwizard-metrics,还有些框架自带 metrics 组件,基本上也是参考 dropwizard-metrics
测量 exporter/测量 reporter,两者是配套,exporter 转换本地测量类型为监控平台类型;reporter 推送转换后的测量到监控平台,本组件实现 Prometheus 测量转换和报告
5. 设计模型
本组件的设计
Counter/Gauge/Meter/Summary/Histogram dropwizard-metrics 支持的测量类型,其中后 3 者属于统计量,分布式系统统计单节点意义不大;另外,Prometheus Counter/Gauge 都是数值,Gauge 客家可减,Counter 单调增加
ScheduledReporter/DefaultScheduledReporter ScheduledReporter 是 dropwizard-metric 提供的 Reporter 实现,定时报告测量,抽象模板模式,DefaultScheduledReporter 本组件实现,DropWizardPrometheusExporter 转换测量为 Prometheus 类型,simple-pushgateway 推送到 Prometheus
TagExtractor tag 是 Prometheus 测量的属性,定义数据维度,对后续的统计非常重要;TagExtractor 是本组件接口,应用实现自己的 tag 生成逻辑
MetricHolder 本组件的开发,负责全局构建,操作,持有测量
6. 开发指南
1. 依赖
<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-core</artifactId>
</dependency>
2. 配置
以 java config 为例,以下内容在代码单元测试 TesstMetricsReporterConfiguration
示例:
metrics:
reporter:
type: prometheus # metrics 报告类型 nop/console/prometheus
url: ip:port # Prometheus pushgateway 地址
job: apiflow # Prometheus job 标签
interval: 10 # 报告间隔,单位秒
1) 报告期采集间隔
Value("${flowsharping.metrics.reporter.interval:30}")
private int reprotInterval;
2) 测量注册,全局
public static final MetricRegistry metricsReg = new MetricRegistry();
3) 报告器声明和初始化
声明 3 个报告器,通过 conditional 激活,nop 相当于屏蔽报告,console reporter
测量输出到控制台,单机测试用;DefaultSchedulerReporter 输出到 Prometheus,支持分布式聚合统计,DemoTagExtractorImpl 简单的标签提取实现,增加 type 和 instant 标签,
其中 type pass/fail,instant host:ip,用于示例
4) MetricHolder
5) 环境工具
获取当前 ip 和端口
3. 示例
场景 1:单机测试
本示例在单元测试 TestQpsMetrics,模拟 api 调用 qps 测量,使用 ConsoleReporter,报告间隔 10 秒,示例使用随机数模拟调用的通过和不通过,分别计数到 pass 计数器和 fail 计数器
控制台输出
场景 2:分布式测试
本示例在单元测试 TestQpsMetricsCluster1,TestQpsMetricsCluster2,模拟两个服务集群调用 qps 测量,服务测试代码同场景 1,使用 PrometheusReporter,报告间隔 10 秒,tag 提取器增加 type,instant 标签,type 标签 pass,fail,通过和不同的 qps 技术,instant ip+port,测量输出如下图:
上面 2 个图标,服务 8091 和 8092 的通过请求数速率,不通过数速率,总请求数速率
下面是两个服务通过总请求数,不通过的总请求数,两个服务的总请求
promsql:
rate(apixxx{exported_job="apiflow", instant="host:port", type="pass|fail"}[1m])
sum(rate(apixxx {exported_job="apiflow", instant="host:port", type="pass|fail"}[1m]))
7. 代码库(收费)
metrics-reporter.zip-Java文档类资源-CSDN下载
https://download.csdn.net/download/szlhj/66934422
猜你喜欢
- 2024-12-07 Prometheus监控实战之sql_exporter使用(第六篇)
- 2024-12-07 开源监控系统Prometheus基本介绍及应用展示
- 2024-12-07 datax监控测量(metrics)设计与实现
- 2024-12-07 prometheus——metrics领域的利器
- 2024-12-07 深入理解Prometheus: PromQL查询逻辑详解
你 发表评论:
欢迎- 最近发表
-
- 比GoPro 13更强的大疆Action 5 Pro,到底强在哪里?
- 信号和槽(信号和槽的实现原理)
- 在响应式项目中连接设计与开发(请简述实现响应式设计包括哪些技术点)
- 【C#】委托、Action、Func 和 Event 之间的关系
- 如何使用JavaScript实现Prompt弹窗?
- 谷歌Magic Actions功能曝光:AI革新安卓16通知交互
- 基于目标TPS的性能测试,如何通过手动设置场景进行测试?
- IOS基础学习之输出口和动作(io口输入输出实验总结及体会)
- 《Java语言程序设计》期末考试模拟试题——判断题和问答题
- Android学习之Touch事件的处理(android触摸事件实例)
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)