openfalcon源码分析之hbs
openfalcon源码分析之hbs
本节内容
- hbs功能
- hbs源码分析
- 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
,value
是strategies
组成的array
,返回给调用者,目的是可以直接通过tplid
找到对应的所有strategies
。CalcInheritStrategies
方法首先遍历主机对应的模板列表,对每个模板都寻找其父模板,生成一个模板bucket
,这样,就使得原先的每个模板都变成了一个模板列表。- 遍历新的模板列表,过滤掉有包含关系的模板
bucket
,生成uniq_tpl_buckets
- 循环
uniq_tpl_buckets
,找到所有的strategies
,并用子模板的strategies
覆盖父模板相同的strategies
。 - 最后返回该主机对应的完整的
strategies
。
3. hbs设计优劣
优点:
- hbs作为数据库缓存层,缓存了数据库中关于监控的配置,所有的agent和judge都直接来hbs中读取数据,减轻了数据库的压力。
- hbs接收agent上报过来的信息,并实时写入数据库中,可以立即自动发现安装了agent的机器,功能很不错。
缺点:
- 获取所有的
strategys
功能代码太复杂,建议优化的更简洁。
openfalcon源码分析之hbs的更多相关文章
- openfalcon源码分析之Judge
openfalcon源码分析之Judge 本节内容 Judge功能 源码分析 设计优缺点 1. Judge功能 在open-falcon中,Judge模块的功能是通过从HBS上同步告警的strateg ...
- openfalcon源码分析之graph
openfalcon源码分析之graph 本节内容 graph功能 graph源码分析 2.1 graph中重要的数据结构 2.2 graph的简要流程图 2.3 graph处理数据过程 2.4 gr ...
- openfalcon源码分析之agent
本节内容 agent功能 1.1 agent上报数据 1.2 agent与HBS同步 1.3 agent Http服务 agent源码分析 2.1 初始化config配置 2.2 初始化根目录,本地I ...
- openfalcon源码分析之transfer
本节内容 transfer功能 transfer接收数据来源 transfer数据去向 transfer的一致性hash transfer的一致性hash key的计算 transfer源码分析 2. ...
- ABP源码分析一:整体项目结构及目录
ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序. 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module ...
- HashMap与TreeMap源码分析
1. 引言 在红黑树--算法导论(15)中学习了红黑树的原理.本来打算自己来试着实现一下,然而在看了JDK(1.8.0)TreeMap的源码后恍然发现原来它就是利用红黑树实现的(很惭愧学了Ja ...
- nginx源码分析之网络初始化
nginx作为一个高性能的HTTP服务器,网络的处理是其核心,了解网络的初始化有助于加深对nginx网络处理的了解,本文主要通过nginx的源代码来分析其网络初始化. 从配置文件中读取初始化信息 与网 ...
- zookeeper源码分析之五服务端(集群leader)处理请求流程
leader的实现类为LeaderZooKeeperServer,它间接继承自标准ZookeeperServer.它规定了请求到达leader时需要经历的路径: PrepRequestProcesso ...
- zookeeper源码分析之四服务端(单机)处理请求流程
上文: zookeeper源码分析之一服务端启动过程 中,我们介绍了zookeeper服务器的启动过程,其中单机是ZookeeperServer启动,集群使用QuorumPeer启动,那么这次我们分析 ...
随机推荐
- python面向对象(类的成员及类方法)
类的普通成员 字段 方法 属性 类的高级成员 静态字段 静态方法 属性方法 类方法 类成员修饰符 类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成员中,只有普通字段的内容保存对象中, ...
- 11.Git分支管理
分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 如果两个平行宇宙互不干扰,那对现在的你也没啥影响.不过,在某个时间点,两个平行宇宙合并 ...
- Mirror--镜像断开的解决办法
如果镜像在搭建一段时候后出现问题,可能存在以下原因: 1. 因为主库或镜像库存在内存压力,导致无法完成镜像日志传送和重做 解决办法:设置数据库最小内存,保证数据库有足够内存完成镜像操作 2. 因为主库 ...
- java-信息安全(十八)java加密解密,签名等总结
一.基本概念 加密: 密码常用术语: 明文,密文,加密,加密算法,加密秘钥,解密,解密算法,解密秘钥, 密码分析:分析密文从而推断出明文或秘钥的过程 主动攻击:入侵密码系统,采用伪造,修改,删除等手段 ...
- appscan 9.0.3.10 版本下载
http://download4.boulder.ibm.com/sar/CMA/RAA/07ukf/0/ 其他版本下载 https://www.cnblogs.com/hua198/p/100447 ...
- ssm所需要的pom(jre8、tomcat8、spring4)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- 《Python网络编程基础》第四章 域名系统
域名系统(DNS) 是一个分布式的数据库,它主要用来把主机名转换成IP地址.DNS以及相关系统之所以存在,主要有以下两个原因: 它们可以使人们比较容易地记住名字,如www.baidu.com. 它 ...
- 什么是T-SQL
T-SQL T-SQL 即 Transact-SQL,是 SQL 在 Microsoft SQL Server 上的增强版,它是用来让应用程序与 SQL Server 沟通的主要语言.T-SQL 提供 ...
- 用python解析word文件(段落篇(paragraph) 表格篇(table) 样式篇(style))
首先需要安装相应的支持库: 直接在命令行执行pip install python-docx 示例代码如下: import docxfrom docx import Document #导入库 path ...
- Python笔记 #06# NumPy Basis & Subsetting NumPy Arrays
原始的 Python list 虽然很好用,但是不具备能够“整体”进行数学运算的性质,并且速度也不够快(按照视频上的说法),而 Numpy.array 恰好可以弥补这些缺陷. 初步应用就是“整体数学运 ...