ceph 从 12.2.0 到升级 12.2.2 后,通过ceph-mgr 的 prometheus 插件收集的一些指标比之前少了,例如
Monitor 里的 osd_bytes
就不见了,调查了下。
先建立测试环境。部署一个单节点的集群,并开启 prometheus mgr plugin。修改 plugin 后重启 mgr 就可以看到测试结果。
首先发现 prometheus 插件收集用了 get_all_perf_counters
,而查看其源码发现其接收一个参数 prio_limit
,
过滤了一些指标,于是设置该参数为 PRIO_DEBUGONLY
,然而 osd_bytes
指标依然未出现。于是跟踪 get_perf_schema,得到 MgrModule::get_perf_schema -> BaseMgrModule.cc::get_perf_schema -> ActivePyModules::get_perf_schema_python -> daemon_state,跟踪 daemon_state,发现是在 Mgr::load_all_metadata 载入的,并没有什么特别,再查看 daemon_state[key].perf_counters,
发现它是在 DaemonServer::handle_report 更新的,跟踪 MMgrReport 得到发送者在 MgrClient::send_report,查看代码发现有以下过滤逻辑:
auto include_counter = [this](
const PerfCounters::perf_counter_data_any_d &ctr,
const PerfCounters &perf_counters)
{
return perf_counters.get_adjusted_priority(ctr.prio) >= (int)stats_threshold;
};
通过跟踪 stats_threshold 发现有配置参数 mgr_stats_threshold
,而 osd_bytes
priority 为 DEBUG_ONLY(=0),而 mgr_stats_threshold 默认为 PRIO_USEFUL,因此未包括,将配置改为 0,问题解决。