RedAlert简介

简介: RA简介 RedAlert(一下简称RA)是神马搜索引擎团队打造的一个基于指标的监控服务,它从类似ganglia或graphite这样的数据源获取指标,并在指标异常的时候通过邮件发送告警 RA服务由两部分组成 RAServer: 执行指标检测,发送告警的服务主体 RAWeb: 本服务提供的web管理端,用于管理配置,更新配置 涉及到告警,必然伴随到告警的策略,即什么条件下触发告警

RA简介

RedAlert(一下简称RA)是神马搜索引擎团队打造的一个基于指标的监控服务,它从类似ganglia或graphite这样的数据源获取指标,并在指标异常的时候通过邮件发送告警

RA服务由两部分组成

  1. RAServer: 执行指标检测,发送告警的服务主体
  2. RAWeb: 本服务提供的web管理端,用于管理配置,更新配置

涉及到告警,必然伴随到告警的策略,即什么条件下触发告警,RA服务提供了五种常用的策略:

  1. 阈值:当前值小于等于下限或大于等于上限时产生告警
  2. 趋势:当前值与预测值差异过大时产生告警,即出现突增或突降
  3. 可用性:metric的机器数少于阈值时产生告警
  4. 奇异点:metric的机器中,某一机器的值与整体均值差异较大时产生告警
  5. 环比:当前值与历史同期值(比如前一天当前时刻)差异过大时产生告警

安装

下面我们以常见的ubuntu作为实验环境,来看看如何从源码安装RA。

编译前的准备

RA源码使用scons编译

Sudo apt-get install scons

RA运行时依赖一些第三方库

sudo apt-get install librrd-dev libssl-dev libldap-dev libidn11-dev libglib2.0-dev libsqlite3-dev libcppunit-dev

某些依赖的模块源码在RAServer/deps目录下,也需要预先编译

Cd RAServer/deps

Sh ./compileDepdend.sh

该脚本编译出的文件会被安装在RAServer/_external目录下

好了,万事俱备只欠东风,下面我们来编译RAServer

Git clone git@github.com:alibaba/RedAlert.git

Scons –j 8

如果编译成功,scons最后应该输出scons: done building targets.

如果想运行一下RA的单元测试,可以执行scons –j 8 test

最后,我们为部署单独准备了一个tar.gz的压缩包,它里面包含了RA依赖的所有文件,可以通过scons –j 8 package得到,压缩包在RAServer/build/release/packages/red_alert.tar.gz

启动

启动Web服务

RAWeb位于上节clone下来的项目中RAWeb目录下,启动Web服务有三种方法:

  1. 本地调试模式
  2. apache
  3. uwsgi

下面我们以本地调试模式为例子,介绍一下启动Web服务所涉及到的配置文件

conf/red_alert_web.conf

[DEFAULT]   

projectRoot = /var/www/html/red_alert_web   

workspace = /var/www/html/red_alert_web   

 

[PathConfig]  

RedAlertWebWorkRoot = %(workspace)s/work  

RedAlertWebConfDir = %(RedAlertWebWorkRoot)s/current  

RedAlertWebTablePath = %(RedAlertWebConfDir)s/sqlite  

RedAlertWebAuxPath = %(RedAlertWebWorkRoot)s/raweb.aux.db  

RedAlertWebJsonPath = %(RedAlertWebWorkRoot)s/raweb.json  

RedAlertWebVersionDir = %(RedAlertWebWorkRoot)s/tmp  

 

[Parameter]  

runPort = 5011

MaxRaBackEnd = 3  

RedAlertStoragePath = file://var/www/html/foo  

 

[fsLib]  

fsUtil = %(projectRoot)s/fs_lib/bin/fs_util

 

projectRoot即RAWeb代码所在的目录, workspace是指RAWeb服务运行的目录,注意如果使用apache启动RAWeb的话,需要保证apache用户对workspace目录有读写权限.

RedAlertWebWorkRoot是RAWeb的工作目录

RedAlertWebConfDir是RAWeb保存sqlite的目录

RedAlertWebTablePath是sqlite的绝对路径,它包含了如下几张表,将会在RAServer中使用到:

  1. Policy
  2. RedAlert
  3. DataSource
  4. Pairs
  5. Shield

RedAlertWebAuxPath是数据库文件的绝对路径

RedAlertWebJsonPath是raweb.json配置文件的绝对路径,该文件是RAWeb内部使用的配置,用于校验用户输入

RedAlertWebVersionDir用于记录每次告警策略的发布

runPort仅在本地调试时有用,是RAWeb的服务端口

MaxRaBackEnd表示该web服务支持多少个RAServer

RedAlertStoragePath是RAWeb发布告警策略的存储路径,目前仅支持本地磁盘,用户也可以扩展其他的分布式文件系统,比如hdfs

 

static/ra_conf.js

var ra_conf = {    

    "api_url": "http://localhost:5011",  

    "current_url": "http://0.0.0.0:5011/index.html",  

    "buc_sso_url": "",  

    "api_timeout": 3000,  

    "admin_timeout": 10000,  

    "disable_account": true

};

这里仅需修改api_url为你实际的web部署ip和端口

启动Web服务

运行python raweb/main.py成功后,就可以从浏览器访问http://127.0.0.1:5011/index.html来访问RAweb

启动RA服务

上节最后我们得到了一个RA服务的tar.gz压缩包,现在我们准备部署RA服务,比如我们打算将RA安装在/home/admin/ra/目录下:

mkdir /home/admin/ra/

tar xzf RAServer/build/release/packages/red_alert.tar.gz –C /home/admin/ra

解压后,安装目录结构大概如下图所示:

 

usr/local/bin目录下有一个red_alert.sh的脚本,我们就用它来启动RA服务,不过在启动之前,我们先要准备一下RA服务的配置,完整的配置如下

{

"aliMonitorUrl":"", // 内部使用,开源版本无需关心

"alarmThreadNum": 1, //发送告警的线程数

"checkerThreadNum":2, // 检查指标的线程数

"fetcherThreadNum":2, // 从数据源拉取指标的线程数

"alarmQueueSize": 1024, // 告警线程的队列大小

"checkerQueueSize": 1024, // 检查线程的队列大小

"fetcherQueueSize": 1024, // 拉取源数据线程的队列大小

"retrieveMetricsPointCount": 5, // 每次拉取几个点的源数据

"maxRandomLastRetriveTimeValueSec": 60, //每次拉取数据的最大(随机)间隔,单位秒

"reloadTreeIntervalSec": 60, // 隔多少秒从数据源获取一次指标结构

"mailUser": "", // 发送告警的邮件用户

"mailPassword": "", // 发送告警的邮件密码

"mailServerUrl": "", // 发送告警的邮件服务器,比如smtps://smtp.example.com

"heartbeatHost": "", // RA web的服务器地址

"heartbeatPort": "" // RA web端口

}

 

一般情况下,我们只需要修改mailUser, mailPassword, mailServerUrl, heartbeatHost, heartbeatPort即可。准备好配置文件后,用上文介绍的脚本red_alert.sh启动服务:

red_alert.sh –p 8000 –c ra.json

 

使用RAWeb配置告警

访问Web服务后,按下图点击新增策略按钮

按下图配置一个阈值告警(cpu_user超过40,或者低于5发送告警给foo@bar.com)

保存完毕后,进入控制台页面,这里我们可以看到后端RAServer运行的情况.点击发布配置可以将刚才保存的策略发布到RAServer上去. 如果发生误操作,还可以点击撤销修改或者回滚配置

当某台cpu_user出问题的时候,就可以收到告警邮件啦!

策略配置详解

  • 策略组:策略所属的组,方便对多个策略分组统一操作,比如对策略组整体或者部分进行屏蔽
  • 触发类型:触发告警的方式,目前支持:阈值,趋势、周期、可用性、奇异点五中类型
  • 采集间隔:数据拉取的间隔(单位秒),间隔越小告警越及时,同时也越容易受偶发波动影响导致误报
  • 指标名:要监控的指标名称,必须和数据源上的指标名字匹配
  • 检查类型:目前支持“单个”,“组合”,“机器组合”三种,其中“机器组合”是此版本新增类型。
    • 单个”:对该策略配匹配到的所有metric的每个host值,单独检查,只要有一台host有异常,即触发告警
    • 组合”:对该策略配匹配到的所有metric的所有host值的总和值,进行检查,若总和值有异常,即触发告警
    • 机器组合”对该策略配匹配到的每个metric下的所有host进行求和,对每个metric的求和值进行检查,若某metric的总和值有异常,即触发告警
  • 告警方式:开源版本仅支持curlmail的告警方式
  • 告警接收组:告警方式是curlmail,这里填接收者的邮箱地址
  • 生效时间:该配置项是此版本新增配置,表示该策略的生效时间,默认为当前时间,即立即生效。
  • 最短告警间隔:该策略两次告警之间的最短间隔,这个值必须大于采集间隔,否则无意义
  • 有效时间段:在当天有效时间段,在有效时间之外将不产生告警,不配置表示有效期为全天。比如上图配置,该配置仅在每天的上午九点到晚上七点生效
  • 过滤项:该配置项是此版本新增配置,表示该策略配匹配到的所有metric的所有host中要过滤掉的host或者 metric,分别填写要过滤的metric和host即可,两者都支持通配符,后者还支持逗号分割。对于过滤掉的host不会进行检查,也不参与组合值 的计算。此配置支持通配符

 

阈值(Threshold)

阈值告警一般需要配置如下字段

  1. upBound, 上限
  2. downBound,下限

当前值小于等于下限或大于等于上限时告警

 

趋势(Trend)

趋势告警一般需要配置如下字段

  1. maxDiffRatio,当前值和预测值差异比例阈值。可以直观理解为指标突增/突降maxDiffRatio时告警。如果期望差异比例在20%以下,则配置为2
  2. minDiffValue, 当前值和预测值差异绝对值阈值。仅当差异比例大于等于maxDiffRatio,且差异绝对值大于等于minDiffValue时才会产生告警

 

引入minDiffValue的目的是防止上报值很小时,细微的波动都会导致差异比例超过阈值而产生告警,因此这里需要一个绝对值来约束。比如一台空闲机器的cpu平时在1~5之间波动,细微的波动都会导致100%以上的差异比例

 

可用性(Availability):

可用性告警一般需要配置如下字段

  1. minHostNum, 上报metric的最小机器数

当上报metric的机器数小于minHostNum时告警;

 

奇异点(singularity)

奇异点告警一般需要配置如下字段

  1. maxDiffRatio,当前值和平均值差异比例阈值。可以直观理解为某台机器的当前值和均值差异比例超过maxDiffRatio时告警。如果期望所有机器当前值和均值差异在10%以下,则配置为1
  2. minDiffValue,当前值和平均值差异绝对值阈值。仅当差异比例大于等于maxDiffRatio,且差异绝对值大于等于minDiffValue时才会产生告警

上文中的平均值是同一metric下所有机器的当前值求和除机器数所得

 

环比(Cycle):

  1. maxDiffRatio,当前值和历史值差异比例阈值。可以直观理解为当前值和历史同期值比例超过maxDiffRatio时告警。如果期望每周期的变化差异在05%以下,则配置为0.05
  2. minDiffValue,当前值和平均值差异绝对值阈值。仅当差异比例大于等于maxDiffRatio,且差异绝对值大于等于minDiffValue时才会产生告警
相关文章
|
1月前
|
Unix 编译器 C语言
c++简介
c++简介
23 0
|
XML 安全 网络协议
netconf简介
netconf简要
|
并行计算 API 调度
TOPI 简介
TOPI 简介
113 0
|
存储 编解码
H264简介
H.264 原始码流(又称为裸流),是有一个接一个的 NALU 组成的,而它的功能分为两层:视频编码层(VCL, Video Coding Layer)和网络提取层(NAL, Network Abstraction Layer),其中,前者负责有效表示视频数据的内容,而后者则负责格式化数据并提供头信息,以保证数据适合各种信道和存储介质上的传输。
H264简介
|
运维 Kubernetes Ubuntu
Kebernetes简介
Kebernetes简介
180 0
|
Java 测试技术 开发工具
AssertJ简介
JUnit和Hamcrest 学Java的一定知道JUnit吧,它是一个著名的Java单元测试框架。我们在使用JUnit测试的时候,一般情况下会使用它的Assert类下的各种assertXXX方法。
1574 0
|
JavaScript 前端开发 C++
cheerp 简介
这个文章主要介绍了为什么要用cheerp技术以及和其他对标的技术对比,他的闪光点在哪里。 WebAssembly 是一种中间码用于加速浏览器端应用,目前有多种语言可以编译或者交叉到这种格式。当然这个不是本文的内容,详细了解请移步 wasm官网 目前支持: cc++是官方推荐的方式,详细使用见文档;其他语言 AssemblyScript:语法和 TypeScript 一致,对前端来说学习成本低,为前端编写 WebAssembly 最佳选择; Rust:语法复杂、学习成本高,对前端来说可能会不适应。
2652 0
hcatalog简介和使用
转自:http://blog.csdn.net/lalaguozhe/article/details/9083905 转自:https://yq.aliyun.com/articles/37442
953 0
|
C# 编译器 存储