内容简介:opne-falcon是小米公司推出的一款开源的企业级监控产品,下面对它做些简单的介绍。[图片上传失败...(image-11e30b-1550819626391)]每台服务器,都有安装falcon-agent,falcon-agent是一个golang开发的daemon程序,用于自发现的采集单机的各种数据和指标,这些指标包括不限于以下几个方面,共计200多项指标。
1 Open-falcon简介
opne-falcon是小米公司推出的一款开源的企业级监控产品,下面对它做些简单的介绍。
1.1 工程结构
[图片上传失败...(image-11e30b-1550819626391)]
每台服务器,都有安装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
1.2 组件介绍
graph
graph是存储绘图数据的组件。graph组件 接收transfer组件推送上来的监控数据,同时处理api组件的查询请求、返回绘图数据。
hbs(Heartbeat Server)
心跳服务器,公司所有agent都会连到HBS,每分钟发一次心跳请求。
judge
Judge用于告警判断,agent将数据push给Transfer,Transfer不但会转发给Graph组件来绘图,还会转发给Judge用于判断是否触发告警。
transfer
transfer是数据转发服务。它接收agent上报的数据,然后按照哈希规则进行数据分片、并将分片后的数据分别push给graph&judge等组件。
nodata
nodata用于检测监控数据的上报异常。nodata和实时报警judge模块协同工作,过程为: 配置了nodata的采集项超时未上报数据,nodata生成一条默认的模拟数据;用户配置相应的报警策略,收到mock数据就产生报警。采集项上报异常检测,作为judge模块的一个必要补充,能够使judge的实时报警功能更加可靠、完善。
aggregator
集群聚合模块。聚合某集群下的所有机器的某个指标的值,提供一种集群视角的监控体验。
agent
agent用于采集机器负载监控指标,比如cpu.idle、load.1min、disk.io.util等等,每隔60秒push给Transfer。agent与Transfer建立了长连接,数据发送速度比较快,agent提供了一个http接口 /v1/push
用于接收用户手工push的一些数据,然后通过长连接迅速转发给Transfer。
api
api组件,提供统一的restAPI操作接口。比如:api组件接收查询请求,根据一致性哈希算法去相应的graph实例查询不同metric的数据,然后汇总拿到的数据,最后统一返回给用户。
alarm
alarm模块是处理报警event的,judge产生的报警event写入redis,alarm从 redis 读取处理,并进行不同渠道的发送。
task
task是监控系统一个必要的辅助模块。定时任务,实现了如下几个功能:
- index更新。包括图表索引的全量更新 和 垃圾索引清理。
- falcon服务组件的自身状态数据采集。定时任务了采集了transfer、graph、task这三个服务的内部状态数据。
- falcon自检控任务。
1.3 特性
- 强大灵活的数据采集:自动发现,支持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 编写。
2 环境搭建
open-falcon需要运行在 linux 上,目前没有发现基于windows的版本。
下面主要的内容是本地环境搭建,vbox+Centos7。
open-falcon分为前端和后端,后端依赖软件的安装Centos与Ubuntu差异不大,这里就只说centos; 前端依赖的软件安装稍有不同,下面会提供centos与ubuntu两种命令。
2.1 环境准备
本地基础环境
- VirtualBox 5.1.30 r118389;
- CentOS-7-x86_64-Minimal-1804;
- Git >= 1.7.5
- GO >= 1.6
Centos7
虚拟机的安装这里就不再赘述,具体的网络配置可以参考: https://www.linuxidc.com/Linux/2017-01/139345.htm
设置代理及DNS配置
添加代理并生效
vi /etc/profile # 粘贴下列代码 export http_proxy="http://xxx.xx.xx.xx:8080" export https_proxy="https://xxx.xx.xx.xx:8080" export ftp_proxy="ftp://xxx.xx.xx.xx:8080" export no_proxy="xxx,xxx,xxx" #生效配置文件 source /etc/profile
添加DNS配置并生效
#连接外网的网卡 vi /etc/sysconfig/network-scripts/ifcfg-enp0s3 #添加DNS配置 DNS1=xxx.xx.xx.xx DNS2=xxx.xx.xx.xx #重启网络,生效配置 service network restart
关闭防火墙
#临时关闭 systemctl stop firewalld #禁止开机启动 systemctl disable firewalld
到这里虚拟机的安装及配置应该就完成了,可以测试一下,网络以及主机命令交互。默认的yum源速度还可以,这里就不再说如何改yum源了。
2.2 依赖软件
2.2.1 git
安装
yum install -y git
2.2.2 redis
安装
yum install -y redis #检查服务是否启动 ps -ef|grep redis #若未启动,启动服务 systemctl start redis.service #root用户直接运行即可 service redis start
2.2.3 mysql
安装
yum install -y mysql-server
这里完成安装后建议使用默认密码,原因: 方便 。
开启远程访问
mysql默认是关闭远程访问的,这里先开启。
#登录mysql,执行语句 grant all privileges on *.* to 'root' @'%' identified by '你的root用户密码'; #刷新权限 flush privileges;
2.2.4 golang
安装
yum install -y golang
#查看 GO 环境配置 go env GOARCH="amd64" GOBIN="" GOEXE="" GOHOSTARCH="amd64" GOHOSTOS="linux" GOOS="linux" GOPATH="/home/jay/go" #默认是在当前用户目录下go文件下 GORACE="" GOROOT="/usr/lib/golang" #GO安装目录 GOTOOLDIR="/usr/lib/golang/pkg/tool/linux_amd64" GCCGO="gccgo" CC="gcc" GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build101066216=/tmp/go-build -gno-record-gcc-switches" CXX="g++" CGO_ENABLED="1" CGO_CFLAGS="-g -O2" CGO_CPPFLAGS="" CGO_CXXFLAGS="-g -O2" CGO_FFLAGS="-g -O2" CGO_LDFLAGS="-g -O2" PKG_CONFIG="pkg-config"
2.2.5 python&其他软件安装(前端系统依赖)
执行以下命令,完成软件安装
centos:
yum install -y python-virtualenv yum install -y python-devel yum install -y openldap-devel yum install -y mysql-devel yum groupinstall "Development tools"
ubuntu:
apt-get install -y python-virtualenv apt-get install -y slapd ldap-utils apt-get install -y libmysqld-dev apt-get install -y build-essential apt-get install -y python-dev libldap2-dev libsasl2-dev libssl-dev
2.3 数据准备
2.3.1 源码包
clone官方github上的源码到本地,务必依以下结构创建目录。
mkdir -p $GOPATH/src/github.com/open-falcon cd $GOPATH/src/github.com/open-falcon git clone https://github.com/open-falcon/falcon-plus.git
若无法clone,可以下载zip包,解压后上传指定目录。当然了,如果你不想自己编译,官方也有编译好的二进制包,后面会说。
2.3.2 数据库
这里官方已提供完整的 SQL 语句,只需按顺序执行就可以,方式不限; 语句地址: https://github.com/open-falcon/falcon-plus/tree/master/scripts/mysql/db_schema 执行顺序:
1_uic-db-schema.sql 2_portal-db-schema.sql 3_dashboard-db-schema.sql 4_graph-db-schema.sql 5_alarms-db-schema.sql
2.3.3 编译源码(可省略)
cd $GOPATH/src/github.com/open-falcon/falcon-plus/ # make all modules make all # make specified module make agent # pack all modules make pack
执行 make pack
编译成功后,就可得到 open-falcon-vx.x.x.tar.gz
。
官方也提供了编译好的 二进制 包,下载即可。
3 启动
3.1 后端
3.1.2 创建目录并解压二进制包
#进入当前用户目录 cd ~ #编辑.bash_profile,在当前用户添加工作目录 vi .bash_profile export FALCON_HOME=$HOME/work export WORKSPACE=$FALCON_HOME/open-falcon #创建工作目录 mkdir -p $WORKSPACE #解压之前编译(下载)好的二进制包到工作目录 tar -xzvf open-falcon-vx.x.x.tar.gz -C $WORKSPACE
3.1.3 启动后端
启动全部模块
cd $WORKSPACE ./open-falcon start
检查启动状态
./open-falcon check #成功状态示例 falcon-graph UP 14577 falcon-hbs UP 14586 falcon-judge UP 14594 falcon-transfer UP 14600 falcon-nodata UP 14606 falcon-aggregator UP 14613 falcon-agent UP 14621 falcon-gateway UP 14628 falcon-api UP 14634 falcon-alarm UP 14648
3.2 前端
下载前端源码至工作目录$WORKSPACE,若网络不给力,只有手动上传了。
cd $WORKSPACE git clone https://github.com/open-falcon/dashboard.git
进入dashboard目录,启动前端系统。
cd dashboard virtualenv ./env ./env/bin/pip install -r pip_requirements.txt -i https://pypi.douban.com/simple #开发模式启动前端系统 ./env/bin/python wsgi.py #生产环境启动系统(这里可能出现权限问题,建议sudo执行) bash control start #生产环境停止系统 bash control stop #生产环境查看日志 bash control tail
启动后,主机访问虚拟机ip:8081即可。
4 简单入门
4.1 查看监控数据
我们说agent只要部署到机器上,并且配置好了heartbeat和transfer就自动采集数据了,我们就可以去dashboard上面搜索监控数据查看了。dashboard是个web项目,浏览器访问之。左侧输入endpoint搜索,endpoint是什么?应该用什么搜索?对于agent采集的数据,endpoint都是机器名,去目标机器上执行 hostname
,看到的输出就是endpoint,拿着hostname去搜索。
搜索到了吧?嗯,选中前面的复选框,点击“查看counter列表”,可以列出隶属于这个endpoint的counter,counter是什么? counter=${metric}/sorted(${tags})
假如我们要查看cpu.busy,在counter搜索框中输入cpu并回车。看到cpu.busy了吧,点击,会看到一个新页面,图表中就是这个机器的cpu.busy的近一小时数据了,想看更长时间的?右上角有个小三角,展开菜单,可以选择更长的时间跨度
[图片上传失败...(image-189391-1550819626389)]
[图片上传失败...(image-4a374c-1550819626389)]
4.2 如何配置报警策略
上节我们已经了解到如何查看监控数据了,如果数据达到阈值,比如cpu.busy太大的时候,我们应该如何配置告警呢?
4.2.1 配置报警接收人
falcon的报警接收人不是一个具体的手机号,也不是一个具体的邮箱,因为手机号、邮箱都是容易发生变化的,如果变化了去修改所有相关配置那就太麻烦了。我们把用户的联系信息维护在一个叫 帐户/Profile
里,以后如果要修改手机号、邮箱,只要修改自己的帐户信息即可。报警接收人也不是单个的人,而是一个组(Teams),比如falcon这个系统的任何组件出问题了,都应该发报警给falcon的运维和开发人员,发给falcon这个团队,这样一来,新员工入职只要加入falcon这个Team即可;员工离职,只要从falcon这个Team删掉即可。
浏览器访问UIC,如果启用了LDAP,那就用LDAP账号登陆,如果没有启用,那就注册一个或者找管理员帮忙开通。创建一个Team,名称姑且叫falcon,把自己加进去,待会用来做测试。
首先修改帐户信息,保证邮箱和手机号正确 [图片上传失败...(image-29e354-1550819626389)]
然后添加报警组,添加成员 [图片上传失败...(image-41a467-1550819626389)]
[图片上传失败...(image-685ce6-1550819626389)]
4.2.2 创建HostGroup
比如我们要对falcon-judge这个组件做端口监控,那首先创建一个HostGroup,把所有部署了falcon-judge这个模块的机器都塞进去,以后要扩容或下线机器的时候直接从这个HostGroup增删机器即可,报警策略会自动生效、失效。咱们为这个HostGroup取名为:sa.dev.falcon.judge,这个名称有讲究,sa是我们部门,dev是我们组,falcon是项目名,judge是组件名,传达出了很多信息,这样命名比较容易管理,推荐大家这么做。
[图片上传失败...(image-e02370-1550819626389)]
在往组里加机器的时候如果报错,需要检查portal的数据库中host表,看里边是否有相关机器。那host表中的机器从哪里来呢?agent有个heartbeat(hbs)的配置,agent每分钟会发心跳给hbs,把自己的ip、hostname、agent version等信息告诉hbs,hbs负责写入host表。如果host表中没数据,需要检查这条链路是否通畅。
4.2.3 创建策略模板
portal最上面有个Templates链接,这就是策略模板管理的入口。我们进去之后创建一个模板,名称姑且也叫:sa.dev.falcon.judge.tpl,与HostGroup名称相同,在里边配置一个端口监控,通常进程监控有两种手段,一个是进程本身是否存活,一个是端口是否在监听,此处我们使用端口监控。
[图片上传失败...(image-e484f4-1550819626389)]
[图片上传失败...(image-696e8f-1550819626389)]
右上角那个加号按钮是用于增加策略的,一个模板中可以有多个策略,此处我们只添加了一个。下面可以配置报警接收人,此处填写的是falcon,这是之前在UIC中创建的Team。
4.2.4 将HostGroup与模板绑定
一个模板是可以绑定到多个HostGroup的,现在我们重新回到HostGroups页面,找到sa.dev.falcon.judge这个HostGroup,右侧有几个超链接,点击【templates】进入一个新页面,输入模板名称,绑定一下就行了。
[图片上传失败...(image-ebb279-1550819626389)]
[图片上传失败...(image-6b6b7e-1550819626389)]
4.2.5 以80端口为例完成一次告警
完成上面的步骤,相信已对HostGroup和Templates有了一个简单的了解,如果judge组件宕机,端口不再监听了,就会报警。不过大家不要为了测试报警效果,直接把judge组件给干掉了,因为judge本身就是负责判断报警的,把它干掉了,那就没法判断了...所以这里我们使用常见的80端口来完成一次告警处理。
安装&启动Apache服务(已有请忽略)
yum -y install httpd #启动apache服务 service httpd start #查看服务启动状态 service httpd status #服务启动成功 ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled) Active: active (running) since Tue 2018-06-12 14:16:22 CST; 8s ago Docs: man:httpd(8) man:apachectl(8) Main PID: 1597 (httpd) Status: "Processing requests..." CGroup: /system.slice/httpd.service ├─1597 /usr/sbin/httpd -DFOREGROUND ├─1598 /usr/sbin/httpd -DFOREGROUND ├─1599 /usr/sbin/httpd -DFOREGROUND ├─1600 /usr/sbin/httpd -DFOREGROUND ├─1601 /usr/sbin/httpd -DFOREGROUND └─1602 /usr/sbin/httpd -DFOREGROUND ...
这里启动以后可以通过ss -ln命令查看80端口是否已被监听。
ss -ln|grep LISTEN #80端口已监听 tcp LISTEN 0 128 :::80 :::*
修改策略模板
为了方便,这里就不修改名字了。
sa.dev.falcon.judge.tpl
查看80端口监听状态
现在回到Dashboard,查看 net.port.listen/port=80
是否已在列表中。 [图片上传失败...(image-5cd483-1550819626389)]
因为agent对于端口的监控只有两个值 1:监听中 0:未监听,所以表中可以看到一个关闭到启动的过程。 [图片上传失败...(image-184ef9-1550819626389)]
关闭Apache服务,触发告警
关闭服务器中的Apache服务
service httpd stop
现在继续80端口的监控信息,agent大概60s上报一次状态。 [图片上传失败...(image-fbeae5-1550819626389)]
打开Alarm-Dashboard,这里可以看到已触发的告警列表。 [图片上传失败...(image-f12db6-1550819626389)]
附录
常用配置文件注释
- agent配置,目录$WORKSPACE/agent/config/cfg.json
{ "debug": true, # 控制一些debug信息的输出,生产环境通常设置为false "hostname": "", # agent采集了数据发给transfer,endpoint就设置为了hostname,默认通过`hostname`获取,如果配置中配置了hostname,就用配置中的 "ip": "", # agent与hbs心跳的时候会把自己的ip地址发给hbs,agent会自动探测本机ip,如果不想让agent自动探测,可以手工修改该配置 "plugin": { "enabled": false, # 默认不开启插件机制 "dir": "./plugin", # 把放置插件脚本的git repo clone到这个目录 "git": "https://github.com/open-falcon/plugin.git", # 放置插件脚本的git repo地址 "logs": "./logs" # 插件执行的log,如果插件执行有问题,可以去这个目录看log }, "heartbeat": { "enabled": true, # 此处enabled要设置为true "addr": "127.0.0.1:6030", # hbs的地址,端口是hbs的rpc端口 "interval": 60, # 心跳周期,单位是秒 "timeout": 1000 # 连接hbs的超时时间,单位是毫秒 }, "transfer": { "enabled": true, "addrs": [ "127.0.0.1:18433" ], # transfer的地址,端口是transfer的rpc端口, 可以支持写多个transfer的地址,agent会保证HA "interval": 60, # 采集周期,单位是秒,即agent一分钟采集一次数据发给transfer "timeout": 1000 # 连接transfer的超时时间,单位是毫秒 }, "http": { "enabled": true, # 是否要监听http端口 "listen": ":1988", "backdoor": false }, "collector": { "ifacePrefix": ["eth", "em"], # 默认配置只会采集网卡名称前缀是eth、em的网卡流量,配置为空就会采集所有的,lo的也会采集。可以从/proc/net/dev看到各个网卡的流量信息 "mountPoint": [] }, "default_tags": { }, "ignore": { # 默认采集了200多个metric,可以通过ignore设置为不采集 "cpu.busy": true, "df.bytes.free": true, "df.bytes.total": true, "df.bytes.used": true, "df.bytes.used.percent": true, "df.inodes.total": true, "df.inodes.free": true, "df.inodes.used": true, "df.inodes.used.percent": true, "mem.memtotal": true, "mem.memused": true, "mem.memused.percent": true, "mem.memfree": true, "mem.swaptotal": true, "mem.swapused": true, "mem.swapfree": true } }
- 内置的监控项,源码地址:[图片上传失败...(image-544858-1550819626388)]
package g import ( "time" ) // changelog: // 3.1.3: code refactor // 3.1.4: bugfix ignore configuration // 5.0.0: 支持通过配置控制是否开启/run接口;收集udp流量数据;du某个目录的大小 // 5.1.0: 同步插件的时候不再使用checksum机制 // 5.1.1: 修复往多个transfer发送数据的时候crash的问题 const ( VERSION = "5.1.1" COLLECT_INTERVAL = time.Second URL_CHECK_HEALTH = "url.check.health" NET_PORT_LISTEN = "net.port.listen" DU_BS = "du.bs" PROC_NUM = "proc.num" )
这里列出的监控项,如果不在策略模板中配置,默认是不监控的。
可能遇到的问题
1.简单入门中,已经在模板中配置了net.port.listen,但是在counter列表中并未发现。
出现这种情况,可能是当前网卡不在agent的监控范围内,具体的内容可以参考上面的agent配置文件信息。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
数据结构与算法分析
韦斯 / 机械工业 / 2007-1 / 55.00元
本书是国外数据结构与算法分析方面的标准教材,使用最卓越的Java编程语言作为实现工具讨论了数据结构(组织大量数据的方法)和算法分析(对算法运行时间的估计)。 随着计算机速度的不断增加和功能的日益强大,人们对有效编程和算法分析的要求也在增长。本书把算法分析与最有效率的Java程序的开发有机地结合起来,深入分析每种算法,内容全面、缜密严格,并细致讲解精心构造程序的方法。 第......一起来看看 《数据结构与算法分析》 这本书的介绍吧!