OpenFalcon简介

OpenFalcon

小米的监控系统:OpenFalcon是一款企业级、高可用、可扩展的开源监控解决方案。

 

一、特点

①强大灵活的数据采集

自动发现,支持falcon-agent、snmp、支持用户主动push、用户自定义插件支持、opentsdb data model like(timestamp、endpoint、metric、key-value tags)

③高效率的告警策略管理

支持每个周期上亿次的数据采集、告警判定、历史数据存储和查询

③高效率的告警策略管理

高效的portal、支持策略模板、模板继承和覆盖、多种告警方式、支持callback调用

④人性化的告警设置

最大告警次数、告警级别、告警恢复通知、告警暂停、不同时段不同阈值、支持维护周期

⑤高效率的graph组件

单机支撑200万metric的上报、归档、存储(周期为1分钟)

⑥高效的历史数据query组件

采用rrdtool的数据归档策略,秒级返回上百个metric一年的历史数据

⑦dashboard

多维度的数据展示,用户自定义Screen

⑧高可用

整个系统无核心单点,易运维,易部署,可水平扩展

⑨开发语言

整个系统的后端,全部golang编写,portal和dashboard使用python编写。

二、结构

 

每台服务器都安装falcon-agent。falcon-agent是一个golang开发的daemon程序,用于自发现的采集单机的各种数据和指标。只要安装了falcon-agent,机器就会自动采集各项指标,主动上报,不需要用户在server做任何配置。虽然server端有较大的压力,但是open-falcon的服务端组件单机性能足够高,同时可以水平扩展,所以自动采集足够多的数据,更方便SRE和DEV事后追查问题。

另外,falcon-agent提供了一个proxy-gateway,用户可以方便的通过http接口,push数据到本机的gateway,gateway会帮忙高效率的转发到server端。

三、数据模型

   open-falcon采用和opentsdb相同的数据格式:metric、endpoint、多组key value tags。

       {

    metric: load.1min,

    endpoint: open-falcon-host,

    tags: srv=falcon,idc=aws-sgp,group=az1,

    value: 1.5,

    timestamp: date +%s,

    counterType: GAUGE,

    step: 60

}

四、数据采集

1、transfer,接收客户端发送的数据,做数据规整。然后transfer会根据一致性hash算法,进行数据分片,并转发到多个后端系统。

2、transfer 提供jsonRpc接口和telnet接口。transfer是无状态的,挂掉一台或者多台不会有影响,同时transfer性能很高,每分钟可以转发超过500万条数据。

3、transfer支持的业务后端有judge、graph、opentsdb。judge是高性能告警判定组件;graph是高性能数据存储、归档、查询组件;opentsdb是开源的时间序列数据存储服务。

4、transfer的数据来源有:

1.falcon-agent采集的基础监控数据

2.falcon-agent执行用户自定义的插件返回的数据

3.client library:线上的业务系统,都嵌入使用了统一的perfcounter.jar,对于业务系统中每个RPC接口的qps、latency都会主动采集并上报

说明:上面这三种数据,都会先发送给本机的proxy-gateway,再由gateway转发给transfer。

五、Alerting报警

1、报警判定,由judge组件来完成。用户在web portal配置相关的报警策略,存储在MySQL中。heartbeat server定期加载MySQL中的内容。judge也会定期和heartbeat server保持沟通,来获取相关的报警策略。

2、heartbeat sever除了加载MySQL中的内容,还会根据模板继承、模板项覆盖、报警动作覆盖、模板和hostGroup绑定,计算出最终关联到每个endpoint的告警策略,提供给judge组件来使用。

3、transfer转发到judge的每条数据,都会触发相关策略的判定,如果满足报警条件,则会发送给alarm,alarm再以邮件、短信、米聊等形式通知相关用户,也可以执行用户预先配置好的callback地址。

4、用户可以灵活配置告警判定策略,比如连续n次都满足条件、不同时间段不同阈值、维护周期内忽略等等。另外也支持突升突降类的判定和告警。

六、API

1、快速读取存储在graph里的数据,靠graph和API组件来实现。

2、transfer会将数据往graph组件转发一份,graph收到数据以后,会以rrdtool的数据归档方式来存储,同时提供查询RPC接口。

3、API面向终端用户,收到查询请求后,会去多个graph里查询不同metric的数据,汇总后统一返回给用户。

七、Dashboard仪表盘

dashboard首页,用户可以以多个维度来搜索endpoint列表,即可以根据上报的tags来搜索关联的endpoint。

1、host group的管理可以和服务树结合,机器进出服务树节点,相关的模板会自动关联或者解除。服务上下线不需要手动来变更监控。

2、模板支持继承和策略覆盖,模板和host group绑定后,host group下的机器会自动应用该模板的所有策略。

3、也可以写表达式达到监控的目的,对于endpoint不是机器名的场景非常方便。

八、Storage存储

1、监控系统数据量大、写操作多、查询需要高效率。

2、open-falcon数据按照用途分成两类,用来绘图的和做数据挖掘的。

3、对于绘图的数据来讲,查询要快,信息不能丢失。open-falcon参考rrdtool的理念,在数据每次存入的时候,自动采样、归档。归档策略如下,历史数据保存5年;按照平均值采样、最大值采样、最小值采样存三份。

4、对于原始数据,transfer会打一份到hbase,也可以直接使用opentsdb,transfer支持往opentsdb写入数据。

posted @ 2019-08-18 20:46  Alfred.Lee  阅读(956)  评论(0编辑  收藏  举报