在 CentOS 7 上部署 Open-Falcon v0.2.0 完整指南

在当今复杂的分布式系统架构中,监控是确保系统高可用性和可维护性的基石。Open-Falcon 是小米公司开源的一款企业级、高可用、可扩展的分布式监控系统,它在国内互联网公司中被广泛使用。其核心特点包括强大的数据采集、灵活的告警策略、高效的数据存储和良好的水平扩展能力。

虽然 Open-Falcon 已经有了更新的版本,但 v0.2.0 是一个经典且非常稳定的版本,许多公司仍然在生产环境中使用它。本指南将详细介绍如何在 CentOS 7 操作系统上,从零开始部署一个全功能的 Open-Falcon v0.2.0 监控系统。

读者对象#

本教程适用于:

  • 运维工程师
  • 开发工程师
  • 对系统监控感兴趣的技术爱好者

假设读者具备基本的 Linux 操作和 MySQL 数据库知识。

目录#

  1. 环境准备
  2. 数据库初始化
  3. 安装与配置后端组件
    1. 安装基础依赖
    2. 下载并解压 Open-Falcon
    3. 配置与启动后端组件
  4. 安装与配置前端 Dashboard
  5. 安装并配置 Agent
  6. 基本使用与验证
  7. 常见问题与排查
  8. 最佳实践
  9. 总结
  10. 参考引用

环境准备#

在开始之前,请确保你拥有一台纯净的 CentOS 7.x 服务器,并已完成以下准备工作。

系统要求:

  • 操作系统: CentOS 7.x (Minimal 安装即可)
  • 内存: 建议至少 4GB
  • 硬盘: 建议至少 50GB 可用空间(主要用于时间序列数据存储)
  • 网络: 所有组件需要能相互通信

软件依赖:

  • MySQL 5.6 或 5.7
  • Redis(可选,但强烈推荐用于缓存和队列)
  • Go 语言环境(用于编译前端)

首先,更新系统并安装一些基础工具:

yum update -y
yum install -y wget vim git

关闭并禁用防火墙(生产环境请谨慎操作,应配置具体规则而非直接关闭):

systemctl stop firewalld
systemctl disable firewalld

关闭 SELinux:

setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

数据库初始化#

Open-Falcon 的后端组件需要 MySQL 来存储元数据、告警策略、用户信息等。

  1. 安装 MySQL

    wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
    rpm -ivh mysql57-community-release-el7-11.noarch.rpm
    yum install -y mysql-community-server
    systemctl start mysqld
    systemctl enable mysqld
  2. 获取初始密码并修改

    grep 'temporary password' /var/log/mysqld.log
    mysql_secure_installation
    # 按照提示修改 root 密码,并完成安全设置。
  3. 创建数据库和用户 登录 MySQL,并执行以下 SQL 语句创建 falcon 数据库和相应用户。

    mysql -u root -p
    -- 创建数据库
    CREATE DATABASE IF NOT EXISTS `falcon` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
     
    -- 创建用户并授权(请将 'your_password' 替换为强密码)
    CREATE USER 'falcon'@'127.0.0.1' IDENTIFIED BY 'your_password';
    CREATE USER 'falcon'@'localhost' IDENTIFIED BY 'your_password';
    GRANT ALL PRIVILEGES ON `falcon`.* TO 'falcon'@'127.0.0.1';
    GRANT ALL PRIVILEGES ON `falcon`.* TO 'falcon'@'localhost';
    FLUSH PRIVILEGES;
  4. (可选)安装 Redis

    yum install -y epel-release
    yum install -y redis
    systemctl start redis
    systemctl enable redis

安装与配置后端组件#

安装基础依赖#

Open-Falcon 组件由 Go 语言编写,是静态编译的二进制文件,无需安装 Go 环境即可运行。但我们需要一些基础库。

yum install -y mysql-devel

下载并解压 Open-Falcon#

从 GitHub 发布页面下载 v0.2.0 的预编译二进制包。

cd /tmp
wget https://github.com/open-falcon/of-release/releases/download/v0.2.0/open-falcon-v0.2.0.tar.gz
 
# 创建安装目录
mkdir -p /opt/open-falcon
tar -zxvf open-falcon-v0.2.0.tar.gz -C /opt/open-falcon

解压后,/opt/open-falcon 目录下会包含所有后端组件的二进制文件和默认配置文件。

配置与启动后端组件#

我们需要按顺序配置和启动核心组件。每个组件的配置都在其对应的 config 目录下的 cfg.json 文件中。

1. 初始化数据库表结构

cd /opt/open-falcon
mysql -h 127.0.0.1 -u falcon -p falcon < ./scripts/mysql/db_schema/graph-db-schema.sql
mysql -h 127.0.0.1 -u falcon -p falcon < ./scripts/mysql/db_schema/dashboard-db-schema.sql
mysql -h 127.0.0.1 -u falcon -p falcon < ./scripts/mysql/db_schema/portal-db-schema.sql
mysql -h 127.0.0.1 -u falcon -p falcon < ./scripts/mysql/db_schema/links-db-schema.sql
mysql -h 127.0.0.1 -u falcon -p falcon < ./scripts/mysql/db_schema/uic-db-schema.sql
mysql -h 127.0.0.1 -u falcon -p falcon < ./scripts/mysql/db_schema/shorturl-db-schema.sql
mysql -h 127.0.0.1 -u falcon -p falcon < ./scripts/mysql/db_schema/alarms-db-schema.sql

2. 修改公共配置 主要需要修改各个组件的 cfg.json 中关于 MySQL 的连接信息。以 graph 组件为例:

vim ./graph/config/cfg.json

找到 数据库连接配置 部分,修改为你在前面创建的数据库信息:

"graph": {
  "enabled": true,
  "database": "falcon:your_password@tcp(127.0.0.1:3306)/falcon?loc=Local&parseTime=true",
  "maxIdle": 4
},

请务必逐一检查并修改以下组件的数据库配置:

  • graph/config/cfg.json
  • api/config/cfg.json
  • alarm/config/cfg.json
  • hbs/config/cfg.json
  • judge/config/cfg.json (如果使用)
  • nodata/config/cfg.json (如果使用)
  • portal/config/cfg.json
  • sender/config/cfg.json
  • task/config/cfg.json
  • uic/config/cfg.json

3. 启动组件 Open-Falcon 提供了 open-falcon 脚本来管理所有组件。

# 检查所有组件的配置是否正确
./open-falcon check
 
# 启动所有组件
./open-falcon start
 
# 查看所有组件的运行状态
./open-falcon status

如果一切正常,你应该看到类似下面的输出,所有组件都处于 UP 状态。

...
graph          UP           5303
hbs            UP           5323
judge          UP           5340
...

4. 验证后端接口 使用 curl 命令测试核心组件的 HTTP 接口是否正常工作。

# 测试 graph 组件
curl -s "http://127.0.0.1:6071/health"
 
# 测试 API 组件
curl -s "http://127.0.0.1:8080/health"
 
# 测试 HBS (Heartbeat Server) 组件
curl -s "http://127.0.0.1:6031/health"

如果返回 ok"success": true 之类的信息,说明后端服务启动成功。

安装与配置前端 Dashboard#

前端用于可视化监控数据、配置告警策略和管理主机组。

  1. 安装 Go 环境(用于编译前端)

    wget https://golang.org/dl/go1.15.linux-amd64.tar.gz
    tar -C /usr/local -xzf go1.15.linux-amd64.tar.gz
    echo 'export PATH=$PATH:/usr/local/go/bin' >> /etc/profile
    echo 'export GOPATH=/root/go' >> /etc/profile
    source /etc/profile
  2. 下载并编译 Dashboard

    cd /tmp
    git clone https://github.com/open-falcon/dashboard.git
    cd dashboard
     
    # 修改数据库配置
    vim rrd/config.py

    config.py 中,修改 DB 配置项,指向你的 MySQL 数据库:

    # database
    DB = "falcon"
    PORT = 3306
    PASS = "your_password"
    HOST = "127.0.0.1"
    USER = "falcon"

    安装依赖并编译:

    yum install -y python-virtualenv
    virtualenv ./env
    ./env/bin/pip install -r pip_requirements.txt
  3. 启动 Dashboard

    ./control start

    前端服务默认会在 0.0.0.0:8081 端口启动。

安装并配置 Agent#

Agent 是部署在被监控机器上的数据采集器。现在,我们需要在 Open-Falcon 服务器本身上安装 Agent。

  1. 下载 Agent

    cd /opt
    wget https://github.com/open-falcon/agent/releases/download/v0.0.14/agent-0.0.14-linux-amd64.tar.gz
    tar -zxvf agent-0.0.14-linux-amd64.tar.gz
    mv agent-0.0.14-linux-amd64 agent
    cd agent
  2. 配置 Agent 修改 cfg.json 文件,将心跳(HBS)和数据传输的地址指向本机。

    vim cfg.json
    {
        "debug": true,
        "hostname": "", // 可以为空,agent会自动获取。建议生产环境显式设置。
        "ip": "", // 同上
        "heartbeat": {
            "enabled": true,
            "addr": "127.0.0.1:6030", // HBS 组件的地址
            "interval": 60,
            "timeout": 1000
        },
        "transfer": {
            "enabled": true,
            "addrs": ["127.0.0.1:8433"], // Transfer 组件的地址
            "interval": 60,
            "timeout": 1000
        },
        ... // 其他配置可保持默认
    }
  3. 启动 Agent

    ./control start
    ./control status

基本使用与验证#

现在,整个 Open-Falcon 监控系统已经部署完成。

  1. 访问 Dashboard 打开浏览器,访问 http://<你的服务器IP>:8081

    • 首次登录: 使用默认账号 root,密码 root
  2. 查看主机 登录后,点击顶部导航栏的 主机,你应该能看到刚刚部署了 Agent 的服务器(即本机)已经出现在列表中。这证明 Agent 的数据采集、传输和存储链路是通的。

  3. 查看监控图表 点击主机名,进入主机详情页,你可以看到该主机上各种指标的监控图表,例如 cpu.idle, disk.io, mem.memfree 等。

  4. 配置告警策略

    • 点击 告警策略 -> 模板。Open-Falcon 已经内置了一些常用模板(如 falcon)。
    • 点击 告警策略 -> 策略,你可以为特定的主机组创建或绑定告警策略。例如,可以为 cpu.idle 设置一个规则:all(#3) < 5,表示连续 3 个点都小于 5% 则触发告警。
    • 告警策略 -> 链接 中配置告警接收方式(如邮件、短信、微信等)。

常见问题与排查#

  • 问题:./open-falcon status 显示某个组件为 DOWN

    • 排查:查看该组件的日志文件,通常位于 /opt/open-falcon/<component>/logs 目录下。最常见的原因是数据库连接字符串配置错误。
  • 问题:Dashboard 无法打开。

    • 排查
      1. 检查 ./control status 确保 dashboard 进程在运行。
      2. 检查防火墙或安全组是否放行了 8081 端口。
      3. 查看 dashboard 的日志 /tmp/dashboard.log
  • 问题:主机列表中看不到被监控机器。

    • 排查
      1. 检查该机器上的 Agent 是否正常运行。
      2. 检查 Agent 配置中的 heartbeat.addrtransfer.addrs 是否正确指向了后端服务器。
      3. 在后端服务器上,检查 hbstransfer 组件的日志。
  • 问题:监控图表没有数据。

    • 排查:确保 graph, transfer, agent 组件都正常工作。链路是:Agent -> Transfer -> Graph

最佳实践#

  1. 生产环境部署

    • 组件分离:将压力较大的组件(如 graph, judge)单独部署在多台机器上,实现水平扩展。
    • 高可用:对 transfer, hbs, api 等无状态组件做负载均衡。
    • 监控 Open-Falcon 自身:部署另一套独立的监控系统来监控 Open-Falcon 各组件的健康状况。
    • 配置文件管理:使用 Ansible, SaltStack 等配置管理工具来批量管理和部署 Agent 及后端组件。
  2. 配置管理

    • 主机名:在 Agent 配置中显式设置 hostname,避免因自动获取的主机名不理想导致管理混乱。
    • 报警收敛:合理使用 nodata 组件处理监控数据中断的情况,避免产生大量无意义报警。
    • 模板化策略:尽量使用模板来管理告警策略,而不是为每个主机单独设置。
  3. 维护

    • 数据清理graph 组件存储的监控数据会占用大量磁盘空间。需要定期清理过期数据,或使用历史数据归档方案。
    • 版本升级:在升级前,务必在测试环境充分验证,并备份数据库和配置文件。

总结#

通过本指南,我们成功地在 CentOS 7 服务器上部署了一个完整的 Open-Falcon v0.2.0 监控系统。这套系统已经具备了监控基础指标、可视化数据和配置告警的能力。Open-Falcon 的强大之处在于其插件机制,你还可以通过安装各种插件(如 mysql-monitor, nginx-monitor)来扩展其监控能力。

部署只是第一步,接下来需要你将 Agent 推广到所有的业务服务器上,并根据业务需求精心设计和配置告警策略,才能真正发挥其价值,为你的系统稳定性保驾护航。

参考引用#

  1. Open-Falcon 官方文档 (v0.2): https://book.open-falcon.org/
  2. Open-Falcon GitHub 主页: https://github.com/open-falcon
  3. Open-Falcon 插件收集: https://github.com/open-falcon/plugins
  4. MySQL 官方文档: https://dev.mysql.com/doc/