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. python面向对象(类的成员及类方法)

    类的普通成员 字段 方法 属性 类的高级成员 静态字段 静态方法 属性方法   类方法 类成员修饰符 类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成员中,只有普通字段的内容保存对象中, ...

  2. 11.Git分支管理

    分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 如果两个平行宇宙互不干扰,那对现在的你也没啥影响.不过,在某个时间点,两个平行宇宙合并 ...

  3. Mirror--镜像断开的解决办法

    如果镜像在搭建一段时候后出现问题,可能存在以下原因: 1. 因为主库或镜像库存在内存压力,导致无法完成镜像日志传送和重做 解决办法:设置数据库最小内存,保证数据库有足够内存完成镜像操作 2. 因为主库 ...

  4. java-信息安全(十八)java加密解密,签名等总结

    一.基本概念 加密: 密码常用术语: 明文,密文,加密,加密算法,加密秘钥,解密,解密算法,解密秘钥, 密码分析:分析密文从而推断出明文或秘钥的过程 主动攻击:入侵密码系统,采用伪造,修改,删除等手段 ...

  5. appscan 9.0.3.10 版本下载

    http://download4.boulder.ibm.com/sar/CMA/RAA/07ukf/0/ 其他版本下载 https://www.cnblogs.com/hua198/p/100447 ...

  6. ssm所需要的pom(jre8、tomcat8、spring4)

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  7. 《Python网络编程基础》第四章 域名系统

    域名系统(DNS) 是一个分布式的数据库,它主要用来把主机名转换成IP地址.DNS以及相关系统之所以存在,主要有以下两个原因:   它们可以使人们比较容易地记住名字,如www.baidu.com. 它 ...

  8. 什么是T-SQL

    T-SQL T-SQL 即 Transact-SQL,是 SQL 在 Microsoft SQL Server 上的增强版,它是用来让应用程序与 SQL Server 沟通的主要语言.T-SQL 提供 ...

  9. 用python解析word文件(段落篇(paragraph) 表格篇(table) 样式篇(style))

    首先需要安装相应的支持库: 直接在命令行执行pip install python-docx 示例代码如下: import docxfrom docx import Document #导入库 path ...

  10. Python笔记 #06# NumPy Basis & Subsetting NumPy Arrays

    原始的 Python list 虽然很好用,但是不具备能够“整体”进行数学运算的性质,并且速度也不够快(按照视频上的说法),而 Numpy.array 恰好可以弥补这些缺陷. 初步应用就是“整体数学运 ...