实时作业要保证7 x 24运行,除了要在业务逻辑和编码上下功夫之外,好的监控系统也是必不可少的。Flink支持多种汇报监控指标(metrics)的reporter,如JMX、SLF4J、InfluxDB、Prometheus等。
Prometheus+Grafana是目前相当流行的监控+可视化一体方案,容易上手。下图示出Prometheus及其周边组件组成的生态系统。
本文简述整个配置流程。
Prometheus+PushGateway安装配置
为什么还要使用PushGateway呢?从上面的图可以发现,Prometheus在正常情况下是采用拉模式从产生metric的作业或者exporter(比如专门监控主机的NodeExporter)拉取监控数据。但是我们要监控的是Flink on YARN作业,想要让Prometheus自动发现作业的提交、结束以及自动拉取数据显然是比较困难的。PushGateway就是一个中转组件,通过配置Flink on YARN作业将metric推到PushGateway,Prometheus再从PushGateway拉取就可以了。
首先将与Prometheus监控相关的JAR包拷贝到Flink的lib目录下。
cd /opt/flink-1.9.0
cp opt/flink-metrics-prometheus-1.9.0.jar lib
来到Prometheus官网的下载页面,分别下载本体以及PushGateway组件。也可以直接wget到服务器上。
wget -c https://github.com/prometheus/prometheus/releases/download/v2.12.0/prometheus-2.12.0.linux-amd64.tar.gz
wget -c https://github.com/prometheus/pushgateway/releases/download/v0.9.1/pushgateway-0.9.1.linux-amd64.tar.gz
解压之后,编辑Prometheus的配置文件prometheus.yml。主要是修改监控间隔,以及添加PushGateway的监控配置。Prometheus的默认端口是9090,PushGateway的是9091。
global:
scrape_interval: 60s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 60s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
labels:
instance: prometheus
- job_name: 'pushgateway'
static_configs:
- targets: ['my-flink002:9091']
labels:
instance: pushgateway
然后用nohup的方式启动PushGateway和Prometheus。
nohup ./pushgateway --web.listen-address :9091 > /var/log/pushgateway.log 2>&1 &
nohup ./prometheus --config.file=prometheus.yml > /var/log/prometheus.log 2>&1 &
浏览器访问Prometheus所在节点的9090端口,查看Targets一项。如果两个项目都为UP状态,就是配置好了。
还得记得编辑flink-conf.yaml,在其中加上Flink与PushGateway集成的参数。
metrics.reporter.promgateway.class: org.apache.flink.metrics.prometheus.PrometheusPushGatewayReporter
# 这里写PushGateway的主机名与端口号
metrics.reporter.promgateway.host: my-flink002
metrics.reporter.promgateway.port: 9091
# Flink metric在前端展示的标签(前缀)与随机后缀
metrics.reporter.promgateway.jobName: flink-metrics-ppg
metrics.reporter.promgateway.randomJobNameSuffix: true
metrics.reporter.promgateway.deleteOnShutdown: false
Grafana安装配置
从Grafana官网直接下载二进制包非常慢,所以要借助清华的镜像源。在/etc/yum.repos.d目录下新建grafana.repo,写入如下内容。
[grafana]
name=grafana
baseurl=https://mirrors.tuna.tsinghua.edu.cn/grafana/yum/rpm
repo_gpgcheck=0
enabled=1
gpgcheck=0
然后用yum安装。
yum makecache
yum -y install grafana
Grafana的配置文件位于/etc/grafana/grafana.ini,但是我们可以不用改,直接启动服务。
service grafana-server start
Grafana默认跑在3000端口,用浏览器访问之,然后点击Create your first data source添加Prometheus数据源。具体的填写方法如下图所示。
运行示例程序来产生一些监控数据。
nc -l 17777
/opt/flink-1.9.0/bin/flink run \
--detached \
--jobmanager yarn-cluster \
--yarnname "example-socket-window-wordcount" \
/opt/flink-1.9.0/examples/streaming/SocketWindowWordCount.jar \
--port 17777
最后添加一个用于查看监控图表的dashboard。点击New Dashboard->Add Query按钮,就可以直接看到Flink下的各个metric,还可以添加多个metric。
选完之后,在上面的图表中就可以看到监控数据的折线了。