ClickHouse + Fluent Bit 快速部署(Ubuntu 22.04 / Amazon Linux 2023)
1. 脚本说明
setup_clickhouse.sh:一键入口(推荐),默认顺序执行 安装 ClickHouse -> 配置 HTTPS -> 应用运行参数 -> 初始化日志表。install_clickhouse_linux.sh:安装clickhouse-server、clickhouse-client,并启动服务。configure_clickhouse_https.sh:生成自签名server.crt + server.key,写入 HTTPS 配置并重启服务。configure_clickhouse_runtime.sh:默认将日志级别设为warning,并禁用高开销系统日志表(text_log、part_log、metric_log、asynchronous_metric_log、trace_log)。init_waf_logs_tables.sh:执行建表脚本。init_waf_logs_tables.sql:logs_ingest、dns_logs_ingest表结构定义。
进入脚本所在目录
cd /opt/waf-platform/deploy/clickhouse
chmod +x setup_clickhouse.sh
2. 一键部署
2.1 方式A:不设置 ClickHouse 密码(用户名固定 default)
sudo ./setup_clickhouse.sh
说明:
- ClickHouse 连接用户是
default - 未设置密码时,后续平台连接密码留空
2.2 方式B:设置用户名/密码(示例使用 default)
sudo CH_USER='default' \
CH_PASSWORD='YourStrongPassword' \
CH_DATABASE='default' \
./setup_clickhouse.sh
说明:
CH_USER/CH_PASSWORD:初始化日志表时用于连接 ClickHouse- 如果你使用自定义用户,把
CH_USER改为你的用户名,并保证该用户已有对应数据库权限
可选:单独应用运行参数(日志级别/系统日志表开关):
sudo CH_LOG_LEVEL=warning ./setup_clickhouse.sh runtime
3. ClickHouse 安装后关键目录
- 配置目录:
/etc/clickhouse-server/ - 客户端配置目录:
/etc/clickhouse-client/ - 数据目录:
/var/lib/clickhouse/ - 日志目录:
/var/log/clickhouse-server/ - HTTPS 覆盖配置:
/etc/clickhouse-server/config.d/waf-https.xml - 运行参数覆盖配置:
/etc/clickhouse-server/config.d/waf-runtime.xml - HTTPS 证书和私钥:
/etc/clickhouse-server/server.crt、/etc/clickhouse-server/server.key - 证书生成中间文件目录:
/etc/clickhouse-server/pki/
4. 管理平台配置(EdgeAdmin)
页面路径:
- 左侧菜单:
系统设置->高级设置 - 顶部标签:
日志数据库(ClickHouse)
表单填写:
连接地址(Host):ClickHouse 地址(IP 或域名),如10.0.0.8或clickhouse.example.com协议(Scheme):https端口(Port):8443用户名(User):default(或你自定义的用户名)密码(Password):对应用户密码数据库(Database):default(或你初始化日志表时使用的库名)
提交顺序:
- 点“测试连接”
- 连接成功后点“保存”
5. Fluent Bit(两种方式)
5.1 跟随节点在线自动安装(推荐)
说明:
- Node / DNS 在线安装或升级时,平台会自动安装/升级 Fluent Bit 并下发配置。
- 默认由平台托管,不需要逐台手改配置文件。
安装后所在节点关键文件:
/etc/fluent-bit/fluent-bit.conf:Fluent Bit 主配置(输入日志路径、输出 ClickHouse、性能参数)。/etc/fluent-bit/parsers.conf:日志解析器定义(当前主要使用 JSON parser)。/etc/fluent-bit/.edge-managed.env:平台下发的 ClickHouse 认证环境变量(CH_USER/CH_PASSWORD)。/etc/fluent-bit/.edge-managed.json:平台下发的元数据(角色、配置哈希、版本、更新时间)。
说明:
- 在线安装时,节点上的
/etc/fluent-bit/fluent-bit.conf会被平台下发覆盖。
fluent-bit中ClickHouse 账号密码下发与更新逻辑:
-
下发来源:管理平台 -日志数据库(ClickHouse)中保存的账号密码。
-
落地文件:平台在线安装或升级时写入节点
/etc/fluent-bit/.edge-managed.env,内容为CH_USER、CH_PASSWORD。 -
更新触发:当平台里的 ClickHouse 账号或密码变更后,需触发一次节点安装/升级任务以下发新凭证。
-
常见问题:只在 ClickHouse 侧改密码、未同步更新平台配置时,Fluent Bit 会出现认证失败(401/unauthorized)。
高配机器调优(当前默认按 4C8G 参数):
- 当前默认参数:
Flush=1、storage.backlog.mem_limit=512MB、Mem_Buf_Limit=256MB、workers=2。 - 机器升配后优先调这 4 个参数:
storage.backlog.mem_limit:总缓冲上限(先增大,降低突发堆积丢日志风险)。Mem_Buf_Limit:每个 tail input 的内存缓冲(HTTP 与 DNS 两段都要改)。workers:输出并发写入线程数(HTTP 与 DNS 两段都要改)。Flush:刷盘/发送间隔(值越小越实时,CPU/网络开销更高)。
- 8C16G 参考值可按
deploy/fluent-bit/fluent-bit-sample-8c16g.conf:storage.backlog.mem_limit=1024MBMem_Buf_Limit=512MBworkers=4Refresh_Interval=1
- 修改方法:
- 编辑
EdgeAPI/internal/installers/fluent_bit.go的renderManagedConfig()。 - 按上面参数同步修改 Node/DNS 两段
[INPUT]和[OUTPUT]。 - 重新发布 API 并触发节点安装/升级任务,下发新配置。
- 编辑
检查:
sudo systemctl status fluent-bit --no-pager
sudo cat /etc/fluent-bit/.edge-managed.json
sudo journalctl -u fluent-bit -n 100 --no-pager
5.2 手动安装(自动安装失败时)
说明:
- 适合节点在线自动安装 Fluent Bit 失败的场景。
- 采用在线安装方式,由你手动安装并维护配置。
步骤:
- 在线安装 Fluent Bit。
Ubuntu 22.04:
curl https://raw.githubusercontent.com/fluent/fluent-bit/master/install.sh | sh
sudo apt-get update -y
sudo apt-get install -y fluent-bit
AWS 2023:
curl https://raw.githubusercontent.com/fluent/fluent-bit/master/install.sh | sh
sudo dnf makecache -y
sudo dnf install -y fluent-bit
- 放置配置文件:
sudo mkdir -p /etc/fluent-bit
sudo cp /opt/waf-platform/deploy/fluent-bit/fluent-bit.conf /etc/fluent-bit/
sudo cp /opt/waf-platform/deploy/fluent-bit/clickhouse-upstream.conf /etc/fluent-bit/
sudo cp /opt/waf-platform/deploy/fluent-bit/parsers.conf /etc/fluent-bit/
- 修改
/etc/fluent-bit/clickhouse-upstream.conf的 ClickHouseHost、Port(如8443)。 - 配置认证环境变量(按需):
sudo tee /etc/fluent-bit/fluent-bit.env >/dev/null <<'EOF'
CH_USER=default
CH_PASSWORD=YourStrongPassword
EOF
- 让 systemd 读取环境变量:
sudo mkdir -p /etc/systemd/system/fluent-bit.service.d
sudo tee /etc/systemd/system/fluent-bit.service.d/override.conf >/dev/null <<'EOF'
[Service]
EnvironmentFile=/etc/fluent-bit/fluent-bit.env
EOF
- 启动并检查:
sudo systemctl daemon-reload
sudo systemctl enable fluent-bit
sudo systemctl restart fluent-bit
sudo systemctl status fluent-bit --no-pager
sudo journalctl -u fluent-bit -n 100 --no-pager
6. 验证
sudo journalctl -u fluent-bit -f