# namenode
export HDFS_NAMENODE_OPTS="${HDFS_NAMENODE_OPTS} -javaagent:/path/to/agent.jar=<옵션>"
# datanode
export HDFS_DATANODE_OPTS="${HDFS_DATANODE_OPTS} -javaagent:/path/to/agent.jar=<옵션>"
# hadoop-env.sh
export HDFS_NAMENODE_OPTS="${HDFS_NAMENODE_OPTS} \
-javaagent:/opt/jmx_prometheus_javaagent.jar=19850:/etc/hadoop/namenode.yml"
export HDFS_DATANODE_OPTS="${HDFS_DATANODE_OPTS} \
-javaagent:/opt/jmx_prometheus_javaagent.jar=19851:/etc/hadoop/datanode.yml"
export HDFS_NAMENODE_OPTS="${HDFS_NAMENODE_OPTS} \
-Dcom.sun.management.jmxremote=true \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.port=9010 \
-Dcom.sun.management.jmxremote.ssl=false \
-javaagent:/opt/jmx_prometheus_javaagent.jar=19850:/etc/hadoop/namenode.yml"
# namenode.yaml — 프로덕션 권장 설정
---
startDelaySeconds: 0
lowercaseOutputName: true
lowercaseOutputLabelNames: true
# Java Agent 모드: hostPort 불필요 (로컬 JVM에서 직접 수집)
# 원격 수집 모드일 경우에만 아래 주석 해제:
# hostPort: localhost:9010
# ssl: false
# 수집 대상 MBean 화이트리스트 (성능 최적화)
whitelistObjectNames:
- "Hadoop:service=NameNode,name=FSNamesystem"
- "Hadoop:service=NameNode,name=FSNamesystemState"
- "Hadoop:service=NameNode,name=NameNodeActivity"
- "Hadoop:service=NameNode,name=NameNodeInfo"
- "Hadoop:service=NameNode,name=JvmMetrics"
- "Hadoop:service=NameNode,name=UgiMetrics"
- "Hadoop:service=NameNode,name=RpcActivityForPort*"
- "Hadoop:service=NameNode,name=MetricsSystem,sub=*"
- "java.lang:type=Memory"
- "java.lang:type=GarbageCollector,name=*"
- "java.lang:type=Threading"
- "java.lang:type=OperatingSystem"
rules:
# ──────────────────────────────────────────
# 1) MetricsSystem 전용 규칙 (sub 레이블 분리)
# ──────────────────────────────────────────
- pattern: 'Hadoop<service=(.*), name=MetricsSystem, sub=(.*)><>(.*): (\d+)'
name: hadoop_$1_$3
value: $4
attrNameSnakeCase: true
labels:
service: "HDFS"
role: "$1"
kind: "MetricsSystem"
sub: "$2"
type: GAUGE
# ──────────────────────────────────────────
# 2) NameNode 일반 메트릭 (FSNamesystem, Activity 등)
# ──────────────────────────────────────────
- pattern: 'Hadoop<service=(.*), name=(.*)><>(.*): (\d+)'
name: hadoop_$1_$3
value: $4
attrNameSnakeCase: true
labels:
service: "HDFS"
role: "$1"
kind: "$2"
type: GAUGE
# ──────────────────────────────────────────
# 3) JVM 메모리
# ──────────────────────────────────────────
- pattern: 'java.lang<type=Memory><>(HeapMemoryUsage|NonHeapMemoryUsage): (.*)'
name: jvm_memory_$1
value: $2
type: GAUGE
# ──────────────────────────────────────────
# 4) JVM GC
# ──────────────────────────────────────────
- pattern: 'java.lang<type=GarbageCollector, name=(.*)><>(CollectionCount|CollectionTime)'
name: jvm_gc_$2
labels:
gc: "$1"
type: COUNTER
# ──────────────────────────────────────────
# 5) JVM 스레드
# ──────────────────────────────────────────
- pattern: 'java.lang<type=Threading><>(ThreadCount|DaemonThreadCount|PeakThreadCount)'
name: jvm_threads_$1
type: GAUGE
# ──────────────────────────────────────────
# 6) 나머지 전체 수집 (fallback)
# ──────────────────────────────────────────
- pattern: ".*"
# datanode.yaml — DataNode 전용 설정
---
startDelaySeconds: 0
lowercaseOutputName: true
lowercaseOutputLabelNames: true
whitelistObjectNames:
- "Hadoop:service=DataNode,name=DataNodeActivity-*"
- "Hadoop:service=DataNode,name=DataNodeInfo"
- "Hadoop:service=DataNode,name=JvmMetrics"
- "Hadoop:service=DataNode,name=UgiMetrics"
- "Hadoop:service=DataNode,name=RpcActivityForPort*"
- "Hadoop:service=DataNode,name=MetricsSystem,sub=*"
- "java.lang:type=Memory"
- "java.lang:type=GarbageCollector,name=*"
- "java.lang:type=Threading"
rules:
# DataNode 활동 메트릭 (블록 읽기/쓰기/복제 등)
- pattern: 'Hadoop<service=DataNode, name=DataNodeActivity-(.*)><>(.*): (\d+)'
name: hadoop_datanode_$2
value: $3
attrNameSnakeCase: true
labels:
service: "HDFS"
role: "DataNode"
host: "$1"
type: GAUGE
# MetricsSystem
- pattern: 'Hadoop<service=(.*), name=MetricsSystem, sub=(.*)><>(.*): (\d+)'
name: hadoop_$1_$3
value: $4
attrNameSnakeCase: true
labels:
service: "HDFS"
role: "$1"
kind: "MetricsSystem"
sub: "$2"
type: GAUGE
# DataNode 일반 메트릭
- pattern: 'Hadoop<service=(.*), name=(.*)><>(.*): (\d+)'
name: hadoop_$1_$3
value: $4
attrNameSnakeCase: true
labels:
service: "HDFS"
role: "$1"
kind: "$2"
type: GAUGE
# JVM 메모리
- pattern: 'java.lang<type=Memory><>(HeapMemoryUsage|NonHeapMemoryUsage): (.*)'
name: jvm_memory_$1
value: $2
type: GAUGE
# JVM GC
- pattern: 'java.lang<type=GarbageCollector, name=(.*)><>(CollectionCount|CollectionTime)'
name: jvm_gc_$2
labels:
gc: "$1"
type: COUNTER
- pattern: ".*"