For the complete documentation index, see llms.txt. This page is also available as Markdown.

如何添加自监控指标

本文说明如何在 C++ CoreGolang 插件中新增自监控指标,以及如何与 input_internal_metrics 等采集路径衔接。

C++ 添加自监控指标

整体机制

  • 写入侧WriteMetricscore/monitor/MetricManager.h)维护一条 MetricsRecord 链表;每条记录包含 categorylabels、以及若干 Counter / TimeCounter / IntGauge / DoubleGauge

  • 读取侧ReadMetrics 定期做快照,并转换为 SelfMonitorMetricEvent,供 input_internal_metrics 等逻辑消费,最终以多值 MetricEventUntypedMultiDoubleValues等形式输出;详见该文档 MetricEvent 小节。

  • 典型流程CreateMetricsRecordRef → 在 MetricsRecordRefCreateCounter / CreateTimeCounter / CreateIntGauge / CreateDoubleGaugeCommitMetricsRecordRef。注释见 WriteMetrics::CreateMetricsRecordRef

指标类型与宏定义见 core/monitor/metric_models/MetricTypes.h(如 ADD_COUNTERSET_GAUGE 等,使用前宜判空)。

原生插件(继承 Plugin

Plugin 已封装 插件级记录的创建与提交:

  • InputInstance::Init / ProcessorInstance::Init / FlusherInstance::Init 中,框架会先于 Plugin::Init 调用 CreateMetricsRecordRef(插件名, PluginID),为当前插件绑定 MetricCategory::METRIC_CATEGORY_PLUGIN,并注入 projectpipeline_namelogstoreplugin_typeplugin_id 等标签。

  • 插件在 Init通过 GetMetricsRecordRef() 创建具体指标;Init 返回前框架会调用 CommitMetricsRecordRef()

参考实现:InputFile::Init 中在 GetMetricsRecordRef()CreateIntGauge(METRIC_PLUGIN_MONITOR_FILE_TOTAL),并结合 PluginMetricManager(见下)。

新增插件级指标名时,通常需要:

  1. MetricConstants.h(及对应 .cpp)中增加 字符串常量

  2. 在采集路径上 Add / Set 打点;

  3. 自监控指标说明 中补充文档,便于运维理解。

按「数据源」拆分的指标(METRIC_CATEGORY_PLUGIN_SOURCE

文件类等输入往往对**每个文件(或类似维度)**需要独立 labels。此时可使用 PluginMetricManager + ReentrantMetricsRecordReentrantMetricsRecord.h):

  • 在插件 Init 中构造 PluginMetricManager,传入默认 labels(一般来自 GetMetricsRecordRef()->GetLabels())、指标名到 MetricType 的映射,以及 category(常为 METRIC_CATEGORY_PLUGIN_SOURCE)。

  • 运行期通过 GetOrCreateReentrantMetricsRecordRef(额外 labels) 获取可重入记录,再 GetCounter 等打点;不用时 ReleaseReentrantMetricsRecordRef

InputFile / InputStaticFileFileServer::GetOrCreateReentrantMetricsRecordRef 的配合即此类模式。

Pipeline、组件、Runner、Agent 等非「单插件」场景

不继承 Plugin 的模块(如 CollectionPipeline)可直接使用

MetricCategory 取值见 MetricRecord.hMetricCategory 静态常量,需与 自监控指标说明 中的 Agent / Runner / Pipeline / Plugin / PluginSource / Component 分级一致。

动态标签

WriteMetrics::CreateMetricsRecordRef 支持 DynamicMetricLabelsstd::function<std::string()>),用于采样时刻才确定的标签值;适用于少量需要惰性求值的场景。

验证与采集

  • 指标是否进入快照,可由现有 input_internal_metrics 采集配置验证,步骤见 如何收集自监控指标

  • TimeCounterAdd 接收 std::chrono::nanoseconds,对外聚合时按实现换算为毫秒等(见 MetricTypes.h 注释)。


Golang 添加自监控指标

参见 Golang 自监控指标接口

Last updated