RedAlert数据源配置-阿里云开发者社区

开发者社区> 开发与运维> 正文

RedAlert数据源配置

简介: RedAlert(https://github.com/alibaba/RedAlert),以下简称RA)是神马搜索引擎团队打造的一个基于指标的监控服务,承担着神马搜索、推荐、广告等业务中上万个服务进程的异常报警。

概述

RedAlert(https://github.com/alibaba/RedAlert,以下简称RA)是神马搜索引擎团队打造的一个基于指标的监控服务,承担着神马搜索、推荐、广告等业务中上万个服务进程的异常报警。现在有各种开源的监控系统,比如Ganglia,Graphite等,可以收集各个应用的核心指标,然后通过可视化界面展示在web上。RA的开源版本可以从Ganglia,Graphite和Amonitor等系统中读取出收集的系统核心指标,并根据设置的规则报警,针对其他的数据源,RA提供了一系列的API,可以自定义自己的数据源信息,然后集成到RA系统中,从而实现监控报警。本文主要介绍如何从Ganglia或者是其他的系统中提取应用的指标,从而实现在RA中进行报警的功能。

使用Ganglia作为数据源

RA默认是支持Ganglia,Graphite作为数据源的,因此只需要安装完成后,在RA web上配置好即可。

安装Ganglia

安装的步骤可以参考ganglia官方网站(http://ganglia.info/),安装完成后,可以根据自己的需要配置好自己的cluster信息,机器信息,以及自己应用需要汇报的指标都可以汇报到Ganglia的server上。
1.jpg

安装Red Alert和Red Alert Web

具体安装步骤可以参考蔡迥航文档(RA安装与使用)。

在Red Alert Web上配置Ganglia作为数据源

2.jpg
如上图所示,首先在RedAlert web中需要配置四个参数,第一个是Server的地址,我们这里使用的是Ganglia是通过读取rrd文件来获取监控数据的,这里可以随便设置一个值,第二个是别名,配置一个相关的名字。第三个是Fetcher的类型,Ganglia在系统中对应的Fetcher是RRDMetricFetcher,最后一个参数是配置Ganglia rrd文件的根路径,这里配置我们安装好的路径地址{"rrd_root":"/var/lib/ganglia/rrds/"}。需要注意的是,这里使用的是json格式。然后保存就可以增加成功了,然后发布配置就可以将Ganglia作为一项数据源发布到RA Server上了。

增加报警项

3.jpg
在上一个步骤(配置Ganglia作为数据源)完成后,我们在新增策略的页面就可以选择我们的Ganglia的指标了,如上图所示是RA从我们刚刚配置的Ganglia中获取到的Metric树,然后增加策略就可以通过RA进行报警了。

自定义数据源实现

RA是通过以收集Ganglia,Graphite等系统的metrics作为系统的输入从而实现报警功能的。默认是支持了Ganglia,Graphite这些的数据获取的,当我们使用的是系统默认不支持的平台的时候,RA提供了自定义数据源的方式来获取自定义的数据。

在RA中定义了一些通用的Fetcher API来定义这些接口,当用户使用了一个新的数据源系统来获取数据的时候,只需要实现这些API接口就可以实现报警功能。API接口见
https://github.com/alibaba/RedAlert/blob/master/RAServer/ra/fetcher/MetricFetcher.h

用户在实现自己的API之后,需要在Factory中注册自己的函数,参考文件https://github.com/alibaba/RedAlert/blob/master/RAServer/contrib/fetcher/MetricFetcherFactory.cpp

4.jpg

在增加好Fetcher名字之后,就可以在RA web中进行配置相关的信息,具体使用可以参考上面Ganglia的配置使用。

RedAlert获取数据API

Metric Fetcher API

Red Alert 主要的fetcher api如下所示:

typedef std::map<std::string, std::string> OptionMap;

class MetricFetcher {
public:
    virtual bool init(const OptionMap &options) = 0;
    virtual void close() = 0;
    virtual MetricNodePtr allocTree(int64_t start = -1, int64_t end = -1) = 0;
    virtual MetricNodePtr retrieve(const MetricNodePtr &root, int64_t start, int64_t end, int64_t step);
protected:
    virtual bool attachDataNode(const MetricPath& path, int64_t start, int64_t end, int64_t step);
}

下面逐个介绍各个API的具体含义。

MetricFetcher::init()

Red Alert 调用Init函数来进行初始化,通过传人一个string map类型的参数(通过RA web进行输入),进行初始化这个MetricFetcher..

MetricFetcher::close()

Red Alert 调用 close()函数来关闭这个MetricFetcher。在MetricFetcher中应该在该函数中释放自己申请的资源。

MetricFetcher::allocTree(start, end)

一般通过监控系统收集的Metric 数据都是有层次的,在Red Alert 中组织这些Metric数据是通过一个树形的结构,也称作Metric树。allocTree(start, end) 返回的结果是这个Metric树的根节点,start, end 是收集的时间间隔,这一段时间中生成的所有的Metric,以树形的方式组织起来。然后,Red Alert 可以通过retrieve() 函数来获取到整棵树上面的节点的数据。如下图所示,是一颗在我们系统中的Metric树。
metric-tree.png

MetricFetcher::retrieve()

MetricFetcher::retrieve(root, start, end, step) 返回的是带有数据的一颗树,如下图所示,上面的每一个节点都是MetricData 的一个实例,上面都带有时间段的数据 [start, start + step, start + 2 * step, ..., end]。该函数有一个默认的实现是通过遍历树调用attachDataNode函数的方式来实现,用户可以只实现retrieve函数,或者只实现attachDataNode函数。
metric-data.png

MetricFetcher::attachDataNode()

默认的retrieve() 是通过调用attachDataNode的方式来获取整棵树的节点数据。在大多数的场景下,我们只需要实现attachDataNode(const MetricPath& path, int64_t start, int64_t end, int64_t step)就可以了。 attachDataNode的第一个参数是Metric的路径,如上图中所示,MetricPath一个路径对应于(Root/Main Index/Worker/Searcher/CPU/DataNode@host1),通过在这个路径所对应的MetricNode 上附加DataMetric的信息,即完成了这个Metric上面数据的附加。RA会遍历整棵树来获取所有的Metric Data。

相关链接:

版权声明:如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:developerteam@list.alibaba-inc.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章