使用Prometheus+Grafana监控Flink on YARN作业

实时作业要保证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=` 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。

选完之后,在上面的图表中就可以看到监控数据的折线了。

你可能感兴趣的:(使用Prometheus+Grafana监控Flink on YARN作业)