保姆级教程:在CentOS7上从零搭建夜莺监控系统(含Categraf+Prometheus完整配置)
从零构建企业级监控体系CentOS7下夜莺CategrafPrometheus全栈部署实战夜莺监控系统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:StrongPassword123tcp(10.0.0.1:3306)/n9e_v6?charsetutf8mb4parseTimeTruelocLocal 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 utf8mb4Redis内存配置建议不低于2GB避免告警事件堆积连接超时设置过短可能导致偶发性连接失败2.3 服务化部署与调优Systemd服务文件/etc/systemd/system/n9e.service的优化配置[Unit] DescriptionNightingale Monitoring Service Afternetwork.target mysql.service redis.service [Service] Typesimple Usermonitor Groupmonitor ExecStart/data/app/n9e/n9e WorkingDirectory/data/app/n9e EnvironmentGOMAXPROCS4 LimitNOFILE65536 Restartalways RestartSec5 StandardOutputsyslog StandardErrorsyslog SyslogIdentifiern9e [Install] WantedBymulti-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.tomlinterval 15s percpu false totalcpu true collect_cpu_time true3.3 服务化与资源控制./categraf --install --service-namecategraf systemctl edit categraf # 添加资源限制优化后的service配置片段[Service] LimitCPU2 LimitMEMLOCKinfinity LimitNOFILE65536 CPUQuota200% MemoryHigh4G MemoryMax6G4. 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.time30d --storage.tsdb.wal-compression --storage.tsdb.max-block-duration2h --storage.tsdb.min-block-duration2h定期维护任务crontab示例0 3 * * * /data/app/prometheus/promtool tsdb cleanup --storage.tsdb.path/data/app/prometheus/data5. 安全加固与生产验证5.1 网络访问控制# 防火墙规则示例 firewall-cmd --permanent --zonepublic --add-rich-rule rule familyipv4 source address10.0.0.0/24 port protocoltcp port17000 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_PASSWORD5.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接收告警的团队附加标签envprod, appweb用于告警路由和分类仪表盘导入命令示例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.size500GBCategraf采集延迟# 调整采集间隔 [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