日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何使用JMX_Expoter+Prometheus+Grafana监控Hadoop集群

發(fā)布時間:2024/1/8 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何使用JMX_Expoter+Prometheus+Grafana监控Hadoop集群 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

  • JMX_Expoter
  • 監(jiān)控

因?yàn)槟壳癈DH以及HDP后續(xù)要合并閉源,公司打算花時間自研一個類似的平臺,我也對集群監(jiān)控這塊下了點(diǎn)功夫。

監(jiān)控

? 對于一個集群管理平臺,首當(dāng)其沖的就是其中的監(jiān)控如何實(shí)現(xiàn),畢竟很多時候我們打開它只是因?yàn)猷]箱里收到了報(bào)警:-),那么我們應(yīng)該如何獲取Hadoop等集群的信息呢?這時候需要簡單了解一個知識點(diǎn)了:JMX。

? 我們簡單介紹一下Java的JMX是什么,JMX全程叫做Java Management Extensions,翻譯過來就是Java內(nèi)存管理,最常用到的就是對于 JVM 的監(jiān)測和管理,比如 JVM 內(nèi)存、CPU 使用率、線程數(shù)、垃圾收集情況等等。另外,還可以用作日志級別的動態(tài)修改,比如 log4j 就支持 JMX 方式動態(tài)修改線上服務(wù)的日志級別。

總而言之,就是Java自己開發(fā)的用于監(jiān)控JVM指標(biāo)的一個工具,可以提供給一些界面JConsole,VisualVM使用,詳細(xì)信息可以參考這里!

獲取集群的JMX信息

? Hadoop,Hbase集群都提供了便捷獲取集群JMX信息的途徑,具體通過在訪問地址后面加上/jmx來實(shí)現(xiàn),比如我們訪問hdfs的NameNode頁面的時候地址是localhost:50070,那么在后面加上一個/jmx即為localhost:50070/jmx,訪問即可得到類似下面的信息。

? 上面圖中具體指標(biāo)信息可以在Hadoop官方文檔對應(yīng)的metrics章節(jié)中找到,其中包括了Namenode以及Datanode相關(guān)信息,同理如果我們在8088端口后面加上/jmx即可獲得關(guān)于Yarn相關(guān)指標(biāo)信息。

? 現(xiàn)在我們監(jiān)控的信息有了,接下來如果我們想將數(shù)據(jù)在監(jiān)控折線圖中展現(xiàn)出來的話就需要一個時序數(shù)據(jù)庫,因?yàn)楸O(jiān)控指標(biāo)數(shù)據(jù)必須存在對應(yīng)的時間才有意義,目前比較常見的時序數(shù)據(jù)庫+界面組合是普羅米修斯(時序數(shù)據(jù)庫)+ Grafana(界面展示),那么目前的問題就轉(zhuǎn)換成了如何將Hadoop集群中的JMX信息傳遞給普羅米修斯,簡單調(diào)研就可以發(fā)現(xiàn),普羅米修斯自己開發(fā)了一款插件支持將java程序?qū)?yīng)的jmx信息傳遞到自己的時序數(shù)據(jù)庫中,插件地址。

根據(jù)自己Java環(huán)境版本下載插件,將插件放置到自己選定的位置,現(xiàn)在插件有了,就差如何在集群中使用插件了,我們開始著手修改集群中的配置。

Hadoop集群配置Jmx_expoter

在hadoop-env.sh中最后添加以下代碼,注意將其中的路徑修改成自己系統(tǒng)中的路徑,這段代碼的主要作用是添加我們下載的jar包,以及給jar包傳遞配置文件,以及指定該服務(wù)要占用的端口,這里的對應(yīng)位置的配置文件prometheus_config.yml測試的時候可以直接創(chuàng)建一個空文件即可。

if ! grep -q <<<"$HDFS_NAMENODE_OPTS" jmx_prometheus_javaagent; then HDFS_NAMENODE_OPTS="$HDFS_NAMENODE_OPTS -javaagent:/usr/local/Cellar/hadoop/3.3.1/jmx_prometheus_javaagent-0.16.1.jar=27001:/usr/local/Cellar/hadoop/3.3.1/libexec/etc/hadoop/prometheus_config.yml" fi if ! grep -q <<<"$HDFS_DATANODE_OPTS" jmx_prometheus_javaagent; then HDFS_DATANODE_OPTS="$HDFS_DATANODE_OPTS -javaagent:/usr/local/Cellar/hadoop/3.3.1/jmx_prometheus_javaagent-0.16.1.jar=27002:/usr/local/Cellar/hadoop/3.3.1/libexec/etc/hadoop/prometheus_config.yml" fi

注意事項(xiàng)

1.上面的代碼不能直接寫成類似以下模式,因?yàn)椴荒茉?HADOOP_OPTS中出現(xiàn)multiple -javaagent opts,就是不能直接出現(xiàn)多個-javaagent選項(xiàng),必須要換一種寫法,將-javaagent寫在if else代碼中可以避免這個問題,詳細(xì)可以參考這個stackoverflow回答

#寫成這種模式會報(bào)錯 export HADOOP_NAMENODE_OPTS="$HADOOP_NAMENODE_OPTS -javaagent:/home/ec2-user/jmx_exporter/jmx_prometheus_javaagent-0.10.jar=9102:/home/ec2-user/jmx_exporter/prometheus_config.yml" export HADOOP_DATANODE_OPTS="$HADOOP_DATANODE_OPTS -javaagent:/home/ec2-user/jmx_exporter/jmx_prometheus_javaagent-0.10.jar=9102:/home/ec2-user/jmx_exporter/prometheus_config.yml"

2.同一臺機(jī)器的每一個JMX服務(wù)端口必須區(qū)分開

比如上面namenode的jmx服務(wù)所占用的端口為27001,datanode的jmx服務(wù)所占用的端口為27002,如果使用了相同的端口,那么在啟動hdfs服務(wù)(./start-dfs.sh)的時候會報(bào)如下所示的錯。

Starting namenodes on [localhost] Starting datanodes localhost: /usr/local/Cellar/hadoop/3.3.1/libexec/bin/../libexec/hadoop-functions.sh: line 1821: 11125 Abort trap: 6 hadoop_start_daemon "${daemonname}" "$class" "${pidfile}" "$@" >> "${outfile}" 2>&1 < /dev/null localhost: ERROR: Cannot set priority of datanode process 11125 localhost: ERROR: Cannot disconnect datanode process 11125

這樣配置完成之后,Hadoop的jmx信息就被采集到指定的端口中了,接下來我們可以在網(wǎng)頁上測試一下我們的采集數(shù)據(jù),訪問地址就是前面配置的端口 localhost:27001

同理我們的Yarn相關(guān)信息采集也要在yarn-env.sh中配置上面類似的代碼,其中同樣要注意區(qū)分端口號,并且不要同時出現(xiàn)兩個-javaagent,將兩個javaagent放到不同的if else中。

Hbase集群配置

因?yàn)槲沂菃拥膯螜C(jī)版本的Hbase,所以我只配置HBASE_MASTER_OPTS和HBASE_JMX_BASE選項(xiàng),如果是集群模式可能還需要配置HBASE_REGIONSERVER_OPTS,將下面內(nèi)容替換成自己的文件路徑然后添加到hbase-env.sh的尾部。

export HBASE_JMX_BASE="-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false" export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS $HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=20101 -javaagent:$HBASE_HOME/lib/jmx_prometheus_javaagent-0.16.1.jar=27000:$HBASE_HOME/conf/hbase_jmx_config.yaml"

這樣我們就可以通過指定端口訪問各個集群的JMX信息了,下一步就是配置Prometheus將數(shù)據(jù)導(dǎo)入到時序數(shù)據(jù)庫中。

配置Prometheus

打開Prometheus配置文件,并且在后面增加關(guān)于Hadoop集群的NameNode,DataNode以及Hbase的jmx數(shù)據(jù)配置,增加如下代碼,重啟普羅米修斯服務(wù)。

- job_name: "hbase"static_configs:- targets: ["localhost:27000"]labels:instance: localhost- job_name: "hadoop namenode"static_configs:- targets: ["localhost:27001"]labels:instance: localhost- job_name: "hadoop datanode"static_configs:- targets: ["localhost:27002"]labels:instance: localhost

我們打開Prometheus的頁面查看對應(yīng)的target,查看我們配置的任務(wù),如果出現(xiàn)下面幾個選項(xiàng)并且是綠色的說明是正常的,打開采集的結(jié)果網(wǎng)址會發(fā)現(xiàn)其中Prometheus采集的指標(biāo)名稱相比于原先集群50070/jmx的指標(biāo)名稱是經(jīng)過處理的,比如Prometheus中有一個指標(biāo)叫做hadoop_namenode_memnonheapmaxm他在50070/jmx中是名稱是memnonheapmaxm,然后前面加上service name等,其中的匹配規(guī)則應(yīng)該在插件的配置文件prometheus_config.yml中設(shè)置的,詳細(xì)可以看插件地址。

最后選出來我們需要的指標(biāo)之和在Grafana中展示出來即可,具體方法這里不再展示,可以參考[這篇教程](

總結(jié)

以上是生活随笔為你收集整理的如何使用JMX_Expoter+Prometheus+Grafana监控Hadoop集群的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。