Prometheus 指标说明与健康判定
本文帮助运维人员回答 三个问题:指标代表什么、曲线变化是否异常、达到什么条件需要介入。部署和采集步骤参见部署 Prometheus 监控。
判读原则
建议按照以下顺序判断,而不是先从 CPU、内存等资源曲线开始:
- 采集是否可信:检查
up和 Prometheus 的 Status > Target health。采集失败时,其他曲线可能只是停止更新。 - 业务是否受影响:检查任务失败、持续重试、数据源连接异常、同步延迟和 API 5xx。
- 资源是否成为瓶颈:结合 CPU、负载、磁盘、JVM/Node.js 内存、GC 和文件句柄定位原因。
阈值分为两类:状态类指标可以直接根据明确的状态值告警;性能和容量类指标应以业务 SLA、机器规格和历史基线为准。本文给出的百分比和时长是首次上线的起始建议,不是所有环境的固定正常值。
第一次查看时先看什么
| 查看顺序 | 正常表现 | 异常时先做什么 |
|---|---|---|
采集状态 up | 需要监控的目标为 1 | 检查目标地址、端口、网络和指标路径。采集恢复前,不要用停止更新的曲线判断业务状态。 |
任务状态 task_status | 运行中 任务为 0 | 1 表示失败,2 表示重试;检查任务日志、关联连接和 Flow Engine。查询无数据时,先确认当前环境是否提供任务指标。 |
数据源连接 task_active_db | 为 0 | 测试连接,并检查数据库服务、网络、凭据和证书。 |
同步延迟 task_cdc_delay_ms | 在任务 SLA 内,短时升高后能够回落 | 持续升高时检查源端写入、节点处理耗时、目标端写入和网络。 |
| 磁盘和 CPU | 磁盘可用比例高于 20%,CPU 没有持续高位 | 结合任务延迟和错误判断是否已影响业务,再检查数据增长、日志、GC 和其他进程。 |
确认核心信号后,再根据异常现象查看 JVM、GC、线程池和文件句柄等诊断指标。
查看当前环境实际提供的指标
不同环境提供的指标可能不同,因此不需要先记住完整指标列表。先查看当前指标地址实际返回的数据,再决定启用哪些看板和告警。可使用以下命令查看指标名称、帮助信息和类型:
curl -fsS http://<host>:3035/actuator/prometheus \
| grep -E '^# (HELP|TYPE) '
也可以通过 Prometheus API 查看已经采集到的元数据:
curl -fsS 'http://<monitor-host-private-ip>:9090/api/v1/metadata?limit=10000'
遇到文档未列出的指标时,先确认以下信息再配置告警:
- 指标类型是 Counter、Gauge 还是 Histogram。
- 单位是秒、毫秒、字节、比例还是累计次数。
- 标签及其可能值,尤其是任务、节点、状态和接口标签。
- 指标在任务停止、组件重启或功能未启用时是归零还是消失。
日常巡检不需要逐项解读所有指标。优先确认 up、任务状态、连接状态、同步延迟和磁盘等核心信号;出现异常后,再查看 JVM、GC、线程池等诊断指标。
核心任务指标
任务查询和规则应包含 job="tapdata-flow-engine",防止与其他组件的同名指标混合。
以下表格说明指标出现时的含义。使用任务看板或告警前,请在至少一个任务运行期间执行:
curl -fsS http://<host>:3035/actuator/prometheus \
| grep -E '^# (HELP|TYPE) task_(status|active_db|cdc_delay_ms|node_process_data_ms|milestone_status|milestone_time)'
如果没有任何输出,说明当前端点没有提供任务级指标。此时任务规则会一直处于 Inactive,任务看板会显示 No data;两者都不能证明任务健康。请仅启用当前环境已经确认存在的组件、资源、HTTP 或 MongoDB 监控,并在 TapData 任务监控页面查看任务状态、同步进度和数据校验。
下表的状态值只适用于 Flow Engine 的任务指标。复制本页的查询、看板或告警规则时,请保留 job="tapdata-flow-engine"。其他组件可能提供同名指标;删除过滤条件会混合不同含义的数据,导致任务状态和数量统计错误。
| 指标 | 含义和取值 | 健康判定 | 建议告警与排查 |
|---|---|---|---|
task_status | 0 运行中,1 失败,2 重试。 | 0 正常;1 已失败;2 表示正在恢复,持续存在说明恢复未完成。 | 1 持续 1 分钟为严重;2 持续 10 分钟为警告。检查任务日志、关联连接和 Flow Engine。 |
task_active_db | 0 正常,1 服务端终止或网络异常,2 用户名或密码无效。 | 非 0 时,对应节点通常无法继续读写。 | 非 0 持续 1 分钟为严重。测试连接并检查网络、数据库状态、凭据、证书。 |
task_cdc_delay_ms | 增量同步延迟,单位为毫秒。只对持续增量任务有意义。 | 短时尖峰后下降通常是临时抖动;持续上升说明输入速率高于处理能力。 | 初始可使用 30 秒警告、5 分钟严重,必须按任务 SLA 调整。检查源端写入、节点耗时、目标端写入和网络。 |
task_node_process_data_ms | 单个任务节点处理数据的平均耗时,单位为毫秒。 | 与同一节点的历史基线比较;不宜跨数据库和任务直接比较。 | 不建议单独触发紧急告警。与延迟同步升高时,检查相应源端或目标端。 |
task_milestone_status | 启动里程碑状态,相关标签包括 milestone_status、milestone 和 order。 | 启动阶段应逐步完成;长期等待、运行或出现错误需要排查。 | 用于启动失败的辅助诊断,不建议为每个里程碑单独通知。 |
task_milestone_time | 已完成或出错里程碑的耗时,单位为毫秒。 | 与同类任务及同一任务的历史启动耗时比较。 | 用于启动变慢和容量规划,不设置统一阈值。 |
以 下标签主要用于按任务或节点筛选数据。初次使用时,可先关注 task_name 和 node_name。Prometheus 采集时还会添加 job、instance 和本文配置的 project 标签。
| 指标 | 常用标签 | 使用说明 |
|---|---|---|
task_status | task_id、task_name、task_type | 按任务定位运行、失败或重试状态。 |
task_active_db | task_id、task_name、task_type、node_id、node_name | 按任务节点定位连接异常。 |
task_cdc_delay_ms | task_id、task_name、task_type | 只在对应任务产生增量延迟样本时出现。 |
task_node_process_data_ms | node_id、node_name、node_type、task_id、task_name、task_type | 适合按节点与同一任务的历史基线比较。 |
task_milestone_status、task_milestone_time | task_id、task_name、task_type、milestone_status、milestone、order | milestone_status 的常见值包括 waiting、running、error、finish;状态指标通常以样本值 1 表示当前标签组合。 |
某些任务指标只在对应阶段产生。例如,任务未进入增量阶段时可能没有延迟指标,里程碑未执行时可能没有里程碑指标。此时 No data 表示没有匹配的数据,不等于指标值为 0。
如果任务正在运行,但上述任务指标全部不存在,请按“ 当前环境未提供任务指标”处理,并回到 TapData 任务监控页面查看任务状态。
常用查询:
# 失败或重试中的任务
task_status{job="tapdata-flow-engine"} != 0
# 延迟最高的 10 个任务
topk(10, task_cdc_delay_ms{job="tapdata-flow-engine"})
# 最近 10 分钟各节点平均处理耗时
avg_over_time(task_node_process_data_ms{job="tapdata-flow-engine"}[10m])
请继续在 TapData 任务监控页面查看数据校验结果。本文列出的任务指标不包含数据校验结果、差异条数或校验状态;任务保持运行、延迟较低,也不能证明源表和目标表的数据完全一致。
组件与运行时指标
Management 和 Flow Engine
| 指标 | 类型或单位 | 运维用途 |
|---|---|---|
up | Gauge,0/1 | 判断 Prometheus 是否能抓取目标。它不等于任务是否健康。 |
disk_free_bytes、disk_total_bytes | Gauge,字节 | 计算磁盘可用比例和消耗趋势。 |
system_cpu_usage、process_cpu_usage | Gauge,0~1 | 分别查看主机和进程 CPU。持续高位并伴随业务症状时才升级处理。 |
system_cpu_count | Gauge,核数 | 用于解释系统负载和容量。 |
system_load_average_1m | Gauge | 与 CPU 核数结合判断 CPU、I/O 或阻塞压力。 |
process_files_open_files、process_files_max_files | Gauge | 计算文件描述符使用比例,观察是否持续增长并逼近进程上限。 |
jvm_memory_used_bytes、jvm_memory_committed_bytes、jvm_memory_max_bytes | Gauge,字节 | 按 area、id 等标签查看 Heap、Metaspace 等内存区域;只有 max 大于 0 时才计算使用比例。 |
jvm_buffer_memory_used_bytes | Gauge,字节 | 查看 Direct Buffer 等堆外缓冲区。 |
jvm_gc_pause_seconds_count、jvm_gc_pause_seconds_sum、jvm_gc_pause_seconds_max | Counter/Gauge,秒 | 使用 rate(sum)/rate(count) 查看窗口内平均 GC 暂停,并结合最大暂停和业务延迟判断影响。 |
jvm_threads_live_threads、jvm_threads_peak_threads、jvm_threads_states_threads | Gauge,线程数 | 观察线程总量及各状态变化;持续增长或阻塞线程增加时结合线程栈排查。 |
http_server_requests_seconds_count | Counter,请求数 | 使用 rate() 计算 Management 请求速率和错误比例。 |
http_server_requests_seconds_sum | Counter,秒 | 与 count 组合计算平均响应时间;不能直接把累计值当成当前延迟。 |
http_server_requests_active_seconds_count | Gauge/长任务计数 | 观察当前活跃请求数量。 |
http_server_requests_active_seconds_max | Gauge,秒 | 定位当前活跃请求中的最大耗时。 |
以下指标也常见于 Management 或 Flow Engine 端点,主要用于深入诊断,不建议仅根据单个绝对值配置紧急告警:
| 指标组 | 包含的指标 | 运维用途 |
|---|---|---|
| 应用启动 | application_started_time_seconds、application_ready_time_seconds | 观察启动耗时的变化;重启后明显变慢时结合日志和依赖状态排查。 |
| 执行器 | executor_active_threads、executor_pool_core_threads、executor_pool_max_threads、executor_pool_size_threads、executor_queued_tasks、executor_queue_remaining_tasks、executor_completed_tasks_total | 判断线程池是否长期满载、队列是否持续增长。队列增长且剩余容量接近 0 时,再结合任务延迟和线程栈处理。 |
| JVM 类与编译 | jvm_classes_loaded_classes、jvm_classes_unloaded_classes_total、jvm_compilation_time_ms_total、jvm_info | 识别 JVM 和类加载趋势;通常用于解释内存或启动问题,不单独告警。 |
| JVM 缓冲区 | jvm_buffer_count_buffers、jvm_buffer_memory_used_bytes、jvm_buffer_total_capacity_bytes | 按缓冲区类型观察堆外内存的数量、使用量和容量。 |
| JVM GC 数据 | jvm_gc_live_data_size_bytes、jvm_gc_max_data_size_bytes、jvm_gc_memory_allocated_bytes_total、jvm_gc_memory_promoted_bytes_total、jvm_gc_memory_usage_after_gc、jvm_gc_overhead | 判断 GC 后存活数据、分配和晋升速度,以及 GC 时间占比;持续恶化且同时出现延迟或内存逼近上限时介入。 |
| JVM 线程补充 | jvm_threads_daemon_threads、jvm_threads_started_threads_total | 观察守护线程数量和线程创建速度;创建速度异常升高时检查连接或线程池抖动。 |
| 进程生命周期 | process_cpu_time_ns_total、process_start_time_seconds、process_uptime_seconds | 使用 rate(process_cpu_time_ns_total[5m]) 查看 CPU 时间增长,通过启动时间和 uptime 识别非计划重启。 |
| 日志事件 | ef_errors_log_total、log4j2_events_total | 使用 increase(...[5m]) 查看新出现的错误或不同级别日志;需结合标签和原始日志定位,不能把累计总数当作当前错误率。 |
| 定时任务 | tasks_scheduled_execution_active_seconds、tasks_scheduled_execution_active_seconds_max、tasks_scheduled_execution_seconds、tasks_scheduled_execution_seconds_max | 观察后台定时任务的执行次数、总耗时、当前活跃耗时和最大耗时;与同一实例历史基线比较。 |
Management 的平均请求耗时示例:
sum by (instance) (rate(http_server_requests_seconds_sum{job="tapdata-management"}[5m]))
/
sum by (instance) (rate(http_server_requests_seconds_count{job="tapdata-management"}[5m]))
文件句柄使用比例和 JVM Heap 使用比例示例:
process_files_open_files{job=~"tapdata-(management|flow-engine|agent)"}
/
process_files_max_files{job=~"tapdata-(management|flow-engine|agent)"}
sum by (project, job, instance) (jvm_memory_used_bytes{area="heap"})
/
sum by (project, job, instance) (jvm_memory_max_bytes{area="heap"} > 0)
Agent
Agent 常见指标包括 up、disk_free_bytes、disk_total_bytes、process_cpu_time_ns_total、process_cpu_usage、process_files_open_files、system_cpu_count、system_cpu_usage 和 system_load_average_1m。其健康判断与上表相同;如果指标地址没有提供某个指标,不要使用数值 0 代替缺失数据。