部署简介
通过jmx_exporter对大数据各个组件进行参数监控,通过node_exporter对服务器基础进行参数监控,使用prometheus进行数据存贮,通过grafana进行界面展示
安装包下载准备
jmx获取方式:https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/
prometheus相关包获取:https://prometheus.io/download/
grafana获取:https://grafana.com/grafana/download
安装prometheus_server
下载好的包直接解压但目录即可
修改配置文件prometheus.yml
前面部分基本没改动,沿用默认配置。
参数 | 作用 |
---|---|
scrape_interval | 默认抓取间隔, 15秒向目标抓取一次数据 |
scrape_configs | 这个配置是表示在这个配置内的时间序例,每一条都会自动添加上这个{job_name:“prometheus”}的标签 - job_name: ‘prometheus’ |
job_name | 监控名称,相当于分组组名之类 (可手动自定义添加) |
static_configs | 配置静态获取地址,与targets配合使用 |
file_sd_configs | 引用外部获取地址,与files配合使用 |
files | 外部获取地址文件指定,外部IP地址需要以json格式。 此方法优点适合大集群规模,可以根据hosts文件,批量生成json文件。可以直接添加IP地址,不用修改主配置,不用重启prometheus |
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
- job_name: 'linux_server' #自定义名称,用于监控linux基础服务
file_sd_configs:
- files:
- configs/linux.json #linux机器IP地址json文件
- job_name: 'hdfs' #用于监控HDFS组件
file_sd_configs:
- files:
- configs/hdfs.json #hdfs参数获取地址
- job_name: 'hbase' #用于监控Hbase组件
file_sd_configs:
- files:
- configs/hbase.json #hbase参数获取地址
- job_name: 'yarn' #用于监控Yarn组件
file_sd_configs:
- files:
- configs/yarn.json #yarn参数获取地址
- job_name: 'zookeeper' #用于监控zk组件
file_sd_configs:
- files:
- configs/zookeeper.json #zk参数获取地址
- job_name: 'hive'
file_sd_configs:
- files:
- configs/hive.json
- job_name: 'kafka'
file_sd_configs:
- files:
- configs/kafka.json
- job_name: 'spark'
file_sd_configs:
- files:
- configs/spark.json
创建configs目录,在目录下创建json文件
文件格式
[
{
"targets": ["ip:端口","ip:端口","ip:端口"]
}
]
启动prometheus
nohup ./prometheus --config.file=prometheus.yml &
访问IP:9090
安装Grafana
下载完后直接安装,启动。访问IP:3000 ,配置数据源。
grafana自带很多插件,以下为各个插件具体作用。
参考 https://www.azurew.com/8143.html
自带插件可能有限,可以去官网下载更多插件。另外官网有很多模板,可以自己选择导入
https://grafana.com/grafana/dashboards
安装配置jmx插件
jmx 方式是直接在hadoop插件中启用一个http端口,并抽取组件的相关参数。
首先需要将hadoop集群部署成功。我们此处已将通过ansible一键部署成功阿帕奇版本的大数据集群。
参考 https://blog.csdn.net/c275090933/article/details/82108014
Hdfs配置
每个组件都需要一个yaml后缀文件,只需修改端口配置即可(端口可随意指定),并不用来http访问,保证每个组件的yaml文件中端口不重复即可。
先写一个namenode.yaml配置文件,如下
---
startDelaySeconds: 0
hostPort: localhost:1234 #master为本机IP(一般可设置为localhost);1234为想设置的jmx端口
#jmxUrl: service:jmx:rmi:///jndi/rmi://127.0.0.1:1234/jmxrmi
ssl: false
lowercaseOutputName: false
lowercaseOutputLabelNames: false
再写一个datanode.yaml配置
---
startDelaySeconds: 0
hostPort: localhost:1244 #master为本机IP(一般可设置为localhost);1244为想设置的jmx端口(可设置为未被占用的端口)
#jmxUrl: service:jmx:rmi:///jndi/rmi://127.0.0.1:1234/jmxrmi
ssl: false
lowercaseOutputName: false
lowercaseOutputLabelNames: false
在hadoop环境变量添加jmx环境变量配置,vim hadoop/etc/hadoop/hadoop-env.sh中
指定http端口9211和9212,指定yaml配置文件位置,指定jmx_agent 包位置
export HADOOP_NAMENODE_JMX_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=1234 -javaagent:/jmx_prometheus_javaagent-0.8.jar=9211:/namenode.yaml"
export HADOOP_DATANODE_JMX_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=1244 -javaagent:/jmx_prometheus_javaagent-0.8.jar=9212:/datanode.yaml"
在haddoop/bin/下,修改hdfs配置文件
134 if [ "$COMMAND" = "namenode" ] ; then
135 CLASS='org.apache.hadoop.hdfs.server.namenode.NameNode'
136 HADOOP_OPTS="$HADOOP_OPTS $HADOOP_NAMENODE_OPTS $HADOOP_NAMENODE_JMX_OPTS" #添加namenode JMX环境变量
137 elif [ "$COMMAND" = "zkfc" ] ; then
138 CLASS='org.apache.hadoop.hdfs.tools.DFSZKFailoverController'
139 HADOOP_OPTS="$HADOOP_OPTS $HADOOP_ZKFC_OPTS $HADOOP_ZKFC_JMX_OPTS"
140 elif [ "$COMMAND" = "secondarynamenode" ] ; then
141 CLASS='org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode'
142 HADOOP_OPTS="$HADOOP_OPTS $HADOOP_SECONDARYNAMENODE_OPTS"
143 elif [ "$COMMAND" = "datanode" ] ; then
144 CLASS='org.apache.hadoop.hdfs.server.datanode.DataNode'
145 HADOOP_OPTS="$HADOOP_OPTS $HADOOP_DATANODE_JMX_OPTS" #添加datanode jmx变量
修改完重启hdfs,就可以查看到之前设置的http端口了。
Hbase配置
写一个master.yaml配置文件
---
startDelaySeconds: 0
hostPort: IP:1254 #master为本机IP(一般可设置为localhost);1234为想设置的jmx端口(可设
#jmxUrl: service:jmx:rmi:///jndi/rmi://127.0.0.1:1234/jmxrmi
ssl: false
lowercaseOutputName: false
lowercaseOutputLabelNames: false
regionserver.yaml配置文件
---
startDelaySeconds: 0
hostPort: IP:1255 #master为本机IP(一般可设置为localhost);1234为想设置的jmx端口
#jmxUrl: service:jmx:rmi:///jndi/rmi://127.0.0.1:1234/jmxrmi
ssl: false
lowercaseOutputName: false
lowercaseOutputLabelNames: false
试着在hbase/conf/hbase-env.sh中添加环境变量,但是好像没生效,只能在启动文件中修改配置
在bin/hbase中修改
289 HBASE_M_JMX_OPTS="-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmx remote.port=1254 -javaagent:/jmx_prometheus_javaagent-0.8.jar=9523:/hbasem.yaml"
290 #======================================= prometheus jmx export start===================================
291 HBASE_JMX_OPTS="-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxre mote.port=1255 -javaagent:/jmx_prometheus_javaagent-0.8.jar=9522:/hbase.yaml"
292 #======================================= prometheus jmx export end ===================================
323 CLASS='org.apache.hadoop.hbase.master.HMaster'
324 if [ "$1" != "stop" ] && [ "$1" != "clear" ] ; then
325 HBASE_OPTS="$HBASE_OPTS $HBASE_M_JMX_OPTS $HBASE_MASTER_OPTS"
326 fi
327 elif [ "$COMMAND" = "regionserver" ] ; then
328 CLASS='org.apache.hadoop.hbase.regionserver.HRegionServer'
329 if [ "$1" != "stop" ] ; then
330 HBASE_OPTS="$HBASE_OPTS $HBASE_JMX_OPTS $HBASE_REGIONSERVER_OPTS"
重启hbase,查看端口。
yarn
写yarn.yaml 配置文件
---
startDelaySeconds: 0
hostPort: localhost:2111 #master为本机IP(一般可设置为localhost);1234为想设置的jmx端口
#jmxUrl: service:jmx:rmi:///jndi/rmi://127.0.0.1:1234/jmxrmi
ssl: false
lowercaseOutputName: false
lowercaseOutputLabelNames: false
添加环境变量
export YARN_JMX_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=2111 -javaagent:/jmx_prometheus_javaagent-0.8.jar=9323:/yarn.yaml"
修改启动配置
237 CLASS='org.apache.hadoop.yarn.server.resourcemanager.ResourceManager'
238 YARN_OPTS="$YARN_OPTS $YARN_JMX_OPTS $YARN_RESOURCEMANAGER_OPTS"
267 CLASS='org.apache.hadoop.yarn.server.nodemanager.NodeManager'
268 YARN_OPTS="$YARN_OPTS $YARN_JMX_OPTS -server $YARN_NODEMANAGER_OPTS"
重启查看端口
剩下的组件就不在写了。基本差不多,有些是有现成的包,直接安装即可。
最后就是Grafana作图了,根据Hadoop各个组件参数,制作图形即可。我们是根据自己的需求筛选各个参数,然后利用Grafana的插件自己作图拼接的,如下图。
后来经过使用发现Grafana的导航栏,也就是上图最左侧的那个组件,是通过收藏每个图形实现的,每次更换机器部署后需要重新收藏,而且无法实现收缩栏功能。基于这种问题,于是我们进行改动,最终实现如下图这样的一版。
这样我们通过改动实现了左侧导航栏的固定,通过前端分析判断url地址,只要是监控模板页面左侧导航栏都会展示出来。另外在左侧导航栏中部有个点击箭头,可以将Grafana原有的功能栏拉出来,达到了我们的需求
再给大家提供几张自己做的图形参考
资源下载链接
https://download.csdn.net/download/YYC1503/18930079