功能

judge 模块主要从transfer中接收数据,并从HBS中获取报警策略,然后进行阈值报警判断

  • 从HBS获取报警策略

  • 接收transfer 上报的数据,并存储最新几个点

  • 判断阈值,产生报警事件

  • 判断报警事件是否写入redis

  • 老旧报警数据的清理

配置文件


{ "debug": true, "debugHost": "nil", #用于调适,在log中打印指定host的具体策略 "remain": 11, #指定内存中存放每个metric数据点的个数。11个表示内存中存放10个点 "http": { "enabled": true, "listen": "0.0.0.0:6081" }, "rpc": { "enabled": true, "listen": "0.0.0.0:6080" }, "hbs": { "servers": ["127.0.0.1:6030"], # hbs最好放到lvs vip后面,所以此处最好配置为vip:port "timeout": 300, "interval": 60 }, "alarm": { "enabled": true, "minInterval": 300, # 连续两个报警之间至少相隔的秒数,维持默认即可 "queuePattern": "event:p%v", "redis": { "dsn": "127.0.0.1:6379", # 与alarm、sender使用一个redis "maxIdle": 5, "connTimeout": 5000, "readTimeout": 5000, "writeTimeout": 5000 } } }

处理逻辑

策略同步

1.judge启动之后会实例化RPC连接池,初始化RPCclient

  1. 向HBS请求监控策略,此时HBS返回的数据为
  • strategy

{ "id": 228, "result": { "hostStrategies": [ { "hostname": "open-falcon-1", "strategies": [ { "id": 5, "metric": "load.1min", "tags": { }, "func": "all(#3)", "operator": "\u003e", "rightValue": 40, "maxStep": 3, "priorit y": 0, "note": "", "tpl": { "id": 3, "name": "test", "parentId": 1, "actionId": 0, "creator": "root" } } ] }, { "hostname": "open-falcon-2", "strategies": [ { "id": 4, "metric": "proc.num", "tags": { "name": "mysql" }, "func": "all(#3)", "operator": "==", "rightValue": 0, "maxStep": 3, "priority": 0, "note": "", "tpl": { "id": 2, "name": "com", "parentId": 0, "actionId": 3, "creator": "root" } }, { "id": 2, "metric": "net.port.listen", "tags": { "port": "80" }, "func ": "all(#3)", "operator": "==", "rightValue": 0, "maxStep": 3, "priority": 0, "note": "", "tpl": { "id": 2, "name": "com", "parentId": 0, "actionId": 3, "creator": "root" } } ] } ] }, "error": null }
  • expression

{ "id": 229, "result": { "expressions": [ { "id": 1, "metric": "cpu.idle", "tags": { "module": "123" }, "func": "all(#3)", "operator": "==", "rightValue": 0, "maxStep": 3, "priority": 0, "note": "", "actionId": 2 } ] }, "error ": null }

3.规整缓存策略。judge实现可以更加快速的进行阈值判断,则需要在收到transfer数据之后尽快找到该数据对应的策略,所以对数据进行规整。分别用两个大Map存放规整后的数据,strategy和expression

  • strategy

key:endpoint/metric,value:[strategy1,strategy2,...]

  • expression

key: metric/tag_k=tag_v.value: [strategy1,strategy2,...],如果多条tag,则会生成多个key

如 each(metric=qps,project=adv,module=nginx),规整后的数据为:

    qps/project=adv

    qps/module=nginx

历史数据存储

  1. judge在启动之后,首先会初始化一个historyBigmap。用于存放所有metric remain数量的数据

  2. judge 接收transfer上报的数据。数据格式为

  3. judge 根据endpoint、metric、sorted(tags) 计算md5值,然后组成一个map1 ,格式为:key:md5值,value:具体采集数据

  4. 最后将map1的数据存到historyBigmap中,此时 key 为 mao1 的key的前两位即md5_v[0:2],value为[map1,map1map1..]

可见,最终在内存中存的数据为

 bigmap: {md5[0:2]:[map1,map1]}

报警逻辑

报警条件

  • all(#3)/min(#3)/max(#3)/sum(#3)/avg(#3) 最新3个数据点所有/最小/最大/和/平均

  • diff(#3) 当前数据点减去最新的3个历史点,拿到的差值,如果有任何一个超过阈值则告警

  • pdiff(#3) 当前数据点减去最新的3个历史点,再除以历史点,求得变动的波动率,如果任何一个波动率超过阈值则告警

判断告警

1.judge收到数据并规整完之后,会试着在bigmap中找对应的key

2.判断bigmap中的key对应的value是否有数据,有数据则追加,无数据则新建。此时还会做很多判断,如数据合法性校验、数据条数判断等

  1. 根据endpoint+metric 找到内存中对用的strategy和expression,此时结果可能是一个列表,接下来会对tags进行匹配

  2. 循环strategy或expression的tags列表,判断是否在数据的tags中,即如果策略里tags 是数据tags的子集,则该策略为该数据的告警策略

  3. 解析报警策略中的判断函数

  4. 数据和阈值进行比较,如果触发阈值,则产生一个告警事件

7.判断告警事件是否放入alarm队列,此时判断规则为:

* 检查的数据个数是否判断条件(例如检查最近5份数据,但是目前只有3份)

* 该策略是否被屏蔽(maxStep设置为0)

* 当前报警次数是否已经达到最大告警次数

* 距离上次报警是否满足一定的时间间隔

注意:judge 对阈值判断和告警 过程中,数据点不会重复用于和新数据点判断。如


10:01 10:02 10:04 10:05 10:06 10:07 10:08 10:09 10:10 10:11 10:12 10:13 4 5 3 9 2 1 9 7 6 3 5 4 阈值:cpu.idle < 10,minInterval:120 发现 10次上报的数据都触发了阈值,但是产生的告警时间点为:10:04,10:10 10:07由于和上次产生告警事件的间隔小于120s,所以不会产生告警事件
  1. 将告警事件根据告警的级别发送到alarm对应的level队列

历史脏数据清理

脏数据清理主要是为了清理那些很久没上报的enpoint和metric,如果我们修改endpoint,那么会产生新的endpint,并上报,judge会重新存储,这样导致老的数据在内存中越来越多,最终造成内存溢出

open-falcon之judge的更多相关文章

  1. 02:openf-falcon安装

    open-falcon其他篇 目录: 1.1 安装open-falcon环境准备 1.2 部署open-falcon后端 1.2.1 agent配置文件 1.2.2 transfer(数据上报) 1. ...

  2. [转] open-falcon编写的整个脑洞历程

    [From] https://mp.weixin.qq.com/s?__biz=MjM5OTcxMzE0MQ==&mid=400225178&idx=1&sn=c98609a9 ...

  3. 【Open-Falcon】Linux下安装Open-Falcon

    一.Open-Falcon组件简述 [Open-Falcon绘图相关组件] Agent:  部署在目标机器采集机器监控项 Transfer : 数据接收端,转发数据到后端Graph和Judge Gra ...

  4. 关于open falcon 与nightingale 的一些调研

    针对 open-falcon 与 nightingale 的调研 一.open-falcon 1.1 组件介绍 1.1.1 agent > agent用于采集机器负载监控指标,比如cpu.idl ...

  5. Hive SQL 监控系统 - Hive Falcon

    1.概述 在开发工作当中,提交 Hadoop 任务,任务的运行详情,这是我们所关心的,当业务并不复杂的时候,我们可以使用 Hadoop 提供的命令工具去管理 YARN 中的任务.在编写 Hive SQ ...

  6. Gym 101102C---Bored Judge(区间最大值)

    题目链接 http://codeforces.com/gym/101102/problem/C problem description Judge Bahosain was bored at ACM ...

  7. NOJ 1074 Hey Judge(DFS回溯)

    Problem 1074: Hey Judge Time Limits:  1000 MS   Memory Limits:  65536 KB 64-bit interger IO format: ...

  8. open falcon dashboard 安装

    open falcon dashboard 安装 yum -y install lrzsz python-virtualenv mysql-devel python-devel libffi-deve ...

  9. 【教程】如何正确的写一个Lemon/Cena的SPJ(special judge)

    转自:http://www.cnblogs.com/chouti/p/5752819.html Special Judge:当正确的输出结果不唯一的时候需要的自定义校验器 首先有个框架 #includ ...

  10. Falcon Genome Assembly Tool Kit Manual

    Falcon Falcon: a set of tools for fast aligning long reads for consensus and assembly The Falcon too ...

随机推荐

  1. MySQL 服务(mysqld)crash

    场景:     数据从 10.165.98.190 自建MySQL同步至 阿里云 MongoDB过程中,mysql服务会崩溃,同步数据失败. 原因分析:     经DBA 分析,10.165.98.1 ...

  2. SpringMVC系列(七)视图解析器和视图

    在springmvc.xml里面配置视图解析器 <!-- 配置视图解析器: 如何把 handler 方法返回值解析为实际的物理视图 --> <bean class="org ...

  3. jQuery table td可编辑

    参考链接: http://www.freejs.net/ http://www.freejs.net/article_biaodan_34.html http://www.freejs.net/sea ...

  4. JAVA并发:深入分析volatile

    Java volatile 汇编代码研究 JVM执行篇:使用HSDIS插件分析JVM代码执行细节 聊聊并发(一)——深入分析Volatile的实现原理 深入Java底层:内存屏障与JVM并发详解 深入 ...

  5. Xianfeng轻量级Java中间件平台:一期开发计划

    关于Xianfeng轻量级Java中间件平台,考虑到需要控制开发周期,通过分期开发的方式来实现一些基础的.常用的功能,这样有利于跟踪开发计划.一期的开发计划,主要实现的目标如下: 系统架构: 1.确定 ...

  6. Spring核心框架体系结构(jar包引用分析)[转]

    很多人都在用spring开发java项目,普通添加lib目录拷贝jar包,或者创建maven项目时,配置maven依赖的时候并不能明确要配置哪些spring的jar,经常是胡乱添加一堆,编译或运行报错 ...

  7. <转>Win8.1+CentOS7 双系统 U盘安装

    0.准备工作 1.宏碁 Aspire 4752G 笔记本 2.Win8.1 企业版操作系统 3.8G 以上 U 盘 4.UltraISO(当然也可以选择其他的U盘制作工具,看个人喜好) 5.下载 Ce ...

  8. pi4j,Netbeans中togglebutton跟Jbutton的区别

    一组togglebutton中会始终有一个是按下去的状态 一组commandbutton就全部都始终都是弹起的状态

  9. 安装配置和使用HBASE Cluster(基于发行版CDH5.0.2)——系列随笔

    本系列文章只是记录了笔者本人在学习实验安装和使用基于CDH5.0.2的HBASE集群过程中的一些经验教训和心得,绝不是详细的安装过程,因本人不过一初学者,很多方面不甚了了,如果能让不幸读到的人有所得则 ...

  10. Android让文本输入框默认不获取焦点

    项目中有个检索功能,页面上有个EditText输入框,打开页面后,焦点默认在EditText上,这样的话软键盘默认就会显示出来,占据大半个屏幕. 后来想办法将这个给去掉了,原先考虑着将焦点赋给页面上的 ...