在运维工程师的日常工作中,服务器监控就像是我们身体的"体检报告"——没有它,我们永远不知道系统哪里出了问题。Monitorix这个轻量级的开源监控工具,我用了五年多,它最大的优势就是"小而美":一个不到10MB的Perl程序,却能提供30+种监控指标,从CPU负载到邮件队列长度无所不包。
相比那些需要Java环境、动辄占用上GB内存的监控系统,Monitorix特别适合中小型服务器集群。去年我给一家创业公司部署时,他们那台2核4G的跳板机跑了Zabbix后直接卡死,换成Monitorix后系统负载立刻降到了0.3以下。它的Web界面虽然简陋,但所有数据都以最直观的方式呈现,老板看报表时再也不用问我"这个曲线什么意思"了。
提示:Monitorix默认使用lighttpd作为Web服务器,如果您的环境已有Nginx/Apache,需要额外配置反向代理
Monitorix官方支持大多数主流Linux发行版,但不同版本间的配置方式略有差异。以我最近在CentOS 7和Ubuntu 22.04上的安装经验为例:
bash复制# 检查系统版本
cat /etc/os-release
# 确认Perl版本(要求5.8.8+)
perl -v | grep version
特别注意:如果你用的是CentOS 8 Stream或RHEL 9,需要先启用EPEL仓库。去年我在一个客户现场就踩过坑——他们的新服务器默认没配EPEL,导致依赖包死活装不上。
生产环境中这两个"安全卫士"经常坏事。建议提前放行Monitorix的默认端口8080:
bash复制# firewalld配置(CentOS/RHEL)
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload
# ufw配置(Ubuntu)
ufw allow 8080/tcp
如果启用了SELinux(建议非必要不开启),需要额外执行:
bash复制setsebool -P httpd_can_network_connect 1
semanage port -a -t http_port_t -p tcp 8080
不同系统的安装命令差异较大,这里给出完整示例:
bash复制# Debian/Ubuntu
sudo apt update
sudo apt install -y monitorix lighttpd
sudo systemctl enable --now monitorix lighttpd
# RHEL/CentOS
sudo yum install -y epel-release
sudo yum install -y monitorix httpd
sudo systemctl enable --now monitorix httpd
安装完成后立即检查服务状态:
bash复制systemctl status monitorix | grep Active
netstat -tulnp | grep monitorix
常见问题:如果看到lighttpd启动失败,大概率是8080端口被占用。可以用ss -tulnp | grep 8080确认,然后修改/etc/lighttpd/lighttpd.conf中的监听端口。
当你的系统版本太老或需要特定功能时,可以这样手动安装:
bash复制wget https://www.monitorix.org/monitorix-3.17.0.tar.gz
tar zxvf monitorix-*.tar.gz
cd monitorix-*/
./configure --prefix=/usr --sysconfdir=/etc --mandir=/usr/share/man
make install
手动安装后需要额外配置init脚本,建议直接复制rpm包里的systemd unit文件:
bash复制curl -o /usr/lib/systemd/system/monitorix.service https://raw.githubusercontent.com/mikaku/Monitorix/master/monitorix.service
systemctl daemon-reload
Monitorix的配置文件/etc/monitorix/monitorix.conf就像汽车的仪表盘——每个开关都控制着不同的监控项。分享几个关键配置项:
perl复制# 全局配置段
title = "生产服务器监控看板" # 网页标题
hostname = "bj-web-01" # 显示的主机名
refresh_rate = 90 # 页面刷新秒数
# HTTP服务配置
base_url = /monitorix # URL路径
port = 8080
host = 0.0.0.0 # 监听所有IP
重要安全提示:生产环境务必设置
host = 内网IP,避免监控数据暴露在公网!
配置文件里最实用的就是这些模块开关(示例):
perl复制<graph_enable>
system = y
kern = n # 内核统计(一般用户不需要)
proc = y # 进程监控
disk = y
...
</graph_enable>
建议初次部署时先关闭所有非必要监控(设为n),然后根据需求逐个开启。我曾经见过一个客户同时开启30个监控项,结果服务器自己先被监控拖垮了。
Monitorix自带邮件报警功能,配置示例:
perl复制<alerts>
email_enable = y
email_to = ops-team@example.com
email_from = monitorix@$(hostname)
smtp_server = smtp.office365.com:587
smtp_auth = y
smtp_user = alert@example.com
smtp_pass = your_password_here
</alerts>
注意:密码建议用monitorix --password "yourpass"加密后再填入配置。
默认配置下,Monitorix的RRD数据库会无限增长。通过修改/etc/monitorix/conf.d/00-debian.conf控制数据保留策略:
perl复制<rrd>
step = 60 # 数据采集间隔
rows = 5760 # 保留5天的分钟级数据
rra_1d_rows = 720 # 每日数据保留1个月
rra_1w_rows = 520 # 每周数据保留2年
</rrd>
对于高负载服务器,建议将step调整为120秒,减轻采集压力。
比起lighttpd,用Nginx做前端更常见。配置示例:
nginx复制server {
listen 80;
server_name monitor.example.com;
location /monitorix {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# 密码保护
auth_basic "Monitorix Access";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
记得用htpasswd -c /etc/nginx/.htpasswd admin创建访问密码。
当图表出现NaN(Not a Number)时,按这个顺序检查:
/var/log/monitorix.log错误日志bash复制chown -R monitorix:monitorix /var/lib/monitorix/
如果发现监控数据比实际时间慢:
bash复制# 检查cron任务
systemctl status cron
# 手动触发采集测试
/usr/bin/monitorix -c /etc/monitorix/monitorix.conf -p /var/run/monitorix.pid -b
我曾遇到一个案例是系统时间不同步导致的问题,用ntpdate -u pool.ntp.org同步后解决。
在/etc/monitorix/conf.d/下新建.conf文件即可添加自定义监控。比如监控业务队列长度:
perl复制<graph>
title = "订单队列积压"
category = "自定义监控"
probe = "custom"
command = "/usr/local/bin/check_order_queue.sh"
</graph>
脚本输出格式要求:
bash复制#!/bin/bash
echo "orders.value 42"
虽然Monitorix本身是单机监控,但配合rsync可以实现多节点数据汇总:
bash复制# 在各节点配置
rsync -az /var/lib/monitorix/ monitor-server:/var/lib/monitorix/node1/
然后在主服务器用crontab定期执行monitorix --import合并数据。
在我的Dell R740xd测试服务器上(Xeon Silver 4210, 64GB RAM),不同配置下的资源占用对比:
| 监控项数量 | 内存占用 | CPU平均负载 | 数据采集延迟 |
|---|---|---|---|
| 5项 | 28MB | 0.02 | <1秒 |
| 15项 | 53MB | 0.07 | 2-3秒 |
| 30项 | 112MB | 0.15 | 5-8秒 |
建议生产环境控制在15个监控项以内,超过20项建议改用Prometheus等专业方案。