自动化运维、大数据、Docker

Hadoop集群监控


Prometheus

什么是Prometheus

  • Prometheus是一个最初在SoundCloud上构建的开源系统监视和警报工具包 。自2012年成立以来,许多公司和组织都采用了Prometheus,该项目拥有一个非常活跃的开发人员和用户社区。它现在是一个独立的开源项目,可以独立于任何公司进行维护。为了强调这一点,并澄清项目的治理结构,Prometheus 于2016年加入 云计算本地计算基金会,作为继Kubernetes之后的第二个托管项目。

Prometheus框架

Prometheus框架

Prometheus组件

Prometheus生态系统由多个组件组成,其中许多组件是可选的:

  • Prometheus server: 用于存储时间序列数据
  • Push gateway: 用于支持短期工作的推送网关
  • Exporters: HAProxy,StatsD,Graphite等服务的采集器
  • Alertmanger: 告警处理器
  • 各种支持工具

Prometheus server:监控数据存储服务端

  • Prometheus Server是Prometheus组件中的核心部分,负责实现对监控数据的获取,存储以及查询。 Prometheus Server可以通过静态配置管理监控目标,也可以配合使用Service Discovery的方式动态管理监控目标,并从这些监控目标中获取数据。其次Prometheus Server需要对采集到的监控数据进行存储,Prometheus Server本身就是一个时序数据库,将采集到的监控数据按照时间序列的方式存储在本地磁盘当中。最后Prometheus Server对外提供了自定义的PromQL语言,实现对数据的查询以及分析。
  • Prometheus Server内置的Express Browser UI,通过这个UI可以直接通过PromQL实现数据的查询以及可视化。
    = Prometheus Server的联邦集群能力可以使其从其他的Prometheus Server实例中获取数据,因此在大规模监控的情况下,可以通过联邦集群以及功能分区的方式对Prometheus Server进行扩展。

Exporter: 监控数据采集客户端

  • Exporter将监控数据采集的端点通过HTTP服务的形式暴露给Prometheus Server,Prometheus Server通过访问该Exporter提供的Endpoint端点,即可获取到需要采集的监控数据。
  • Prometheus社区提供了丰富的Exporter实现,涵盖了从基础设施,中间件以及网络等各个方面的监控功能。这些Exporter可以实现大部分通用的监控需求。下表列举一些社区中常用的Exporter:
范围 常用Exporter
数据库 MySQL Exporter, Redis Exporter, MongoDB Exporter, MSSQL Exporter等
硬件 Apcupsd Exporter,IoT Edison Exporter, IPMI Exporter, Node Exporter等
消息队列 Beanstalkd Exporter, Kafka Exporter, NSQ Exporter, RabbitMQ Exporter等
存储 Ceph Exporter, Gluster Exporter, HDFS Exporter, ScaleIO Exporter等
HTTP服务 Apache Exporter, HAProxy Exporter, Nginx Exporter等
API服务 AWS ECS Exporter, Docker Cloud Exporter, Docker Hub Exporter, GitHub Exporter
日志 Fluentd Exporter, Grok Exporter等
监控系统 Collectd Exporter, Graphite Exporter, InfluxDB Exporter, Nagios Exporter, SNMP Exporter
容器监控 cAdvisor
其它 Blockbox Exporter, JIRA Exporter, Jenkins Exporter, Confluence Exporter等

更多Exporter请查看官网介绍

Alertmanager: 告警处理组件

  • 在Prometheus Server中支持基于PromQL创建告警规则,如果满足PromQL定义的规则,则会产生一条告警,而告警的后续处理流程则由AlertManager进行管理。在AlertManager中我们可以与邮件,Slack等等内置的通知方式进行集成,也可以通过Webhook自定义告警处理方式。AlertManager即Prometheus体系中的告警处理中心

PushGateway

  • 由于Prometheus数据采集基于Pull模型进行设计,因此在网络环境的配置上必须要让Prometheus Server能够直接与Exporter进行通信。 当这种网络需求无法直接满足时,就可以利用PushGateway来进行中转。可以通过PushGateway将内部网络的监控数据主动Push到Gateway当中。而Prometheus Server则可以采用同样Pull的方式从PushGateway中获取到监控数据。

JMX exporter+Prometheus+Grafana监控Hadoop集群

部署jmx_exporter

# mkdir -p ${HADOOP_HOME}/jmx_exporter/
# cd ${HADOOP_HOME}/jmx_exporter/
wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.3.1/jmx_prometheus_javaagent-0.3.1.jar

创建配置文件namenode.yaml、datanode.yaml


# cat ${HADOOP_HOME}/jmx_exporter/namenode.yaml --- startDelaySeconds: 0 hostPort: master:10010 ##jmx端口 ssl: false lowercaseOutputName: false lowercaseOutputLabelNames: false # cat ${HADOOP_HOME}/jmx_exporter/datanode.yaml --- startDelaySeconds: 0 hostPort: master:10011 ##jmx端口 ssl: false lowercaseOutputName: false lowercaseOutputLabelNames: false

修改$HADOOP_HOME/etc/hadoop/hadoop-env.sh

  • NameNode节点添加:
export HADOOP_NAMENODE_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=10010 $HADOOP_NAMENODE_OPTS "

  • DataNode节点添加:
export HADOOP_DATANODE_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=10011 $HADOOP_DATANODE_OPTS "

修改$HADOOP_HOME/bin/hdfs


export HADOOP_NAMENODE_OPTS="$HADOOP_NAMENODE_OPTS -javaagent:${HADOOP_HOME}/lib/jmx_prometheus_javaagent-0.3.1.jar=9200:${HADOOP_HOME}/jmx_exporter/namenode.yaml" export HADOOP_DATANODE_OPTS="$HADOOP_DATANODE_OPTS -javaagent:${HADOOP_HOME}/lib/jmx_prometheus_javaagent-0.3.1.jar=9300:${HADOOP_HOME}/jmx_exporter/datanode.yaml"
  • 9200(9300)为jmx_exporter提供metrics数据端口

重启namenode和datanode

# namenode
$HADOOP_HOME/sbin/hadoop-daemon.sh stop namenode
$HADOOP_HOME/sbin/hadoop-daemon.sh start namenode

# datanode
$HADOOP_HOME/sbin/hadoop-daemon.sh stop datanode
$HADOOP_HOME/sbin/hadoop-daemon.sh start datanode

查看启动端口

# netstat -ntlp|grep -E '9300|10011|10010|9200'
tcp        0      0 0.0.0.0:9200            0.0.0.0:*               LISTEN      21438/java
tcp        0      0 0.0.0.0:9300            0.0.0.0:*               LISTEN      21597/java
tcp        0      0 0.0.0.0:10010           0.0.0.0:*               LISTEN      21438/java
tcp        0      0 0.0.0.0:10011           0.0.0.0:*               LISTEN      21597/java

编辑Prometheus配置

# cat /root/prometheus.yml |grep -Ev '#|^$'
global:
alerting:
  alertmanagers:
  - static_configs:
    - targets:
rule_files:
scrape_configs:
  - job_name: 'namenode'
    static_configs:
      - targets: ['192.168.99.219:9200']

  - job_name: 'datanode'
    static_configs:
      - targets: ['192.168.99.219:9300']

  • 更多配置参数请查看官网

Docker部署Prometheus

# docker run -d -p 9090:9090 --name=prometheus -v /root/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus 

Docker部署Grafana

# docker run -d -p 3000:3000 --name=grafana grafana/grafana

  • 访问Grafanahttp://ip:3000/,默认账户密码: admin/admin

配置数据源


data_source

监控Kafka

hostPort: master:9999 # 这里9999为设置的jmx端口
lowercaseOutputName: true
whitelistObjectNames:
  - "kafka.controller:type=KafkaController,name=OfflinePartitionsCount"
  - "kafka.controller:type=KafkaController,name=ActiveControllerCount"

修改kafka-server-start.sh

export JMX_PORT="9999"
export KAFKA_OPTS="-javaagent:/opt/kafka/jmx_prometheus_javaagent-0.3.1.jar=9990:/opt/kafka/kafka-agent.yaml"

修改prometheus.yml

  - job_name: 'kafka'
    static_configs:
      - targets: ['192.168.99.219:9990']

未完持续更新……

参考资料

基于InfluxDB+Grafana打造大数据监控利器

influxdb

hbase jmx常用监控指标
引导图

赞(0) 打赏
蜷缩的蜗牛 , 版权所有丨如未注明 , 均为原创丨 转载请注明蜷缩的蜗牛 » Hadoop集群监控
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏