1. 为什么选择LibreNMS + Docker Compose方案
在网络运维领域,监控系统就像人体的神经系统,需要7×24小时感知设备状态。传统部署方式需要手动安装LNMP环境、配置数据库、处理依赖包,整个过程如同在雷区排雷——一个参数错误就可能导致服务异常。而Docker Compose方案将部署过程标准化,用声明式配置解决环境差异问题。
我管理的300+网络设备监控系统就是基于这个方案搭建的,实测从零部署到正常运行仅需15分钟。相比传统方式节省了80%的部署时间,且版本升级只需修改镜像标签即可完成。
2. 环境准备与工具选型
2.1 硬件配置建议
- 测试环境:2核CPU/4GB内存/50GB存储(可监控50台设备)
- 生产环境:4核CPU/8GB内存/100GB存储(建议不超过500台设备)
- 磁盘IOPS要求:数据库分区建议≥500 IOPS
注意:SNMP轮询会产生频繁磁盘写入,使用机械硬盘可能导致数据延迟
2.2 软件依赖清单
bash复制# 必备组件
Docker 20.10+
Docker Compose 2.12+
# 推荐工具
git 2.25+
vim/ nano(配置文件编辑)
3. 核心服务容器配置解析
3.1 容器编排文件详解
创建docker-compose.yml文件:
yaml复制version: '3.8'
services:
db:
image: mariadb:10.6
container_name: librenms_db
environment:
- MYSQL_ROOT_PASSWORD=${DB_ROOT_PASS}
- MYSQL_DATABASE=${DB_NAME}
- MYSQL_USER=${DB_USER}
- MYSQL_PASSWORD=${DB_PASS}
volumes:
- db_data:/var/lib/mysql
restart: unless-stopped
redis:
image: redis:6-alpine
container_name: librenms_redis
restart: unless-stopped
librenms:
image: librenms/librenms:latest
container_name: librenms_app
depends_on:
- db
- redis
ports:
- "8000:8000"
environment:
- DB_HOST=db
- DB_NAME=${DB_NAME}
- DB_USER=${DB_USER}
- DB_PASS=${DB_PASS}
- DB_PORT=3306
volumes:
- librenms_data:/data
restart: unless-stopped
volumes:
db_data:
librenms_data:
关键参数说明:
MYSQL_ROOT_PASSWORD:建议使用16位随机字符串- 数据卷挂载:确保容器重建时不丢失数据
- 端口映射:8000可改为任意未被占用端口
3.2 环境变量配置
创建.env文件:
ini复制# 数据库配置
DB_ROOT_PASS=Jx5!kPq8$3mLw9Yb
DB_NAME=librenms
DB_USER=librenms
DB_PASS=NmT2#rS7*vF1gH4z
# 时区设置
TZ=Asia/Shanghai
安全提示:务必修改示例密码,禁止使用默认凭证
4. 系统初始化与优化配置
4.1 首次启动流程
bash复制# 启动所有服务
docker compose up -d
# 查看日志(等待初始化完成)
docker compose logs -f librenms
初始化完成后访问:
http://服务器IP:8000/install.php
4.2 性能调优参数
修改librenms服务的环境变量:
yaml复制environment:
- POLLERS=16
- DISTRIBUTED_POLLER_ENABLE=true
- MEMORY_LIMIT=512M
推荐值计算:
POLLERS= CPU核心数 × 2MEMORY_LIMIT= 总内存 × 0.6 / 容器数量
5. 设备监控实战配置
5.1 SNMPv3配置示例
以华为交换机为例:
bash复制snmp-agent
snmp-agent sys-info version v3
snmp-agent group v3 librenms_group privacy
snmp-agent usm-user v3 librenms librenms_group authentication-mode sha
cipher %^$#@!123456
privacy-mode aes128
cipher %^$#@!654321
在LibreNMS添加设备时:
- 协议:SNMPv3
- 用户名:librenms
- 认证算法:SHA
- 加密算法:AES
5.2 告警规则配置
创建alerts.rules:
php复制$config['alert']['default_mail'] = 'noc@example.com';
$config['alert']['default_only'] = false;
$config['alert']['globals']['syscontact_alert'] = true;
6. 运维管理进阶技巧
6.1 数据备份方案
创建备份脚本/usr/local/bin/backup_librenms.sh:
bash复制#!/bin/bash
DATE=$(date +%Y%m%d)
docker exec librenms_db mysqldump -u${DB_USER} -p${DB_PASS} ${DB_NAME} > /backups/librenms_${DATE}.sql
tar czvf /backups/librenms_data_${DATE}.tgz /var/lib/docker/volumes/librenms_librenms_data
设置cron定时任务:
bash复制0 2 * * * /usr/local/bin/backup_librenms.sh
6.2 常见故障排查
问题1:SNMP状态显示"Unknown"
- 检查项:
bash复制docker exec librenms_app snmpwalk -v3 -l authPriv \ -u librenms -a SHA -A '认证密码' -x AES -X '加密密码' \ 设备IP .1.3.6.1.2.1.1.1.0
问题2:图表数据缺失
解决方案:
bash复制docker exec librenms_app /opt/librenms/poller.php -h all
7. 高可用架构扩展
7.1 负载均衡配置
修改docker-compose.yml:
yaml复制librenms:
image: librenms/librenms:latest
deploy:
replicas: 3
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000"]
interval: 30s
timeout: 10s
retries: 3
7.2 分布式轮询器部署
添加新服务:
yaml复制poller:
image: librenms/librenms:latest
command: /opt/librenms/dispatcher.php
environment:
- DISTRIBUTED_POLLER=true
- DB_HOST=db
- REDIS_HOST=redis
我在实际部署中发现,当监控设备超过1000台时,采用3个轮询器节点可使数据采集时间从15分钟降至5分钟以内。关键是要确保Redis有足够内存处理队列(建议≥2GB)