openfalcon源码分析之hbs

本节内容

  1. hbs功能
  2. hbs源码分析
  3. hbs设计优劣

1. hbs功能

hbs在整个open-falcon项目中承担的角色就是连接数据库,作为数据库缓存,缓存配置,主要给agent和judge提供服务。

2. hbs源码分析

hbs源码分析将列出其对外提供的rpc服务以及其缓存的数据,并在最后尝试阐述其最重要的两个rpc服务GetExpressions和GetStrategies的执行过程。

对外提供服务

hbs对外提供服务的方式有RPC和http,主要使用的是其rpc服务,其对外提供服务的rpc接口列表如下:

接口名 提供对象 提供服务
MinePlugins agent 通过agent提供的hostname获取其对应的主机组列表,再找到对应plugin list返回
ReportStatus agent 获取agent的信息缓存并插入或更新到数据库中的host中(hostname, ip, agent_version, plugin_version)
TrustableIps agent 如果配置文件中配置了信任IP,则把信任IP列表发给agent
BuiltinMetrics agent 通过agent的hostname获取其对应的主机组列表,并找到templat list,从strategy表中筛选出('net.port.listen', 'proc.num', 'du.bs', 'url.check.health')这些metric的metric和tags
GetExpressions judge 返回数据库中所有生效的Expressions
GetStrategies judge 获取所有的strategys并按照hostname:strategys的方式组织数据返回

缓存数据

hbs启动了一个定时任务,每间隔一分钟去数据库读取数据并缓存起来。下表是其缓存的数据列表:

缓存名称 含义 执行sql
GroupPlugins 缓存所有的plugins路径 select grp_id, dir from plugin_dir
GroupTemplates 缓存主机组和模板对应关系 select grp_id, tpl_id from grp_tpl
HostGroupsMap 缓存主机和主机组对应关系 select grp_id, host_id from grp_host
HostMap 缓存所有主机 select id, hostname from host
TemplateCache 缓存所有模板 select id, tpl_name, parent_id, action_id, create_user from tpl
Strategies 缓存所有strategys "select %s from strategy as s where (s.run_begin='' and s.run_end='') or (s.run_begin <= '%s' and s.run_end > '%s')","s.id, s.metric, s.tags, s.func, s.op, s.right_value, s.max_step, s.priority, s.note, s.tpl_id",now,now
HostTemplateIds 缓存主机与模板对应关系 select a.tpl_id, b.host_id from grp_tpl as a inner join grp_host as b on a.grp_id=b.grp_id
ExpressionCache 缓存所有正常的Expression select id, expression, func, op, right_value, max_step, priority, note, action_id from expression where action_id>0 and pause=0
MonitoredHosts 缓存所有不处于维护状态的主机 "select id, hostname from host where maintain_begin > %d or maintain_end < %d", now, now

rpc调用GetExpressions过程

  • GetExpressions服务调用cache.ExpressionCache.Get()方法获取缓存中存储的所有Expression

rpc调用GetStrategies过程

  • GetStrategies服务先调用cache.HostTemplateIds.GetMap()方法获取每个主机id对应的所有template id,再调用cache.MonitoredHosts.Get()方法获取不处于维护状态的主机名与id列表。调用cache.TemplateCache.GetMap()方法获取所有的模板,调用cache.Strategies.GetMap()获取所有的strategies。调用Tpl2Strategies(strategies)对tpl_id和strategies做了一个字典映射,这样通过tpl_id就能找到对应的所有strategies。循环每台主机,调用CalcInheritStrategies方法获取每台主机对应的strategies,再将主机名和对应的strategies组合成一个结构体,将所有这些结构体组合在hostStrategies中返回给judge。

    • Tpl2Strategies方法循环strategies,将tplid作为key,valuestrategies组成的array,返回给调用者,目的是可以直接通过tplid找到对应的所有strategies
    • CalcInheritStrategies方法首先遍历主机对应的模板列表,对每个模板都寻找其父模板,生成一个模板bucket,这样,就使得原先的每个模板都变成了一个模板列表。
    • 遍历新的模板列表,过滤掉有包含关系的模板bucket,生成uniq_tpl_buckets
    • 循环uniq_tpl_buckets,找到所有的strategies,并用子模板的strategies覆盖父模板相同的strategies
    • 最后返回该主机对应的完整的strategies

3. hbs设计优劣

优点:

  1. hbs作为数据库缓存层,缓存了数据库中关于监控的配置,所有的agent和judge都直接来hbs中读取数据,减轻了数据库的压力。
  2. hbs接收agent上报过来的信息,并实时写入数据库中,可以立即自动发现安装了agent的机器,功能很不错。

缺点:

  1. 获取所有的strategys功能代码太复杂,建议优化的更简洁。
 
 
 

openfalcon源码分析之hbs的更多相关文章

  1. openfalcon源码分析之Judge

    openfalcon源码分析之Judge 本节内容 Judge功能 源码分析 设计优缺点 1. Judge功能 在open-falcon中,Judge模块的功能是通过从HBS上同步告警的strateg ...

  2. openfalcon源码分析之graph

    openfalcon源码分析之graph 本节内容 graph功能 graph源码分析 2.1 graph中重要的数据结构 2.2 graph的简要流程图 2.3 graph处理数据过程 2.4 gr ...

  3. openfalcon源码分析之agent

    本节内容 agent功能 1.1 agent上报数据 1.2 agent与HBS同步 1.3 agent Http服务 agent源码分析 2.1 初始化config配置 2.2 初始化根目录,本地I ...

  4. openfalcon源码分析之transfer

    本节内容 transfer功能 transfer接收数据来源 transfer数据去向 transfer的一致性hash transfer的一致性hash key的计算 transfer源码分析 2. ...

  5. ABP源码分析一:整体项目结构及目录

    ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序. 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module ...

  6. HashMap与TreeMap源码分析

    1. 引言     在红黑树--算法导论(15)中学习了红黑树的原理.本来打算自己来试着实现一下,然而在看了JDK(1.8.0)TreeMap的源码后恍然发现原来它就是利用红黑树实现的(很惭愧学了Ja ...

  7. nginx源码分析之网络初始化

    nginx作为一个高性能的HTTP服务器,网络的处理是其核心,了解网络的初始化有助于加深对nginx网络处理的了解,本文主要通过nginx的源代码来分析其网络初始化. 从配置文件中读取初始化信息 与网 ...

  8. zookeeper源码分析之五服务端(集群leader)处理请求流程

    leader的实现类为LeaderZooKeeperServer,它间接继承自标准ZookeeperServer.它规定了请求到达leader时需要经历的路径: PrepRequestProcesso ...

  9. zookeeper源码分析之四服务端(单机)处理请求流程

    上文: zookeeper源码分析之一服务端启动过程 中,我们介绍了zookeeper服务器的启动过程,其中单机是ZookeeperServer启动,集群使用QuorumPeer启动,那么这次我们分析 ...

随机推荐

  1. CentOS7 安装mysql-5.7.10(glibc版)

    groupadd mysql useradd -r -g mysql mysql 修改mysql目录及子文件属主和属组 chown -R mysql:mysql mysql shell> cd ...

  2. HDFS中的读写数据流

    1.文件的读取 在客户端执行读取操作时,客户端和HDFS交互过程以及NameNode和各DataNode之间的数据流是怎样的?下面将围绕图1进行具体讲解. 图 1 客户端从HDFS中读取数据 1)客户 ...

  3. c#通过webrequest请求远程http服务时出现的问题

    用WebRequest和WebClient,两种方式,请求一个由http服务发布的应用,结果出现异常. 有三种,1.System.Net.WebException: 服务器提交了协议冲突. Secti ...

  4. 002-mybatis主配置文件

    <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC & ...

  5. js正则表达式的使用详解

    本文转自:http://www.jb51.net/article/39623.htm 1定义正则表达式2关于验证的三个这则表达式方法3正则表达式式的转义字符 1定义正则表达式在js中定义正则表达式很简 ...

  6. c++第二十六天

    p131~p135: 1.除非必要否则不使用后缀加加(减减),会有额外的性能开销. 2.混用解引用和递增运算符.*pointer++,后缀运算符优先于解引用运算符. 3.运算对象可按任意顺序求值,即使 ...

  7. SqlServer2012数据导入

    1.选择数据库,右击[任务]-->[导入数据]: 2.选择对应的数据源,和数据文件,下一步: 3.填写服务器地址,和数据库的登录信息,选择数据库名称: 4.复制一个或多个表或试图的数据: 5.将 ...

  8. 来自MSDN的RibbonGadgets练习

    来自MSDN的RibbonGadgets练习 RibbonGadgets是少见的来自官方的资源. 如果选择Menu Items = 集合,则会有向下的小箭头,同时会出现下来菜单. 这个都关系叫做gal ...

  9. 搭建linux上的Eclipse+PHP编程环境

    最近打算学PHP,于是查阅资料搭建了ubuntu(14.04.3)上的PHP IDE环境 一.准备工作(可略) 主要是推荐科大的源和配置源的方法,因为后于步骤使用到了apt,科大的源非常快,并且有个针 ...

  10. CSS3动画库——animate.css

    初见animate.css的时候,感觉很棒,基本上很多常用的CSS3动画效果都帮我们写好了,所以想要哪一种效果直接就可以拿过来用,甚是方便: 效果展示官网:http://daneden.github. ...