MyException - 我的异常网
当前位置:我的异常网» 开源软件 » openfalcon的基本原理跟使用

openfalcon的基本原理跟使用

www.MyException.Cn  网友分享于:2013-09-28  浏览:0次
openfalcon的基本原理和使用

本篇文章介绍下openfalcon的基本原理和使用,粒度相对较粗,主要目的是使大家迅速掌握open-falcon的数据模型、功能模块、运作流程和使用方法。具体分解如下,

  • 基本介绍
  • 技术架构
  • 数据模型
  • 主要模块
  • 如何使用
  • 其他

一、基本介绍

      Open-Falcon 是小米研发的一款开源的互联网企业级监控系统解决方案,目前小米、金山云、美团、京东金融、滴滴等公司有在使用。

      下面我们遵循着问题来展开整篇文章。首先,open-falcon能做什么?

      a.主要特点有

      ①数据采集免配置:agent自发现、支持Plugin、主动推送模式

      ②容量水平扩展:生产环境每秒50万次数据收集、告警、存储、绘图,可持续水平扩展。

      ③告警策略自发现:Web界面、支持策略模板、模板继承和覆盖、多种告警方式、支持回调动作。

      ④告警设置人性化:支持最大告警次数、告警级别设置、告警恢复通知、告警暂停、不同时段不同阈

          值、支持维护周期,支持告警合并。

      ⑤历史数据高效查询:秒级返回上百个指标一年的历史数据。

      ⑥Dashboard人性化:多维度的数据展示,用户自定义Dashboard等功能。

      ⑦架构设计高可用:整个系统无核心单点,易运维,易部署。

     其次,openfalcon能对哪些项目做监控 ?

      1)基础监控。

       比如CPU、Load、内存、磁盘、IO、网络相关、内核参数、ss 统计输出、端口存活状态、进程存活状态、核心服务的进程存活信息采集、关键业务进程资源消耗、NTP offset采集、DNS解析采集,这些指标,都是open-falcon的agent组件直接支持的。

      2)业务应用监控。

       比如我的应用服务部署上线后,需要统计某个接口的平均耗时、调用次数、成功率等信息,这些属于业务应用的监控。这里需要研发人员编写脚本等方式来收集数据,然后发送到open-falcon的transfer组件。

      3)第三方开源软件监控。

      比如mysql、lvs、nginx、redis、mq等,需单独编写采集脚本或插件,这些常见的软件,一般开源社区都有提供相应的脚本。

      这里有个openfalcon与其他一些监控软件的对比,


      个人觉得,falcon比较大的优势在于扩展性和灵活性方面。

 

二、技术架构

      涉及架构或结构时,图是比较好的展示方式,下图摘自官网,可以看出组件及组件间协作。



     

         绿色的粗线表示数据传输流程,橙黄色虚线表示控制流(策略,告警),浅蓝色虚线标识查询流程;

        下图是一个相对规整的数据流图,更有助于理解:


      具体而言,整体的运作流程如下:

1、目标服务器运行agent 

2、agent采集各类监控项数值,传给transfer

3、transfer校验和整理监控项数值,做一致性hash分片,传给对应的judge模块以验证是否触发告警 

4、transfer整理监控项数值,做一致性hash分片,传输给graph以进行数据的存储 

5、judge根据具体报警策略或阈值进行告警判断,如触发告警则组装告警event事件,写入缓存队列。 

6、alarm和sender根据event事件中的判定结果,执行event,像用户组发送短信或邮件。 

7、graph收到监控项数据后,将数据存储成RRD文件格式,进行归档,并提供查询接口。 

8、query将调用graph的查询接口,将监控数据传送到dashboard以进行页面展示。 

9、dashboard则渲染页面,展示曲线报表图等。 

10、portal提供页面供用户配置机器分组、报警策略、表达式、nodata等配置。

 

三、数据模型

       灵活强大的数据模型能提高监控系统的使用效率和灵活性(这小节提到的数据模型应该叫监控项数据模型),open-falcon的数据模型长什么样?设计初衷又是什么?

       open-falcon的"监控项"模型如下,

      {

           metric: cpu.busy,                      // 监控项名称

           endpoint: open-falcon-host,      // 目标服务器的主机名

           tags: srv=falcon,group=az1,     // tag标签,作用是聚合和归类,在配报警策略时会比较方便。

           value: 10,                                  // 监控项数值

           timestamp: `date +%s`,             // 采集时间

           counterType: GAUGE,              //  监控项类型。 

           step: 60                                     // 采集间隔。 秒。

       }

 

       这种模型的主要好处:一是方便从多个维度来配置告警,二是可以灵活的进行自主数据采集。

       第一点,比如tag的使用起到了给机器进行归类的作用,比如有3台机器:host1、host2和host3,如果tags依次配置为"group=java", "group=java"和"group=erlang",那么配置报警策略"metric=cpu/group=java“时就只会对java标签的机器(即host1,host2)生效。

       第二点,由于agent会自发现的采集很多基本的系统指标,但是对业务应用等需要研发人员自己写脚本收集和上报。这里openfalcon定义了监控项模型,相当于定义了一个规范,当研发人员需要监控某个对象(比如mysql、redis等),只需采集数据,并遵守规范包装成监控项模型,再上报即可。

       open-falcon使用的监控项有哪些类型 ?

主要有三种:

(1) GAUGE:实测值,直接使用采集的原始数值,比如气温;

(2) COUNTER:记录连续增长的数据,只增不减。比如汽车行驶里程,网卡流出流量,cpu_idle等;

(3) DERIVE:变化率,类似COUNTER ,但是可增可减。

 

四、主要模块

4-1. agent

 

  • 首先,什么是Agent?

       agent是go开发的daemon程序,用于自发现的采集机器的各种数据和指标。部署在目标机器上,无需在server端进行任何配置,安装后启动即工作,是open-falcon的”数据采集者”。

 

  • 主要功能?

       1)自发现的采集各类数据和指标,上报transfer;

       2)与hbs进行心跳连接通信,上报主机状态,同步插件和监控进程、监控端口;

 

  •  可采集的数据有哪些?

        基础监控项(硬件,负载)、业务应用监控数据、各种开源软件监控数据等。

 

  • falcon是如何采集的?

       1)基础监控

        一般是读系统文件或执行基本命令,然后对原始值进行处理。比如cpu和内存信息是通过读取/proc/stat和/proc/meminfo获得;端口监控,是通过ss –ln 来判断指定端口是否处于listen状态;

       2)业务应用监控

       一般由”插件”或”采集脚本”实现,需自己编写。比如接口的调用次数、耗时、失败次数、成功次数都属于这类。(日志、基础统计工具)

       3)开源软件监控

       一般开源社区都有提供采集脚本。

 

  • 如何扩展agent -- 插件?

      除了基础监控项,有时用户想扩展agent的功能以采集更多指标,openfalcon提供了插件机制。插件的使用可以参考官方git文档,下面摘抄了作者们的一段话,其实就是一些采集脚本及同步执行的方式。

      “插件设计思路:

      a) 写一个采集数据的脚本

      b) 把脚本分发到需要采集数据的机器上

      c) 写一个cron每隔一段时间去跑这个脚本

      d) 收集脚本的输出,调用server的接口去push数据

      e) 根据需求相应的对脚本做上线、下线、升级”

    

  • agent的工作流程:



 

4-2. Transfer组件

 

  • 什么是transfer?

      open-falcon的后端门户,监控数据的中转接点。

 

  • transfer的职责角色?

      提供数据接收接口和自定义脚本push数据;

      根据一致性hash算法将内存队列中的数据发送给graph和judge模块;(重点)

      为每个后端实例创建一个 定长Queue;

      为每个后端实例维护一个rpc连接池;



      这里每个后端的graph或judge实例都建立了一个rpc连接池和一个定长Queue队列。有两个小点这里提下:1,定长Queue队列目的是应对高峰流量,丢失一部分高峰时段的数据保证了后端的graph和judge组件不受影响; 2. v1.0版本的openfalcon中,每个graph实例可以有多个ip而且transfer会给每个ip发送相同的一份数据,但是judge中每个实例只能有1个ip。

 

  • transfer的工作流程?



 

 

4-3. graph组件

 

  • 什么是graph?graph的职责?

      存储监控数据、提供监控数据的高效查询接口。

 

  • graph的架构图(摘自项目git):

4-4. judge&alarm&sender组件

       这三个组件是报警的链路,负责判断是否触发报警,理论上可以进化成一个模块。感兴趣的可以看代码,很多匹配逻辑。

       judge: 记载策略到缓存,判断监控项是否触发告警策略,发告警事件;

       alarm&sender: 读取告警事件;发邮件、短信等;

  

4-5. hbs组件

 

  • 什么是hbs,hbs的职责?

      heart beat server,心跳服务器,更多承担”配置中心”的角色。

      1)Agent可以从hbs同步”报警策略”、”进程存活监控”、”端口存活监控”等信息。

      2)agent定期发送心跳信息,hbs负责维护host表;

 

  • hbs的工作流程:



 

 

五、如何使用?

      5.1  目标 

  (1)、如何监控基本监控项?

  (2)、如何使用插件,监控“第三方应用”?如何监控“端口/进程”?

  (3)、如何配置“告警规则”?

  (4)、如何使用hostGroup、template、expression、nodata、uic?

  (5)、如何更好管理机器?如hostName、hostGroup的命名约定;

 

 

      5.2  先要理解的一些概念 

  (1)、机器分组

  (2)、用户组

  (3)、模板

  (4)、表达式

  (5)、报警策略

  (6)、回调动作

 

      5.3  如何采集基本监控项 ?

      在目标机器上部署agent,正确配置,启动即可;

 

 

   

      5.4  如何监控“第三方应用”,如mysql/lvs/nginx?

      自己写脚本,上报到open-falcon;或者使用开源的插件或脚本;

      https://book.open-falcon.org/zh/philosophy/data-collect.html

     

      5.5  如何监控“端口存活”、“进程存活” ?

 

      在port页面,新增expression或template,给指定进程或端口配置报警策略;

 

      5.6  使用机器分组和报警策略模板?

       这里刚开始接触时觉得特别麻烦,后来拉出代码,分析其关联关系,梳理出了模型及关系图,一切变得清晰。下图依次是:hostgroup机器组管理、Tempalte报警策略模板、模型关系UML图。重点理解UML图,然后去页面上操作和比较下。


b.



c.



   

     

      5.7  如何使用表达式 ?“策略表达式”与”策略模板”的区别?

      表达式比较简洁,在结合tag时可以使用策略表达式。

      当无法区分类别时,比如所有监控项都没有加tag,只有进行人工分类,即使用”机器分组”,然后将”策略模板”绑定到”机器分组”。

 

六、其他

    其他需要自己翻文档或代码了,比如nodata,aggravation等等。通过这篇文章,希望能掌握open-falcon的运作机制,数据模型,如何使用它。

 

 

 

 

<!--EndFragment-->

文章评论

鲜为人知的编程真相
鲜为人知的编程真相
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
每天工作4小时的程序员
每天工作4小时的程序员
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
总结2014中国互联网十大段子
总结2014中国互联网十大段子
程序员的鄙视链
程序员的鄙视链
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
代码女神横空出世
代码女神横空出世
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
那些争议最大的编程观点
那些争议最大的编程观点
我的丈夫是个程序员
我的丈夫是个程序员
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
一个程序员的时间管理
一个程序员的时间管理
如何成为一名黑客
如何成为一名黑客
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
程序员都该阅读的书
程序员都该阅读的书
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
漫画:程序员的工作
漫画:程序员的工作
中美印日四国程序员比较
中美印日四国程序员比较
 程序员的样子
程序员的样子
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
我是如何打败拖延症的
我是如何打败拖延症的
程序员应该关注的一些事儿
程序员应该关注的一些事儿
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
编程语言是女人
编程语言是女人
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
10个调试和排错的小建议
10个调试和排错的小建议
为什么程序员都是夜猫子
为什么程序员都是夜猫子
老程序员的下场
老程序员的下场
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
程序员和编码员之间的区别
程序员和编码员之间的区别
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有