はじめに
これまで構築してきたHadoopの監視のため、
手始めにHDFS監視を実施してみました。
前提
NameNode Web: http://localhost:9870
Exporter listen: :9404
Prometheus は別ホストから master1:9404/metrics と master2:9404/metrics にアクセス
以下のURLを参考にHadoopを構築していること。
環境
Bigtop 3.3.6
NameNode HA(master1 / master2)
NameNode Web UI: http://192.168.11.xx:9870
Prometheus / Grafana は別ホスト
systemd 管理
Java 8 or 11(どちらでも可)
1. JMX Exporter を設置(master1 / master2)
1-1. JAR 配置
sudo mkdir -p /opt/jmx_exporter
cd /opt/jmx_exporter
sudo curl -LO https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.20.0/jmx_prometheus_javaagent-0.20.0.jar
sudo ln -s jmx_prometheus_javaagent-0.20.0.jar jmx_prometheus_javaagent.jar
2. NameNode 用 JMX Exporter 設定ファイル作成
2-1. config 作成
sudo tee /opt/jmx_exporter/namenode.yml << 'EOF'
lowercaseOutputName: true
lowercaseOutputLabelNames: true
rules:
- pattern: '.*'
EOF
3. NameNode に javaagent を仕込む
3-1. systemd override を作る
sudo vi /etc/systemd/system/hadoop-hdfs-namenode.service
開いたら[Service]以下に下記を貼り付け:
Environment="HADOOP_OPTS=-javaagent:/opt/jmx_exporter/jmx_prometheus_javaagent.jar=9404:/opt/jmx_exporter/namenode.yml"
ポート 9404 は exporter 用(他と被らなければOK)
3-2. systemd 再読込
sudo systemctl daemon-reload
4. NameNode 再起動(HA 順守)
master1 / master2 片方ずつ(Active→Stanbyの順で行う。)
sudo systemctl restart hadoop-hdfs-namenode
確認:
sudo systemctl status hadoop-hdfs-namenode --no-pager
→ステータスに問題ないこと。
5. NameNode 側で metrics が出ているか確認
master1 / master2 それぞれで以下のコマンドを実施。
curl -s http://localhost:9404/metrics | grep -i -E 'hadoop_namenode_capacity(used|remaining|total)' | head -n 30
hadoop系のパラメータが見れればOK
6. Prometheus(別ホスト)設定
prometheus設定ファイルを開き、以下を追記する。
scrape_configs:
- job_name: 'hdfs-namenode'
static_configs:
- targets:
- 'master1:9404'
- 'master2:9404'
reload / restart 後、/targets で UP を確認。
7. Grafana/PromQL
以下のクエリ設定でグラフ作成すれば参照できます。
7-1. 総容量(GB)
hadoop_namenode_capacitytotal {name="FSNamesystem"} / 1024^3
7-2. 使用量 / 残量(bytes → GiB)
使用量
hadoop_namenode_capacityused {name="FSNamesystem"} / 1024^3
残量
hadoop_namenode_capacityremaining {name="FSNamesystem"} / 1024^3
7-3. 有効容量(GB)
有効容量 = 使用量 + 残量
( hadoop_namenode_capacityused {name="FSNamesystem"} + hadoop_namenode_capacityremaining {name="FSNamesystem"}) / 1024^3
7-4. 使用率(%)
使用量をを有効容量で割ること。
100 *
(hadoop_namenode_capacityused {name="FSNamesystem"}
/
(hadoop_namenode_capacityused {name="FSNamesystem"} + hadoop_namenode_capacityremaining {name="FSNamesystem"}))
7-5. HAで「Active 側だけ」に寄せる
HA だと master1 と master2 が両方 scrape されます。
Active/Standby どっちも同じ値を出すこともあるので、基本は「最大値を採用」が簡単です。
以下のように記載してください。
max by () ("上記クエリ")