部署简介

通过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文件

多个prometheus汇总到一个prometheus里 prometheus数据_json


多个prometheus汇总到一个prometheus里 prometheus数据_json_02


文件格式

[
 {
  "targets": ["ip:端口","ip:端口","ip:端口"]
 }
]
启动prometheus
nohup ./prometheus --config.file=prometheus.yml &
访问IP:9090

多个prometheus汇总到一个prometheus里 prometheus数据_hadoop_03

安装Grafana

下载完后直接安装,启动。访问IP:3000 ,配置数据源。
grafana自带很多插件,以下为各个插件具体作用。
参考 https://www.azurew.com/8143.html
自带插件可能有限,可以去官网下载更多插件。另外官网有很多模板,可以自己选择导入
https://grafana.com/grafana/dashboards多个prometheus汇总到一个prometheus里 prometheus数据_hadoop_04

安装配置jmx插件

jmx 方式是直接在hadoop插件中启用一个http端口,并抽取组件的相关参数。
首先需要将hadoop集群部署成功。我们此处已将通过ansible一键部署成功阿帕奇版本的大数据集群。
参考

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的插件自己作图拼接的,如下图。

多个prometheus汇总到一个prometheus里 prometheus数据_hadoop_05

后来经过使用发现Grafana的导航栏,也就是上图最左侧的那个组件,是通过收藏每个图形实现的,每次更换机器部署后需要重新收藏,而且无法实现收缩栏功能。基于这种问题,于是我们进行改动,最终实现如下图这样的一版。

多个prometheus汇总到一个prometheus里 prometheus数据_json_06

这样我们通过改动实现了左侧导航栏的固定,通过前端分析判断url地址,只要是监控模板页面左侧导航栏都会展示出来。另外在左侧导航栏中部有个点击箭头,可以将Grafana原有的功能栏拉出来,达到了我们的需求

再给大家提供几张自己做的图形参考

多个prometheus汇总到一个prometheus里 prometheus数据_json_07


多个prometheus汇总到一个prometheus里 prometheus数据_IP_08


多个prometheus汇总到一个prometheus里 prometheus数据_IP_08


多个prometheus汇总到一个prometheus里 prometheus数据_IP_10


多个prometheus汇总到一个prometheus里 prometheus数据_IP_11

资源下载链接