文章目录

  • 前言
  • 下载 Prometheus
  • 下载 Pushgateway
  • Prometheus 集成 Pushgateway
  • Pushgateway 后台执行
  • Prometheus 后台执行
  • 在Prometheus中配置Pushgateway
  • Apache Hudi Metrics中开启 Pushgateway 推送
  • Grafana 安装和启动
  • Grafana 新增 Apache Hudi Metrics 仪表盘
  • 添加 Prometheus 数据源
  • 绘制仪表盘
  • 小结


前言

Apache Hudi 对许多监控组件都支持 metrics 推送,如 JMXDatadogPrometheus 等等。具体可以进入 https://hudi.apache.org/docs/metrics/ 查看。本文主要叙述下如何将 Apache Hudi Metrics 接入 Prometheus,开发人员通过对监控指标的观察能够预判可能出现的问题,从而对潜在的不确定因素进行优化,使我们的数据湖任务运行更加健康。

下载 Prometheus

进入 Prometheus (https://prometheus.io/download/) 官网,选择与您的操作系统和 CPU体系结构(amd64arm64等)匹配的最新版本

wget https://github.com/prometheus/prometheus/releases/download/v2.42.0/prometheus-2.42.0.linux-amd64.tar.gz

然后解压下载的压缩包 prometheus-2.42.0.linux-amd64.tar.gz

tar -zxvf prometheus-2.42.0.linux-amd64.tar.gz

进入解压后的目录 prometheus-2.42.0.linux-amd64 执行以下命令

./prometheus

启动 prometheus 进程

[hadoop@127.0.0.1 prometheus-2.42.0.linux-amd64]$ ./prometheus
ts=2023-02-15T05:57:57.995Z caller=main.go:512 level=info msg="No time or size retention was set so using the default time retention" duration=15d
ts=2023-02-15T05:57:57.996Z caller=main.go:556 level=info msg="Starting Prometheus Server" mode=server version="(version=2.42.0, branch=HEAD, revision=225c61122d88b01d1f0eaaee0e05b6f3e0567ac0)"
ts=2023-02-15T05:57:57.996Z caller=main.go:561 level=info build_context="(go=go1.19.5, platform=linux/amd64, user=root@c67d48967507, date=20230201-07:53:32)"
ts=2023-02-15T05:57:57.996Z caller=main.go:562 level=info host_details="(Linux 3.10.0-957.10.1.el7.x86_64 #1 SMP Mon Mar 18 15:06:45 UTC 2019 x86_64 127.0.0.1 (none))"
ts=2023-02-15T05:57:57.996Z caller=main.go:563 level=info fd_limits="(soft=65535, hard=65535)"
ts=2023-02-15T05:57:57.996Z caller=main.go:564 level=info vm_limits="(soft=unlimited, hard=unlimited)"
ts=2023-02-15T05:57:58.000Z caller=web.go:561 level=info component=web msg="Start listening for connections" address=0.0.0.0:9090
ts=2023-02-15T05:57:58.000Z caller=main.go:993 level=info msg="Starting TSDB ..."
ts=2023-02-15T05:57:58.002Z caller=tls_config.go:232 level=info component=web msg="Listening on" address=[::]:9090
ts=2023-02-15T05:57:58.003Z caller=tls_config.go:235 level=info component=web msg="TLS is disabled." http2=false address=[::]:9090
ts=2023-02-15T05:57:58.163Z caller=head.go:564 level=info component=tsdb msg="Replaying on-disk memory mappable chunks if any"
ts=2023-02-15T05:57:58.165Z caller=head.go:608 level=info component=tsdb msg="On-disk memory mappable chunks replay completed" duration=1.956246ms
ts=2023-02-15T05:57:58.165Z caller=head.go:614 level=info component=tsdb msg="Replaying WAL, this may take a while"
ts=2023-02-15T05:57:58.177Z caller=head.go:685 level=info component=tsdb msg="WAL segment loaded" segment=0 maxSegment=3
ts=2023-02-15T05:57:58.192Z caller=head.go:685 level=info component=tsdb msg="WAL segment loaded" segment=1 maxSegment=3
ts=2023-02-15T05:57:58.197Z caller=head.go:685 level=info component=tsdb msg="WAL segment loaded" segment=2 maxSegment=3
ts=2023-02-15T05:57:58.201Z caller=head.go:685 level=info component=tsdb msg="WAL segment loaded" segment=3 maxSegment=3
ts=2023-02-15T05:57:58.201Z caller=head.go:722 level=info component=tsdb msg="WAL replay completed" checkpoint_replay_duration=7.854678ms wal_replay_duration=27.803458ms wbl_replay_duration=223ns total_replay_duration=37.641222ms
ts=2023-02-15T05:57:58.202Z caller=main.go:1014 level=info fs_type=XFS_SUPER_MAGIC
ts=2023-02-15T05:57:58.202Z caller=main.go:1017 level=info msg="TSDB started"
ts=2023-02-15T05:57:58.202Z caller=main.go:1197 level=info msg="Loading configuration file" filename=prometheus.yml
ts=2023-02-15T05:57:58.214Z caller=main.go:1234 level=info msg="Completed loading of configuration file" filename=prometheus.yml totalDuration=11.842044ms db_storage=2.642µs remote_storage=2.851µs web_handler=654ns query_engine=2.379µs scrape=2.826916ms scrape_sd=28.608µs notify=807.993µs notify_sd=23.783µs rules=3.072µs tracing=18.177µs
ts=2023-02-15T05:57:58.214Z caller=main.go:978 level=info msg="Server is ready to receive web requests."
ts=2023-02-15T05:57:58.214Z caller=manager.go:974 level=info component="rule manager" msg="Starting rule manager..."

如果出现如上图所示的日志,则表示启动成功。

下载 Pushgateway

进入 pushgatewayrelease 页面:(https://github.com/prometheus/pushgateway/releases),选择适合自己环境的版本下载。

wget https://github.com/prometheus/pushgateway/releases/download/v1.5.1/pushgateway-1.5.1.linux-amd64.tar.gz

然后解压下载的压缩包

tar -zxvf pushgateway-1.5.1.linux-amd64.tar.gz

进入解压后的目录 pushgateway-1.5.1.linux-amd64/

启动 pushgateway

[hadoop@127.0.0.1 pushgateway-1.5.1.linux-amd64]$ ./pushgateway
ts=2023-02-15T05:56:35.689Z caller=main.go:100 level=info msg="starting pushgateway" version="(version=1.5.1, branch=HEAD, revision=7afc96cfc5e2b278f3b20e56968ff30eea22b70e)"
ts=2023-02-15T05:56:35.689Z caller=main.go:101 level=info build_context="(go=go1.19.3, user=root@fc81889ee1a6, date=20221129-16:30:38)"
ts=2023-02-15T05:56:35.691Z caller=tls_config.go:232 level=info msg="Listening on" address=[::]:9091
ts=2023-02-15T05:56:35.691Z caller=tls_config.go:235 level=info msg="TLS is disabled." http2=false address=[::]:9091

出现如上日志,则表示正常启动。

Prometheus 集成 Pushgateway

pushgatewayprometheus 的上述执行方式会导致进程在前台执行, 一旦退出ssh会话就会终止。为了避免这种情况,我们可以创建一个脚本以后台方式运行。

Pushgateway 后台执行

首先,请进入 pushgateway 的安装目录,在目录下创建名为 start.shpushgateway 启动脚本。脚本内容如下:

CURRENT_DIR=$(cd `dirname $0`; pwd)
log="$CURRENT_DIR/run.log"
nohup  $CURRENT_DIR/pushgateway > $log 2>&1 &

然后执行 bash start.sh 即可启动 pushgateway 服务。

Prometheus 后台执行

首先,请进入prometheus的安装目录,在目录下创建名为start.shprometheus启动脚本。

脚本内容如下:

CURRENT_DIR=$(cd `dirname $0`; pwd)
log="$CURRENT_DIR/run.log"
data="$CURRENT_DIR/data"
nohup  $CURRENT_DIR/prometheus --storage.tsdb.path=$data --config.file=$CURRENT_DIR/prometheus.yml > $log 2>&1 &

在Prometheus中配置Pushgateway

您需要将 pushgateway 添加到 prometheus 配置文件中。您可以修改 prometheus.yml 配置文件内容为

global:
  scrape_interval:     60s
  evaluation_interval: 60s

scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: ['localhost:9090']
        labels:
          instance: prometheus
	# 增加pushgateway的监控指标
  - job_name: pushgateway
    static_configs:
      - targets: ['localhost:9091']
        labels:
          instance: pushgateway

然后执行 bash start.sh 即可启动 prometheus 服务。

Apache Hudi Metrics中开启 Pushgateway 推送

Apache Hudi 有个全局配置文件,路径在 /etc/hudi/conf/hudi-defaults.conf ,我们可以把一些全局配置放到这里。

配置如下:

hoodie.metrics.on=true
hoodie.metrics.reporter.type=PROMETHEUS_PUSHGATEWAY
#host修改为配置pushgateway所在机器的ip
hoodie.metrics.pushgateway.host=127.0.0.1
hoodie.metrics.pushgateway.port=9091
hoodie.metrics.pushgateway.delete.on.shutdown=false
hoodie.metrics.pushgateway.job.name=hudi-metrics
hoodie.metrics.pushgateway.random.job.name.suffix=false

完成以上配置后,执行 hudi 任务时,一旦有 hudi 指标产生,hudi 就会将指标推送至 pushgateay

Grafana 安装和启动

打开 Grafana 官网(https://grafana.com/grafana/download),选择与您的操作系统和 CPU 体系结构(amd64arm64等)匹配的 Grafana版本,并下载解压

wget https://dl.grafana.com/enterprise/release/grafana-enterprise-9.3.6.linux-amd64.tar.gz
tar -zxvf grafana-enterprise-9.3.6.linux-amd64.tar.gz

进入安装后的目录:grafana-9.3.6/bin

执行 ./grafana-server 即可启动 grafana 服务,此时可以在浏览器中打开 localhost:3000 进入grafanaweb页面,默认的用户名和密码分别为adminadmin。登陆成功后,我们可以配置数据源、创建仪表板和可视化面板。

Grafana 新增 Apache Hudi Metrics 仪表盘

添加 Prometheus 数据源

打开 Grafana,并使用管理员帐户登录。在左侧导航栏中单击⚙️配置按钮,选择 Data Source选项,进入到数据源配置页面。在数据源列表页面中,单击 Add data source 按钮,选择 Prometheus

grafana 仪表板 变量设置 grafana 仪表盘_grafana 仪表板 变量设置

settings 选项卡中,输入数据源的名称,然后在 URL 字段中输入 Prometheus 服务器的地址和端口号(例如:http://localhost:9090)。您可以使用默认值设置其它选项,然后单击 save & test 按钮测试数据源的连接。

grafana 仪表板 变量设置 grafana 仪表盘_数据湖_02

出现以上提示,即表示Prometheus数据源添加完毕。

绘制仪表盘

Grafana 的左侧导航栏中,单击 + 号并选择 Dashboard 选项。在Dashboard 页面中,您可以选择要创建的仪表盘类型,如图表、单个统计数据或表格。选择仪表盘类型后,您可以开始设计您的仪表盘。

特别提醒一下,仪表盘的数据源要选择为我们刚刚新增的数据源 hudi-metrics.

如果你不知道 hudi 目前有哪些指标,可以打开 Metrics browser 查看所有的采集指标。

输入正确的 PromQL 后图表即展现出相应指标的监控。

grafana 仪表板 变量设置 grafana 仪表盘_hg_03

小结

本篇主要简单介绍了如何下载、安装并启动 prometheuspushgatewaygrafana等组件。涉及到prometheuspushgateway 的集成,hudipushgateway 的集成以及 prometheusgrafana 的集成。方法都很简单,只要有耐心就能完成,更高级的玩法需要大家自己去学习。安装这些组件不是目的,主要是为了能够根据监控的指标来对做一些告警、分析和预判。