1.组件说明
prometheus (指标采集的主要组件)
node-exporter (部署在各需要监控的主机节点上,用来采集主机信息)
jmx_prometheus_javaagent-0.17.2.jar (非必须 保存在hadoop各节点上,用来采集hadoop集群及yarn集群信息)
以上安装包目前保存在 10.32.123.20 机器 /opt/installpackage目录下,目前仅支持X86系统。
2.部署说明
2.1 prometheus 安装
- 获取安装包 prometheus.tar
- 解压安装包:tar -xvf prometheus.tar -C 自定义路径。
- 先不要执行start.sh待其他组件安装完成后修改配置执行,见第三章。
2.2 node-exporter安装
- 获取安装包 node-exporter.tar
- 解压安装包:tar -xvf node-exporter.tar -C 自定义路径。
- 启动node-exporter sh start.sh,默认端口9100,如果有冲突可以在start.sh中修改。
- 在对应的主机下访问 http://ip:port/metrics地址,如果返回数据则视为成功。
2.3 hadoop指标采集组件配置(可选)
- 获取安装包 metrics.tar
- 解压安装包:tar -xvf metrics.tar -C /opt/ (可以自定义路径,但需要注意后续会用到这个路径,另外其中的四个yaml文件是空文件,不需要管)。
- cd $HADOOP_HOME/etc/hadoop 修改 hadoop-env.sh文件,在文件结尾追加以下参数:
export HADOOP_NAMENODE_OPTS="-Dhadoop.security.logger=INFO,RFAS -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.port=11001 -javaagent:/opt/metrics/jmx_prometheus_javaagent-0.17.2.jar=27001:/opt/metrics/namenode.yaml"
export HADOOP_DATANODE_OPTS="-Dhadoop.security.logger=INFO,RFAS -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.port=11002 -javaagent:/opt/metrics/jmx_prometheus_javaagent-0.17.2.jar=27002:/opt/metrics/datanode.yaml" - 需要注意修改的参数:
-Dcom.sun.management.jmxremote.port 保证该端口本机不重复,且两条数据不重复。
-javaagent:/opt/metrics/jmx_prometheus_javaagent-0.17.2.jar=27002:/opt/metrics/datanode.yaml 保证端口不重复,且两条数据不重复,文件路径为上面解压的路径。
2.4 yarn指标采集组件配置(可选)
- cd $HADOOP_HOME/bin 修改yarn文件,在function hadoop_usage配置之前添加以下参数:
export YARN_RESOURCEMANAGER_OPTS="-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.port=11003 -javaagent:/opt/metrics/jmx_prometheus_javaagent-0.17.2.jar=27003:/opt/metrics/resourcemanager.yaml $YARN_RESOURCEMANAGER_OPTS"
export YARN_NODEMANAGER_OPTS="-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.port=11004 -javaagent:/opt/metrics/jmx_prometheus_javaagent-0.17.2.jar=27004:/opt/metrics/nodemanager.yaml $YARN_NODEMANAGER_OPTS" - 需要注意修改的参数
-Dcom.sun.management.jmxremote.port 保证该端口本机不重复,且两条数据不重复
-javaagent:/opt/metrics/jmx_prometheus_javaagent-0.17.2.jar=27003:/opt/metrics/resourcemanager.yaml 保证端口不重复,且两条数据不重复,文件路径为上面解压的路径
2.5 重启hadoop集群(可选)
- cd $HADOOP_HOME/sbin
- sh stop-all.sh
- sh start-all.sh
2.6 在每台集群机器上查看采集信息运行情况(可选)
- netstat -an | grep 27001
- netstat -an | grep 27002
- netstat -an | grep 27003
- netstat -an | grep 27004
- 以上端口并不会在所有机器上都运行,这个是根据hadoop集群策略有关的,这四个端口分别对应 namenode、datanode、resourcemanager、nodemanager。
2.7 修改prometheus配置文件
- 修改prometheus安装目录volume目录下,修改prometheus.yml ,如果上面没有配置27001~27004端口,则下面的配置中也不需要配置对应的job
- 示例如下: - job_name: 'hadoop-node-cluster' (可以自定义名称,下面的job_name都一样 可以自定义名称,这个名称会在prometheus控制台中显示)
static_configs:
- targets: ['10.32.123.20:9100','10.32.123.21:9100','10.32.123.22:9100'] (2.2中配置的地址信息)
- job_name: 'hadoop-namenode'
static_configs:
- targets: ['10.32.123.20:27001','10.32.123.21:27001'] (2.6中27001监听中的地址)
- job_name: 'hadoop-datanode'
static_configs:
- targets: ['10.32.123.20:27002','10.32.123.21:27002','10.32.123.22:27002'] (2.6中27002监听中的地址)
- job_name: 'hadoop-resourcemanager'
static_configs:
- targets: ['10.32.123.20:27003'] (2.6中27003监听中的地址)
- job_name: 'hadoop-nodemanager'
static_configs:
- targets: ['10.32.123.20:27004','10.32.123.21:27004','10.32.123.22:27004'] (2.6中27004监听中的地址) - 启动proemtheus:sh start.sh
- 在服务器上查看Prometheus页面,访问http://ip:port/targets,端口默认9090,示例页面如下:
3.部分PromQL示例
Prometheus可以通过执行promQL查询指标信息,可以在页面http://ip:port/graph,或者通过rest api接口http://ip:port/query?query=$PromQL查询
示例语句如下:
功能 | PromQL语句 | 备注 |
获取机器主机信息 | node_uname_info | |
获取主机CPU个数 | count(node_cpu_seconds_total{mode='system'})by(instance) | |
CPU使用率 | 1 - avg(irate(node_cpu_seconds_total{mode="idle"}[%s]))by(instance) | %s代表间隔时间,例如5m |
获取机器内存信息 | sum(node_memory_MemTotal_bytes)by(instance) | |
获取机器可用内存信息 | node_memory_MemAvailable_bytes | |
主机磁盘大小 | sum(node_filesystem_size_bytes{fstype=~"ext.*|xfs",mountpoint !~".*pod.*"}-0)by(instance) | |
主机磁盘可用空间大小 | sum(node_filesystem_avail_bytes {fstype=~"ext.*|xfs",mountpoint !~".*pod.*"}-0)by(instance) |
更多语句大家可以自己去了解!