保姆级教程:在CentOS7上从零搭建夜莺监控系统(含Categraf+Prometheus完整配置)
从零构建企业级监控体系:CentOS7下夜莺+Categraf+Prometheus全栈部署实战
夜莺监控系统(Nightingale)作为国产开源监控解决方案中的佼佼者,正在被越来越多的企业用于构建生产环境监控体系。不同于简单的工具堆砌,一个真正可靠的监控系统需要考虑数据采集、存储、可视化、告警等全链路环节的协同工作。本文将带你从零开始,在CentOS7系统上部署完整的夜莺监控生态,涵盖Categraf采集器配置、Prometheus时序数据库集成,以及生产环境下的安全加固技巧。
1. 环境准备与组件规划
在开始部署前,我们需要明确各组件的作用和相互关系。夜莺监控系统本身不直接采集和存储监控数据,它更像是一个"大脑",负责数据的处理和告警决策。实际的数据采集工作由Categraf完成,而Prometheus则作为时序数据库存储历史监控数据。
生产环境推荐配置:
- 操作系统:CentOS 7.6+(内核版本3.10+)
- 硬件规格:
- 夜莺服务:4核CPU/8GB内存/100GB磁盘
- Prometheus:根据监控指标量调整,建议8核CPU/16GB内存/500GB+ SSD
- 依赖服务:
- MySQL 5.7+(用于夜莺元数据存储)
- Redis 5.0+(用于告警事件队列)
提示:测试环境可以使用SQLite和MiniRedis,但生产环境务必使用独立数据库服务
2. 夜莺核心服务部署
2.1 安装包获取与目录规划
合理的目录结构能避免后续维护混乱。我们采用/data/app作为主安装目录,各组件独立子目录:
# 创建夜莺专用目录 mkdir -p /data/app/n9e/{bin,etc,logs} cd /data/app/n9e # 下载最新稳定版(请替换为实际版本) wget https://github.com/ccfos/nightingale/releases/download/v8.0.0/n9e-v8.0.0-linux-amd64.tar.gz tar -zxvf n9e-v8.0.0-linux-amd64.tar.gz --strip-components 1 -C .2.2 数据库配置详解
生产环境必须使用外部MySQL和Redis。配置文件etc/config.toml中关键参数:
[DB] DBType = "mysql" DSN = "monitor_user:StrongPassword123@tcp(10.0.0.1:3306)/n9e_v6?charset=utf8mb4&parseTime=True&loc=Local" MaxIdleConns = 10 MaxOpenConns = 20 [Redis] Address = "10.0.0.2:6379" Password = "RedisSecurePass" RedisType = "standalone" DB = 0 ConnectTimeout = 2000 ReadTimeout = 2000常见配置陷阱:
- MySQL需提前创建数据库并授权:
CREATE DATABASE n9e_v6 DEFAULT CHARSET utf8mb4 - Redis内存配置建议不低于2GB,避免告警事件堆积
- 连接超时设置过短可能导致偶发性连接失败
2.3 服务化部署与调优
Systemd服务文件/etc/systemd/system/n9e.service的优化配置:
[Unit] Description=Nightingale Monitoring Service After=network.target mysql.service redis.service [Service] Type=simple User=monitor Group=monitor ExecStart=/data/app/n9e/n9e WorkingDirectory=/data/app/n9e Environment="GOMAXPROCS=4" LimitNOFILE=65536 Restart=always RestartSec=5 StandardOutput=syslog StandardError=syslog SyslogIdentifier=n9e [Install] WantedBy=multi-user.target启动命令及状态检查:
systemctl daemon-reload systemctl enable --now n9e journalctl -u n9e -f # 实时查看日志3. 数据采集层:Categraf高级配置
3.1 安装与目录结构
mkdir -p /data/app/categraf/{bin,conf,logs} cd /data/app/categraf wget https://download.flashcat.cloud/categraf-v0.3.83-linux-amd64.tar.gz tar -zxvf categraf-v0.3.83-linux-amd64.tar.gz --strip-components 1 -C .3.2 核心配置文件解析
conf/config.toml关键配置节选:
[global] hostname = "prod-web-01" # 自动获取可使用 $HOSTNAME interval = 15 precision = 1000 # 时间戳精度(ms) [log] file_name = "categraf.log" max_size = 100 # MB max_days = 7 max_backups = 3 [[writers]] url = "http://n9e-server:17000/prometheus/v1/write" basic_auth_user = "api_user" basic_auth_pass = "ComplexPass!2023" timeout = 5000 # 毫秒采集插件管理:
- 启用/禁用插件:
conf/目录下对应.toml文件 - CPU监控示例(
conf/input.cpu/cpu.toml):interval = "15s" percpu = false totalcpu = true collect_cpu_time = true
3.3 服务化与资源控制
./categraf --install --service-name=categraf systemctl edit categraf # 添加资源限制优化后的service配置片段:
[Service] LimitCPU=2 LimitMEMLOCK=infinity LimitNOFILE=65536 CPUQuota=200% MemoryHigh=4G MemoryMax=6G4. Prometheus时序数据库集成
4.1 生产级安装配置
mkdir -p /data/app/prometheus/{bin,conf,data,logs} cd /data/app/prometheus wget https://github.com/prometheus/prometheus/releases/download/v2.53.5/prometheus-2.53.5.linux-amd64.tar.gz tar -zxvf prometheus-2.53.5.linux-amd64.tar.gz --strip-components 1 -C .优化后的prometheus.yml核心配置:
global: scrape_interval: 15s evaluation_interval: 15s external_labels: env: "prod" region: "ap-southeast" scrape_configs: - job_name: 'categraf' static_configs: - targets: ['10.0.0.3:9100'] metrics_path: '/metrics' params: format: ['prometheus'] remote_write: - url: http://n9e-server:17000/prometheus/v1/write queue_config: max_samples_per_send: 10000 capacity: 200004.2 存储优化与维护
TSDB调优参数:
--storage.tsdb.retention.time=30d --storage.tsdb.wal-compression --storage.tsdb.max-block-duration=2h --storage.tsdb.min-block-duration=2h定期维护任务(crontab示例):
0 3 * * * /data/app/prometheus/promtool tsdb cleanup --storage.tsdb.path=/data/app/prometheus/data5. 安全加固与生产验证
5.1 网络访问控制
# 防火墙规则示例 firewall-cmd --permanent --zone=public --add-rich-rule=' rule family="ipv4" source address="10.0.0.0/24" port protocol="tcp" port="17000" accept' firewall-cmd --reload5.2 认证体系配置
夜莺API认证增强配置:
[HTTP.APIForAgent] Enable = true TokenRequired = true Tokens = ["SECRET_TOKEN_2023"] [HTTP.APIForAgent.BasicAuth] userName = "admin" password = "STRONG_PASSWORD"对应Categraf配置调整:
[heartbeat] url = "http://n9e-server:17000/v1/n9e/heartbeat" token = "SECRET_TOKEN_2023" basic_auth_user = "admin" basic_auth_pass = "STRONG_PASSWORD"5.3 健康检查与监控
验证各组件状态的命令集合:
# 夜莺健康检查 curl -u admin:STRONG_PASSWORD http://localhost:17000/api/v1/health # Categraf指标获取 curl http://localhost:9100/metrics | grep categraf_ # Prometheus目标状态 curl http://localhost:9090/api/v1/targets6. 告警配置与仪表盘管理
夜莺系统的真正价值在于其强大的告警管理能力。以下是一个典型的内存告警规则配置:
告警规则参数:
| 参数项 | 示例值 | 说明 |
|---|---|---|
| 规则名称 | MemoryUsageHigh | 业务可识别的名称 |
| 指标表达式 | mem_used_percent | 来自Categraf的指标 |
| 告警条件 | > 90 | 百分比阈值 |
| 持续时长 | 5m | 避免瞬时波动误报 |
| 告警级别 | P1 | 根据业务影响定义 |
| 告警接收组 | OpsTeam | 接收告警的团队 |
| 附加标签 | env=prod, app=web | 用于告警路由和分类 |
仪表盘导入命令示例:
curl -u admin:STRONG_PASSWORD -X POST \ http://n9e-server:17000/api/v1/dashboard/import \ -H "Content-Type: application/json" \ -d @categraf-overview.json7. 性能调优与问题排查
常见性能瓶颈及解决方案:
夜莺CPU占用高
- 调整
GOMAXPROCS限制并发度 - 减少不必要的告警规则计算频率
- 分片部署多个实例
- 调整
Prometheus存储增长过快
# 查看TSDB块统计 promtool tsdb analyze /data/app/prometheus/data # 调整保留策略 --storage.tsdb.retention.size=500GBCategraf采集延迟
# 调整采集间隔 [global] interval = "30s" # 限制插件并发 [inputs.exec] concurrency = 3
日志分析技巧:
# 夜莺错误日志过滤 journalctl -u n9e -f | grep -E 'ERROR|WARN' # Categraf采集延迟检测 grep 'collection took longer than expected' /data/app/categraf/logs/categraf.log