eagle介绍

本文包括eagle的编译安装以及使用介绍

介绍

eagle是一款开源的hadoop任务监控框架,通过收集hadoop提供的rest接口数据和日志数据来提供界面展示和一些基础分析。比如namenode的jmx接口,resource manager的rest接口,MapReduce history done文件。

安装

  • 下载eagle源码,下面以0.5.0版本为例
    https://github.com/apache/eagle
  • 解压编译,首次编译时间很长

    1
    2
    tar -zvf eagle-0.5.0.tar.gz
    mvn clean package -DskipTests
  • 找到编译后的包,解压

    1
    2
    ${eagle_source}/eagle-assembly/target/eagle-0.5.0-bin.tar.gz
    tar -zxvf eagle-0.5.0-bin.tar.gz

eagle使用流程

  • 配置conf/eagle.conf
  • 创建eagle数据库,并执行ealge的mysql DDL脚本,DDL在docs目录下
  • 启动eagle server
  • 在UI上创建demo,以hadoop metrics monitor为样例,详细参考UI流程
  • 增加alert功能,安装alert engine,并启动
  • 配置python脚本来抓取数据
    将脚本重命名,并修改配置,可以参考eagle工程里docs/docs/application.md文档,或者参考https://eagle.apache.org/docs/latest/applications/#jmx-monitoring
    python脚本代码中只会加载config.json配置
    mv hadoop_jmx_config-sample.json config.json
    修改config.json配置,包括namenode地址,kafka地址等
    通过python脚本拉取hadoop的jmx数据,发送到kafka
    python lib/scripts/hadoop_jmx_collector/hadoop_jmx_kafka.py
    python脚本的日志默认路径在
    /tmp/hadoop-jmx-collector.log
  • 通过mysql查看eagle收集到的hadoop metrics
    eagle_storage是在eagle.conf配置的metrcs数据存储数据库

    1
    2
    use eagle_storage;
    select * from eagle_metric;
  • python脚本默认只会执行一段时间,不会一直抓取数据

其他
Eagle采用dropwizard框架作为web服务,web的配置在conf/server.xml,包括日志配置

UI流程

安装需要监控的插件
配置插件
自定义cep进行过滤
配置alert
alert是一个通知插件,比如邮件通知,如果想使用在之前安装插件的时候必须先进行安装
配置完成
一切顺利的话,可以再UI上看到alert信息了

数据链路

1
2
python脚本 -> kafka -> storm cep -> kafka -> eagle-server -> mysql
有些metrics直接在storm中拉取相关数据,不用python脚本,比如MapReduce Running Job

文档没有说明的工具

将hbase协处理器注册到hbase的工具类
org.apache.eagle.storage.hbase.tools.CoprocessorTool

遇到的问题

Eagle启动后找不到mysql表

Eagle元数据存储在mysql表中,需要自动执行eagle的meta表的DDL脚本,eagle把脚本文件放在doc/metadata-ddl.sql

Eagle的storm版本比较老

Eagle0.5.0用的storm版本是0.9.7,也就是backtype包名的版本,在storm1.x之后统一改成了apache的包名。如下图所示bug。
storm版本报错
需要将storm的版本改成集群的版本,这里修改成1.1.0,再把代码中相关的接口适配成1.1.0的接口,直到编译通过。

Storm找不到nimbus问题

更换storm的版本后,需要再conf/eagle.conf中增加storm的配置,否则会提示找不到nimbus。如下图报错
storm版本报错

如下配置所示,需要增加storm.nimbus相关的3个配置,否则storm在调用Nimbus的接口时会报一个Null转Int失败的问题,这是由于版本变化导致配置变化的问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
org.apache.storm.security.auth. ThriftClient.reconnect()

application {
stream {
provider = org.apache.eagle.app.messaging.KafkaStreamProvider
}
storm {
nimbusHost = "10.37.16.163"
nimbusThriftPort = 6627
storm.nimbus.retry.times = 3
storm.nimbus.retry.interval.millis = 10000
storm.nimbus.retry.intervalceiling.millis = 10000
}
}

邮件alert依赖冲突

Altert engine的storm包的email依赖了Velocity框架,而Velocity依赖的log4j是1.x版本的,storm依赖的是2.x版本的,导致冲突。解决方式为alert的publish不使用email,改用store。

总结

eagle整个工程代码量很多,10w+,bug也很多。这里稍微吐槽一下。
首先依赖的版本低,现在主流的storm都上apache的storm了,eagle还停留在backtype版本的storm,导致需要重新改写编译适配集群,包括hbase也一样,依赖0.98也是低的。其次文档少,很多细节都是看日志看代码后才知道还有一些配置没有配或者表没有建。最重要的就是功能弱,基于storm+siddhi做流式CEP的策略可以做到对数据的实时分析,但是所有的分析内容都需要用户自己琢磨,常见的也就是对一些数据阈值的限定报警。唯一自带的是基于yarn的任务分析也只是单纯的把数据展现出来,基本上就是yarn自带的UI功能。这么多代码基本上是为了解耦而解耦,整个工程过于臃肿。其他还有bug多的问题,比如在把metrics数据存储在mysql的场景出现的问题就特别多。
不过eagle好歹也是个apache顶级项目,再观望观望吧。

ulysses wechat
订阅+