作为运维日常必备的两款开源监控工具,Zabbix和Nagios各有侧重——Zabbix图形化界面友好、数据可视化强,适合批量主机监控;Nagios轻量灵活、配置简洁,适合中小规模环境快速部署。本文结合实际运维场景,详细拆解两款工具的完整使用流程,从环境部署到告警落地全程实操,新手也能直接跟着做。
一、Zabbix部署与基础配置(以Zabbix 7.0+CentOS 8为例)
1. 前置环境准备
先关闭SELinux和防火墙,避免端口拦截:
sed -i 's/SELINUX=.*$/SELINUX=disabled/' /etc/selinux/config
setenforce 0
systemctl stop firewalld && systemctl disable firewalld
安装依赖包(含数据库、Web服务组件):
dnf install -y gcc glibc glibc-common wget unzip httpd php gd gd-devel perl postfix openssl-devel
dnf install -y mariadb-server mariadb-devel
启动数据库并初始化:
systemctl start mariadb && systemctl enable mariadb
mysql_secure_installation 按提示设置root密码,删除匿名用户、禁用远程root登录
2. Zabbix Server部署
创建Zabbix专属数据库和用户:
mysql -u root -p
create database zabbix character set utf8mb4 collate utf8mb4_bin;
create user 'zabbix'@'localhost' identified by 'Zabbix@123';
grant all privileges on zabbix.* to 'zabbix'@'localhost';
flush privileges;
exit
下载并安装Zabbix Server(官方源):
rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rhel/8/x86_64/zabbix-release-7.0-2.el8.noarch.rpm
dnf clean all && dnf install -y zabbix-server-mysql zabbix-web-mysql zabbix-apache-conf zabbix-sql-scripts
导入初始数据库脚本:
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql -u zabbix -p zabbix
修改Zabbix配置文件(指定数据库信息):
vim /etc/zabbix/zabbix_server.conf配置以下参数
DBName=zabbix
DBUser=zabbix
DBPassword=Zabbix@123
启动Zabbix Server和Apache服务:
systemctl start zabbix-server httpd && systemctl enable zabbix-server httpd
验证服务状态(无报错则部署成功):
systemctl status zabbix-server httpd
3. Zabbix Agent部署(被控端)
被控端需安装Agent才能接收监控指令,步骤如下:
安装Zabbix源(同Server端)
rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rhel/8/x86_64/zabbix-release-7.0-2.el8.noarch.rpm
dnf install -y zabbix-agent
修改Agent配置文件(指向Server地址):
vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.1.100 Zabbix Server的IP
ServerActive=192.168.1.100
Hostname=Web-Server-01 被控端主机名(需与Server端配置一致)
启动Agent并设置开机自启:
systemctl start zabbix-agent && systemctl enable zabbix-agent
二、Zabbix监控项配置(实操常用场景)
监控项是采集数据的核心,以下以“Linux服务器基础监控”为例,讲解关键步骤:
1. 新增主机
- 登录Zabbix Web界面(默认地址:http://服务器IP/zabbix,账号Admin,密码zabbix)
- 进入【配置】→【主机】→【创建主机】
- 填写核心参数:
- 主机名称:与Agent配置文件中Hostname一致
- 可见名称:自定义(如“Web服务器-北京机房”)
- 群组:添加到“Linux servers”
- 接口:Agent(默认端口10050),填写被控端IP
- 点击【模板】→【选择】,关联“Template OS Linux by Zabbix agent”模板(自带基础监控项)
- 点击【添加】完成主机创建
2. 自定义监控项(以“监控Nginx进程”为例)
- 进入目标主机→【监控项】→【创建监控项】
- 配置关键参数:
- 名称:Nginx进程存活状态
- 类型:Zabbix agent(主动式)
- 键值:proc.num[nginx] 内置键值,监控进程数量
- 信息类型:数值(无符号)
- 更新间隔:30s 每30秒采集一次
- 历史数据保留:7d 保留7天
- 点击【添加】,等待1分钟后可在【监测】→【最新数据】中查看结果
3. 常用监控项键值推荐
- CPU使用率:system.cpu.util[,user]
- 内存使用率:vm.memory.util[used,pct]
- 根目录磁盘使用率:vfs.fs.size[/,pused]
- 网络入流量:net.if.in[eth0,bytes]
- 端口监听状态:net.tcp.listen[80] 80端口为Nginx默认端口
三、Zabbix告警规则设置(企业微信告警为例)
1. 企业微信前置配置
- 登录企业微信后台→【应用管理】→【创建应用】,命名“Zabbix监控告警”
- 进入应用→【接收消息】→【添加群机器人】
- 将Zabbix服务器IP添加到应用的“IP白名单”
2. Zabbix告警媒介配置
- 进入Zabbix Web→【管理】→【告警媒介类型】→【创建媒体类型】
- 配置参数:
- 名称:Enterprise_Wechat
- 类型:Webhook
- Webhook URL:填写企业微信机器人Webhook地址
- 消息格式:选择Markdown
- 切换到【脚本】标签,粘贴以下脚本(处理告警格式):
var WeCom = {message: null,webhook_url: null,sendMessage: function() {var params = {msgtype: "markdown",markdown: { content: WeCom.message },disable_web_page_preview: true};var data = JSON.stringify(params);var request = new HttpRequest();request.addHeader('Content-Type: application/json');var response = request.post(WeCom.webhook_url, data);Zabbix.Log(4, '(WeCom) 告警推送结果: ' + response);if (request.getStatus() !== 200) throw '推送失败';}
};
try {var params = JSON.parse(value);WeCom.webhook_url = params.Webhook_url;WeCom.message = '## Zabbix告警通知\n> 主机: {HOST.NAME}\n> 监控项: {ITEM.NAME}\n> 状态: {TRIGGER.STATUS}\n> 时间: {EVENT.DATE} {EVENT.TIME}\n> 详情: {ITEM.VALUE}';WeCom.sendMessage();return 'OK';
} catch (error) {Zabbix.Log(4, '(WeCom) 推送异常: ' + error);throw error;
}
- 点击【添加】完成媒介配置
3. 配置触发器与动作
- 【配置】→【触发器】→【创建触发器】(以“根目录磁盘使用率超85%”为例):
- 名称:根目录磁盘使用率告警
- 表达式:{Template OS Linux by Zabbix agent:vfs.fs.size[/,pused].last()}>85
- 严重级别:警告
- 【配置】→【动作】→【创建动作】:
- 名称:磁盘告警触发企业微信通知
- 触发条件:触发器=上述创建的触发器
- 操作:添加→选择用户组→告警媒介=Enterprise_Wechat
- 点击【添加】,告警规则生效
四、Nagios部署(以Ubuntu 22.04为例)
1. 依赖包安装
apt update && apt install -y gcc glibc glibc-common wget unzip apache2 php libgd-dev libssl-dev postfix
2. Nagios Core安装
下载最新稳定版(当前为4.4.14)
cd /tmp
wget https://github.com/NagiosEnterprises/nagioscore/archive/nagios-4.4.14.tar.gz
tar xzf nagios-4.4.14.tar.gz
cd nagioscore-nagios-4.4.14
编译安装:
./configure --prefix=/usr/local/nagios
make all
make install
make install-init
make install-config
make install-commandmode
3. Nagios插件安装(核心监控组件)
Nagios本身仅提供框架,监控功能需依赖插件:
cd /tmp
wget https://github.com/nagios-plugins/nagios-plugins/archive/release-2.4.6.tar.gz
tar xzf release-2.4.6.tar.gz
cd nagios-plugins-release-2.4.6
./configure --prefix=/usr/local/nagios
make && make install
4. Web界面配置
设置Apache认证(访问Nagios需账号密码):
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
复制Apache配置文件并重启服务:
cp /tmp/nagioscore-nagios-4.4.14/sample-config/httpd.conf /etc/apache2/sites-available/nagios.conf
a2ensite nagios.conf
a2enmod cgi
systemctl restart apache2
启动Nagios服务:
systemctl start nagios && systemctl enable nagios
验证:访问http://服务器IP/nagios,输入账号nagiosadmin和设置的密码,能看到控制台则部署成功。
五、Nagios监控项配置(基于配置文件)
Nagios通过配置文件管理监控项,核心配置目录为/usr/local/nagios/etc,以下以“监控Linux主机”为例:
1. 定义主机与主机组
编辑/usr/local/nagios/etc/objects/hosts.cfg(无则创建):
define host{use linux-server 继承模板host_name DB-Server-01 主机名alias 数据库服务器address 192.168.1.101 主机IPmax_check_attempts 3 检查失败3次判定为故障check_interval 5 正常检查间隔5分钟retry_interval 1 失败后重试间隔1分钟
}define hostgroup{hostgroup_name linux-servers 主机组名alias Linux Servers 别名members DB-Server-01,Web-Server-01 所属主机
}
2. 定义服务监控项(以“监控CPU使用率”为例)
编辑/usr/local/nagios/etc/objects/services.cfg:
define service{use generic-servicehost_name DB-Server-01service_description CPU Usagecheck_command check_nrpe!check_cpu 调用NRPE插件检查check_interval 5retry_interval 1max_check_attempts 3notification_interval 60 告警间隔60分钟notification_options w,u,c,r 警告、未知、严重、恢复时通知
}
3. 配置NRPE客户端(被控端)
被控端需安装NRPE才能接收远程检查指令:
apt install -y nagios-nrpe-server nagios-plugins
编辑NRPE配置文件/etc/nagios/nrpe.cfg:
allowed_hosts=192.168.1.100 Nagios Server IP
command[check_cpu]=/usr/lib/nagios/plugins/check_cpu -w 80 -c 90 警告阈值80%,严重阈值90%
重启NRPE服务:
systemctl restart nagios-nrpe-server
在Server端测试连通性:
/usr/local/nagios/libexec/check_nrpe -H 192.168.1.101
返回“NRPE v4.0.3”则配置成功。
六、Nagios告警规则设置(邮件告警)
1. 配置联系人与联系组
编辑/usr/local/nagios/etc/objects/contacts.cfg:
define contact{contact_name nagios-adminalias Nagios Adminemail admin@example.com 接收告警的邮箱service_notification_period 24x7 服务告警时间(24小时)host_notification_period 24x7 主机告警时间service_notification_options w,u,c,rhost_notification_options d,rservice_notification_commands notify-by-email 告警命令host_notification_commands host-notify-by-email
}define contactgroup{contactgroup_name adminsalias Nagios Administratorsmembers nagios-admin
}
2. 配置邮件告警命令
编辑/usr/local/nagios/etc/objects/commands.cfg,确保存在以下配置:
define command{command_name notify-by-emailcommand_line /usr/bin/printf "%b" "***** Nagios Alert *****\n\nType: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/sbin/sendmail -s "Nagios Alert: $HOSTNAME$ is $HOSTSTATE$" $CONTACTEMAIL$
}
3. 验证告警
手动触发一个告警(如停止被控端Nginx服务),等待几分钟后查看邮箱,收到告警邮件则配置生效。