Monitorix是一款轻量级的开源系统监控工具,专门为Linux/Unix系统设计。它最初由Perl语言编写,后来逐渐演变为一个功能全面的监控解决方案。我在生产环境中使用Monitorix已有五年时间,它的最大优势在于资源占用极低(仅需2-3MB内存),却能提供丰富的监控指标可视化。
核心监控能力包括:
提示:虽然Monitorix界面看起来简单,但它的数据采集精度可以达到1秒级别,这对排查突发性性能问题非常有用。
Monitorix官方支持绝大多数主流Linux发行版,包括:
建议系统满足:
默认情况下Monitorix使用8080端口(可修改),需要提前开放:
bash复制# firewalld (RHEL/CentOS)
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload
# ufw (Ubuntu/Debian)
sudo ufw allow 8080/tcp
sudo ufw reload
对于RHEL/CentOS系统:
bash复制sudo yum install epel-release
sudo yum install monitorix
sudo systemctl enable --now monitorix
Debian/Ubuntu系统:
bash复制sudo apt-get update
sudo apt-get install monitorix
sudo systemctl enable --now monitorix
当需要最新版本或自定义功能时:
bash复制wget https://www.monitorix.org/monitorix-3.15.0.tar.gz
tar xvf monitorix-*.tar.gz
cd monitorix-*/
./configure --prefix=/usr --sysconfdir=/etc --mandir=/usr/share/man
make
sudo make install
sudo cp monitorix.init /etc/init.d/monitorix
sudo systemctl daemon-reload
注意:手动安装需要额外处理依赖项,可能需要安装perl-CGI、rrdtool等包。
配置文件位于/etc/monitorix/monitorix.conf,关键参数:
perl复制# 监听设置
base_url = /monitorix # URL路径
host = 0.0.0.0 # 监听所有IP
port = 8080 # 服务端口
默认配置可能未开启所有监控,建议根据需求调整:
perl复制# CPU监控
cpu.enable = y
cpu.list = 0,1,2,3 # 多核CPU需要明确列出
# 磁盘监控
disk.enable = y
disk.devices = sda1,sdb2 # 指定需要监控的分区
限制访问IP范围(生产环境必配):
perl复制# 允许访问的IP段
hosts_deny = all
hosts_allow = 192.168.1.0/24 127.0.0.1
配置SMTP发送报警邮件:
perl复制mail.enable = y
mail.mailserver = smtp.example.com:587
mail.username = monitor@example.com
mail.password = your_password
mail.from = monitorix@yourdomain.com
mail.to = admin@yourdomain.com
扩展监控MySQL查询次数示例:
/usr/local/bin/mysql_queries.sh:bash复制#!/bin/bash
mysqladmin status | awk '{print $6}'
perl复制<custom>
title = MySQL Queries
enabled = y
cmd = /usr/local/bin/mysql_queries.sh
</custom>
监控数据默认存储在/var/lib/monitorix,采用RRD格式。建议定期清理:
bash复制# 保留最近30天数据
find /var/lib/monitorix -name "*.rrd" -mtime +30 -delete
问题1:图表显示"No Data"
systemctl status monitorixchown -R monitorix:monitorix /var/lib/monitorix问题2:CPU监控不准确
/proc/stat可读问题3:HTTP 403错误
hosts_allow配置setenforce 0(测试时临时禁用)默认5分钟采集一次,修改/etc/monitorix/monitorix.conf:
perl复制refresh_rate = 300 # 秒为单位
警告:低于60秒的间隔会显著增加系统负载,仅建议在调试时使用。
对于嵌入式设备,可以禁用非必要模块:
perl复制# 禁用温度监控(若无传感器)
temperature.enable = n
生产环境建议:
bash复制sudo apt install lighttpd
sudo cp /usr/share/doc/monitorix/examples/lighttpd.conf /etc/lighttpd/conf-available/80-monitorix.conf
sudo lighttpd-enable-mod monitorix
sudo systemctl restart lighttpd
通过Monitorix发现某台服务器每天14:00出现CPU峰值,进一步排查发现是定时备份任务导致。解决方案:
perl复制<process>
name = rsync
title = Backup Process
</process>
配置磁盘使用率超过90%时发送邮件:
perl复制<disk>
device = sda1
alert = y
limit = 90
email = admin@example.com
</disk>
使用Let's Encrypt证书:
bash复制sudo apt install certbot
sudo certbot certonly --webroot -w /var/www/html -d monitor.example.com
修改配置:
perl复制<http>
ssl_cert = /etc/letsencrypt/live/monitor.example.com/fullchain.pem
ssl_key = /etc/letsencrypt/live/monitor.example.com/privkey.pem
</http>
启用基础认证:
perl复制auth.enable = y
auth.username = monitoradmin
auth.password = securepassword
使用rsync备份RRD数据:
bash复制# 每日凌晨备份
0 3 * * * root rsync -av /var/lib/monitorix/ backup-server:/monitorix-backup/
完整迁移步骤:
bash复制scp -r /etc/monitorix root@new-server:/etc/
scp -r /var/lib/monitorix root@new-server:/var/lib/
我在实际运维中发现,Monitorix的极简设计反而使其成为最可靠的监控工具之一。特别是在资源受限的环境中,相比那些功能繁杂的监控系统,Monitorix几乎不会因为自身运行而影响服务器性能。一个实用的技巧是:当需要长期保存监控数据时,可以配置Monitorix将数据导出到外部数据库,这样既保留了历史记录,又不会撑爆本地磁盘。