OpenFalcon是由小米的运维团队开源的一款企业级、高可用、可扩展的开源监控解决方案,,在众多开源爱好者的支持下,功能越来越丰富,文档更加的完善,OpenFalcon 已经成为国内最流行的监控系统之一。小米、美团、金山云、快网、宜信、七牛、又拍云、赶集、滴滴、金山办公、爱奇艺、一点资讯、快牙、开心网、借贷宝、百度、迅雷等公司使用,如果关注招聘网站的话会发现非常多的岗位要求熟悉openfalcon,这也意味着OpenFalcon的使用非常广泛。还是非常值得花费一些精力去研究一下Openfalcon的架构以及使用等知识。

官网:http://www.open-falcon.org/

GitHub 地址:https://github.com/open-falcon

文档地址:https://book.open-falcon.org/zh_0_2/

API文档:http://open-falcon.org/falcon-plus/

Openfalcon是采取了前后端分离的架构,后端用Go语言开发,前端用Python开发。编译后的后端程序运行时,不再需要Go语言环境,直接将可执行文件拷贝到某台机器上面运行就可以了,而前端是需要python环境。当机器数量比较大的时候,一般会预先将Agent安装到机器上(物理机标准化装机时安装,虚拟机可以封装到镜像中,私有云或者公有云都支持主要都是网络问题)。当Agent运行时就会上报数据。

Openfalcon架构:

整个后端采用模块化设计,包含agent、aggregator、alarm、api、gateway、graph、hbs、judge、nodata、transfer等模块。接下来再介绍一下每个模块的功能和特点。

(1) agent: 用于采集机器负载监控指标,比如cpu.idle、load.1min、disk.io.util等等,每隔60秒push给Transfer。agent与Transfer建立了长连接,数据发送速度比较快,agent提供了一个http接口/v1/push用于接收用户手工push的一些数据,然后通过长连接迅速转发给Transfer。agent是需要部署到所有要被监控的机器上,比如公司有10万台机器,那就要部署10万个agent。agent本身资源消耗很少,不用担心。小米开源的Agent只包含Linux,汽车之家等公司相继开源了Windows的Agent。

被监控机Agent提供一个默认监听的1988端口的HTTP服务,提供了一个UI设计不错的Web界面,在该页面上能够展示内核、运行时间、主机名、负载情况、内存使用,磁盘使用等基础监控数据。此外还提供了一些接口,通过这些接口获取一些基础监控数据。

(2)aggregator 集群聚合模块。聚合某集群下的所有机器的某个指标的值,提供一种集群视角的监控体验。这种视角下能更好的体现整个集群的某个监控指标,但是该模块目前不是非常完善,我们在生产环境中没并没有使用该模块。

(3)alarm 是处理报警event的,judge产生的报警event写入redis,alarm从redis读取处理,报警event的处理逻辑并非仅仅是发邮件、发短信这么简单。为了能够自动化对event做处理,alarm需要支持在产生event的时候回调用户提供的接口;有的时候报警短信、邮件太多,对于优先级比较低的报警,希望做报警合并,这些逻辑都是在alarm中做的。

在配置报警策略的时候配置了报警级别,比如P0/P1/P2等等,每个及别的报警都会对应不同的redis队列 alarm去读取这个数据的时候希望先读取P0的数据,再读取P1的数据,最后读取P5的数据,因为希望先处理优先级高的。于是:用了redis的brpop指令。

注意事项:alarm是个单点。对于未恢复的告警是放到alarm的内存中的,alarm还需要做报警合并,故而alarm只能部署一个实例。后期需要想办法改进。

报警合并:如果某个核心服务挂了,可能会造成大面积报警,为了减少报警短信数量,我们做了报警合并功能。把报警信息写入links模块,然后links返回一个url地址给alarm,alarm将这个url链接发给用户,这样用户只要收到一条短信(里边是个url地址),点击url进去就是多条报警内容。

highQueues中配置的几个event队列中的事件是不会做报警合并的,因为那些是高优先级的报警,报警合并只是针对lowQueues中的事件。如果所有的事件都不想做报警合并,就把所有的event队列都配置到highQueues中即可

(4)api组件,提供统一的restAPI操作接口。比如:api组件接收查询请求,根据一致性哈希算法去相应的graph实例查询不同metric的数据,然后汇总拿到的数据,最后统一返回给用户。具体的可以参考http://api.open-falcon.org 的接口文档,注意有模板用户、管理等接口,支持post、get等方法。

(5)gateway 模块主要是为了解决机房分区,试用与异地多活、混合云、多云环境的解决方案。Falcon多数据中心时,提供数据路由功能。多IDC时,可能面对 "分区到中心的专线网络质量较差&公网ACL不通" 等问题。这时,可以在分区内部署一套数据路由服务,接收本分区内的所有流量(包括所有的agent流量),然后通过公网(开通ACL),将数据push给中心的Transfer。如下图,

从client端的角度来看,gateway和transfer提供了完全一致的功能和接口。只有遇到网络分区的情况时,才有必要使用gateway组件。服务启动后,可以通过日志查看服务的运行状态,日志文件地址为./var/app.log。可以通过调试脚本./test/debug查看服务器的内部状态数据,如 运行 bash ./test/debug 可以得到服务器内部状态的统计信息。

gateway组件,部署于分区中。单个gateway实例的转发能力,为 {1核, 500MB内存, Qps不小于1W/s};官方建议,一个分区至少部署两个gateway实例,来实现高可用。在我们内部新加坡、雅加达、华盛顿、深圳、广州、北京等公有云区域。每个区域部署一个gateway(2C4G),然后分别通过跨区域带宽将数据回传到我们上海、杭州IDC内。

(6)graph 是存储绘图数据、历史数据的组件。graph组件 接收transfer组件推送上来的监控数据,同时处理query组件的查询请求、返回绘图数据。

(7)hbs(Heartbeat Server) 心跳服务器,公司所有agent都会连到HBS,每分钟发一次心跳请求。

Portal的数据库中有一个host表,维护了公司所有机器的信息,比如hostname、ip等等。这个表中的数据通常是从公司CMDB中同步过来的。但是有些规模小一些的公司是没有CMDB的,那此时就需要手工往host表中录入数据,这很麻烦。于是我们赋予了HBS第一个功能:agent发送心跳信息给HBS的时候,会把hostname、ip、agent version、plugin version等信息告诉HBS,HBS负责更新host表。

falcon-agent有一个很大的特点,就是自发现,不用配置它应该采集什么数据,就自动去采集了。比如cpu、内存、磁盘、网卡流量等等都会自动采集。我们除了要采集这些基础信息之外,还需要做端口存活监控和进程数监控。那我们是否也要自动采集监听的端口和各个进程数目呢?我们没有这么做,因为这个数据量比较大,汇报上去之后用户大部分都是不关心的,太浪费。于是我们换了一个方式,只采集用户配置的。比如用户配置了对某个机器80端口的监控,我们才会去采集这个机器80端口的存活性。那agent如何知道自己应该采集哪些端口和进程呢?向HBS要,HBS去读取Portal的数据库,返回给agent。

之后我们会介绍一个用于判断报警的组件:Judge,Judge需要获取所有的报警策略,让Judge去读取Portal的DB么?不太好。因为Judge的实例数目比较多,如果公司有几十万机器,Judge实例数目可能会是几百个,几百个Judge实例去访问Portal数据库,也是一个比较大的压力。既然HBS无论如何都要访问Portal的数据库了,那就让HBS去获取所有的报警策略缓存在内存里,然后Judge去向HBS请求。这样一来,对Portal DB的压力就会大大减小

hbs是可以水平扩展的,至少部署两个实例以保证可用性。一般一个实例可以搞定5000台机器,所以说,如果公司有10万台机器,可以部署20个hbs实例,前面架设lvs,agent中就配置上lvs vip即可。

(8)judge Judge用于告警判断,agent将数据push给Transfer,Transfer不但会转发给Graph组件来绘图,还会转发给Judge用于判断是否触发告警。

因为监控系统数据量比较大,一台机器显然是搞不定的,所以必须要有个数据分片方案。Transfer通过一致性哈希来分片,每个Judge就只需要处理一小部分数据就可以了。所以判断告警的功能不能放在直接的数据接收端:Transfer,而应该放到Transfer后面的组件里。

Judge监听了一个http端口,提供了一个http接口:/count,访问之,可以得悉当前Judge实例处理了多少数据量。推荐的做法是一个Judge实例处理50万~100万数据,用个5G~10G内存,如果所用物理机内存比较大,比如有128G,可以在一个物理机上部署多个Judge实例。

(9)nodata  用于检测监控数据的上报异常。nodata和实时报警judge模块协同工作,过程为: 配置了nodata的采集项超时未上报数据,nodata生成一条默认的模拟数据;用户配置相应的报警策略,收到mock数据就产生报警。采集项上报异常检测,作为judge模块的一个必要补充,能够使judge的实时报警功能更加可靠、完善。

此功能还是可能会出现较多的误报现象,例如网络异常,导致数据无法上传,这时候就会检测到数据异常。

(10)transfer transfer是数据转发服务。它接收agent上报的数据,然后按照哈希规则进行数据分片、并将分片后的数据分别push给graph&judge等组件。

以上内容是falcon后端程序中比较核心的模块,同时也可以根据自己的需求去定制一些模块。

转载于:https://blog.51cto.com/dreamlinux/2385745

开源监控解决方案OpenFalcon系列(一)相关推荐

  1. openfalcon 组件监控_开源监控解决方案OpenFalcon系列(一)

    OpenFalcon是由小米的运维团队开源的一款企业级.高可用.可扩展的开源监控解决方案,,在众多开源爱好者的支持下,功能越来越丰富,文档更加的完善,OpenFalcon 已经成为国内最流行的监控系统 ...

  2. 小米开源监控系统OpenFalcon应对高并发7种手段

    2019独角兽企业重金招聘Python工程师标准>>> 小米开源监控系统OpenFalcon应对高并发7种手段 原创 2016-04-01 秦晓辉 高可用架构 编者按:本文是秦晓辉在 ...

  3. 小米的开源监控系统open-falcon架构设计,看完明白如何设计一个好的系统

    小米的开源监控系统open-falcon架构设计,看完明白如何设计一个好的系统 小米的http://book.open-falcon.org/zh/intro/ 早期,一直在用zabbix,不过随着业 ...

  4. 小米开源监控系统监控mysql_二、小米开源监控平台open-falcon安装与使用

    小米开源企业级监控平台open-falcon安装与部署 由于实验机器不多,并不是生产环境,只是作为学习使用,故采用 ALL In One 的模式,即一个中心主机,其他主机都往这一个中心主机推送数据.中 ...

  5. 开源监控解决方案Nagios+Cacti+PNP4Nagios+NConf+NDOUtils+Nagvis(六)ndoutils安装

    前面的文章已经说过,NDOUtils必须使用2.0的版本才支持nagios4x,比较幸运的是该版本2014年就已经发布. 一.安装 #tar -axf ndoutils-2.0.0.tar.gz -C ...

  6. 小米开源监控系统Open-falcon部署笔记(上)

    一.环境准备 操作系统:centos7.4 1.1 更换yum源 1.1.1 备份默认的yum文件 mv /etc/yum.repos.d /etc/yum.repos.d.bak 1.1.2 新建y ...

  7. 开源监控解决方案Nagios+Cacti+PNP4Nagios+NConf+NDOUtils+Nagvis(九)NagVis安装

    NagVis是Nagios的一个插件,它在用户选择一个背景图片上显示主机和服务状态. 背景图片必须是PNG格式,但可以自己选择背景图片,可以是图.系统文档图片.机房照片,或者系统环境的示意图等. 通过 ...

  8. 开源监控解决方案WGCLOUD - 如何监测摄像头的状态

    我们是硬件集成商,园区内有很多摄像头,有时候想监测摄像头是否正常工作,是否在线,WGCLOUD哪个模块可以监测摄像头? WGCLOUD可以监测摄像头的 WGCLOUD有个监测模块[端口管理],它可以用 ...

  9. 主流开源监控系统汇总

    监控做为自动化运维的重要组成部分,承担着反馈的作用. 以往,在缺少告警机制的情况下,企业无法第一时间洞悉到系统发生故障,只能通过用户的反馈来获取,系统运维人员往往也只是充当了一个"救火&qu ...

最新文章

  1. 广告条随滚动条的移动而移动
  2. 【Ubuntu】ubuntu工具 记录shell终端的内容到文件中:script
  3. 【网络流】学习笔记:一次理解网络流!
  4. 5.串口操作之API篇 SetupComm GetCommState SetCommState
  5. 7 怎么查看文件夹容量_C盘(系统盘)磁盘剩余容量告警?如何解决与预防,C盘容量告急解决方法简单汇总!...
  6. bat射击游戏代码_这张图打开就是3D射击游戏,我是服气的
  7. HDFS【2.5.1】系列1:HDFS的核心数据结构---元数据
  8. hdfs/hbase报错:Incomplete HDFS URI, no host
  9. kbmmw 5.06.00 beta 发布
  10. 漫游Kafka设计篇之Producer和Consumer
  11. asterisk架构
  12. Visual Studio 2010 sp1
  13. Docker创建一个镜像
  14. python 正交矩阵_协方差矩阵的计算、PCA
  15. el-tooltip位置不灵活_要提高步伐移动的灵活性,注意这5点,加以改正,步伐不再沉重...
  16. Rabbit MQ 安装
  17. 北京地铁站经纬度收集
  18. “Navicat Premium”已损坏,无法打开。 您应该将它移到废纸篓。
  19. doodoo.js配置教程
  20. C# 使用Timer设置一个定时任务

热门文章

  1. 神武4手游服务器维护,神武4手游势不可挡开服时间表_神武4手游新区开服预告_第一手游网手游开服表...
  2. 财务管理专业应该报计算机二级哪个科目,我是应该报计算机二级还是三级呢
  3. windows 10下搭建pyspark与遇到的一些问题的解决方法
  4. 树形DP+树状数组 HDU 5877 Weak Pair
  5. 全国计算机等级考试题库二级C操作题100套(第42套)
  6. 服务器端密钥库文件,使用密钥库文件为SOAP运行客户端WS
  7. linux mysql 修改root密码_Mac下重置mysql的root密码
  8. 严格程度_国内医疗器械生产许可证申请申报-经营一类、二类、严格的三类之间区别...
  9. 客户机-服务器系统,什么是客户机/服务器计算
  10. db设计专用excel_工程师必备:硬件EMC设计规范