Micrometer Wavefront
Wavefront 是一个维度监控系统,以 SaaS 形式提供,具有完整的用户界面、自定义查询语言和高级数学运算功能。Wavefront 采用推送模型运行。指标可以通过在同一主机上运行的 sidecar 进程(称为 Wavefront 代理)推送,也可以直接推送到 Wavefront API。
1. 安装 micrometer-registry-wavefront
建议使用 Micrometer(或您的框架,如果有的话)提供的 BOM,您可以在此处查看如何配置它 here。以下示例假设您正在使用 BOM。
1.1. Gradle
在 配置 好 BOM 后,添加以下依赖项:
implementation 'io.micrometer:micrometer-registry-wavefront'
由于版本由 BOM 定义,因此此依赖项不需要指定版本。
1.2. Maven
在 配置 好 BOM 之后,添加以下依赖项:
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-wavefront</artifactId>
</dependency>
由于该依赖项的版本由 BOM 定义,因此不需要指定版本。
2. 配置
本节介绍在发送数据时如何配置 Wavefront:
2.1. 直接到 Wavefront
以下示例配置了直接发送到 Wavefront:
WavefrontConfig config = new WavefrontConfig() {
@Override
public String uri() {
return "https://longboard.wavefront.com"; 1
}
@Override
public String apiToken() {
return "MYAPIKEY"; 2
}
@Override
public String get(String key) {
return null; 3
}
};
MeterRegistry registry = new WavefrontMeterRegistry(config, Clock.SYSTEM);
longboard
是大多数组织开始时使用的共租户实例的名称。一旦达到足够的规模,Wavefront 可能会将您迁移到专用主机。当直接推送到 Wavefront 的 API 时,这是必需的。
接受其余的默认设置。
2.2. 通过 Wavefront Proxy Sidecar 配置
以下示例配置了通过 Wavefront 代理 sidecar 进行发送:
MeterRegistry registry = new WavefrontMeterRegistry(WavefrontConfig.DEFAULT_PROXY, Clock.SYSTEM);
默认的代理配置将指标和直方图分布推送到位于 localhost:2878
的 Wavefront 代理。
如果要将指标发布到 Wavefront 代理,URI 必须以 proxy://HOST:PORT
的形式表示。
3. 绘图
本节将快速介绍如何在 Wavefront 中呈现源自 Micrometer 的指标的有用表示。有关 Wavefront 中可能的功能的更完整参考,请参阅 Wavefront 文档。
3.1. 计数器
生成随机游走计数器的图形的查询是 rate(ts(counter))
。
图 1. 随机游走计数器的 Wavefront 渲染图。
在某些时间窗口内表示一个未进行速率归一化的计数器通常没有太大用处,因为这种表示方式既取决于计数器增加的速率,也取决于服务的寿命。通常情况下,对这些时间序列进行速率归一化是最有用的,以便更好地理解和分析它们。
由于 Wavefront 会记录所有时间的累积计数,它具有在查询时选择特定时间函数的优势(例如,使用 rate(ts(counter))
来计算每秒的变化率)。
3.2. 定时器
Wavefront 的 Timer
根据 publishPercentileHistogram
是否启用,会产生不同的时间序列。
如果启用了 publishPercentileHistogram
,Wavefront 的 Timer
会生成直方图分布,允许你使用 hs()
查询来查询任意百分位数的延迟。例如,你可以可视化第 95 百分位数的延迟(percentile(95, hs(timer.m))
)或第 99.9 百分位数的延迟(percentile(99.9, hs(timer.m))
)。有关直方图分布的更多信息,请参阅本节后面的 Wavefront 直方图。
如果禁用了 publishPercentileHistogram
,Wavefront Timer
会产生多个时间序列:
-
${name}.avg
:所有调用的平均延迟。 -
${name}.count
:所有调用的总次数。 -
${name}.sum
:所有调用的总时间。 -
${name}.max
:发布间隔内的最大延迟。 -
${name}.percentiles
:Micrometer 计算的发布间隔内的百分位数。这些值不能跨维度聚合。
你可以使用这些时间序列在 Wavefront 中快速查看延迟情况:
图 2. 定时器延迟。
前面的图表展示了平均延迟(绿色部分,rate(ts(timer.sum))/rate(ts(timer.count))
)、95% 分位数(橙色部分,ts(timer.percentile, phi="0.95")
)和最大值(蓝色部分,ts(timer.max)
)。
此外,rate(ts(timer.count))
表示被计时事件的每秒速率吞吐量:
图 3. 计时器吞吐量。
3.3. Wavefront 直方图
Wavefront 的直方图实现存储了指标的实际分布,而不是单个指标。这使您能够在查询时对分布应用任何百分位数和聚合函数,而无需在指标收集期间指定特定的百分位数和指标。
对于任何启用了 publishPercentileHistogram
的 Timer
或 DistributionSummary
,都会收集并报告 Wavefront 直方图分布。
默认情况下,报告给 Wavefront 的分布会按分钟进行聚合,为您提供每分钟的直方图分布。您还可以选择按小时或天进行聚合。您可以通过以下配置选项自定义此设置:
-
reportMinuteDistribution
: 布尔值,指定是否按分钟进行聚合。默认启用。Wavefront 中的指标名称带有.m
后缀。 -
reportHourDistribution
: 布尔值,指定是否按小时进行聚合。默认禁用。Wavefront 中的指标名称带有.h
后缀。 -
reportDayDistribution
: 布尔值,指定是否按天进行聚合。默认禁用。Wavefront 中的指标名称带有.d
后缀。
如果你正在向 Wavefront 代理发送数据,默认情况下,指标和直方图分布都会发布到同一端口:在默认代理配置中为 2878。如果你的代理配置为在不同的端口上监听直方图分布,你可以使用 distributionPort
配置选项来指定要发布的端口。
你可以使用 hs()
查询在 Wavefront 中查询直方图分布。例如,percentile(98, hs(${name}.m))
返回每分钟聚合的特定直方图的第 98 百分位数。每个直方图指标名称都有一个后缀(.m
、.h
或 .d
),具体取决于直方图的聚合间隔。
有关更多信息,请参阅 Wavefront Histograms 文档。