分类: Python/Ruby
2017-08-28 15:18:03
Open-falcon安装配置手册
监控系统是整个运维环节,乃至整个产品生命周期中最重要的一环,事前及时预警发现故障,事后提供翔实的数据用于追查定位问题。监控系统作为一个成熟的运维产品,业界有很多开源的实现可供选择。当公司刚刚起步,业务规模较小,运维团队也刚刚建立的初期,选择一款开源的监控系统,是一个省时省力,效率最高的方案。之后,随着业务规模的持续快速增长,监控的对象也越来越多,越来越复杂,监控系统的使用对象也从最初少数的几个SRE,扩大为更多的DEVS,SRE。这时候,监控系统的容量和用户的“使用效率”成了最为突出的问题。
监控系统业界有很多杰出的开源监控系统。我们在早期,一直在用zabbix,不过随着业务的快速发展,以及互联网公司特有的一些需求,现有的开源的监控系统在性能、扩展性、和用户的使用效率方面,已经无法支撑了。因此,我们在过去的一年里,从互联网公司的一些需求出发,从各位SRE、SA、DEVS的使用经验和反馈出发,结合业界的一些大的互联网公司做监控,用监控的一些思考出发,设计开发了小米的监控系统:open-falcon。
open-falcon的目标是做最开放、最好用的互联网企业级监控产品。
产品特点:
强大灵活的数据采集:自动发现,支持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编写。
Open-falcon通过十几个组件结合使用,达到监控告警目的。
依赖组件
安装redis
yum install -y redis
安装mysql
yum install -y
mysql-server
初始化mysql表结构
# open-falcon所有组件都无需root账号启动,推荐使用普通账号安装,提升安全性。此处我们使用普通账号:work来安装部署所有组件# 当然了,使用yum安装依赖的一些lib库的时候还是要有root权限的。
export HOME=/home/workexport
WORKSPACE=$HOME/open-falcon
mkdir -p $WORKSPACEcd $WORKSPACE
git clone
cd ./scripts/
如果我们预备监控windows主机,可先将mysql数据库字符集修改为utf-8,这是由于监控windows主机时,windows主机的网卡信息很可能有中文。
show variables like
"%char%";
SET
XXXXXX='utf8'
mysql -h localhost
-u root -p < db_schema/graph-db-schema.sql
mysql -h localhost
-u root -p < db_schema/dashboard-db-schema.sql
mysql -h localhost
-u root -p < db_schema/portal-db-schema.sql
mysql -h localhost
-u root -p < db_schema/links-db-schema.sql
mysql -h localhost
-u root -p < db_schema/uic-db-schema.sql
安装环境
open-falcon的后端组件都是使用Go语言编写的,本节我们搭建Go语言开发环境,clone代码
我们使用64位Linux作为开发环境,与线上环境保持一致。如果你所用的环境不同,请自行解决不同平台的命令差异
首先安装Go语言开发环境(ansible golang环境部署):
cd ~
wget
tar zxf go1.4.1.linux-amd64.tar.gz
mkdir -p workspace/srcecho
"">> .bashrcecho 'export GOROOT=$HOME/go' >> .bashrcecho
'export GOPATH=$HOME/workspace' >> .bashrcecho 'export
PATH=$GOROOT/bin:$GOPATH/bin:$PATH' >> .bashrcecho "">>
.bashrcsource .bashrc
接下来clone代码,以备后用
cd $GOPATH/src
mkdir github.comcd github.com
git clone --recursive
解压of-release-v0.1.0.tar.gz获得以下16个压缩包
每个压缩包对应一个组件,创建独立组件目录,将压缩包解压到相应目录即可。
agent用于采集机器负载监控指标,比如cpu.idle、load.1min、disk.io.util等等,每隔60秒push给Transfer。agent与Transfer建立了长连接,数据发送速度比较快,agent提供了一个http接口/v1/push用于接收用户手工push的一些数据,然后通过长连接迅速转发给Transfer。因此需要被监控的所有主机都需要使用该组件。
配置文件必须叫cfg.json,可以基于cfg.example.json修改
进程管理
验证
看var目录下的log是否正常,或者浏览器访问其1988端口。另外agent提供了一个--check参数,可以检查agent是否可以正常跑在当前机器上
/v1/push接口
我们设计初衷是不希望用户直接连到Transfer发送数据,而是通过agent的/v1/push接口转发,接口使用范例:
transfer是数据转发服务。它接收agent上报的数据,然后按照哈希规则进行数据分片、并将分片后的数据分别push给graph&judge等组件。
服务启动后,可以通过日志查看服务的运行状态,日志文件地址为./var/app.log。可以通过调试脚本./test/debug查看服务器的内部状态数据,如 运行 bash
./test/debug 可以得到服务器内部状态的统计信息。
Configuration
graph是存储绘图数据的组件。graph组件 接收transfer组件推送上来的监控数据,同时处理query组件的查询请求、返回绘图数据。
启动服务后,可以通过日志查看服务的运行状态,日志文件地址为./var/app.log;如果需要详细的日志,可以将配置项debug设置为true。可以通过调试脚本./test/debug查看服务器的内部状态数据,如 运行 bash
./test/debug 可以得到服务器内部状态的统计信息。
配置说明
query组件,提供统一的绘图数据查询入口。query组件接收查询请求,根据一致性哈希算法去相应的graph实例查询不同metric的数据,然后汇总拿到的数据,最后统一返回给用户。
服务启动后,可以通过日志查看服务的运行状态,日志文件地址为./var/app.log。可以通过查询脚本./scripts/query读取绘图数据,如 运行 bash
./scripts/query "ur.endpoint""ur.counter"可以查询Endpoint="ur.endpoint"& Counter="ur.counter"对应的绘图数据。
配置说明
注意: 请确保 graph.replicas和graph.cluster 的内容与transfer的配置完全一致
部署完成query组件后,请修改dashboard组件的配置、使其能够正确寻址到query组件。请确保query组件的graph列表
与 transfer的配置 一致。
dashboard是面向用户的查询界面。在这里,用户可以看到push到graph中的所有数据,并查看其趋势图。
Dashboard是个Python的项目。安装&部署Dashboard时,需要安装一些依赖库。依赖库安装,步骤如下,
# 安装virtualenv。需要root权限。
yum
install -y python-virtualenv
安装pip1.2.1,否则Python3.1以下版本会出现ssl验证错误。easy_install pip==1.2.1
# 安装依赖。不需要root权限、使用普通账号执行就可以。需要到dashboard的目录下执行。
****************yum
install mysql-devel
cd
/path/to/dashboard/
virtualenv
./env
./env/bin/pip
install -r pip_requirements.txt
对于ubuntu用户,安装mysql-python时可能会失败。请自行安装依赖libmysqld-dev、libmysqlclient-dev等。
服务启动后,可以通过日志查看服务的运行状态,日志文件地址为./var/app.log。可以通过访问dashboard主页(这里假设 dashboard的http监听端口为8081)。
配置说明
dashboard有两个需要更改的配置文件: ./gunicorn.conf 和 ./rrd/config.py。./gunicorn.conf各字段,含义如下
配置文件./rrd/config.py,各字段含义为
这个组件没有代码,需要各个公司自行提供。
监控系统产生报警事件之后需要发送报警邮件或者报警短信,各个公司可能有自己的邮件服务器,有自己的邮件发送方法;有自己的短信通道,有自己的短信发送方法。falcon为了适配各个公司,在接入方案上做了一个规范,需要各公司提供http的短信和邮件发送接口
短信发送http接口:
邮件发送http接口:
上节我们利用http接口规范屏蔽了邮件、短信发送的问题。Sender这个模块专门用于调用各公司提供的邮件、短信发送接口。
sender这个模块和redis队列部署在一台机器上即可。公司即使有几十万台机器,一个sender也足够了。
配置说明
如果没有邮件发送接口,可以使用 。
sender的配置文件中配置了监听的http端口,我们可以访问一下/health接口看是否返回ok,我们所有的Go后端模块都提供了/health接口,上面的配置的话就是这样验证:
另外就是查看sender的log,log在var目录下
配置启动mail-provider后,可使用如下命令测试是否能正常发送
curl -d
该命令向qq邮箱发送了一个测试邮件,成功后邮箱中会收到该邮件:
注:不同的邮箱由于对邮件设置的安全过滤情况不同,可能导致测试邮件有收取不到的情况,如使用搜狐邮箱测试时,提示success,但是仍然收不到邮件。163做接收邮箱时,会报错,提示该邮件为垃圾邮件之类的(隔天还邮件提醒安全隐患。。。)
注意:测试成功后需要修改sender的邮件发送接口,接口地址改为:
"mail":
""
这是Go版本的,也是一个统一的web入口,因为监控组件众多,记忆ip、port去访问还是比较麻烦。fe像是一个监控的hao123.
与UIC区别
Fe模块除了提供了一个简单的导航之外,最大的不同是密码存放方式发生了变化,所以Java版UIC用户如果要迁移过来,需要修改Fe模块配置的salt,配置为空字符串,就可以和原来Java版本的UIC共用同一个数据库了,不过配置成空字符串不够安全,建议salt配置一个随机字符串,然后通过Fe注册一个新用户,把数据库中所有用户的密码都重置为这个新用户的密码,发个通知,让各个注册用户重新自己登录修改密码。
Fe作为一个前端模块,无状态,可以水平扩展,至少部署两台机器以保证可用性。前面做一个负载均衡设备,nginx或者lvs都可以。最后为其申请一个域名,搞定!
配置介绍
注意:shortcut中设置的地址,按实际配置成内/外网访问地址。内网ip:port
或者外网ip:port
设置root账户密码
该项目中的注册用户是有不同角色的,目前分三种角色:普通用户、管理员、root账号。系统启动之后第一件事情应该是设置root的密码,浏览器访问: (此处假设你的项目访问地址是fe.example.com,也可以使用ip),这样就设置了root账号的密码为abc。普通用户可以支持注册。
然后通过访问fe即可使用root登录(也可注册新用户),
ldap 认证
Fe 现在支持通过 ldap 来进行用户认证。不需要提前在 Fe 内开设账号。Fe 会自动将 ldap 认证过来的新用户插入到 Fe 的数据库内。
配置说明
这里我们先安装了Fe这个模块,portal、dashboard、alarm等模块都还没有安装,所以shortcut中不知道如何配置才好。不用着急,先维持默认,等之后部署完了portal、dashboard、alarm等模块之后再回来修改fe的配置。
Portal是用来配置报警策略的.
Portal是个web项目,无状态,可以水平扩展,至少部署两台机器以保证可用性,前面架设nginx或者lvs这种负载设备,申请一个域名,搞定!
Portal的配置文件在frame/config.py
virtualenv
./env
./env/bin/pip
install --default-timeout=100 -r pip_requirements.txt
Portal正常启动之后,就可以回去配置Fe这个项目的shortcut了。当然,dashboard和alarm还没有搭建,这俩shortcut还没法配置。修改完了shortcut,要重启fe模块。
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即可。
配置说明
访问/health接口验证hbs是否工作正常。
另外就是查看hbs的log,log在var目录下
如果你先部署了agent,后部署的hbs,那咱们部署完hbs之后需要回去修改agent的配置,把agent配置中的heartbeat部分enabled设置为true,addr设置为hbs的rpc地址。如果hbs的配置文件维持默认,rpc端口就是6030,http端口是6031,agent中应该配置为hbs的rpc端口,小心别弄错了。
Judge用于告警判断,agent将数据push给Transfer,Transfer不但会转发给Graph组件来绘图,还会转发给Judge用于判断是否触发告警。
Judge监听了一个http端口,提供了一个http接口:/count,访问之,可以得悉当前Judge实例处理了多少数据量。推荐的做法是一个Judge实例处理50万~100万数据,用个5G~10G内存,如果所用物理机内存比较大,比如有128G,可以在一个物理机上部署多个Judge实例。
配置说明
访问/health接口验证Judge是否工作正常。
另外就是查看Judge的log,log在var目录下
Links是为报警合并功能写的组件。如果你不想使用报警合并功能,这个组件是无需安装的。
解压Links安装包后,安装依赖库
安装完依赖的lib之后就可以用control脚本启动了,log在var目录。不过启动之前要先把配置文件修改成相应配置。另外,监听的端口在gunicorn.conf中配置。
Links是个web项目,无状态,可以水平扩展,至少部署两台机器以保证可用性,前面架设nginx或者lvs这种负载设备,申请一个域名,搞定!
配置说明
Links的配置文件在frame/config.py
启动之后要看看log是否正常,log在var目录。
然后浏览器访问之,发现首页404,这是正常的。之后alarm模块会用到links。
或者我们可以这么验证:
上面命令会返回一个随机字符串,拿着这个随机字符串拼接到links地址后面,浏览器访问之即可。比如返回的随机字符串是dot9kg8b,浏览器访问: 即可
alarm模块是处理报警event的,judge产生的报警event写入redis,alarm从redis读取处理
alarm是个单点。对于未恢复的告警是放到alarm的内存中的,alarm还需要做报警合并,故而alarm只能部署一个实例。后期需要想办法改进。
配置说明
api部分portal和uic可以配置成内网可访问的地址,速度比较快,但是links要配置成外网可访问的地址,注意喽
如果某个核心服务挂了,可能会造成大面积报警,为了减少报警短信数量,我们做了报警合并功能。把报警信息写入links模块,然后links返回一个url地址给alarm,alarm将这个url链接发给用户,这样用户只要收到一条短信(里边是个url地址),点击url进去就是多条报警内容。
highQueues中配置的几个event队列中的事件是不会做报警合并的,因为那些是高优先级的报警,报警合并只是针对lowQueues中的事件。如果所有的事件都不想做报警合并,就把所有的event队列都配置到highQueues中即可
alarm搭建完成了,我们可以回去修改fe的配置,把fe模块的shortcut:falconAlarm配置成alarm的http地址,是浏览器可访问的alarm的http地址
task是监控系统一个必要的辅助模块。定时任务,实现了如下几个功能:
index更新。包括图表索引的全量更新 和 垃圾索引清理。
falcon服务组件的自身状态数据采集。定时任务了采集了transfer、graph、task这三个服务的内部状态数据。
falcon自检控任务。
配置说明
部署完成task组件后,请修改collector配置、使task能够正确采集transfer & graph的内部状态,请修改monitor配置、使task模块能够自检控Open-Falon的各组件(当前支持transfer、graph、query、judge等)。
如果您没有遇到机房分区问题,请直接忽略此组件。
如果您已经遇到机房分区问题、并急需解决机房分区时监控数据回传的问题,请使用该组件。更多的资料在:
nodata用于检测监控数据的上报异常。nodata和实时报警judge模块协同工作,过程为: 配置了nodata的采集项超时未上报数据,nodata生成一条默认的模拟数据;用户配置相应的报警策略,收到mock数据就产生报警。采集项上报异常检测,作为judge模块的一个必要补充,能够使judge的实时报警功能更加可靠、完善。
这一节是写给Open-Falcon老用户的,新用户请忽略本小节、直接跳到部分即可。如果你已经使用Open-Falcon有一段时间,本次只是新增加一个nodata服务,那么你需要依次完成如下工作:
·
确保已经建立mysql数据表falcon_portal.mockcfg。其中,为portal组件的mysql数据库,mockcfg为存放nodata配置的数据表。mockcfg的建表语句,如下。
·
确保已经更新了portal组件。portal组件中,新增了对nodata配置的UI支持。
·
安装nodata后端服务。即本文的。
配置说明
如果你已经安装过open-falcon了,那么请检查:
检查你的portal中是否有这个代码:
falcon_portal数据库中加入了一张新表:
配置说明
每台机器都要部署falcon-agent,如果公司机器量比较少,用pssh、ansible、fabric之类的工具手工安装问题也不大。但是公司机器量多了之后,手工安装、升级、回滚falcon-agent将成为噩梦。
个人开发了agent-updater这个工具,用于管理falcon-agent,agent-updater也有一个agent:ops-updater,可以看做是一个超级agent,用于管理其他agent的agent,呵呵,ops-updater推荐在装机的时候一起安装上。ops-updater通常是不会升级的。
具体参看:
grafana安装
wget
rpm -ivh grafana-3.0.4-1464167696.x86_64.rpm
(grafana编译似乎不太好使,godep store需要下载golang的lib库,有些下不下来,一直无法通过)
3.通过grafana-cli安装Open-falcon插件
grafana-cli plugins install
fastweb-openfalcon-datasource
chown -R grafana:grafana /var/lib/grafana
4.编辑/etc/grafana/grafana.ini配置文件,添加插件PATH
[plugin.openfalcon]
;path = /var/lib/grafana/plugins/fastweb-openfalcon-datasource
(path前面;一定要有,一开始没加,坑爹了很久)
5.启动grafana
[root@linux plugins]#
/etc/init.d/grafana-server restart
OKopping Grafana Server ... [ OK ]
Starting Grafana Server: .... OK
6.浏览器访问
7.添加数据源
数据源地址:falcon主机query地址,例如当前
8.新建dashboard
9.建立一个模板
添加完ctrl + S保存
10.添加一个graph
ctrl + S保存
总结:
因为总是不出图,花费了大量时间和精力在Open-falcon上面,以为Open-falcon的query接口有问题
这是grafana-server的报错日志
2016/05/30 16:00:27 [I] Database: sqlite3
原因是前面所说的path前面没有加;导致
[plugin.openfalcon]
;path = /var/lib/grafana/plugins/fastweb-openfalcon-datasource
感悟:有问题,看日志。
Grafana中使用的graph模板,无法像falcon fe中通过%获取到所有主机,这是由于在open-falcon中的query 會去詢問dashboard取得endpoint list, 官方 falcon 0.1 release 的作法是使用 mysql 的 like 語法, 也就是只支援"關鍵字" (例如:
docker , 可以找到 "docker-agent",
"docker-agent") 查詢, 如果你想要使用 正規表達式批配查詢的話, dashboard就需要有相對應的實做
下面一段是源码:
@classmethod
def search(cls,
qs, start=0, limit=100, deadline=0):
args =
[deadline, ]
for q in
qs:
args.append("%"+q+"%")
args +=
[start, limit]
sql =
'''select id, endpoint, ts from endpoint where ts > %s '''
for q in
qs:
sql += ''' and endpoint like %s'''
sql += '''
limit %s,%s'''
cursor =
db_conn.execute(sql, args)
rows =
cursor.fetchall()
cursor and
cursor.close()
return
[cls(*row) for row in rows]
(通过
f = open("/tmp/a.txt","w")
print >>
f,q
F.close
定位到该段代码是query的查询接口)
修改如下,添加判断代码,使输入all即可查询获取所有endpoint信息:
@classmethod
def search(cls,
qs, start=0, limit=100, deadline=0):
args =
[deadline, ]
for q in
qs:
if q == 'all':
sql = '''select id, endpoint, ts from endpoint where ts > %s '''
else:
args.append("%"+q+"%")
args += [start, limit]
sql
= '''select id, endpoint, ts from endpoint where ts > %s '''
for
q in qs:
sql += ''' and endpoint like %s'''
sql += ''' limit %s,%s'''
cursor =
db_conn.execute(sql, args)
rows =
cursor.fetchall()
cursor and
cursor.close()
f =
open("/tmp/a.txt","w")
print
>> f,q
f.close
return
[cls(*row) for row in rows]
增加了一个判断,即通过all查询即可获取所有endpoint信息。
依赖
python
>= 2.6
监控windows主机时,主机需要安装psutil,选择安装的psutil版本比对对应相应的python版本!!!!
如果已经安装对应的python,安装psutil时可能仍然会提示没有相应python版本错误,通过register.py脚本注册python后再安装。
需要安装requests,安装时报错You should consider upgrading
via the 'python -m pip install --upgrade pip' command.是由于pip版本较低,通过python -m pip install --upgrade
pip命令更新pip版本后切换到requests文件目录安装。
pip
install requests-2.10.0-py2.py3-none-any.whl
使用方式
将bat脚本python d:/"Program Files"/windows_collect.py与windows_collect.py置于同一目录,设置定时执行即可
mymon(MySQL-Monitor) -- MySQL数据库运行状态数据采集脚本,采集包括global
status, global variables, slave status等。
安装
配置
etc/mon.cfg
MySQL
metrics
请参考./metrics.txt,其中的内容,仅供参考,根据MySQL的版本、配置不同,采集到的metrics也有差别。
需求:Python >= 2.6python-simplejson
使用方法
注意:
1.修改redis-monitor.py时,_redis_cli = '/usr/local/bin/redis-cli'路径一定要正确,修改前whereis redis_cli检查确认其路径。
2.#inst_list中保存了redis配置文件列表,程序将从这些配置中读取port和password,建议使用动态发现的方法获得,如:
# inst_list = [
i for i in commands.getoutput("find /etc/ -name 'redis*.conf'"
).split('\n') ]
使用推荐的redis配置列表获取方式
insts_list = [
i for i in commands.getoutput("find /opt/redis-3.0.2/cluster/ -name
'redis*.conf'").split('\n') ]
3.修改Openfalcon监控主机地址
url = ''
4.修改主机host
1.open-falcon介绍
2.环境准备
3.open-falcon安装
4.组件配置使用
3.1 agent
{
"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": "", # 放置插件脚本的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, # 此处enabled要设置为true
"addrs": [
"127.0.0.1:8433",
"127.0.0.1:8433"
], # transfer的地址,端口是transfer的rpc端口, 可以支持写多个transfer的地址,agent会保证HA
"interval": 60, # 采集周期,单位是秒,即agent一分钟采集一次数据发给transfer
"timeout": 1000 # 连接transfer的超时时间,单位是毫秒
},
"http": {
"enabled": true, # 是否要监听http端口
"listen": ":1988" # 如果监听的话,监听的地址
},
"collector": {
"ifacePrefix": ["eth", "em"] # 默认配置只会采集网卡名称前缀是eth、em的网卡流量,配置为空就会采集所有的,lo的也会采集。可以从/proc/net/dev看到各个网卡的流量信息
},
"ignore": { # 默认采集了200多个metric,可以通过ignore设置为不采集
"cpu.busy": true,
"mem.swapfree": true
}
}
./control start 启动进程
./control stop 停止进程
./control restart 重启进程
./control status 查看进程状态
./control tail 用tail -f的方式查看var/app.log
./falcon-agent --check
ts=`date +%s`; curl -X POST -d "[{\"metric\": \"metric.demo\", \"endpoint\": \"qd-open-falcon-judge01.hd\", \"timestamp\": $ts,\"step\": 60,\"value\": 9,\"counterType\": \"GAUGE\",\"tags\": \"project=falcon,module=judge\"}]"
3.2 transfer
# 校验服务,这里假定服务开启了6060的http监听端口。检验结果为ok表明服务正常启动。
curl -s "127.0.0.1:6060/health"
debug: true/false, 如果为true,日志中会打印debug信息
http
- enable: true/false, 表示是否开启该http端口,该端口为控制端口,主要用来对transfer发送控制命令、统计命令、debug命令等
- listen: 表示监听的http端口
rpc
- enable: true/false, 表示是否开启该jsonrpc数据接收端口, Agent发送数据使用的就是该端口
- listen: 表示监听的http端口
socket #即将被废弃,请避免使用
- enable: true/false, 表示是否开启该telnet方式的数据接收端口,这是为了方便用户一行行的发送数据给transfer
- listen: 表示监听的http端口
judge
- enable: true/false, 表示是否开启向judge发送数据
- batch: 数据转发的批量大小,可以加快发送速度,建议保持默认值
- connTimeout: 单位是毫秒,与后端建立连接的超时时间,可以根据网络质量微调,建议保持默认
- callTimeout: 单位是毫秒,发送数据给后端的超时时间,可以根据网络质量微调,建议保持默认
- pingMethod: 后端提供的ping接口,用来探测连接是否可用,必须保持默认
- maxConns: 连接池相关配置,最大连接数,建议保持默认
- maxIdle: 连接池相关配置,最大空闲连接数,建议保持默认
- replicas: 这是一致性hash算法需要的节点副本数量,建议不要变更,保持默认即可
- cluster: key-value形式的字典,表示后端的judge列表,其中key代表后端judge名字,value代表的是具体的ip:port
graph
- enable: true/false, 表示是否开启向graph发送数据
- batch: 数据转发的批量大小,可以加快发送速度,建议保持默认值
- connTimeout: 单位是毫秒,与后端建立连接的超时时间,可以根据网络质量微调,建议保持默认
- callTimeout: 单位是毫秒,发送数据给后端的超时时间,可以根据网络质量微调,建议保持默认
- pingMethod: 后端提供的ping接口,用来探测连接是否可用,必须保持默认
- maxConns: 连接池相关配置,最大连接数,建议保持默认
- maxIdle: 连接池相关配置,最大空闲连接数,建议保持默认
- replicas: 这是一致性hash算法需要的节点副本数量,建议不要变更,保持默认即可
- cluster: key-value形式的字典,表示后端的graph列表,其中key代表后端graph名字,value代表的是具体的ip:port(多个地址用逗号隔开, transfer会将同一份数据发送至各个地址,利用这个特性可以实现数据的多重备份)
tsdb
- enabled: true/false, 表示是否开启向open tsdb发送数据
- batch: 数据转发的批量大小,可以加快发送速度
- connTimeout: 单位是毫秒,与后端建立连接的超时时间,可以根据网络质量微调,建议保持默认
- callTimeout: 单位是毫秒,发送数据给后端的超时时间,可以根据网络质量微调,建议保持默认
- maxConns: 连接池相关配置,最大连接数,建议保持默认
- maxIdle: 连接池相关配置,最大空闲连接数,建议保持默认
- retry: 连接后端的重试次数和发送数据的重试次数
- address: tsdb地址或者tsdb集群vip地址, 通过tcp连接tsdb.
3.3 Graph
# 校验服务,这里假定服务开启了6071的http监听端口。检验结果为ok表明服务正常启动。
curl -s "127.0.0.1:6071/health"
{
"debug": false, //true or false, 是否开启debug日志
"http": {
"enabled": true, //true or false, 表示是否开启该http端口,该端口为控制端口,主要用来对graph发送控制命令、统计命令、debug命令
"listen": "0.0.0.0:6071" //表示监听的http端口
},
"rpc": {
"enabled": true, //true or false, 表示是否开启该rpc端口,该端口为数据接收端口
"listen": "0.0.0.0:6070" //表示监听的rpc端口
},
"rrd": {
"storage": "/home/work/data/6070" //绝对路径,历史数据的文件存储路径(如有必要,请修改为合适的路)
},
"db": {
"dsn": "root:@tcp(127.0.0.1:3306)/graph?loc=Local&parseTime=true", //MySQL的连接信息,默认用户名是root,密码为空,host为127.0.0.1,database为graph(如有必要,请修改),如果需要密码,在root:后跟密码
"maxIdle": 4 //MySQL连接池配置,连接池允许的最大连接数,保持默认即可
},
"callTimeout": 5000, //RPC调用超时时间,单位ms
"migrate": { //扩容graph时历史数据自动迁移
"enabled": false, //true or false, 表示graph是否处于数据迁移状态
"concurrency": 2, //数据迁移时的并发连接数,建议保持默认
"replicas": 500, //这是一致性hash算法需要的节点副本数量,建议不要变更,保持默认即可(必须和transfer的配置中保持一致)
"cluster": { //未扩容前老的graph实例列表
"graph-00" : "127.0.0.1:6070"
}
}
}
3.4 query
# 校验服务,这里假定服务开启了9966的http监听端口。检验结果为ok表明服务正常启动。
curl -s "127.0.0.1:9966/health"
{
"debug": "false", // 是否开启debug日志
"http": {
"enabled": true, // 是否开启http.server
"listen": "0.0.0.0:9966" // http.server监听地址&端口
},
"graph": {
"connTimeout": 1000, // 单位是毫秒,与后端graph建立连接的超时时间,可以根据网络质量微调,建议保持默认
"callTimeout": 5000, // 单位是毫秒,从后端graph读取数据的超时时间,可以根据网络质量微调,建议保持默认
"maxConns": 32, // 连接池相关配置,最大连接数,建议保持默认
"maxIdle": 32, // 连接池相关配置,最大空闲连接数,建议保持默认
"replicas": 500, // 这是一致性hash算法需要的节点副本数量,应该与transfer配置保持一致
"cluster": { // 后端的graph列表,应该与transfer配置保持一致;不支持一条记录中配置两个地址
"graph-00": "test.hostname01:6070",
"graph-01": "test.hostname02:6070"
},
"api": { // 适配grafana需要的API配置
"query": "", // query的http地址
"dashboard": "", // dashboard的http地址
"max": 500 //API返回结果的最大数量
}
}
}
3.5 dashboard
- workers,dashboard并发进程数
- bind,dashboard的http监听端口
- proc_name,进程名称
- pidfile,pid文件全名称
- limit_request_field_size,TODO
- limit_request_line,TODO
# dashboard的数据库配置
DASHBOARD_DB_HOST = "127.0.0.1"
DASHBOARD_DB_PORT = 3306
DASHBOARD_DB_USER = "root"
DASHBOARD_DB_PASSWD = ""
DASHBOARD_DB_NAME = "dashboard"
# graph的数据库配置
GRAPH_DB_HOST = "127.0.0.1"
GRAPH_DB_PORT = 3306
GRAPH_DB_USER = "root"
GRAPH_DB_PASSWD = ""
GRAPH_DB_NAME = "graph"
# dashboard的配置
DEBUG = True
SECRET_KEY = "secret-key"
SESSION_COOKIE_NAME = "open-falcon"
PERMANENT_SESSION_LIFETIME = 3600 * 24 * 30
SITE_COOKIE = "open-falcon-ck"
# query服务的地址
QUERY_ADDR = ""
BASE_DIR = "/home/work/open-falcon/dashboard/"
LOG_PATH = os.path.join(BASE_DIR,"log/")
try:
from rrd.local_config import *except:
pass
3.6 短信发送接口(接口定义,无需安装)
method: post
params:
- content: 短信内容
- tos: 使用逗号分隔的多个手机号
method: post
params:
- content: 邮件内容
- subject: 邮件标题
- tos: 使用逗号分隔的多个邮件地址
3.7 sender
{
"debug": true,
"http": {
"enabled": true,
"listen": "0.0.0.0:6066"
},
"redis": {
"addr": "127.0.0.1:6379", # 此处配置的redis地址要和后面的judge、alarm配置成相同的
"maxIdle": 5
},
"queue": {
"sms": "/sms", # 短信队列名称,维持默认即可,alarm中也会有一个相同的配置
"mail": "/mail" # 邮件队列名称,维持默认即可,alarm中也会有一个相同的配置
},
"worker": {
"sms": 10, # 调用短信接口的最大并发量
"mail": 50 # 调用邮件接口的最大并发量
},
"api": {
"sms": "", # 各公司自行提供的短信发送接口,11.11.11.11这个ip只是个例子喽,如果未提供相应接口可删除该项
"mail": "" # 各公司自行提供的邮件发送接口
}
}
curl 127.0.0.1:6066/health
3.7.1 mail-provider
{
"debug": true,
"http": {
"listen": "0.0.0.0:4000",
"token": ""
},
"smtp": {
"addr": "smtp.163.com:25",#发件服务器地址
"username": "113169666@163.com",#发件箱用户
"password": "XXXX",#发件用户密码
"from": "113169666@163.com"#此处表面邮件来源,来件地址必须与发件服务器地址一致,如此处都为@163
}
}
3.8 web前端(Fe)
{
"log": "debug",
"company": "MI", # 填写自己公司的名称,用于生成联系人二维码
"http": {
"enabled": true,
"listen": "0.0.0.0:1234" # 自己随便搞个端口,别跟现有的重复了,可以使用8080,与老版本保持一致
},
"cache": {
"enabled": true,
"redis": "127.0.0.1:6379", # 这个redis跟judge、alarm用的redis不同,这个只是作为缓存来用
"idle": 10,
"max": 1000,
"timeout": {
"conn": 10000,
"read": 5000,
"write": 5000
}
},
"salt": "0i923fejfd3", # 搞一个随机字符串
"canRegister": true,
"ldap": {
"enabled": false,
"addr": "ldap.example.com:389",
"baseDN": "dc=example,dc=com",
"bindDN": "cn=mananger,dc=example,dc=com",
"bindPasswd": "12345678",
"userField": "uid",
"attributes": ["sn","mail","telephoneNumber"]
},
"uic": {
"addr": "root:password@tcp(127.0.0.1:3306)/uic?charset=utf8&loc=Asia%2FChongqing", # 数据库schema在scripts目录下
"idle": 10,
"max": 100
},
"shortcut": {
"falconPortal": "", # 浏览器可访问的portal地址
"falconDashboard": "", # 浏览器可访问的dashboard地址
"falconAlarm": "" # 浏览器可访问的alarm的http地址
}
}
"addr": "ldap.example.com:389",
# ldap 的地址和端口
"baseDN": "dc=example,dc=com",
# ldap 的 baseDN,ldap 认证的时候将从这个路径开始查询用户
"bindDN": "cn=mananger,dc=example,dc=com",
# 你用来连接 ldap 的账户,至少要有只读的查询权限。
# 注意这里应该是账户的完整 dn 值。对于 AD 的话,则可以直接填账户的 userPrincipalName (xxx@example.com)。
# 如果你的 ldap 允许匿名查询的话,填""值即可
"bindPasswd": "12345678",
# 如果你的 ldap 允许匿名查询的话,填""值即可
"userField": "uid",
# 用于认证的属性(即你输入的用户名),通常为 uid 或 sAMAccountName(AD)。
# 也可以使用诸如 mail 的属性,这样认证的用户名就是邮箱(前提 ldap 里有这个属性)
"attributes": ["sn","mail","telephoneNumber"]
# 数组顺序重要,依次为姓名,邮箱,电话在 ldap 中的属性名.
# 建议根据自己 ldap 内的实际情况修改。
# 用户 ldap 登录时,fe 将按这些属性名去 ldap 中查询新用户的属性,并插入到 fe 的数据库内。
},
3.9 portal
# 修改一下数据库配置,数据库schema文件在scripts目录
DB_HOST = "127.0.0.1"
DB_PORT = 3306
DB_USER = "root"
DB_PASS = ""
DB_NAME = "falcon_portal"
# SECRET_KEY尽量搞一个复杂点的随机字符串
SECRET_KEY = "4e.5tyg8-u9ioj"
SESSION_COOKIE_NAME = "falcon-portal"
PERMANENT_SESSION_LIFETIME = 3600 * 24 * 30
# 如果你使用的是Go版本的UIC,即Fe那个项目,下面的配置就配置成Fe的地址即可,注意端口,Fe的默认端口是1234# internal是内网可访问的UIC(或者Fe)地址# external是外网可访问的UIC(或者Fe)地址,即用户通过浏览器访问的UIC(或者Fe)地址
UIC_ADDRESS = {
'internal': '',
'external': '',
#'external': '',
}
MAINTAINERS = ['root']
CONTACT = 'ulric.qin@gmail.com'
# 社区版必须维持默认配置
COMMUNITY = True
# 我们可以cp config.py local_config.py用local_config.py中的配置覆盖config.py中的配置# 嫌麻烦的话维持默认即可,也不用制作local_config.pytry:
from frame.local_config import *except Exception, e:
print "[warning] %s" % e
3.10 heartbeat server(HBS)
{
"debug": true,
"database": "root:password@tcp(127.0.0.1:3306)/falcon_portal?loc=Local&parseTime=true", # Portal的数据库地址
"hosts": "", # portal数据库中有个host表,如果表中数据是从其他系统同步过来的,此处配置为sync,否则就维持默认,留空即可
"maxIdle": 100,
"listen": ":6030", # hbs监听的rpc地址
"trustable": [""],
"http": {
"enabled": true,
"listen": "0.0.0.0:6031" # hbs监听的http地址
}
}
curl 127.0.0.1:6031/health
3.11 judge
{
"debug": true,
"debugHost": "nil",
"remain": 11,#表示某个数据最多能保存多少个点,例如告警设置某种状况出现多少次报警all(#3),这个数字不能超过remain-1,这里就是10.
"http": {
"enabled": true,
"listen": "0.0.0.0:6081"
},
"rpc": {
"enabled": true,
"listen": "0.0.0.0:6080"
},
"hbs": {
"servers": ["127.0.0.1:6030"], # hbs最好放到lvs vip后面,所以此处最好配置为vip:port
"timeout": 300,
"interval": 60
},
"alarm": {
"enabled": true,
"minInterval": 300, # 连续两个报警之间至少相隔的秒数,维持默认即可
"queuePattern": "event:p%v",
"redis": {
"dsn": "127.0.0.1:6379", # 与alarm、sender使用一个redis
"maxIdle": 5,
"connTimeout": 5000,
"readTimeout": 5000,
"writeTimeout": 5000
}
}
}
curl 127.0.0.1:6081/health
3.12 links
$ virtualenv ./env
$ ./env/bin/pip install -r pip_requirements.txt
# 修改一下数据库配置,数据库schema文件在scripts目录
DB_HOST = "127.0.0.1"
DB_PORT = 3306
DB_USER = "root"
DB_PASS = ""
DB_NAME = "falcon_links"
# SECRET_KEY尽量搞一个复杂点的随机字符串
SECRET_KEY = "4e.5tyg8-u9ioj"
SESSION_COOKIE_NAME = "falcon-links"
PERMANENT_SESSION_LIFETIME = 3600 * 24 * 30
# 我们可以cp config.py local_config.py用local_config.py中的配置覆盖config.py中的配置# 嫌麻烦的话维持默认即可,也不用制作local_config.pytry:
from frame.local_config import *except Exception, e:
print "[warning] %s" % e
curl -d "abc"
例:curl -d "abc"
3.13 alarm
{
"debug": true,
"uicToken": "",
"http": {
"enabled": true,
"listen": "0.0.0.0:9912" # 未恢复的告警就是通过alarm的http页面来看的
},
"queue": {
"sms": "/sms", # 需要与sender配置成相同的,维持默认即可
"mail": "/mail"
},
"redis": {
"addr": "127.0.0.1:6379", # 与judge、sender相同的redis地址
"maxIdle": 5,
"highQueues": [
"event:p0",
"event:p1"
],
"lowQueues": [
"event:p2",
"event:p3",
"event:p4",
"event:p5",
"event:p6"
],
"userSmsQueue": "/queue/user/sms", # 这两个queue维持默认即可
"userMailQueue": "/queue/user/mail"
},
"api": {
"portal": "", # 内网可访问的portal的地址,实例"",
"uic": "", # 内网可访问的uic(或fe)的地址,实例"/",
"links": "" # 外网可访问的links的地址,实例""
}
}
3.14 task
debug: true/false, 如果为true,日志中会打印debug信息
http
- enable: true/false, 表示是否开启该http端口,该端口为控制端口,主要用来对task发送控制命令、统计命令、debug命令等
- listen: 表示http-server监听的端口
index
- enable: true/false, 表示是否开启索引更新任务
- dsn: 索引服务的MySQL的连接信息,默认用户名是root,密码为空,host为127.0.0.1,database为graph(如有必要,请修改)
- maxIdle: MySQL连接池配置,连接池允许的最大空闲连接数,保持默认即可
- cluster: 后端graph索引更新的定时任务描述。一条记录的形如: "graph地址:执行周期描述",通过设置不同的执行周期,来实现负载在时间上的均衡。
eg. 后端部署了两个graph实例,cluster可以配置为
"cluster":{
"test.hostname01:6071" : "0 0 0 ? * 0-5", //周0-5,每天的00:00:00,开始执行索引全量更新;"0 0 0 ? * 0-5"为quartz表达式
"test.hostname02:6071" : "0 30 0 ? * 0-5", //周0-5,每天的00:30:00,开始执行索引全量更新
}
- autoDelete: true|false, 是否自动删除垃圾索引。默认为false
collector
- enable: true/false, 表示是否开启falcon的自身状态采集任务
- destUrl: 监控数据的push地址,默认为本机的1988接口
- srcUrlFmt: 监控数据采集的url格式, %s将由机器名或域名替换
- cluster: falcon后端服务列表,用具体的"module,hostname:port"表示,module取值可以为graph、transfer、task等
3.15 gateway
3.16 nodata
USE falcon_portal;SET NAMES 'utf8';
/**
* nodata mock config
*/DROP TABLE IF EXISTS `mockcfg`;CREATE TABLE `mockcfg` (
`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL DEFAULT '' COMMENT 'name of mockcfg, used for uuid',
`obj` VARCHAR(10240) NOT NULL DEFAULT '' COMMENT 'desc of object',
`obj_type` VARCHAR(255) NOT NULL DEFAULT '' COMMENT 'type of object, host or group or other',
`metric` VARCHAR(128) NOT NULL DEFAULT '',
`tags` VARCHAR(1024) NOT NULL DEFAULT '',
`dstype` VARCHAR(32) NOT NULL DEFAULT 'GAUGE',
`step` INT(11) UNSIGNED NOT NULL DEFAULT 60,
`mock` DOUBLE NOT NULL DEFAULT 0 COMMENT 'mocked value when nodata occurs',
`creator` VARCHAR(64) NOT NULL DEFAULT '',
`t_create` DATETIME NOT NULL COMMENT 'create time',
`t_modify` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'last modify time',
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
## Configuration
{
"debug": true,
"http": {
"enabled": true,
"listen": "0.0.0.0:6090" #nodata的http服务监听地址
},
"query":{ #query组件相关的配置
"connectTimeout": 5000, #查询数据时http连接超时时间,单位ms
"requestTimeout": 30000, #查询数据时http请求处理超时时间,单位ms
"queryAddr": "127.0.0.1:9966" #query组件的http监听地址,一般形如"domain.query.service:9966"
},
"config": { #配置信息
"enabled": true,
"dsn": "root:passwd@tcp(127.0.0.1:3306)/falcon_portal?loc=Local&parseTime=true&wait_timeout=604800", #portal的数据库连接信息,默认数据库为falcon_portal
"maxIdle": 4 #mysql连接池空闲连接数
},
"collector":{ #nodata数据采集相关的配置
"enabled": true,
"batch": 200, #一次数据采集的条数,建议使用默认值
"concurrent": 10 #采集并发度,建议使用默认值
},
"sender":{ #nodata发送mock数据相关的配置
"enabled": true,
"connectTimeout": 5000, #发送数据时http连接超时时间,单位ms
"requestTimeout": 30000, #发送数据时http请求超时时间,单位ms
"transferAddr": "127.0.0.1:6060", #transfer的http监听地址,一般形如"domain.transfer.service:6060"
"batch": 500, #发送数据时,每包数据包含的监控数据条数
"block": { #nodata阻塞设置
"enabled": false, #是否开启阻塞功能.默认不开启此功能
"threshold": 32 #触发nodata阻塞操作的阈值上限.当配置了nodata的数据项,数据上报中断的百分比,大于此阈值上限时,nodata阻塞mock数据的发送
}
}
}
3.17 Aggregator
USE falcon_portal;SET NAMES 'utf8';
DROP TABLE IF EXISTS cluster;CREATE TABLE cluster
(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
grp_id INT NOT NULL,
numerator VARCHAR(10240) NOT NULL,
denominator VARCHAR(10240) NOT NULL,
endpoint VARCHAR(255) NOT NULL,
metric VARCHAR(255) NOT NULL,
tags VARCHAR(255) NOT NULL,
ds_type VARCHAR(255) NOT NULL,
step INT NOT NULL,
last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
creator VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
)
ENGINE =InnoDB
DEFAULT CHARSET =latin1;
## Configuration
{
"debug": true,
"http": {
"enabled": true,
"listen": "0.0.0.0:6055"
},
"database": {
"addr": "root:@tcp(127.0.0.1:3306)/falcon_portal?loc=Local&parseTime=true",
"idle": 10,
"ids": [1,-1], # aggregator模块可以部署多个实例,这个配置表示当前实例要处理的数据库中cluster表的id范围
"interval": 55
},
"api": {
"hostnames": "%s/hosts.json", # 注意修改为你的portal的ip:port
"push": "", # 注意修改为你的transfer的ip:port
"graphLast": "/graph/last" # 注意修改为你的query的ip:port
}
}
3.18 Agent-updater
5.Grafana配置
2016/05/30 16:00:27 [I] Migrator: Starting DB migration
2016/05/30 16:00:27 [I] Plugins: Scan starting
2016/05/30 16:00:27 [I] Plugins: Registering plugin Open-Falcon
2016/05/30 16:00:27 [plugins.go:127 walker()] [E] Plugins: Failed to load plugin json file: /var/lib/grafana/plugins/grafana-openfalcon-datasource/plugin.json, err: Plugin with same id already exists
2016/05/30 16:00:27 [T] Checking for updates
2016/05/30 16:00:27 [I] Plugins: Adding route /public/plugins/fastweb-openfalcon-datasource -> /var/lib/grafana/plugins/grafana-openfalcon-datasource
2016/05/30 16:00:27 [I] Listen:
注意!!!
6.windows监控配置
7.Mysql监控
mkdir -p $GOPATH/src/github.com/open-falconcd $GOPATH/src/github.com/open-falcon
git clone
cd mymon
go get ./...
go build -o mymon
echo'* * * * * cd $GOPATH/src/github.com/open-falcon/mymon && ./mymon -c etc/mon.cfg'> /etc/cron.d/mymon
[default]
log_file=mymon.log # 日志路径和文件名
# Panic 0
# Fatal 1
# Error 2
# Warn 3
# Info 4
# Debug 5
log_level=4 # 日志级别
falcon_client= # falcon agent连接地址
#自定义endpoint
endpoint=127.0.0.1 #若不设置则使用OS的hostname
[mysql]
user=root # 数据库用户名
password= # 数据库密码
host=127.0.0.1 # 数据库连接地址
port=3306 # 数据库端口
8.redis
监控
yum install python-simplejson -y