温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Open-falcon原理介绍

发布时间:2020-03-31 01:27:40 来源:网络 阅读:1581 作者:赛里 栏目:系统运维

open-falcon是小米开源的监控工具。open-falcon有三种安装方式,一种是单机安装(分后端和前端安装,建议各一台服务器)、一种是Docker安装、最后一种是在多台机器上分布式安装。


重点:本案介绍第一种,单机安装(其实是分两台服务器,一台安装后端服务、一台是安装前端服务)。


分布式安装也很简单,就是把open-falcon二进制包git下来,每台服务器只留需要的模块文件夹和open-falcon执行脚本,然后更改模块文件夹下配置文件,最后启动即可。生成环境环境一般建议分布式部署,参考链接:https://book.open-falcon.org/zh_0_2/distributed_install/


open-falcon监控一般是用各种插件。




架构图:

Open-falcon原理介绍Open-falcon原理介绍

open-falcon官网架构图


Open-falcon原理介绍


Open-falcon原理介绍

互联网上图


组件描述表:

组件名称

用途

服务端口

备注

Agent

部署在需要监控的服务器上

http: 1988

http://192.168.153.134:1988/

Transfer

数据接收端,转发数据到后端的Graph和Judge

http: 6060

rpc: 8433

socket: 4444


Graph

操作rrd文件存储监控数据

http: 6071

rpc:6070


Query

查询各个Graph数据,提供统一http查询接口

http: 9966


Dashboard

查询监控历史趋势图的web

http: 8081

需要python环境,需要连接数据库dashborad实例、graph组件

Task

负载一些定时任务,索引全量更新、垃圾索引清理、自身组件监控等

http: 8082

需要连接数据库graph实例

Aggregator

集群聚合模块

http: 6055


Alarm

告警

http: 9912


Api

API

http: 8080


Gateway

Gateway

http: 16060


Hbs

心跳服务器

6030


Judge

告警判断

http: 6081

rpc: 6080


Nodata

告警异常处理

http: 6090


Mysql

数据库

3306


Redis

缓存服务器

6379




工作原理:


Falcon-agent(客户端):

每台服务器,都有安装falcon-agent,falcon-agent是一个golang开发的daemon程序,用于自发现的采集单机的各种数据和指标,这些指标包括不限于以下几个方面,共计200多项指标。

    CPU相关

    磁盘相关

    IO

    Load

    内存相关

    网络相关

    端口存活、进程存活

    ntp offset(插件)

    某个进程资源消耗(插件)

    netstat、ss 等相关统计项采集

    机器内核配置参数

只要安装了falcon-agent的机器,就会自动开始采集各项指标,主动上报,不需要用户在server做任何配置(这和zabbix有很大的不同),这样做的好处,就是用户维护方便,覆盖率高。当然这样做也会server端造成较大的压力,不过open-falcon的服务端组件单机性能足够高,同时都可以水平扩展,所以自动多采集足够多的数据,反而是一件好事情,对于SRE和DEV来讲,事后追查问题,不再是难题。

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

falcon-agent,可以在我们的github上找到 : https://github.com/open-falcon/falcon-plus


Transfer(传输者):

falcon-agent将数据上报给transfer,它们之间建立的长链接。


transfer,接收客户端发送的数据,做一些数据规整,检查之后,转发到多个后端系统去处理。在转发到每个后端业务系统的时候,transfer会根据一致性hash算法,进行数据分片,来达到后端业务系统的水平扩展。

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

transfer目前支持的业务后端,有三种,judge、graph、opentsdb。judge是我们开发的高性能告警判定组件,graph是我们开发的高性能数据存储、归档、查询组件,opentsdb是开源的时间序列数据存储服务。可以通过transfer的配置文件来开启。


transfer的数据来源,一般有三种:

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

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

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

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


Judge集群(告警判断):

falcon-agent将数据上报给transfer后,transfer转发给Judge集群,使用一致性hash做数据分片。一个实例只处理一部分数据。


Graph集群(数据存储、规定、查询接口):

falcon-agent将数据上报给transfer后,transfer转发给Graph集群,使用一致性hash做数据分片。一个实例只处理一部分数据。rrdtool的数据归档方式存储,同时提供RPC接口。


Alarm(告警):

Judge判断后,放到redis队列。alarm从redis队列读取报警事件做处理,该发短信发短信、该发邮件发邮件,该回调接口就回调。告警合并也在alarm里面做的,专门发送报警的sender模块,告警合并依赖的links模块。


Query:

因为Graph做过分片处理,query要采用和transfer一致的一致性hash数据分片。对外提供一个http接口。query是go写的后端模块。


Dashborad:

在dashborad里面查询监控数据,是python做的web。


Portal:

portal是python做的web,配置监控策略,然后写入数据库。


Heartbeat server:

心跳服务器,falcon-agent每分钟都会发送心跳给heartbeat server,上报自己的版本、hostname、ip等。从heartbeat拉取要执行的插件和特殊采集项等。这些信息需要heartbeat访问 Portal的数据库要获取。Judge要做告警判断,需要先从portal数据库中读取报警策略,但是Judge实例比较多,都去读取数据库会造成很大压力,所以可以让heartbeat成为db cache缓存,heartbeat从数据库中读取数据缓存到内存,Judge调用heartbeat的rpc接口,获取报警策略。


数据存储:

对于监控系统来讲,历史数据的存储和高效率查询,永远是个很难的问题!

    数据量大:目前我们的监控系统,每个周期,大概有2000万次数据上报(上报周期为1分钟和5分钟两种,各占50%),一天24小时里,从来不会有业务低峰,不管是白天和黑夜,每个周期,总会有那么多的数据要更新。

    写操作多:一般的业务系统,通常都是读多写少,可以方便的使用各种缓存技术,再者各类数据库,对于查询操作的处理效率远远高于写操作。而监控系统恰恰相反,写操作远远高于读。每个周期几千万次的更新操作,对于常用数据库(MySQL、postgresql、mongodb)都是无法完成的。

    高效率的查:我们说监控系统读操作少,是说相对写入来讲。监控系统本身对于读的要求很高,用户经常会有查询上百个meitric,在过去一天、一周、一月、一年的数据。如何在1秒内返回给用户并绘图,这是一个不小的挑战。

open-falcon在这块,投入了较大的精力。我们把数据按照用途分成两类,一类是用来绘图的,一类是用户做数据挖掘的。

对于绘图的数据来讲,查询要快是关键,同时不能丢失信息量。对于用户要查询100个metric,在过去一年里的数据时,数据量本身就在那里了,很难1秒之类能返回,另外就算返回了,前端也无法渲染这么多的数据,还得采样,造成很多无谓的消耗和浪费。我们参考rrdtool的理念,在数据每次存入的时候,会自动进行采样、归档。我们的归档策略如下,历史数据保存5年。同时为了不丢失信息量,数据归档的时候,会按照平均值采样、最大值采样、最小值采样存三份。

// 1分钟一个点存 12小时
c.RRA("AVERAGE", 0.5, 1, 720)

// 5m一个点存2d
c.RRA("AVERAGE", 0.5, 5, 576)
c.RRA("MAX", 0.5, 5, 576)
c.RRA("MIN", 0.5, 5, 576)

// 20m一个点存7d
c.RRA("AVERAGE", 0.5, 20, 504)
c.RRA("MAX", 0.5, 20, 504)
c.RRA("MIN", 0.5, 20, 504)

// 3小时一个点存3个月
c.RRA("AVERAGE", 0.5, 180, 766)
c.RRA("MAX", 0.5, 180, 766)
c.RRA("MIN", 0.5, 180, 766)

// 1天一个点存1year
c.RRA("AVERAGE", 0.5, 720, 730)
c.RRA("MAX", 0.5, 720, 730)
c.RRA("MIN", 0.5, 720, 730)

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


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI