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. 双态运维分享之:业务场景驱动的服务型CMDB

    最近这几年,国内外CMDB失败的案例比比皆是,成功的寥寥可数,有人质疑CMDB is dead?但各种业务场景表明,当下数据中心运维,CMDB依然是不可或缺的一部分,它承载着运维的基础,掌握运维的命脉 ...

  2. Java基础方法

    1:读取resource下面的文件 ClassPathResource cpr = new ClassPathResource("./MyBatisXmlFile"); File ...

  3. [sql] 同库表(结构)的备份和sql聚合&navicat使用

    同库表的备份-赋值表结构和数据SQL语句 参考 有时候我们处理某个表时,需要先备份下这个表到当前这个库,然后再执行sql. 站在sql角度,就无需在mysqldump或者诸如导出sql的方式来备份了. ...

  4. 经验搜索排名---google已经做过类似的了(我想多了)

    由于编程的原因,我们需要经常的查资料,现在转载的文章比较多,我们经常看到的搜索结果的前十名基本上有7名是转载的.这样看起来很没有效率,后来突然想到,如果把大家的浏览结果搜集起来,然后进行权重排名,这样 ...

  5. eclipse引入httpServlet源码

    eclipse引入httpServlet源码 展开Apache Tomcat v7.0[Apache Tomcat v7.0] -> servlet-api.jar 找到 -> http ...

  6. EF Code First 学习笔记:表映射(转)

      多个实体映射到一张表 Code First允许将多个实体映射到同一张表上,实体必须遵循如下规则: 实体必须是一对一关系 实体必须共享一个公共键 观察下面两个实体: public class Per ...

  7. FCKeditor配置与使用

    fckeditor - (1)资料介绍与安装 fckeditor介绍  FCKeditor是一个专门使用在网页上属于开放源代码的所见即所得文字编辑器.  1.fckeditor官网:http://ww ...

  8. IP地址与MAC地址

    作者:知乎用户链接:https://www.zhihu.com/question/21546408/answer/28155896来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  9. P4099 [HEOI2013]SAO(树形dp)

    P4099 [HEOI2013]SAO 我们设$f[u][k]$表示以拓扑序编号为$k$的点$u$,以$u$为根的子树中的元素所组成的序列方案数 蓝后我们在找一个以$v$为根的子树. 我们的任务就是在 ...

  10. oracle数据库中导入Excel表格中的数据

    1.点击[工具]-->[ODBC 导入器],如图: 2.在导入器里选择第一个[来自ODBC的数据],用户名/系统DSN-->填写[Excel Files],输入用户名和密码,点击 [连接] ...