Flink 和 Prometheus:流式应用程序的云原生监控
翻译:陆离校对:杨乾坤(欧文)本文描述了程序开发人员如何使用 Apache Flink 内置的 Metrics 系统和Prometheus结合的方式,有效的观测和监控流式...
·
翻译:陆离
- Metrics: Prometheus 将 Metrics 定义为随时间变化的信息流,这些时间序列具有毫秒级的精确度;
- Labels:是与支持 Prometheus 的数据模型的时间序列相关联的键值对,这与传统的度量系统可能遇到的分层数据结构不太相同;
- Scrape: Prometheus 是一个基于“拉取”的系统,它从指定的数据源中主动获取(“scrapes”)度量数据,这些数据源以基于文本的格式在 HTTP 协议的地址上进行暴露;
- PromQL:是 Prometheus 的查询语言,它既可用于创建仪表盘,也可用于设置在满足特定条件时触发的告警规则;
./gradlew composeUp
首先利用工具
Gradle
创建一个 Flink 作业,并基于
Docker Compose
启动一个本地的环境,Docker Compose 启动一个运行在
Flink 作业集群
(可在http://localhost:8081上访问)中的作业和一个 Prometheus 实例(http://localhost:9090)。
示例作业 Web界面中的作业曲线图和自定义的度量指标
PrometheusExampleJob 包括三个 operator,一个是生成多达 10000 个随机数,然后是一个 map 会对事件进行计数,并且创建一个值传递的柱状图。
最后一个,会丢弃这些事件,不做进一步的输出。下边显示了一些简单的代码,来自于第二个操作,把与业务逻辑相关的定制度量指标添加到 Flink 作业中,这是非常简单的事情。
class FlinkMetricsExposingMapFunction extends RichMapFunction<Integer, Integer> {
private transient Counter eventCounter;
@Override
public void open(Configuration parameters) {
eventCounter = getRuntimeContext().getMetricGroup().counter("events");
}
@Override
public Integer map(Integer value) {
eventCounter.inc();
return value;
}
}
上述代码从 FlinkMetricsExposingMapFunction.java 文件中摘录的,演示了自定义的 Flink 度量指标
在Flink中配置Prometheus监控
开始用Prometheus监控Flink的时候,必须要执行以下的步骤:
1. 首先让PrometheusReporter的jar文件放在Flink集群的安装路径里(jar包是随Flink一起发布的);
cp/opt/flink/opt/flink-metrics-prometheus-1.7.2.jar /opt/flink/lib
metrics.reporters: prom
metrics.reporter.prom.class: org.apache.flink.metrics.prometheus.PrometheusReporter
metrics.reporter.prom.port: 9999
scrape_configs:
- job_name: 'flink'
static_configs:
- targets: ['job-cluster:9999', 'taskmanager1:9999','taskmanager2:9999']
Flink 集群还提供了更多的技术度量指标(如检查点大小或持续时间、Kafka offset或资源消耗机制)。如果你感兴趣的话,可以查看所有作业管理器和两个任务管理器的Prometheus度量指标,它们分别在 http://localhost:9249、http://localhost:9250 和 http://localhost:9251 上显示。 要测试 Prometheus 的告警功能,通过执行如下的命令:
docker killtaskmanager1
./gradlewcomposeDown
猜你喜欢
1、基于 Flink SQL 构建实数据仓库在 OPPO 的实战
“在看”一下,神清气爽更多推荐
已为社区贡献1条内容
所有评论(0)