监控对运维来说是相当重要的,现在来说falcon确实相对zabbix有一定优势,不过也存在明显短板,优势是架构设计以及一些设计思路很好,就单说模板继承,这个相对zabbix就很有优势,毕竟是已经有了前人的经验,小米之前也是用的zabbix,所以大众常见的zabbix痛点在falcon上基本得到了改善,但falcon的UI真是很难受啊,不过毕竟火起来还不久,又是一个互联网领头企业开源的项目,还是很有前景的,不妨尝试一下,现在只是基本搭建完成,TAG系统和表达式这些还没开始尝试,最近应该还会了解这个,以下是安装配置及简单调试使用过程。

架构图(来自小米官方)及组件说明

jiagou-4

**Agent: **部署在目标机器采集机器监控项 **Transfer: **数据接收端,转发数据到后端Graph和Judge Graph: 操作rrd文件,存储监控数据 **Query:**查询各个Graph数据,提供统一http查询接口 **Dashboard: **查询监控历史趋势图的web端 **Alarm:**主要负责告警 **Task: **负责一些定时任务,索引全量更新,垃圾索引清理,自身组件监控

安装搭建

环境准备

我的版本环境:

version: Amazon 2015.03 Type: t2.large Git version: 2.7.5 (need >= 1.7.5) GO version: 1.8.3 (need >= 1.6)

  • 安装环境
    1
    2
    3
    
    yum install -y redis
    yum install -y mysql-server
    yum install -y git
    
  • 安装go环境
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    
    export HOME=/home/tai_ops
    export WORKSPACE=$HOME/open-falcon
    go_pkg='go1.8.3.linux-amd64.tar.gz'
    cd $HOME
    echo $HOME
    #wget http://dinp.qiniudn.com/go1.4.1.linux-amd64.tar.gz
    #wget https://storage.googleapis.com/golang/${go_pkg}
    tar zxf ${go_pkg}
    mkdir -p ${WORKSPACE}/src
    echo "" >> .bashrc
    echo 'export GOROOT=$HOME/go' >> .bashrc
    echo 'export GOPATH=$HOME/${WORKSPACE}' >> .bashrc
    echo 'export PATH=$GOROOT/bin:$GOPATH/bin:$PATH' >> .bashrc
    echo "" >> .bashrc
    source .bashrc
    
  • 下载源码
    1
    2
    3
    
    mkdir -p $GOPATH/src/github.com/open-falcon
    cd $GOPATH/src/github.com/open-falcon
    git clone --recursive https://github.com/open-falcon/falcon-plus.git
    
  • 初始化数据库
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    
    mysql_host='localhost'
    mysql_user='root'
    mysql_pass='arvon2014'
    cd $GOPATH/src/github.com/open-falcon/falcon-plus/scripts/mysql/db_schema/
    for i in `ls`;do
        mysql -h ${mysql_host} -u${mysql_user}  -p${mysql_pass} < $i
    done
    #mysql -h ${mysql_host} -u${mysql_user}  -p${mysql_pass} < db_schema/graph-db-schema.sql
    #mysql -h ${mysql_host} -u${mysql_user}  -p${mysql_pass} < db_schema/dashboard-db-schema.sql
    #mysql -h ${mysql_host} -u${mysql_user}  -p${mysql_pass} < db_schema/portal-db-schema.sql
    #mysql -h ${mysql_host} -u${mysql_user}  -p${mysql_pass} < db_schema/links-db-schema.sql
    #mysql -h ${mysql_host} -u${mysql_user}  -p${mysql_pass} < db_schema/uic-db-schema.sql
    
  • Build安装包 可选是build全部组件还是个别组件,我这里选择了全部build
    1
    2
    3
    4
    5
    6
    7
    8
    
    cd $GOPATH/src/github.com/open-falcon/falcon-plus/
    # make all modules
    make all
    ## make specified module
    #make agent
    #
    ## pack all modules
    make pack
    

基础组件安装配置

  • 解压build安装包到需要的安装路径
    1
    2
    3
    4
    
    mkdir -pv /data/tai-falcon
    cp $GOPATH/src/github.com/open-falcon/falcon-plus/open-falcon-v0.2.0.tar.gz /data
    cd /data/
    tar -xvf open-falcon-v0.2.0.tar.gz -C /data/tai-falcon
    
  • 调试各个组件 主要就是要修改数据库等信息,如下

/data/tai-falcon/hbs/config/cfg.json: “database”: “root:arvon2014@tcp(127.0.0.1:3306)/falcon_portal?loc=Local&parseTime=true”,

/data/tai-falcon/aggregator/config/cfg.json: “addr”: “root:arvon2014@tcp(127.0.0.1:3306)/falcon_portal?loc=Local&parseTime=true”,

/data/tai-falcon/nodata/config/cfg.json: “dsn”: “root:arvon2014@tcp(127.0.0.1:3306)/falcon_portal?loc=Local&parseTime=true&wait_timeout=604800”,

/data/tai-falcon/alarm/config/cfg.json: “addr”: “root:arvon2014@tcp(127.0.0.1:3306)/alarms?charset=utf8&loc=Asia%2FChongqing”,

/data/tai-falcon/api/config/cfg.json: “faclon_portal”: “root:arvon2014@tcp(127.0.0.1:3306)/falcon_portal?charset=utf8&parseTime=True&loc=Local”,

/data/tai-falcon/api/config/cfg.json: “graph”: “root:arvon2014@tcp(127.0.0.1:3306)/graph?charset=utf8&parseTime=True&loc=Local”,

/data/tai-falcon/api/config/cfg.json: “uic”: “root:arvon2014@tcp(127.0.0.1:3306)/uic?charset=utf8&parseTime=True&loc=Local”,

/data/tai-falcon/api/config/cfg.json: “dashboard”: “root:arvon2014@tcp(127.0.0.1:3306)/dashboard?charset=utf8&parseTime=True&loc=Local”,

/data/tai-falcon/api/config/cfg.json: “alarms”: “root:arvon2014@tcp(127.0.0.1:3306)/alarms?charset=utf8&parseTime=True&loc=Local”,

/data/tai-falcon/graph/config/cfg.json: “dsn”: “root:arvon2014@tcp(127.0.0.1:3306)/graph?loc=Local&parseTime=true”,

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
**推荐启动顺序:**judge > graph > transfer > agent > alarm > api > aggregator > nodata > gateway
**提示:**主要调试直接看对应模块下的log即可

#### dashboard安装配置

- 安装开发包
```bash
 pip install virtualenv
 yum install -y python-devel
 yum install -y openldap-devel
 yum install -y mysql-devel
 yum groupinstall "Development tools"
  • 下载dashboard的源码
    1
    2
    
    cd $HOME/open-falcon
    git clone https://github.com/open-falcon/dashboard
    
  • 安装环境依赖
    1
    2
    3
    
    cd $HOME/open-falcon/dashboard/
    virtualenv ./env
    ./env/bin/pip install -r pip_requirements.txt
    
  • 配置修改
    1
    2
    3
    4
    
    vim ./gunicorn.conf
    vim ./rrd/config.py
    #主要也是修改数据库,也可以修改服务端口
    ./control start
    
  • 访问dashboard测试 dashboard-1 这个没有默认的用户密码,自己注册后即可登录,且注册不会验证邮箱,登录后如下 dashboard-2

Agent端配置

  • 生成agent部署包
    1
    2
    3
    
    cd $GOPATH/src/github.com/open-falcon/falcon-plus/modules/agent
    ./control pack
    #pack 即可打出agent包,我这里是falcon-agent-5.1.2.tar.gz,然后把这个包部署到需要监控的机器上
    
  • 配置启动agent
    1
    2
    3
    4
    5
    6
    7
    
    mkdir ~/falcon_aget;cd ~/falcon_agent
    cp falcon-agent-5.1.2.tar.gz ./
    tar xvf falcon-agent-5.1.2.tar.gz
    ##然后修改配置
    cp cfg.example.json cfg.json
    #vim cfg.jsoon
    #修改heartbeat、transfer的配置地址端口等改为对应配置即可
    
  • 可以通过浏览器查看上报的监控数据 agent-3

报警邮件设置(小米规范使用http接口,不过小米也有相应的封装工具,如果二次开发可以自己定制实现方法)

  • 下载邮件封装程序源码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    cd $GOPATH/github.com/open-falcon/
    git clone https://github.com/open-falcon/mail-provider.git
    cd $GOPATH/github.com/open-falcon/mail-provider/
    # 开始build出包
    go get ./...
    ./control build
    ./control pack
    #测试邮件
    curl http://127.0.0.1:4000/sender/mail -d "tos=youremail@126.com&subject='hello'&content='world'"
    

报警配置

**简要说明:**大概说三种情况

  1. 正常:创建主机组–>根据主机组创建监控模板–>主机组关联模板
  2. 模板继承:在一种的情况下,很可能存在一个主机组里个别机器可能需要的阈值并不一样,这时可以继承这个主机组的通用模板,在此基础上做特别的设置,除此之外的监控项还按这个主机组的通用模板
  3. TAG模式:这种模式可独立于模板模式进行,比较适合监控同个项目或者个别重要业务的场景

设置Hostgroup(主机组)

  • 创建主机组 5
  • 为主机组添加主机(主机填写hostname主机名即可) 6

设置Templates(模板)

  • 创建模板 7
  • 设置报警策略 8
  • 主机组关联模板 9

查看报警

  • 报警 10

参考文献

小米官方手册0.2.0