RedAlert简介
RA简介
RedAlert(一下简称RA)是神马搜索引擎团队打造的一个基于指标的监控服务,它从类似ganglia或graphite这样的数据源获取指标,并在指标异常的时候通过邮件发送告警
RA服务由两部分组成
- RAServer: 执行指标检测,发送告警的服务主体
- RAWeb: 本服务提供的web管理端,用于管理配置,更新配置
涉及到告警,必然伴随到告警的策略,即什么条件下触发告警,RA服务提供了五种常用的策略:
- 阈值:当前值小于等于下限或大于等于上限时产生告警
- 趋势:当前值与预测值差异过大时产生告警,即出现突增或突降
- 可用性:metric的机器数少于阈值时产生告警
- 奇异点:metric的机器中,某一机器的值与整体均值差异较大时产生告警
- 环比:当前值与历史同期值(比如前一天当前时刻)差异过大时产生告警
安装
下面我们以常见的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服务有三种方法:
- 本地调试模式
- apache
- 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中使用到:
- Policy
- RedAlert
- DataSource
- Pairs
- 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)
阈值告警一般需要配置如下字段
- upBound, 上限
- downBound,下限
当前值小于等于下限或大于等于上限时告警
趋势(Trend)
趋势告警一般需要配置如下字段
- maxDiffRatio,当前值和预测值差异比例阈值。可以直观理解为指标突增/突降maxDiffRatio时告警。如果期望差异比例在20%以下,则配置为2
- minDiffValue, 当前值和预测值差异绝对值阈值。仅当差异比例大于等于maxDiffRatio,且差异绝对值大于等于minDiffValue时才会产生告警
引入minDiffValue的目的是防止上报值很小时,细微的波动都会导致差异比例超过阈值而产生告警,因此这里需要一个绝对值来约束。比如一台空闲机器的cpu平时在1~5之间波动,细微的波动都会导致100%以上的差异比例
可用性(Availability):
可用性告警一般需要配置如下字段
- minHostNum, 上报metric的最小机器数
当上报metric的机器数小于minHostNum时告警;
奇异点(singularity)
奇异点告警一般需要配置如下字段
- maxDiffRatio,当前值和平均值差异比例阈值。可以直观理解为某台机器的当前值和均值差异比例超过maxDiffRatio时告警。如果期望所有机器当前值和均值差异在10%以下,则配置为1
- minDiffValue,当前值和平均值差异绝对值阈值。仅当差异比例大于等于maxDiffRatio,且差异绝对值大于等于minDiffValue时才会产生告警
上文中的平均值是同一metric下所有机器的当前值求和除机器数所得
环比(Cycle):
- maxDiffRatio,当前值和历史值差异比例阈值。可以直观理解为当前值和历史同期值比例超过maxDiffRatio时告警。如果期望每周期的变化差异在05%以下,则配置为0.05
- minDiffValue,当前值和平均值差异绝对值阈值。仅当差异比例大于等于maxDiffRatio,且差异绝对值大于等于minDiffValue时才会产生告警
RedAlert简介相关推荐
- etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理
1. etcd 简介 etcd 官网定义: A highly-available key value store for shared configuration and service discov ...
- Docker学习(一)-----Docker简介与安装
一.Docker介绍 1.1什么是docker Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植 ...
- 【Spring】框架简介
[Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...
- TensorRT简介
TensorRT 介绍 引用:https://arleyzhang.github.io/articles/7f4b25ce/ 1 简介 TensorRT是一个高性能的深度学习推理(Inference) ...
- 谷粒商城学习笔记——第一期:项目简介
一.项目简介 1. 项目背景 市面上有5种常见的电商模式 B2B.B2C.C2B.C2C.O2O B2B 模式(Business to Business),是指商家和商家建立的商业关系.如阿里巴巴 B ...
- 通俗易懂的Go协程的引入及GMP模型简介
本文根据Golang深入理解GPM模型加之自己的理解整理而来 Go协程的引入及GMP模型 一.协程的由来 1. 单进程操作系统 2. 多线程/多进程操作系统 3. 引入协程 二.golang对协程的处 ...
- Linux 交叉编译简介
Linux 交叉编译简介 主机,目标,交叉编译器 主机与目标 编译器是将源代码转换为可执行代码的程序.像所有程序一样,编译器运行在特定类型的计算机上,输出的新程序也运行在特定类型的计算机上. 运行编译 ...
- TVM Operator Inventory (TOPI)简介
TOPI简介 这是 TVM Operator Inventory (TOPI) 的介绍.TOPI 提供了比 TVM 具有更高抽象的 numpy 风格的,通用操作和调度.TOPI 如何在 TVM 中,编 ...
- 计算机视觉系列最新论文(附简介)
计算机视觉系列最新论文(附简介) 目标检测 1. 综述:深度域适应目标检测标题:Deep Domain Adaptive Object Detection: a Survey作者:Wanyi Li, ...
最新文章
- 超详细支持向量机知识点,面试官会问的都在这里了
- python中的数据写入与添加数据写入文件(to_csv)
- 在vue中,Echarts雷达图中indicator的点击事件,不能改变data中的值的解决方法
- ES6,新增数据结构Set的用法
- 第八次课作业(采购管理、信息与配置管理)
- 距离度量:闵氏、欧式、马氏、余弦、汉明等
- 动态规划:二维费用背包
- 自动驾驶中高精地图的大规模生产:视觉惯导技术在高德的应用
- java Date days_Java中的LocalDate plusDays()方法
- 互联网创业公司的传统思维
- 移位运算符<< >>
- 华为云回应“关闭私有云”传闻 将进行业务调整形成混合云产品部
- python工资这么高为什么不学-现在Python就业薪资高吗?
- spine基础以及骨骼动画的使用(1)
- ADB常用命令及详解
- 微信小程序开发工具下载及AppID查找
- m3u8格式转换器android,m3u8转mp4转换器下载_m3u8转mp4转换器官方下载-太平洋下载中心...
- 小学计算机教室培训心得,小学教师培训心得体会【通用版】
- 405 Method Not Allowed 解决方案
- 减肥 低热量食物和运动卡路里
热门文章
- 西门子S7comm-plus通信过程及重放攻击分析
- SQLAlchemy 教程 —— 进阶篇
- 11. OD-Delphi程序暴力破解
- Effective C++ 读后感
- 数据结构与算法:单链表(超详细实现)
- C语言(第二章):数据类型、运算符、表达式
- JavaScript对象中的this属性
- java插入数据库字符串拼接_java中PreparedStatement解决需转义字符向数据库中插入时的转义问题 | 学步园...
- 每周工作4天半可行吗?人社部回应:不宜在企业中广泛推行
- 为什么 0.1 + 0.2 = 0.300000004