1. 项目概述
LibreNMS是一款基于PHP/MySQL的开源网络监控系统,能够自动发现网络设备并监控其运行状态。它支持SNMP协议,可以实时采集CPU、内存、磁盘、接口流量等关键指标。相比同类商业软件,LibreNMS具有完全开源、社区活跃、扩展性强等特点,特别适合中小型网络环境使用。
在实际部署中,传统的手动安装方式需要逐个配置Apache、PHP、MySQL等服务,过程繁琐且容易出错。而采用Docker Compose方案,可以将所有服务容器化,实现一键部署和统一管理。我在多个生产环境中使用这种部署方式已有两年时间,稳定性表现非常出色。
2. 环境准备
2.1 系统要求
推荐使用Ubuntu 20.04/22.04 LTS或CentOS 7/8作为宿主机系统。硬件配置建议:
- 双核CPU及以上
- 4GB内存(监控50个设备时内存占用约2.5GB)
- 50GB存储空间(每设备每天约产生3MB数据)
注意:虽然LibreNMS官方文档提到最低2GB内存即可运行,但在实际监控超过30个设备时,内存占用会明显增加。我曾在一个2GB内存的测试环境中遇到OOM(内存不足)问题。
2.2 Docker环境配置
首先安装Docker和Docker Compose:
bash复制# Ubuntu/Debian
sudo apt update
sudo apt install -y docker.io docker-compose
sudo systemctl enable --now docker
# CentOS/RHEL
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl enable --now docker
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
验证安装:
bash复制docker --version
docker-compose --version
3. Docker Compose文件解析
3.1 基础服务配置
创建docker-compose.yml文件,包含以下核心服务:
yaml复制version: '3'
services:
librenms:
image: librenms/librenms:latest
container_name: librenms
restart: unless-stopped
ports:
- "8000:80"
volumes:
- ./data:/data
environment:
- TZ=Asia/Shanghai
- DB_HOST=db
- DB_NAME=librenms
- DB_USER=librenms
- DB_PASS=StrongPassword123
depends_on:
- db
- redis
db:
image: mysql:5.7
container_name: librenms_db
restart: unless-stopped
volumes:
- ./mysql:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=RootPassword123
- MYSQL_DATABASE=librenms
- MYSQL_USER=librenms
- MYSQL_PASSWORD=StrongPassword123
redis:
image: redis:alpine
container_name: librenms_redis
restart: unless-stopped
volumes:
- ./redis:/data
关键参数说明:
ports: "8000:80"将容器内80端口映射到宿主机8000端口volumes配置数据持久化存储environment设置数据库连接参数depends_on确保服务启动顺序
3.2 高级配置优化
对于生产环境,建议添加以下优化配置:
yaml复制 librenms:
# 在原有配置基础上增加
environment:
- POLLERS=16
- BASE_URL=http://your-domain.com
ulimits:
nofile:
soft: 80000
hard: 80000
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 30s
timeout: 10s
retries: 3
参数优化建议:
POLLERS根据CPU核心数设置(建议为核心数×2)ulimits提高文件描述符限制,避免监控大量设备时报错healthcheck添加健康检查,便于容器自动恢复
4. 系统初始化与配置
4.1 首次启动
执行部署命令:
bash复制mkdir -p {data,mysql,redis}
docker-compose up -d
初始化数据库(约需3-5分钟):
bash复制docker exec -it librenms /opt/librenms/discovery.php -h all
docker exec -it librenms /opt/librenms/poller.php -h all
4.2 管理员账户创建
通过交互式命令创建管理员:
bash复制docker exec -it librenms /opt/librenms/adduser.php
按提示输入用户名、密码等信息,建议密码长度不少于12位。
4.3 定时任务配置
LibreNMS需要定期执行发现和轮询任务,编辑宿主机的crontab:
bash复制sudo crontab -e
添加以下内容:
code复制*/5 * * * * docker exec -t librenms /opt/librenms/discovery.php -h all >> /dev/null 2>&1
*/5 * * * * docker exec -t librenms /opt/librenms/poller.php -h all >> /dev/null 2>&1
0 0 * * * docker exec -t librenms /opt/librenms/daily.sh >> /dev/null 2>&1
5. 设备监控配置实战
5.1 SNMP设备添加
对于支持SNMP的网络设备(如交换机、路由器),在LibreNMS界面:
- 导航到"Devices" → "Add Device"
- 输入设备IP和SNMP团体名(默认public)
- 选择SNMP版本(v2c最常用)
- 点击"Add Device"
实测技巧:对于华为/华三设备,建议使用SNMP v3并配置加密,我在实际项目中遇到过v2c协议被扫描攻击的情况。
5.2 自定义监控项
通过编辑设备"Settings" → "Alert Rules"可以添加自定义告警规则。例如监控接口流量超过90%:
code复制IF (interface.ifInOctets_rate > interface.ifSpeed*0.9) OR
(interface.ifOutOctets_rate > interface.ifSpeed*0.9)
THEN alert
5.3 告警通知集成
支持多种通知方式,以Telegram为例:
- 在Telegram创建Bot并获取API Token
- 在LibreNMS界面进入"Settings" → "Alert Transports"
- 选择"Telegram"类型,填写Token和Chat ID
- 在"Alert Rules"中关联传输方式
6. 维护与问题排查
6.1 日常维护命令
常用容器管理命令:
bash复制# 查看日志
docker logs -f librenms
# 执行数据库备份
docker exec librenms_db mysqldump -u root -pRootPassword123 librenms > backup.sql
# 更新镜像版本
docker-compose pull
docker-compose up -d
6.2 常见问题解决
问题1:Web界面显示"Database Connection Failed"
- 检查
docker-compose logs db是否有错误 - 确认DB_HOST环境变量设置为"db"(Docker服务名)
- 测试数据库连接:
docker exec -it librenms ping db
问题2:设备状态频繁波动
- 检查SNMP超时设置:
docker exec -it librenms grep 'timeout' /opt/librenms/config.php - 增加SNMP超时时间(默认1秒可能不够):
php复制$config['snmp']['timeout'] = 3000000; // 微秒单位
问题3:高负载导致轮询延迟
- 调整poller进程数:
docker-compose exec librenms sed -i 's/POLLERS=.*/POLLERS=24/' /etc/environment - 优化MySQL配置,在db服务中添加:
yaml复制environment: - innodb_buffer_pool_size=1G - innodb_log_file_size=256M
7. 性能优化实践
7.1 数据库索引优化
对于监控超过100个设备的环境,建议执行以下SQL优化:
sql复制CREATE INDEX idx_alert_log_device_id ON alert_log (device_id);
CREATE INDEX idx_port_device_id ON ports (device_id);
ANALYZE TABLE devices, ports, alert_log;
7.2 Redis缓存配置
在docker-compose.yml中为LibreNMS服务添加:
yaml复制environment:
- CACHE_DRIVER=redis
- REDIS_HOST=redis
然后在Web界面"Settings" → "Global Settings"中启用:
code复制$config['cache']['enable'] = true;
$config['cache']['driver'] = 'redis';
7.3 分布式部署方案
对于超大规模网络(500+设备),可以采用分布式轮询方案:
- 部署多个poller容器
- 修改
docker-compose.yml添加:
yaml复制 poller1:
image: librenms/librenms:latest
command: /opt/librenms/poller.php -h all
environment:
- DB_HOST=db
- REDIS_HOST=redis
depends_on:
- db
- redis
- 通过crontab控制各poller的执行间隔
8. 安全加固措施
8.1 网络隔离
建议创建专用Docker网络:
bash复制docker network create --subnet=172.20.0.0/24 librenms-net
然后在docker-compose.yml中为每个服务添加:
yaml复制networks:
default:
external:
name: librenms-net
8.2 访问控制
在宿主机配置防火墙规则(以UFW为例):
bash复制sudo ufw allow 8000/tcp
sudo ufw enable
8.3 定期更新策略
建议每月检查并更新镜像:
bash复制docker-compose pull
docker-compose up -d
docker image prune -a
设置监控任务检查版本更新:
bash复制echo '0 3 * * * docker-compose -f /path/to/docker-compose.yml pull' | sudo crontab -