如何通过Flink监控REST API请求指定时间段的作业指标?
先直接给你个明确的结论:目前Flink原生的监控REST API(包括你用到的/jobs/:jobid接口),并没有直接支持指定起止时间段查询作业指标的参数,官方文档没提也是因为这个功能确实不在原生API的能力范围内。
不过你可以通过这些替代方案来实现需求:
借助Metrics监控系统(推荐)
Flink本身支持将指标输出到Prometheus、InfluxDB等时序数据库。你只需要在Flink配置中开启对应指标报告器,比如配置Prometheus:metrics.reporter.prometheus.class: org.apache.flink.metrics.prometheus.PrometheusReporter metrics.reporter.prometheus.port: 9250-9260之后就可以用PromQL(或对应数据库的查询语法)来指定时间段拉取目标作业的指标,比如查询某作业过去1小时的运行时长指标:
flink_job_duration{job_id="692c1d818afb77daaca891484e0b6a7g"}[1h]还能结合Grafana做可视化展示,这也是生产环境中最常用的方式。
客户端本地维护指标序列
如果必须依赖Flink REST API,可以调用/jobs/:jobid/metrics接口定时拉取实时指标,在你的客户端代码里维护一个时间序列存储(内存或轻量数据库都可以),之后自己实现指定时间段的筛选逻辑。这种方式适合小规模测试场景,大规模场景下维护成本会比较高。关注Flink版本更新
如果你用的是较旧的Flink版本,可以留意新版本的发布日志,说不定后续版本会新增时间段查询的API参数,但截至目前(Flink 1.18),原生API还是没有这个功能。
另外补充一点:如果是已经结束的作业,Flink REST API只能返回作业的基础元数据(比如你拿到的start-time和end-time),历史运行指标需要依赖你之前通过Metrics系统收集并持久化的数据,Flink本身不会在REST API中保留历史指标。
内容的提问来源于stack exchange,提问作者Hegemon

