前言
近来搞大数据,涉及到组件挺多,想弄个监控。开始研究prometheus,grafana,exporter .这套工具挺好,prometheus负责收集数据,grafana负责展示,exporter负责提供工具。exporter 不同工具有不同的exporter,比如mysql,kafka,node,flink等等。唯独没有hadoop exporter。后来搜到hadoop exporter 源码,是go语言编写。我不太擅长go语言。挑战一下,把它编译出来。
下载源码
git clone https://github.com/Datatamer/hadoop_exporter.git
假设下载到:/usr/local/
编译
使用glide编译
在下载目录:/usr/local/hadoop_exporter-master 有个readme.md文件,cat看一下
# Hadoop Exporter for Prometheus
Exports hadoop metrics via HTTP for Prometheus consumption.
How to build
glide install
go build namenode_exporter.go
go build resourcemanager_exporter.go
Help on flags of namenode_exporter:
-namenode.jmx.url string
Hadoop JMX URL. (default “http://localhost:50070/jmx”)
-web.listen-address string
Address on which to expose metrics and web interface. (default “:9070”)
-web.telemetry-path string
Path under which to expose metrics. (default “/metrics”)
Help on flags of datanode_exporter:
-datanode.jmx.url string
Hadoop JMX URL. (default “http://localhost:50075/jmx”)
-web.listen-address string
Address on which to expose metrics and web interface. (default “:9070”)
-web.telemetry-path string
Path under which to expose metrics. (default “/metrics”)
Help on flags of resourcemanager_exporter:
-resourcemanager.url string
Hadoop ResourceManager URL. (default “http://localhost:8088”)
-web.listen-address string
Address on which to expose metrics and web interface. (default “:9088”)
-web.telemetry-path string
Path under which to expose metrics. (default “/metrics”)
Help on flags of journalnode_exporter:
-journalnodeJmxUrl.url string
Hadoop ResourceManager URL. (default “http://localhost:8088”)
-web.listen-address string
Address on which to expose metrics and web interface. (default “:9088”)
-web.telemetry-path string
Path under which to expose metrics. (default “/metrics”)
# Requirements
go lang 1.6.2
glide
里面提到要求go 1.6.2版 glide编译
执行命令
glide install
go build namenode_exporter.go
go build resourcemanager_exporter.go
就可以了,好简单。
然而,开始挖坑填坑之旅。
刚开始我也是下载1.6.2 go语言包,
设置环境:
在/etc/profile 设置GOPATH环境变量
export GOPATH=/usr/local/go/workplace
然后在/usr/local/go/workplace 创建子目录src,把/usr/local/hadoop_exporter-master
挪到/usr/local/go/workplace/src下
编译报:
Unable to set version on google.golang.org/protobuf/reflect/protoreflect to . Err: Cannot detect VCS
可能有多个包错误。看网络情况
后来升级go 好几个版本1.7 1.8 1.9 都报类似这种错误
后来又把涉及模块下载到本地目录
在glide.yml增加本地库依赖,不下载网络:
package: Datatamer/hadoop_exporter
import:
- package: github.com/prometheus/client_golang
version: v0.8.0
subpackages:
- prometheus
source: $GOPATH/src/github.com/prometheus/client_golang
- package: github.com/prometheus/log
source: $GOPATH/src/github.com/prometheus/log
- package: google.golang.org/protobuf
version: ^1.35.1
source: /usr/local/go/workplace/src/google.golang.org/protobuf
但是错误依旧。正当我一筹莫展时,网上说可以使用go mod编译。
使用go mod编译
为了使用go mod编译,我下载了go1.21.13.linux-amd64.tar.gz
然后删除原来的go目录,重新建目录,复制hadoop_exporter-master
在/usr/local/go/workplace/src/hadoop_exporter-master下,执行go mod初始化
go mod init Datatamer/hadoop_exporter
吭叽吭叽,经过漫长等待。我想为何这么慢,原来它将glide.lock转换为go.mod
不过,它还是报错了:
go: converting glide.lock: stat
github.com/prometheus/log@9a3136781e1ff7bc42736ba4acb81339b1422551:
github.com/prometheus/log@9a3136781e1ff7bc42736ba4acb81339b1422551: invalid
version: Get
"https://proxy.golang.org/github.com/prometheus/log/@v/9a3136781e1ff7bc42736ba4a
cb81339b1422551.info": dial tcp 172.217.163.49:443: connect: connection refused
又是包下载失败,go mod init 在尝试从 glide.lock 文件转换依赖时,无法连接到 proxy.golang.org。这可能是由于网络问题或代理设置导致的。
网上说:设置 GOPROXY 环境变量
可以将 GOPROXY 环境变量设置为一个可用的镜像源,例如 goproxy.io 或 athens.azurefd.net。这可以帮助你绕过对 proxy.golang.org 的直接访问。
export GOPROXY=https://goproxy.io,direct
然后再次运行 go mod init 和 go mod tidy
go mod init Datatamer/hadoop_exporter
go mod tidy
我的天,终于成功
但是,我想要export还没编译,需要单独编译
cd namenode
go build namenode_exporter.go
cd ../datanode
go build datanode_exporter.go
cd ../journalnode
go build journalnode_exporter.go
cd ../resourcemanager
go build resourcemanager_exporter.go
至此,四个exporter终于编译完毕
最后
如果您由于各种原因无法编译,可以点击hadoop exporter下载现成的。
至于如何使用hadoop exporter,跟prometheus,grafana如何对接。
再找时间来写
有问题可以 ,\/:lita2lz