文章目录
- 前言
- 下载 Prometheus
- 下载 Pushgateway
- Prometheus 集成 Pushgateway
- Pushgateway 后台执行
- Prometheus 后台执行
- 在Prometheus中配置Pushgateway
- Apache Hudi Metrics中开启 Pushgateway 推送
- Grafana 安装和启动
- Grafana 新增 Apache Hudi Metrics 仪表盘
- 添加 Prometheus 数据源
- 绘制仪表盘
- 小结
前言
Apache Hudi
对许多监控组件都支持 metrics
推送,如 JMX
、Datadog
、Prometheus
等等。具体可以进入 https://hudi.apache.org/docs/metrics/
查看。本文主要叙述下如何将 Apache Hudi Metrics
接入 Prometheus
,开发人员通过对监控指标的观察能够预判可能出现的问题,从而对潜在的不确定因素进行优化,使我们的数据湖任务运行更加健康。
下载 Prometheus
进入 Prometheus
(https://prometheus.io/download/
) 官网,选择与您的操作系统和 CPU
体系结构(amd64
、arm64
等)匹配的最新版本
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
进入 pushgateway
的 release
页面:(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
pushgateway
和 prometheus
的上述执行方式会导致进程在前台执行, 一旦退出ssh
会话就会终止。为了避免这种情况,我们可以创建一个脚本以后台方式运行。
Pushgateway 后台执行
首先,请进入 pushgateway
的安装目录,在目录下创建名为 start.sh
的 pushgateway
启动脚本。脚本内容如下:
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.sh
的prometheus
启动脚本。
脚本内容如下:
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
体系结构(amd64
、arm64
等)匹配的 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
进入grafana
的 web
页面,默认的用户名和密码分别为admin
、admin
。登陆成功后,我们可以配置数据源、创建仪表板和可视化面板。
Grafana 新增 Apache Hudi Metrics 仪表盘
添加 Prometheus 数据源
打开 Grafana
,并使用管理员帐户登录。在左侧导航栏中单击⚙️配置按钮,选择 Data Source
选项,进入到数据源配置页面。在数据源列表页面中,单击 Add data source
按钮,选择 Prometheus
。
在 settings
选项卡中,输入数据源的名称,然后在 URL
字段中输入 Prometheus
服务器的地址和端口号(例如:http://localhost:9090
)。您可以使用默认值设置其它选项,然后单击 save & test
按钮测试数据源的连接。
出现以上提示,即表示Prometheus
数据源添加完毕。
绘制仪表盘
在 Grafana
的左侧导航栏中,单击 +
号并选择 Dashboard
选项。在Dashboard
页面中,您可以选择要创建的仪表盘类型,如图表、单个统计数据或表格。选择仪表盘类型后,您可以开始设计您的仪表盘。
特别提醒一下,仪表盘的数据源要选择为我们刚刚新增的数据源 hudi-metrics
.
如果你不知道 hudi
目前有哪些指标,可以打开 Metrics browser
查看所有的采集指标。
输入正确的 PromQL
后图表即展现出相应指标的监控。
小结
本篇主要简单介绍了如何下载、安装并启动 prometheus
、pushgateway
、grafana
等组件。涉及到prometheus
和 pushgateway
的集成,hudi
和 pushgateway
的集成以及 prometheus
和grafana
的集成。方法都很简单,只要有耐心就能完成,更高级的玩法需要大家自己去学习。安装这些组件不是目的,主要是为了能够根据监控的指标来对做一些告警、分析和预判。