• openfalcon源码分析之hbs


    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功能代码太复杂,建议优化的更简洁。
     
     
     
  • 相关阅读:
    asp.net Ajax调用Aspx后台方法
    JS 通过字符串取得对应对象
    nginx js、css、图片 及 一些静态文件中出现 http://upstreamname:port 导致部分网页样式显示不正常
    jexus手动跨域设置
    HTTP Error 400. The request hostname is invalid
    at MySql.Data.MySqlClient.MySqlStream.ReadPacket 或 FUNCTION account.AddMinutes does not exist
    sql xml 入门
    Jexus .Net at System.Net.Sockets.Socket.Connect (System.Net.IPAddress[] addresses, System.Int32 port)
    关于SQL SERVER中的FLOAT转换为VARCHAR
    JS倒计时
  • 原文地址:https://www.cnblogs.com/bingabcd/p/7749524.html
Copyright © 2020-2023  润新知