Chinaunix首页 | 论坛 | 博客
  • 博客访问: 21734
  • 博文数量: 10
  • 博客积分: 25
  • 博客等级: 民兵
  • 技术积分: 95
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-12 09:51
文章分类

全部博文(10)

文章存档

2017年(9)

2016年(1)

我的朋友

分类: Python/Ruby

2017-08-28 15:18:03

Open-falcon安装配置手册

 

1.open-falcon介绍

监控系统是整个运维环节,乃至整个产品生命周期中最重要的一环,事前及时预警发现故障,事后提供翔实的数据用于追查定位问题。监控系统作为一个成熟的运维产品,业界有很多开源的实现可供选择。当公司刚刚起步,业务规模较小,运维团队也刚刚建立的初期,选择一款开源的监控系统,是一个省时省力,效率最高的方案。之后,随着业务规模的持续快速增长,监控的对象也越来越多,越来越复杂,监控系统的使用对象也从最初少数的几个SRE,扩大为更多的DEVSSRE。这时候,监控系统的容量和用户的“使用效率”成了最为突出的问题。

监控系统业界有很多杰出的开源监控系统。我们在早期,一直在用zabbix,不过随着业务的快速发展,以及互联网公司特有的一些需求,现有的开源的监控系统在性能、扩展性、和用户的使用效率方面,已经无法支撑了。因此,我们在过去的一年里,从互联网公司的一些需求出发,从各位SRESADEVS的使用经验和反馈出发,结合业界的一些大的互联网公司做监控,用监控的一些思考出发,设计开发了小米的监控系统:open-falcon

open-falcon的目标是做最开放、最好用的互联网企业级监控产品。

产品特点:

强大灵活的数据采集:自动发现,支持falcon-agentsnmp、支持用户主    push、用户自定义插件支持、opentsdb data model liketimestamp  endpoint metrickey-value tags

水平扩展能力:支持每个周期上亿次的数据采集、告警判定、历史数据存储和查询

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

人性化的告警设置:最大告警次数、告警级别、告警恢复通知、告警暂停、不同时段不同阈值、支持维护周期

高效率的graph组件:单机支撑200metric的上报、归档、存储(周期为1分钟)

高效的历史数据query组件:采用rrdtool的数据归档策略,秒级返回上百个metric一年的历史数据

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

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

开发语言: 整个系统的后端,全部golang编写,portaldashboard使用python编写。


Open-falcon通过十几个组件结合使用,达到监控告警目的。

2.环境准备

依赖组件

安装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代码

我们使用64Linux作为开发环境,与线上环境保持一致。如果你所用的环境不同,请自行解决不同平台的命令差异

首先安装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

 

3.open-falcon安装

解压of-release-v0.1.0.tar.gz获得以下16个压缩包

每个压缩包对应一个组件,创建独立组件目录,将压缩包解压到相应目录即可。

4.组件配置使用

3.1 agent

agent用于采集机器负载监控指标,比如cpu.idleload.1mindisk.io.util等等,每隔60pushTransferagentTransfer建立了长连接,数据发送速度比较快,agent提供了一个http接口/v1/push用于接收用户手工push的一些数据,然后通过长连接迅速转发给Transfer。因此需要被监控的所有主机都需要使用该组件。

配置文件必须叫cfg.json,可以基于cfg.example.json修改

{
"debug": true, # 控制一些debug信息的输出,生产环境通常设置为false
"hostname": "", # agent采集了数据发给transferendpoint就设置为了hostname,默认通过`hostname`获取,如果配置中配置了hostname,就用配置中的
"ip": "", # agenthbs心跳的时候会把自己的ip地址发给hbsagent会自动探测本机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的地址,端口是hbsrpc端口
"interval": 60, # 心跳周期,单位是秒
"timeout": 1000 # 连接hbs的超时时间,单位是毫秒
    },
"transfer": {
"enabled": true, # 此处enabled要设置为true
"addrs": [
"127.0.0.1:8433",
"127.0.0.1:8433"
        ], # transfer的地址,端口是transferrpc端口, 可以支持写多个transfer的地址,agent会保证HA
"interval": 60, # 采集周期,单位是秒,即agent一分钟采集一次数据发给transfer
"timeout": 1000 # 连接transfer的超时时间,单位是毫秒
    },
"http": {
"enabled": true, # 是否要监听http端口
"listen": ":1988" # 如果监听的话,监听的地址
    },
"collector": {
"ifacePrefix": ["eth", "em"] # 默认配置只会采集网卡名称前缀是ethem的网卡流量,配置为空就会采集所有的,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

验证

var目录下的log是否正常,或者浏览器访问其1988端口。另外agent提供了一个--check参数,可以检查agent是否可以正常跑在当前机器上

./falcon-agent --check

/v1/push接口

我们设计初衷是不希望用户直接连到Transfer发送数据,而是通过agent/v1/push接口转发,接口使用范例:

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

transfer是数据转发服务。它接收agent上报的数据,然后按照哈希规则进行数据分片、并将分片后的数据分别pushgraph&judge等组件。


# 校验服务,这里假定服务开启了6060http监听端口。检验结果为ok表明服务正常启动。
curl -s "127.0.0.1:6060/health"

服务启动后,可以通过日志查看服务的运行状态,日志文件地址为./var/app.log。可以通过调试脚本./test/debug查看服务器的内部状态数据,如 运行 bash ./test/debug 可以得到服务器内部状态的统计信息。

Configuration

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

graph是存储绘图数据的组件。graph组件 接收transfer组件推送上来的监控数据,同时处理query组件的查询请求、返回绘图数据。

# 校验服务,这里假定服务开启了6071http监听端口。检验结果为ok表明服务正常启动。
curl -s "127.0.0.1:6071/health"

启动服务后,可以通过日志查看服务的运行状态,日志文件地址为./var/app.log;如果需要详细的日志,可以将配置项debug设置为true。可以通过调试脚本./test/debug查看服务器的内部状态数据,如 运行 bash ./test/debug 可以得到服务器内部状态的统计信息。

配置说明

{
"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,密码为空,host127.0.0.1databasegraph(如有必要,请修改)如果需要密码,在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

query组件,提供统一的绘图数据查询入口。query组件接收查询请求,根据一致性哈希算法去相应的graph实例查询不同metric的数据,然后汇总拿到的数据,最后统一返回给用户。


# 校验服务,这里假定服务开启了9966http监听端口。检验结果为ok表明服务正常启动。
curl -s "127.0.0.1:9966/health"

服务启动后,可以通过日志查看服务的运行状态,日志文件地址为./var/app.log。可以通过查询脚本./scripts/query读取绘图数据,如 运行 bash ./scripts/query "ur.endpoint""ur.counter"可以查询Endpoint="ur.endpoint"& Counter="ur.counter"对应的绘图数据。


配置说明

注意: 请确保 graph.replicas和graph.cluster 的内容与transfer的配置完全一致

{
"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": "",     // queryhttp地址
"dashboard": "", // dashboardhttp地址
"max": 500                            //API返回结果的最大数量
        }
    }
}

部署完成query组件后,请修改dashboard组件的配置、使其能够正确寻址到query组件。请确保query组件的graph列表 与 transfer的配置 一致。

3.5 dashboard

dashboard是面向用户的查询界面。在这里,用户可以看到pushgraph中的所有数据,并查看其趋势图。

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-devlibmysqlclient-dev等。

服务启动后,可以通过日志查看服务的运行状态,日志文件地址为./var/app.log。可以通过访问dashboard主页(这里假设 dashboardhttp监听端口为8081)

配置说明

dashboard有两个需要更改的配置文件: ./gunicorn.conf ./rrd/config.py./gunicorn.conf各字段,含义如下

- workers,dashboard并发进程数
- bind,dashboardhttp监听端口
- proc_name,进程名称
- pidfile,pid文件全名称
- limit_request_field_size,TODO
- limit_request_line,TODO

配置文件./rrd/config.py,各字段含义为

# 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 短信发送接口(接口定义,无需安装)

这个组件没有代码,需要各个公司自行提供。

监控系统产生报警事件之后需要发送报警邮件或者报警短信,各个公司可能有自己的邮件服务器,有自己的邮件发送方法;有自己的短信通道,有自己的短信发送方法。falcon为了适配各个公司,在接入方案上做了一个规范,需要各公司提供http的短信和邮件发送接口

短信发送http接口:

method: post
params:
  - content: 短信内容
  - tos: 使用逗号分隔的多个手机号

邮件发送http接口:

method: post
params:
  - content: 邮件内容
  - subject: 邮件标题
  - tos: 使用逗号分隔的多个邮件地址

3.7 sender

上节我们利用http接口规范屏蔽了邮件、短信发送的问题。Sender这个模块专门用于调用各公司提供的邮件、短信发送接口。

sender这个模块和redis队列部署在一台机器上即可。公司即使有几十万台机器,一个sender也足够了。

配置说明

{
"debug": true,
"http": {
"enabled": true,
"listen": "0.0.0.0:6066"
    },
"redis": {
"addr": "127.0.0.1:6379", # 此处配置的redis地址要和后面的judgealarm配置成相同的
"maxIdle": 5
    },
"queue": {
"sms": "/sms", # 短信队列名称,维持默认即可,alarm中也会有一个相同的配置
"mail": "/mail" # 邮件队列名称,维持默认即可,alarm中也会有一个相同的配置
    },
"worker": {
"sms": 10, # 调用短信接口的最大并发量
"mail": 50 # 调用邮件接口的最大并发量
    },
"api": {
"sms": "", # 各公司自行提供的短信发送接口,11.11.11.11这个ip只是个例子喽,如果未提供相应接口可删除该项
"mail": "" # 各公司自行提供的邮件发送接口
    }
}

如果没有邮件发送接口,可以使用 

sender的配置文件中配置了监听的http端口,我们可以访问一下/health接口看是否返回ok,我们所有的Go后端模块都提供了/health接口,上面的配置的话就是这样验证:

curl 127.0.0.1:6066/health

另外就是查看senderloglogvar目录下

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
    }
}

配置启动mail-provider后,可使用如下命令测试是否能正常发送

curl -d

该命令向qq邮箱发送了一个测试邮件,成功后邮箱中会收到该邮件:

注:不同的邮箱由于对邮件设置的安全过滤情况不同,可能导致测试邮件有收取不到的情况,如使用搜狐邮箱测试时,提示success,但是仍然收不到邮件。163做接收邮箱时,会报错,提示该邮件为垃圾邮件之类的(隔天还邮件提醒安全隐患。。。)

注意:测试成功后需要修改sender的邮件发送接口,接口地址改为:

"mail": ""

3.8 web前端(Fe)

这是Go版本的,也是一个统一的web入口,因为监控组件众多,记忆ipport去访问还是比较麻烦。fe像是一个监控的hao123.

UIC区别

Fe模块除了提供了一个简单的导航之外,最大的不同是密码存放方式发生了变化,所以JavaUIC用户如果要迁移过来,需要修改Fe模块配置的salt,配置为空字符串,就可以和原来Java版本的UIC共用同一个数据库了,不过配置成空字符串不够安全,建议salt配置一个随机字符串,然后通过Fe注册一个新用户,把数据库中所有用户的密码都重置为这个新用户的密码,发个通知,让各个注册用户重新自己登录修改密码。

Fe作为一个前端模块,无状态,可以水平扩展,至少部署两台机器以保证可用性。前面做一个负载均衡设备,nginx或者lvs都可以。最后为其申请一个域名,搞定!

配置介绍

{
"log": "debug",
"company": "MI", # 填写自己公司的名称,用于生成联系人二维码
"http": {
"enabled": true,
"listen": "0.0.0.0:1234" # 自己随便搞个端口,别跟现有的重复了,可以使用8080,与老版本保持一致
    },
"cache": {
"enabled": true,
"redis": "127.0.0.1:6379", # 这个redisjudgealarm用的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", # 数据库schemascripts目录下
"idle": 10,
"max": 100
    },
"shortcut": {
"falconPortal": "", # 浏览器可访问的portal地址
"falconDashboard": "", # 浏览器可访问的dashboard地址
"falconAlarm": "" # 浏览器可访问的alarmhttp地址
    }
}

注意:shortcut中设置的地址,按实际配置成内/外网访问地址。内网ip:port

或者外网ip:port

设置root账户密码

该项目中的注册用户是有不同角色的,目前分三种角色:普通用户、管理员、root账号。系统启动之后第一件事情应该是设置root的密码,浏览器访问: (此处假设你的项目访问地址是fe.example.com,也可以使用ip,这样就设置了root账号的密码为abc。普通用户可以支持注册。

然后通过访问fe即可使用root登录(也可注册新用户),

ldap 认证

Fe 现在支持通过 ldap 来进行用户认证。不需要提前在 Fe 内开设账号。Fe 会自动将 ldap 认证过来的新用户插入到 Fe 的数据库内。

配置说明

"addr": "ldap.example.com:389",
        # ldap 的地址和端口
"baseDN": "dc=example,dc=com",
        # ldap  baseDNldap 认证的时候将从这个路径开始查询用户
"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 的数据库内。
    },

这里我们先安装了Fe这个模块,portaldashboardalarm等模块都还没有安装,所以shortcut中不知道如何配置才好。不用着急,先维持默认,等之后部署完了portaldashboardalarm等模块之后再回来修改fe的配置。

3.9 portal

Portal是用来配置报警策略的.

Portal是个web项目,无状态,可以水平扩展,至少部署两台机器以保证可用性,前面架设nginx或者lvs这种负载设备,申请一个域名,搞定!

Portal的配置文件在frame/config.py

virtualenv ./env

./env/bin/pip install --default-timeout=100 -r pip_requirements.txt

# 修改一下数据库配置,数据库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.pylocal_config.py中的配置覆盖config.py中的配置# 嫌麻烦的话维持默认即可,也不用制作local_config.pytry:
    from frame.local_config import *except Exception, e:
    print "[warning] %s" % e

Portal正常启动之后,就可以回去配置Fe这个项目的shortcut了。当然,dashboardalarm还没有搭建,这俩shortcut还没法配置。修改完了shortcut,要重启fe模块。

3.10 heartbeat server(HBS)

HBS第一个功能:agent发送心跳信息给HBS的时候,会把hostnameipagent versionplugin version等信息告诉HBSHBS负责更新host表。

falcon-agent有一个很大的特点,就是自发现,不用配置它应该采集什么数据,就自动去采集了。比如cpu、内存、磁盘、网卡流量等等都会自动采集。我们除了要采集这些基础信息之外,还需要做端口存活监控和进程数监控。那我们是否也要自动采集监听的端口和各个进程数目呢?我们没有这么做,因为这个数据量比较大,汇报上去之后用户大部分都是不关心的,太浪费。于是我们换了一个方式,只采集用户配置的。比如用户配置了对某个机器80端口的监控,我们才会去采集这个机器80端口的存活性。那agent如何知道自己应该采集哪些端口和进程呢?向HBS要,HBS去读取Portal的数据库,返回给agent

之后我们会介绍一个用于判断报警的组件:JudgeJudge需要获取所有的报警策略,让Judge去读取PortalDB么?不太好。因为Judge的实例数目比较多,如果公司有几十万机器,Judge实例数目可能会是几百个,几百个Judge实例去访问Portal数据库,也是一个比较大的压力。既然HBS无论如何都要访问Portal的数据库了,那就让HBS去获取所有的报警策略缓存在内存里,然后Judge去向HBS请求。这样一来,对Portal DB的压力就会大大减小。

hbs是可以水平扩展的,至少部署两个实例以保证可用性。一般一个实例可以搞定5000台机器,所以说,如果公司有10万台机器,可以部署20hbs实例,前面架设lvsagent中就配置上lvs vip即可。

配置说明

{
"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地址
    }
}

访问/health接口验证hbs是否工作正常。

curl 127.0.0.1:6031/health

另外就是查看hbsloglogvar目录下

如果你先部署了agent,后部署的hbs,那咱们部署完hbs之后需要回去修改agent的配置,把agent配置中的heartbeat部分enabled设置为trueaddr设置为hbsrpc地址。如果hbs的配置文件维持默认,rpc端口就是6030http端口是6031agent中应该配置为hbsrpc端口,小心别弄错了。

3.11 judge

Judge用于告警判断,agent将数据pushTransferTransfer不但会转发给Graph组件来绘图,还会转发给Judge用于判断是否触发告警。

Judge监听了一个http端口,提供了一个http接口:/count,访问之,可以得悉当前Judge实例处理了多少数据量。推荐的做法是一个Judge实例处理50~100万数据,用个5G~10G内存,如果所用物理机内存比较大,比如有128G,可以在一个物理机上部署多个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", # alarmsender使用一个redis
"maxIdle": 5,
"connTimeout": 5000,
"readTimeout": 5000,
"writeTimeout": 5000
        }
    }
}

访问/health接口验证Judge是否工作正常。

curl 127.0.0.1:6081/health

另外就是查看Judgeloglogvar目录下

3.12 links

Links是为报警合并功能写的组件。如果你不想使用报警合并功能,这个组件是无需安装的。

解压Links安装包后,安装依赖库

$ virtualenv ./env
$ ./env/bin/pip install -r pip_requirements.txt

安装完依赖的lib之后就可以用control脚本启动了,logvar目录。不过启动之前要先把配置文件修改成相应配置。另外,监听的端口在gunicorn.conf中配置。

Links是个web项目,无状态,可以水平扩展,至少部署两台机器以保证可用性,前面架设nginx或者lvs这种负载设备,申请一个域名,搞定!


配置说明

Links的配置文件在frame/config.py

# 修改一下数据库配置,数据库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.pylocal_config.py中的配置覆盖config.py中的配置# 嫌麻烦的话维持默认即可,也不用制作local_config.pytry:
    from frame.local_config import *except Exception, e:
    print "[warning] %s" % e

启动之后要看看log是否正常,logvar目录。

然后浏览器访问之,发现首页404,这是正常的。之后alarm模块会用到links

或者我们可以这么验证:

curl  -d "abc"
例:curl  -d "abc"

上面命令会返回一个随机字符串,拿着这个随机字符串拼接到links地址后面,浏览器访问之即可。比如返回的随机字符串是dot9kg8b,浏览器访问: 即可

3.13 alarm

alarm模块是处理报警event的,judge产生的报警event写入redisalarmredis读取处理

alarm是个单点。对于未恢复的告警是放到alarm的内存中的,alarm还需要做报警合并,故而alarm只能部署一个实例。后期需要想办法改进。

配置说明

{
"debug": true,
"uicToken": "",
"http": {
"enabled": true,
"listen": "0.0.0.0:9912" # 未恢复的告警就是通过alarmhttp页面来看的
    },
"queue": {
"sms": "/sms", # 需要与sender配置成相同的,维持默认即可
"mail": "/mail"
    },
"redis": {
"addr": "127.0.0.1:6379", # judgesender相同的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的地址,实例""
    }
}

api部分portaluic可以配置成内网可访问的地址,速度比较快,但是links要配置成外网可访问的地址,注意喽

如果某个核心服务挂了,可能会造成大面积报警,为了减少报警短信数量,我们做了报警合并功能。把报警信息写入links模块,然后links返回一个url地址给alarmalarm将这个url链接发给用户,这样用户只要收到一条短信(里边是个url地址),点击url进去就是多条报警内容。

highQueues中配置的几个event队列中的事件是不会做报警合并的,因为那些是高优先级的报警,报警合并只是针对lowQueues中的事件。如果所有的事件都不想做报警合并,就把所有的event队列都配置到highQueues中即可

alarm搭建完成了,我们可以回去修改fe的配置,把fe模块的shortcut:falconAlarm配置成alarmhttp地址,是浏览器可访问的alarmhttp地址

3.14 task

task是监控系统一个必要的辅助模块。定时任务,实现了如下几个功能:

index更新。包括图表索引的全量更新 和 垃圾索引清理。

falcon服务组件的自身状态数据采集。定时任务了采集了transfergraphtask这三个服务的内部状态数据。

falcon自检控任务。

配置说明

debug: true/false, 如果为true,日志中会打印debug信息
http
    - enable: true/false, 表示是否开启该http端口,该端口为控制端口,主要用来对task发送控制命令、统计命令、debug命令等
    - listen: 表示http-server监听的端口
index
    - enable: true/false, 表示是否开启索引更新任务
    - dsn: 索引服务的MySQL的连接信息,默认用户名是root,密码为空,host127.0.0.1databasegraph(如有必要,请修改)
    - 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取值可以为graphtransfertask


部署完成task组件后,请修改collector配置、使task能够正确采集transfer & graph的内部状态,请修改monitor配置、使task模块能够自检控Open-Falon的各组件(当前支持transfergraphqueryjudge)

3.15 gateway

如果您没有遇到机房分区问题,请直接忽略此组件。

如果您已经遇到机房分区问题、并急需解决机房分区时监控数据回传的问题,请使用该组件。更多的资料在:

3.16 nodata

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后端服务。即本文的

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" #nodatahttp服务监听地址
    },
"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", #transferhttp监听地址,一般形如"domain.transfer.service:6060"
"batch": 500, #发送数据时,每包数据包含的监控数据条数
"block": { #nodata阻塞设置
"enabled": false, #是否开启阻塞功能.默认不开启此功能
"threshold": 32 #触发nodata阻塞操作的阈值上限.当配置了nodata的数据项,数据上报中断的百分比,大于此阈值上限时,nodata阻塞mock数据的发送
        }
    }
}

3.17 Aggregator

如果你已经安装过open-falcon了,那么请检查:

检查你的portal中是否有这个代码:

falcon_portal数据库中加入了一张新表:

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", # 注意修改为你的portalip:port
"push": "", # 注意修改为你的transferip:port
"graphLast": "/graph/last" # 注意修改为你的queryip:port
    }
}

3.18 Agent-updater

每台机器都要部署falcon-agent,如果公司机器量比较少,用psshansiblefabric之类的工具手工安装问题也不大。但是公司机器量多了之后,手工安装、升级、回滚falcon-agent将成为噩梦。

个人开发了agent-updater这个工具,用于管理falcon-agentagent-updater也有一个agentops-updater,可以看做是一个超级agent,用于管理其他agentagent,呵呵,ops-updater推荐在装机的时候一起安装上。ops-updater通常是不会升级的。

具体参看:

5.Grafana配置

grafana安装

wget

rpm -ivh grafana-3.0.4-1464167696.x86_64.rpm

(grafana编译似乎不太好使,godep store需要下载golanglib库,有些下不下来,一直无法通过)

 

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-falconquery接口有问题

 

这是grafana-server的报错日志

2016/05/30 16:00:27 [I] Database: sqlite3
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: 

 

原因是前面所说的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信息。

6.windows监控配置

依赖

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

使用方式

  1. 根据实际部署情况,修改脚本开头的配置参数
  2. 修改 graph mysql 编码为utf8,以支持中文的。由于 windows 的网卡有可能存在中文,所以这一步很重要。。。
  3. 测试: python windows_collect.py
  4. 丢进 windows 计划任务完事

bat脚本python d:/"Program Files"/windows_collect.pywindows_collect.py置于同一目录,设置定时执行即可

7.Mysql监控

mymon(MySQL-Monitor) -- MySQL数据库运行状态数据采集脚本,采集包括global status, global variables, slave status等。


安装

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

配置

etc/mon.cfg

[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 #若不设置则使用OShostname
    [mysql]
    user=root # 数据库用户名
    password= # 数据库密码
    host=127.0.0.1 # 数据库连接地址
    port=3306 # 数据库端口

MySQL metrics

请参考./metrics.txt,其中的内容,仅供参考,根据MySQL的版本、配置不同,采集到的metrics也有差别。

8.redis 监控

需求:Python >= 2.6python-simplejson

yum install python-simplejson -y

使用方法

  1. 根据实际部署情况,修改有注释位置附近的配置
  2. 测试: python redis-monitor.py
  3. 将脚本加入crontab执行即可

注意:

1.修改redis-monitor.py时,_redis_cli = '/usr/local/bin/redis-cli'路径一定要正确,修改前whereis redis_cli检查确认其路径。

2.#inst_list中保存了redis配置文件列表,程序将从这些配置中读取portpassword,建议使用动态发现的方法获得,如:

# 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









阅读(7282) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~