安装c 监控父进程重启连接wafn需要重启app怎么回事啊

小米开源监控系统Open-Falcon安装使用笔记
时间: 19:44:00
&&&& 阅读:1472
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&前言& & 近期爆出Zabbix有严重bug,加上一直对zabbix的性能、UI不满。所以这次想钻研一下最近很火的open-falcon,源于小米公司的开源项目,赞一个。一、官网介绍&&&&&&&&监控系统是整个运维环节,乃至整个产品生命周期中最重要的一环,事前及时预警发现故障,事后提供翔实的数据用于追查定位问题。监控系统作为一个成熟的运维产品,业界有很多开源的实现可供选择。当公司刚刚起步,业务规模较小,运维团队也刚刚建立的初期,选择一款开源的监控系统,是一个省时省力,效率最高的方案。之后,随着业务规模的持续快速增长,监控的对象也越来越多,越来越复杂,监控系统的使用对象也从最初少数的几个SRE,扩大为更多的DEVS,SRE。这时候,监控系统的容量和用户的“使用效率”成了最为突出的问题。&&&&&&&&监控系统业界有很多杰出的开源监控系统。我们在早期,一直在用zabbix,不过随着业务的快速发展,以及互联网公司特有的一些需求,现有的开源的监控系统在性能、扩展性、和用户的使用效率方面,已经无法支撑了。&&&&&&&&因此,我们在过去的一年里,从互联网公司的一些需求出发,从各位SRE、SA、DEVS的使用经验和反馈出发,结合业界的一些大的互联网公司做监控,用监控的一些思考出发,设计开发了小米的监控系统:Open-Falcon。特点:数据采集免配置:agent自发现、支持Plugin、主动推送模式容量水平扩展:生产环境每秒50万次数据收集、告警、存储、绘图,可持续水平扩展。告警策略自发现:Web界面、支持策略模板、模板继承和覆盖、多种告警方式、支持回调动作。告警设置人性化:支持最大告警次数、告警级别设置、告警恢复通知、告警暂停、不同时段不同阈值、支持维护周期,支持告警合并。历史数据高效查询:秒级返回上百个指标一年的历史数据。Dashboard人性化:多维度的数据展示,用户自定义Dashboard等功能。架构设计高可用:整个系统无核心单点,易运维,易部署架构图:图1:官网架构图图2:网友画的备注:虚线所在的aggregator组件还在设计开发阶段。每台服务器,都有安装falcon-agent,falcon-agent是一个golang开发的daemon程序,用于自发现的采集单机的各种数据和指标,这些指标包括不限于以下几个方面,共计200多项指标。CPU相关磁盘相关IOLoad内存相关网络相关端口存活、进程存活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上找到 :&数据流程图:图1:网友画的二、安装准备系统环境:CentOS-7.1yum -y updateyum&-y&install&wget&telnet git net-tools&deltarpm&epel-releasesed&-i&"s/SELINUX=enforcing/SELINUX=disabled/g"&/etc/selinux/configsetenforce&0systemctl&stop&firewalldsystemctl disable firewalld#安装一些系统常用软件,可免去一些麻烦yum&-y&install&gcc&gcc-c++&autoconf&libjpeg&libjpeg-devel&libpng&libpng-devel&freetype&freetype-devel&libxml2&libxml2-devel&zlib&zlib-devel&glibc&glibc-devel&glib2&glib2-devel&bzip2&bzip2-devel&zip&unzip&ncurses&ncurses-devel&curl&curl-devel&e2fsprogs&e2fsprogs-devel&krb5-devel&libidn&libidn-devel&openssl&openssh&openssl-devel&libxslt-devel&libevent-devel&ntp&&libtool-ltdl&bison&libtool&vim-enhanced&python&wget&lsof&iptraf&strace&lrzsz&kernel-devel&kernel-headers&pam-devel&Tcl/Tk&&cmake&&ncurses-devel&bison&setuptool&popt-devel&net-snmp&screen&perl-devel&pcre-devel&net-snmp&screen&tcpdump&rsync&sysstat&man&iptables&sudo&idconfig&git&system-config-network-tui&bind-utils&update&arpscan&tmux&elinks&numactl&iftop&&bwm-ng#安装pipwget&&--no-check-certificatepython&get-pip.py#使用国内豆瓣源#mkdir /root/.pip#vi /root/.pip/pip.conf[global]index-url&=&trusted-host&=&安装数据库wget&/get/mysql-community-release-el7-5.noarch.rpmrpm&-ivh&mysql-community-release-el7-5.noarch.rpmyum&install&mysql-community-serversystemctl&start&mysqlsystemctl enable mysqld安装redisyum install redissystemctl&start redissystemctl enable redis安装go语音环境(若使用编译好的二进制文件,此步骤可忽略)yum&install&golanggo&versiongo&version&go1.6.3&linux/amd64工作目录及初始化数据库mkdir /opt/openfalconcd /opt/openfalcongit&clone&#导入表结构mysql -h localhost -u root --password="" & db_schema/graph-db-schema.sqlmysql -h localhost -u root --password="" & db_schema/dashboard-db-schema.sqlmysql -h localhost -u root --password="" & db_schema/portal-db-schema.sqlmysql -h localhost -u root --password="" & db_schema/links-db-schema.sqlmysql -h localhost -u root --password="" & db_schema/uic-db-schema.sql下载编译好的组件mkdir /opt/openfalcon/tmpcd /opt/openfalcon/tmpwget&tar -zxf&rm -rf&cd /opt/openfalconfor x in `find ./tmp/ -name "*.tar.gz"`;do \ & &app=`echo $x|cut -d‘-‘-f2`; \ & &mkdir -p $ \ & &tar -zxf $x -C $ \done#解压完毕三、开始安装第一部分:绘图组件安装组件列表:组件名称用途服务端口备注Agent部署在目标机器采集机器监控项http: 1988Transfer数据接收端,转发数据到后端Graph和Judgehttp: 6060rpc: 8433socket: 4444Graph操作rrd文件存储监控数据http: 6070rpc: 60711.可部署多实例做集群2.需要连接数据库graphQuery查询各个Graph数据,提供统一http查询接口http: 9966Dashboard查询监控历史趋势图的web端http: 80811.需要python虚拟环境2.需要连接数据库dashborad、graphTask负责一些定时任务,索引全量更新、垃圾索引清理、自身组件监控等http: 80021.需要连接数据库graph安装Agentagent用于采集机器负载监控指标,比如cpu.idle、load.1min、disk.io.util等等,每隔60秒push给Transfer。agent与Transfer建立了长连接,数据发送速度比较快,agent提供了一个http接口/v1/push用于接收用户手工push的一些数据,然后通过长连接迅速转发给Transfer。每台机器上,都需要部署agent。cd/opt/openfalcon/agent/mv cfg.example.json cfg.jsonvim cfg.json- 修改 transfer这个配置项的enabled为 true,表示开启向transfer发送数据的功能- 修改 transfer这个配置项的addr为:["127.0.0.1:8433"] (改地址为transfer组件的监听地址, 为列表形式,可配置多个transfer实例的地址,用逗号分隔)# 默认情况下(所有组件都在同一台服务器上),保持cfg.json不变即可# cfg.json中的各配置项,可以参考 /open-falcon/agent/blob/master/README.md# 启动./control start# 查看日志./control tail安装Transfertransfer默认监听在:8433端口上,agent会通过jsonrpc的方式来push数据上来。cd /opt/openfalcon/transfer/mv cfg.example.json cfg.json# 默认情况下(所有组件都在同一台服务器上),保持cfg.json不变即可# cfg.json中的各配置项,可以参考 /open-falcon/transfer/blob/master/README.md# 如有必要,请酌情修改cfg.json# 启动transfer./control start# 校验服务,这里假定服务开启了6060的http监听端口。检验结果为ok表明服务正常启动。curl -s"http://127.0.0.1:6060/health"#查看日志./control tail安装Graphgraph组件是存储绘图数据、历史数据的组件。transfer会把接收到的数据,转发给graph。#创建存储数据目录mkdir&-p&/opt/openfalcon/data/6070cd /opt/openfalcon/graph/
mv cfg.example.json cfg.json# 默认情况下(所有组件都在同一台服务器上),绘图数据我改为了/opt/openfalcon/data/6070,还有就是数据库密码需要加上# cfg.json中的各配置项,可以参考 /open-falcon/graph/blob/master/README.md# 启动./control start# 查看日志./control tail# 校验服务,这里假定服务开启了6071的http监听端口。检验结果为ok表明服务正常启动。curl -s"http://127.0.0.1:6071/health"安装Queryquery组件,绘图数据的查询接口,query组件收到用户的查询请求后,会从后端的多个graph,查询相应的数据,聚合后,再返回给用户。cd/opt/openfalcon/query/mv cfg.example.json cfg.json# 默认情况下(所有组件都在同一台服务器上),保持cfg.json不变即可# cfg.json中的各配置项,可以参考 /open-falcon/query/blob/master/README.md# 启动./control start# 查看日志./control tail安装Dashboarddashboard是面向用户的查询界面,在这里,用户可以看到push到graph中的所有数据,并查看其趋势图。Install dependencyyum install -y python-virtualenv mysql-community-delvel & &# run as rootcd /opt/openfalcon/dashboard/virtualenv ./env./env/bin/pip install -r pip_requirements.txtConfiguration# config的路径为 $WORKSPACE/dashboard/rrd/config.py,里面有数据库相关的配置信息,如有必要,请修改。默认情况下(所有组件都在同一台服务器上),保持默认配置即可# 数据库表结构初始化,请参考前面的 环境准备 阶段启动./control start--& goto http://IP:8081查看日志./control tail安装Tasktask是监控系统一个必要的辅助模块。定时任务,实现了如下几个功能:index更新。包括图表索引的全量更新 和 垃圾索引清理。falcon服务组件的自身状态数据采集。定时任务了采集了transfer、graph、task这三个服务的内部状态数据。falcon自检控任务。# 修改配置, 配置项含义见下文mv cfg.example.json cfg.json
vim cfg.json# 启动服务./control start# 校验服务,这里假定服务开启了8002的http监听端口。检验结果为ok表明服务正常启动。curl -s"127.0.0.1:8002/health"第二部分:报警组件安装组件列表:组件名称用途服务端口备注Sender报警发送模块,控制并发度,提供发送的缓冲queuehttp: 6066UIC(fe)用户组管理,单点登录http: 801.需要连接数据库:uicPortal配置报警策略,管理机器分组的web端http: 50501.需要连接数据库:falcon_portal2.需要python虚拟环境HBSHeartBeat Server,心跳服务器http: 6031rpc: 60301.需要连接数据库:falcon_portalJudge报警判断模块http: 6081rpc: 60801.可部署多实例Links报警合并依赖的web端,存放报警详情http: 50901.需要连接数据库:falcon_links2.需要python虚拟环境Alarm报警事件处理器http: 9912mail-provider报警邮件http apihttp: 4000小米提供sms-provider报警短信http apihttp: 4040自行编写Nodata检测监控数据的上报异常http: 60901.需要连接数据库:falcon_portalAggregator集群聚合模块——聚合某集群下的所有机器的某个指标的值,提供一种集群视角的监控体验。http: 60551.需要连接数据库:falcon_portal报警准备:mail-provider & sms-provider监控系统产生报警事件之后需要发送报警邮件或者报警短信,各个公司可能有自己的邮件服务器,有自己的邮件发送方法;有自己的短信通道,有自己的短信发送方法。falcon为了适配各个公司,在接入方案上做了一个规范,需要各公司提供http的短信和邮件发送接口。短信发送http接口:method: postparams: &- content: 短信内容 &- tos: 使用逗号分隔的多个手机号falcon将这样调用该接口:url=您公司提供的http短信接口curl &$url-d"content=xxx&tos=,"邮件发送http接口:method: postparams: &- content: 邮件内容 &- subject: 邮件标题 &- tos: 使用逗号分隔的多个邮件地址falcon将这样调用该接口:url=您公司提供的http邮件接口curl -X POST $url-d"content=xxx&,&subject=xxx"安装使用mail-provider#这里使用小米提供的mail-provider,我是通过网友编译好的二级制包安装的,也可自行编译。#githu地址:&tar&xf&mail-provider-master.tar.gz&&rm&-rf&mail-provider-master.tar.gz&mv&mail-provider-master&mail-providercd&mail-provider/#修改配置文件cfg.conf{&&&&"debug":&true,&&&&"http":&{&&&&&&&&"listen":&"0.0.0.0:4000",&&&&&&&&"token":&""&&&&},&&&&"smtp":&{&&&&&&&&"addr":&"smtp.:25",&&&&&&&&"username":&"",&&&&&&&&"password":&"12345",&&&&&&&&"from":&""&&&&}}#启动./control&start#测试邮件接口是否正常,收到邮件证明API 正常。curl&&-d&"&subject=xxxx&content=yyyy"建立sms-provider#这里我自己写了个基于python的http server 作为短信接口http apivi http_sms.py#coding=utf-8
Created&on&
@author:&chenguomin&&qq:
@explain:&实现GET方法和POST方法请求
from&&BaseHTTPServer&import&HTTPServer,BaseHTTPRequestHandler
import&urllib
import&urllib2
def&send_message(tos,txt):
此函数主要用于调用我公司内部的短信API(get方式),大伙可自行修改。
比如:需要加用户名密码,MD5,token的自行查看短信平台提供商手册,如何调用短信API。
下面提供一个url供大家参考。
&&&&#url&&=&&":4000/sendsms?uid=16888&pwd=123456&mobile=%s&msg=%s"&%&(tos,&txt)&&&&&&&&&
&&&&url&=&"http://192.168.20.88:8080/SendSms/sendsms?mobile=%s&content=%s"&%&(tos,&txt)
&&&&req&=&urllib2.Request(url)
&&&&res_data&=&urllib2.urlopen(req)
&&&&res&=&res_data.read()
&&&&print&res
class&ServerHTTP(BaseHTTPRequestHandler):
&&&&def&do_GET(self):
&&&&&&&&path&=&self.path
&&&&&&&&print&path
&&&&&&&&#拆分url(也可根据拆分的url获取Get提交才数据),可以将不同的path和参数加载不同的html页面,或调用不同的方法返回不同的数据,来实现简单的网站或接口
&&&&&&&&query&=&urllib.splitquery(path)
&&&&&&&&print&query
&&&&&&&&self.send_response(200)
&&&&&&&&self.send_header("Content-type","text/html")
&&&&&&&&self.send_header("test","This&is&test!")
&&&&&&&&self.end_headers()
&&&&&&&&buf&=&‘‘‘‘‘&!DOCTYPE&HTML&
&&&&&&&&&&&&&&&&&html&
&&&&&&&&&&&&&&&&&head&&title&Get&page&/title&&/head&
&&&&&&&&&&&&&&&&&body&
&&&&&&&&&&&&&&&&&form&action="post_page"&method="post"&
&&&&&&&&&&&&&&&&&&mobile:&&input&type="text"&name="tos"&/&&br&/&
&&&&&&&&&&&&&&&&&&content:&&input&type="text"&name="content"&/&&br&/&
&&&&&&&&&&&&&&&&&&&input&type="submit"&value="POST"&/&
&&&&&&&&&&&&&&&&&/form&
&&&&&&&&&&&&&&&&&/body&
&&&&&&&&&&&&&&&&&/html&‘‘‘
&&&&&&&&self.wfile.write(buf)
&&&&def&do_POST(self):
&&&&&&&&path&=&self.path
&&&&&&&&print&path
&&&&&&&&#获取post提交的数据
&&&&&&&&datas&=&self.rfile.read(int(self.headers[‘content-length‘]))
&&&&&&&&datas&=&urllib.unquote(datas).decode("utf-8",&‘ignore‘)
&&&&&&&&mobile&=&datas.split(‘&‘)[0].replace("tos=","").replace(‘"‘,‘‘)
&&&&&&&&content&=&datas.split(‘&‘)[1].replace("content=","").replace(‘"‘,‘‘)
&&&&&&&&mm&=&mobile.split(‘,‘)
&&&&&&&&for&i&in&mm:
&&&&&&&&&&&&&&&&print&i
&&&&&&&&&&&&&&&&send_message(i,content)
&&&&&&&&&&&&&&&&self.send_response(200)
&&&&&&&&&&&&&&&&self.end_headers()
&&&&&&&&&&&&&&&&buf&=&‘‘‘‘‘&!DOCTYPE&HTML&
&&&&&&&&&&&&&&&&&html&
&&&&&&&&&&&&&&&&&head&&title&Post&page&/title&&/head&
&&&&&&&&&&&&&&&&&body&Tos:%s&&&br&/&Content:%s&/body&
&&&&&&&&&&&&&&&&&/html&‘‘‘%&(mobile,&content)
&&&&&&&&&&&&&&&&self.wfile.write(buf)
def&start_server(port):
&&&&http_server&=&HTTPServer((‘‘,&int(port)),&ServerHTTP)
&&&&http_server.serve_forever()
if&__name__&==&"__main__":
&&&&#端口可自定义,不冲突就可以,这里设置为:4040
&&&&start_server(4040)#运行python http servernohup python http_sms.py &#在浏览器访问,提供了简单的页面测试,只有get,post方法。#也可以在命令行使用curl测试curl&&-d&"tos=,&content=testmsg"#openfalcon的sender是post方式传递数据给http api的,所以我需要获取sender post过来的tos和content参数,再发送到公司内部的sms api。安装alarmalarm模块是处理报警event的,judge产生的报警event写入redis,alarm从redis读取,这个模块被业务搞得很糟乱,各个公司可以根据自己公司的需求重写cd /opt/openfalcon/alarm/mv cfg.example.json cfg.json# vi cfg.json# 把redis配置成与judge同一个./control start注意,alarm当前的版本,highQueues和lowQueues都不能为空,是个bug,稍候修复。我们可以把event:p0~event:p5配置到highQueues,把event:p6配置到lowQueuesPS:微信告警版本可到我的github拉取安装sender调用各个公司提供的mail-provider和sms-provider,按照某个并发度,从redis中读取邮件、短信并发送,alarm生成的报警短信和报警邮件都是直接写入redis即可,sender来发送。cd /opt/openfalcon/sender/mv cfg.example.json cfg.json# vi cfg.json# redis地址需要和后面的alarm、judge使用同一个# queue维持默认# worker是最多同时有多少个线程玩命得调用短信、邮件发送接口# api要给出sms-provider和mail-provider的接口地址#我们现在调用上面的短信和邮件api{&&&&"debug":&true,&&&&"http":&{&&&&&&&&"enabled":&true,&&&&&&&&"listen":&"0.0.0.0:6066"&&&&},&&&&"redis":&{&&&&&&&&"addr":&"127.0.0.1:6379",&&&&&&&&"maxIdle":&5&&&&},&&&&"queue":&{&&&&&&&&"sms":&"/sms",&&&&&&&&"mail":&"/mail"&&&&},&&&&"worker":&{&&&&&&&&"sms":&10,&&&&&&&&"mail":&50&&&&},&&&&"api":&{&&&&&&&&"sms":&"http://127.0.0.1:4040/",&&&&&&&&"mail":&"http://127.0.0.1:4000/sender/mail"&&&&}}./control start微信告警版本可到我的github拉取安装fecd /opt/openfalcon/femv cfg.example.json cfg.json# 请基于cfg.example.json 酌情修改相关配置项# 启动./control start# 查看日志./control tail# 停止服务./control stop安装portalportal是用于配置报警策略的地方yum install -y python-virtualenv &# run as rootcd/opt/openfalcon/portal/virtualenv ./env./env/bin/pip install -r pip_requirements.txt# vi frame/config.py# 1. 修改DB配置# 2. SECRET_KEY设置为一个随机字符串# 3. UIC_ADDRESS有两个,internal配置为FE模块的内网地址,portal通常是和UIC在一个网段的,# & &内网地址相互访问速度快。external是终端用户通过浏览器访问的UIC地址,很重要!# 4. 其他配置可以使用默认的./control startportal默认监听在5050端口,浏览器访问即可安装HBS(heartbeat Server)心跳服务器,只依赖Portal的DBcd/opt/openfalcon/hbs/mv cfg.example.json cfg.json# vi cfg.json 把数据库配置配置为portal的db./control start如果先安装的绘图组件又来安装报警组件,那应该已经安装过agent了,hbs启动之后会监听一个http端口,一个rpc端口,agent要和hbs通信,重新去修改agent的配置cfg.json,把heartbeat那项enabled设置为true,并配置上hbs的rpc地址,./control restart重启agent,之后agent就可以和hbs心跳了安装judge报警判断模块,judge依赖于HBS,所以得先搭建HBScd/opt/openfalcon/judge/mv cfg.example.json cfg.json# vi cfg.json# remain: 这个配置指定了judge内存中针对某个数据存多少个点,比如host01这个机器的cpu.idle的值在内存中最多存多少个,# 配置报警的时候比如all(#3),这个#后面的数字不能超过remain-1# hbs: 配置为hbs的地址,interval默认是60s,表示每隔60s从hbs拉取一次策略# alarm: 报警event写入alarm中配置的redis,minInterval表示连续两个报警之间至少相隔的秒数,维持默认即可./control start安装LinksLinks是为报警合并功能写的组件。如果你不想使用报警合并功能,这个组件是无需安装的。Links个Python的项目,无需像Go的项目那样去做编译。不过Go的项目是静态编译的,编译好了之后二进制无依赖,拿到其他机器也可以跑起来,Python的项目就需要安装一些依赖库了。# 我们使用virtualenv来管理Python环境,yum安装需切到root账号# yum install -y python-virtualenv$ cd /path/to/links/$ virtualenv ./env$ ./env/bin/pip install -r pip_requirements.txt安装完依赖的lib之后就可以用control脚本启动了,log在var目录。不过启动之前要先把配置文件修改成相应配置。另外,监听的端口在gunicorn.conf中配置。安装Nodatanodata用于检测监控数据的上报异常。nodata和实时报警judge模块协同工作,过程为: 配置了nodata的采集项超时未上报数据,nodata生成一条默认的模拟数据;用户配置相应的报警策略,收到mock数据就产生报警。采集项上报异常检测,作为judge模块的一个必要补充,能够使judge的实时报警功能更加可靠、完善。服务部署服务部署,包括配置修改、启动服务、检验服务、停止服务等。这之前,需要将安装包解压到服务的部署目录下。cd /opt/openfalcon/nodatamv cfg.example.json cfg.jsonvim cfg.json# 启动服务./control start# 校验服务,这里假定服务开启了6090的http监听端口。检验结果为ok表明服务正常启动。curl -s"127.0.0.1:6090/health"...# 停止服务./control stop安装Aggregator集群聚合模块。聚合某集群下的所有机器的某个指标的值,提供一种集群视角的监控体验。服务部署服务部署,包括配置修改、启动服务、检验服务、停止服务等。这之前,需要将安装包解压到服务的部署目录下。# 修改配置, 配置项含义见下文mv cfg.example.json cfg.jsonvim cfg.json# 启动服务./control start# 校验服务,看端口是否在监听ss -tln# 检查log./control tail...# 停止服务./control stop四、使用方法(转官网)系统搭建好了,应该如何用起来,这节给大家逐步介绍一下。有很多写好的服务监控可参考官网book:教学视频:查看监控数据我们说agent只要部署到机器上,并且配置好了heartbeat和transfer就自动采集数据了,我们就可以去dashboard上面搜索监控数据查看了。dashboard是个web项目,浏览器访问之。左侧输入endpoint搜索,endpoint是什么?应该用什么搜索?对于agent采集的数据,endpoint都是机器名,去目标机器上执行hostname,看到的输出就是endpoint,拿着hostname去搜索。搜索到了吧?嗯,选中前面的复选框,点击“查看counter列表”,可以列出隶属于这个endpoint的counter,counter是什么?counter=${metric}/sorted(${tags})假如我们要查看cpu.idle,在counter搜索框中输入cpu并回车。看到cpu.idle了吧,点击,会看到一个新页面,图表中就是这个机器的cpu.idle的近一小时数据了,想看更长时间的?右上角有个小三角,展开菜单,可以选择更长的时间跨度如何配置报警策略上节我们已经了解到如何查看监控数据了,如果数据达到阈值,比如cpu.idle太小的时候,我们应该如何配置告警呢?配置报警接收人falcon的报警接收人不是一个具体的手机号,也不是一个具体的邮箱,因为手机号、邮箱都是容易发生变化的,如果变化了去修改所有相关配置那就太麻烦了。我们把用户的联系信息维护在一个叫UIC(新用户推荐使用Go版本的UIC,即:falcon-fe项目)的系统里,以后如果要修改手机号、邮箱,只要在UIC中修改一次即可。报警接收人也不是单个的人,而是一个组(UIC中称为Team),比如falcon这个系统的任何组件出问题了,都应该发报警给falcon的运维和开发人员,发给falcon这个团队,这样一来,新员工入职只要加入falcon这个Team即可;员工离职,只要从falcon这个Team删掉即可。浏览器访问UIC,如果启用了LDAP,那就用LDAP账号登陆,如果没有启用,那就注册一个或者找管理员帮忙开通。创建一个Team,名称姑且叫falcon,把自己加进去,待会用来做测试。创建HostGroup比如我们要对falcon-judge这个组件做端口监控,那首先创建一个HostGroup,把所有部署了falcon-judge这个模块的机器都塞进去,以后要扩容或下线机器的时候直接从这个HostGroup增删机器即可,报警策略会自动生效、失效。咱们为这个HostGroup取名为:sa.dev.falcon.judge,这个名称有讲究,sa是我们部门,dev是我们组,falcon是项目名,judge是组件名,传达出了很多信息,这样命名比较容易管理,推荐大家这么做。在往组里加机器的时候如果报错,需要检查portal的数据库中host表,看里边是否有相关机器。那host表中的机器从哪里来呢?agent有个heartbeat(hbs)的配置,agent每分钟会发心跳给hbs,把自己的ip、hostname、agent version等信息告诉hbs,hbs负责写入host表。如果host表中没数据,需要检查这条链路是否通畅。1创建策略模板portal最上面有个Templates链接,这就是策略模板管理的入口。我们进去之后创建一个模板,名称姑且也叫:sa.dev.falcon.judge,与HostGroup名称相同,在里边配置一个端口监控,通常进程监控有两种手段,一个是进程本身是否存活,一个是端口是否在监听,此处我们使用端口监控。右上角那个加号按钮是用于增加策略的,一个模板中可以有多个策略,此处我们只添加了一个。下面可以配置报警接收人,此处填写的是falcon,这是之前在UIC中创建的Team。将HostGroup与模板绑定一个模板是可以绑定到多个HostGroup的,现在我们重新回到HostGroups页面,找到sa.dev.falcon.judge这个HostGroup,右侧有几个超链接,点击【templates】进入一个新页面,输入模板名称,绑定一下就行了。补充上面步骤做完了,也就配置完了。如果judge组件宕机,端口不再监听了,就会报警。不过大家不要为了测试报警效果,直接把judge组件给干掉了,因为judge本身就是负责判断报警的,把它干掉了,那就没法判断了……所以说falcon现在并不完善,没法用来监控本身的组件。为了测试,大家可以修改一下端口监控的策略配置,改成一个没有在监听的端口,这样就触发报警了。上面的策略只是对falcon-judge做了端口监控,那如果我们要对falcon这个项目的所有机器加一些负载监控,应该如何做呢?创建一个HostGroup:sa.dev.falcon,把所有falcon的机器都塞进去创建一个模板:sa.mon,添加一些像cpu.idle,load.1min等策略将sa.mon绑定到sa.dev.falcon这个HostGroup附:sa.mon的配置样例大家可能不知道各个指标分别叫什么,自己push的数据肯定知道自己的metric了,agent push的数据可以参考:如何配置策略表达式策略表达式,即expression,具体可以参考,这里只是举个例子:上例中的配置传达出的意思是:falcon-judge这个模块的所有实例,如果qps连续3次大于1000,就报警给falcon这个报警组。expression无需绑定到HostGroup,enjoy it本文出自 “” 博客,请务必保留此出处标签:&&&&&&
&&国之画&&&& &&&&chrome插件
版权所有 京ICP备号-2
迷上了代码!

我要回帖

更多关于 c 监控父进程重启 的文章

 

随机推荐