在现代网络管理中,监控工具是确保网络运行正常、快速发现和解决问题的关键。本文将详细介绍网络工程师常用的两款监控工具:Nagios、Zabbix。每款工具都有其独特的功能和使用场景,了解并掌握这些工具的使用对于网络工程师而言至关重要。
Nagios
Nagios是一款开源的网络监控工具,最初由Ethan Galstad在1999年发布。它的设计目的是监控系统的运行状态,包括网络设备、服务器、应用程序及服务,并在问题发生时提供告警。Nagios的核心优势在于其灵活的插件系统,可以通过各种插件扩展其功能,适应不同的监控需求。
https://www.nagios.org/
主要功能
Nagios的主要功能包括:
- 网络和服务器监控:监控主机的可达性和服务的运行状态。
- 服务监控:支持HTTP、SMTP、POP3、NNTP、PING等常见协议的监控。
- 资源使用监控:监控CPU负载、内存使用、磁盘使用等系统资源。
- 告警机制:通过电子邮件、短信等方式发送告警通知,及时报告问题。
- 插件支持:通过自定义插件扩展监控功能,支持几乎所有的应用程序、服务和系统。
安装与配置
为了使用Nagios进行网络监控,首先需要在服务器上安装并配置Nagios。
在安装Nagios之前,需要准备一台运行Linux操作系统的服务器。本文以CentOS 7为例,介绍Nagios的安装过程。
- 更新系统包:
sudo yum update
- 安装必要的软件包:
sudo yum install httpd php gcc glibc glibc-common gd gd-devel make net-snmp
- 启动并配置HTTP服务器:
sudo systemctl start httpd
sudo systemctl enable httpd
- 下载并解压Nagios Core源码包:
cd /tmp
wget https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.4.6.tar.gz
tar -zxvf nagios-4.4.6.tar.gz
cd nagios-4.4.6
- 配置、编译并安装Nagios:
./configure
make all
sudo make install
sudo make install-init
sudo make install-commandmode
sudo make install-config
sudo make install-webconf
- 创建Nagios用户和组:
sudo useradd nagios
sudo groupadd nagcmd
sudo usermod -a -G nagcmd nagios
sudo usermod -a -G nagcmd apache
- 下载并解压Nagios插件:
cd /tmp
wget https://nagios-plugins.org/download/nagios-plugins-2.3.3.tar.gz
tar -zxvf nagios-plugins-2.3.3.tar.gz
cd nagios-plugins-2.3.3
- 配置、编译并安装Nagios插件:
./configure --with-nagios-user=nagios --with-nagios-group=nagios
make
sudo make install
- 启动Nagios服务并配置为开机自启动:
sudo systemctl start nagios
sudo systemctl enable nagios
- 确保Apache服务器也在运行:
sudo systemctl start httpd
sudo systemctl enable httpd
使用方法
Nagios的配置文件主要位于/usr/local/nagios/etc
目录下。通过编辑这些配置文件,可以定义需要监控的主机、服务和告警规则。
nagios.cfg
:主配置文件,控制Nagios的全局设置。objects/commands.cfg
:命令定义文件,包含Nagios使用的检查命令。objects/contacts.cfg
:联系人定义文件,定义告警接收者。objects/localhost.cfg
:本地主机和服务定义文件,默认示例。
配置示例
- 编辑
nagios.cfg
,确保配置正确:
cfg_file=/usr/local/nagios/etc/objects/commands.cfg
cfg_file=/usr/local/nagios/etc/objects/contacts.cfg
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg
- 添加监控对象
在objects/localhost.cfg
文件中,添加需要监控的主机和服务。例如:
define host {
use linux-server
host_name webserver
alias My Web Server
address 192.168.1.1
}
define service {
use generic-service
host_name webserver
service_description HTTP
check_command check_http
}
检查配置文件并重启Nagios
- 检查配置文件语法:
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
- 如果没有错误,重启Nagios:
sudo systemctl restart nagios
实际案例
案例一:监控Web服务器
配置Nagios监控一台Web服务器的运行状态,并设置告警策略。当Web服务器无法访问时,Nagios会发送邮件告警。
- 添加Web服务器的主机定义:
define host {
use linux-server
host_name webserver
alias My Web Server
address 192.168.1.1
}
- 添加HTTP服务的监控:
define service {
use generic-service
host_name webserver
service_description HTTP
check_command check_http
notification_interval 10 ; 每10分钟通知一次
notification_options w,u,c,r ; 通知类型:warning, unknown, critical, recovery
}
- 配置联系人以接收告警通知:
编辑contacts.cfg
文件,添加联系人信息:
define contact {
contact_name admin
alias Nagios Admin
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,u,r
service_notification_commands notify-service-by-email
host_notification_commands notify-host-by-email
email admin@example.com
}
- 配置告警命令:
编辑commands.cfg
文件,定义告警命令:
define command {
command_name notify-service-by-email
command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ alert - $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
}
define command {
command_name notify-host-by-email
command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nHost: $HOSTNAME$\nState: $HOSTSTATE$\n\nAddress: $HOSTADDRESS$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$HOSTOUTPUT$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ alert - $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
}
案例二:监控数据库服务器
配置Nagios监控一台MySQL数据库服务器的性能指标,包括CPU使用率、内存使用率、磁盘I/O、数据库查询性能等。当某项指标超出阈值时,发送告警邮件。
- 添加数据库服务器的主机定义:
define host {
use linux-server
host_name dbserver
alias My Database Server
address 192.168.1.2
}
- 添加MySQL服务的监控:
首先,需要安装MySQL监控插件,如check_mysql
。假设插件已安装并配置好,可以在Nagios中添加相应的服务定义:
define service {
use generic-service
host_name dbserver
service_description MySQL
check_command check_mysql
notification_interval 10
notification_options w,u,c,r
}
深入配置与高级功能
除了基本的安装和配置,Nagios还提供了一些高级功能,可以更有效地帮助管理员监控和管理网络系统。
使用NRPE插件进行远程监控
NRPE(Nagios Remote Plugin Executor)插件允许Nagios服务器执行远程主机上的插件,从而监控远程主机的状态。下面是配置NRPE插件的步骤:
- 在远程主机上安装NRPE和Nagios插件:
sudo yum install nrpe nagios-plugins-all
- 配置NRPE:
编辑/etc/nagios/nrpe.cfg
文件,允许Nagios服务器访问:
allowed_hosts=127.0.0.1,192.168.1.10
- 在NRPE配置文件中定义命令:
command[check_users]=/usr/lib64/nagios/plugins/check_users -w 5 -c 10
command[check_load]=/usr/lib64/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
- 启动并启用NRPE服务:
sudo systemctl start nrpe
sudo systemctl enable nrpe
- 在Nagios服务器上配置远程主机和服务检查:
在Nagios服务器的配置文件中添加远程主机和服务定义:
define host {
use linux-server
host_name remote_host
alias Remote Host
address 192.168.1.20
}
define service {
use generic-service
host_name remote_host
service_description Users
check_command check_nrpe!check_users
}
define service {
use generic-service
host_name remote_host
service_description Load
check_command check_nrpe!check_load
}
使用Nagios XI进行高级管理
Nagios XI是Nagios的商业版本,提供了更加用户友好的界面和一些高级功能,如自动发现、配置向导、报告和预测分析等。虽然Nagios XI是付费软件,但对于大规模部署和需要更复杂管理功能的企业来说,它是一个非常值得考虑的选项。
- 安装Nagios XI:
Nagios XI的安装比Nagios Core稍微复杂,需要更多的系统资源。可以参考官方文档进行安装:https://www.nagios.com/products/nagios-xi/
- 使用自动发现功能:
Nagios XI提供自动发现功能,可以快速发现网络中的设备并进行初始配置,大大减少手工配置的工作量。
- 配置向导:
配置向导帮助用户快速配置常见的监控场景,如Web服务器、数据库服务器、网络设备等,极大地简化了配置过程。
使用Nagios Fusion进行集中管理
Nagios Fusion是另一款Nagios的商业产品,允许用户集中管理多个Nagios服务器。对于大型企业或多站点的网络监控,Nagios Fusion提供了统一的视图和集中管理功能。
- 安装Nagios Fusion:
同样,Nagios Fusion的安装可以参考官方文档:https://www.nagios.com/products/nagios-fusion/
- 添加多个Nagios服务器:
在Nagios Fusion的管理界面中,可以添加多个Nagios服务器,集中查看和管理它们的状态。
- 统一视图:
Nagios Fusion提供了统一的视图,显示所有连接的Nagios服务器的状态,帮助管理员快速了解整个网络的健康状况。
以下是一个复杂的实际案例,展示了如何使用Nagios监控一个包含多种设备和服务的网络环境。
某公司拥有一个大型网络环境,包括多个Web服务器、数据库服务器、文件服务器和网络设备(如路由器、交换机)。公司希望使用Nagios监控所有这些设备,并在出现问题时及时通知相关管理员。
定义主机组:
为了更好地组织和管理主机,可以将相同类型的主机分组。例如,将所有Web服务器分为一个组:
define hostgroup {
hostgroup_name web-servers
alias Web Servers
members webserver1,webserver2,webserver3
}
define hostgroup {
hostgroup_name db-servers
alias Database Servers
members dbserver1,dbserver2
}
define hostgroup {
hostgroup_name file-servers
alias File Servers
members fileserver1,fileserver2
}
定义服务模板:
为了减少重复配置,可以定义一些服务模板。例如,定义一个HTTP服务模板:
define service {
name http-service
use generic-service
check_command check_http
notification_interval 30
notification_options w,u,c,r
register 0
}
应用模板到主机组:
将HTTP服务模板应用到所有Web服务器:
define service {
use http-service
hostgroup_name web-servers
service_description HTTP
}
添加特定服务监控:
为数据库服务器添加MySQL监控:
define service {
use generic-service
hostgroup_name db-servers
service_description MySQL
check_command check_mysql
notification_interval 10
notification_options w,u,c,r
}
配置告警策略:
为每个主机组配置不同的告警策略。例如,为Web服务器配置邮件告警,为数据库服务器配置短信告警:
define contact {
contact_name webadmin
alias Web Admin
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,u,r
service_notification_commands notify-service-by-email
host_notification_commands notify-host-by-email
email webadmin@example.com
}
define contact {
contact_name dbadmin
alias Database Admin
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,u,r
service_notification_commands notify-service-by-sms
host_notification_commands notify-host-by-sms
pager +1234567890
}
Zabbix
Zabbix是一款企业级开源监控解决方案,由Alexei Vladishev在1998年创建,并于2001年发布第一个版本。Zabbix的设计目标是提供全面的监控功能,涵盖从硬件到软件、从网络设备到虚拟化环境的监控需求。Zabbix不仅支持实时监控,还能生成详细的报告和图表,帮助管理员进行性能分析和容量规划。
Zabbix的主要功能包括:
- 自动发现:能够自动发现网络中的设备和服务,并生成相应的监控项。
- 多种监控方式:支持SNMP、JMX、IPMI、WMI、agent、agentless等多种监控方式。
- 高级告警:支持多种告警渠道,如电子邮件、短信、即时通讯工具等,具备灵活的告警策略和依赖关系管理。
- 可视化:提供丰富的图表、仪表盘、报告等可视化工具,帮助管理员直观地了解系统状态。
- 数据存储和趋势分析:支持大规模数据存储和长时间趋势分析,方便进行历史数据查询和分析。
Zabbix安装与配置
为了使用Zabbix进行网络监控,首先需要在服务器上安装并配置Zabbix。
在安装Zabbix之前,需要准备一台运行Linux操作系统的服务器。本文以CentOS 7为例,介绍Zabbix的安装过程。
- 更新系统包:
sudo yum update
- 安装MariaDB数据库:
sudo yum install mariadb-server mariadb
sudo systemctl start mariadb
sudo systemctl enable mariadb
- 安装Apache和PHP:
sudo yum install httpd php php-mysql php-gd php-xml php-bcmath php-mbstring
sudo systemctl start httpd
sudo systemctl enable httpd
- 添加Zabbix仓库:
sudo rpm -Uvh https://repo.zabbix.com/zabbix/5.4/rhel/7/x86_64/zabbix-release-5.4-1.el7.noarch.rpm
sudo yum clean all
- 安装Zabbix Server、Web前端和Agent:
sudo yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent
- 创建Zabbix数据库和用户:
mysql -uroot -p
CREATE DATABASE zabbix CHARACTER SET utf8 COLLATE utf8_bin;
CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';
FLUSH PRIVILEGES;
exit;
- 导入初始架构和数据:
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
- 编辑
/etc/zabbix/zabbix_server.conf
文件,配置数据库连接:
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=password
- 启动并启用Zabbix Server和Agent:
sudo systemctl start zabbix-server
sudo systemctl enable zabbix-server
sudo systemctl start zabbix-agent
sudo systemctl enable zabbix-agent
- 编辑Apache配置文件
/etc/httpd/conf.d/zabbix.conf
:
php_value date.timezone Europe/Riga
将Europe/Riga
替换为实际的时区,例如Asia/Shanghai
。
- 启动并启用Apache:
sudo systemctl restart httpd
- 通过Web浏览器访问Zabbix前端安装向导,完成安装配置:
访问http://your-server-ip/zabbix
,根据提示完成安装向导的配置。
使用方法
完成安装和基本配置后,可以开始使用Zabbix进行监控。
添加主机和监控项
- 添加主机:
在Zabbix前端界面,导航到“Configuration” -> “Hosts”,点击“Create host”按钮,添加需要监控的主机。配置主机名、群组、接口等信息。
- 创建监控项:
在主机配置页面,导航到“Items”标签,点击“Create item”按钮,添加需要监控的项。例如,监控CPU使用率:
Name: CPU Load
Type: Zabbix agent
Key: system.cpu.load[percpu,avg1]
Type of information: Numeric (float)
Units: %
- 创建触发器:
在主机配置页面,导航到“Triggers”标签,点击“Create trigger”按钮,添加告警触发条件。例如,CPU使用率超过80%时触发告警:
Name: CPU load is too high
Expression: {hostname:system.cpu.load[percpu,avg1].last()} > 0.8
Severity: High
配置告警和通知
- 添加媒体类型:
导航到“Administration” -> “Media types”,添加新的媒体类型(如电子邮件、短信等)。
- 配置告警动作:
导航到“Configuration” -> “Actions”,点击“Create action”按钮,配置告警动作。例如,配置当CPU使用率超过阈值时发送电子邮件通知:
Name: CPU load high alert
Event source: Trigger
Condition: Trigger severity = "High"
Operation: Send message to user group "Zabbix administrators"
使用模板
Zabbix提供了许多预定义的模板,帮助快速配置常见的监控场景。可以在Zabbix前端界面导航到“Configuration” -> “Templates”,导入或创建模板,并应用到需要监控的主机上。
实际案例
案例一:监控Web服务器
配置Zabbix监控一台Web服务器的运行状态,包括HTTP响应时间、CPU使用率、内存使用率等。当某项指标超出阈值时,发送告警通知。
- 添加Web服务器主机:
在Zabbix前端添加Web服务器主机,配置基本信息。
- 创建HTTP监控项:
在主机配置页面的“Items”标签,创建HTTP监控项:
Name: HTTP response time
Type: HTTP agent
Key: web.page.get[example.com,,80]
Type of information: Numeric (float)
Units: s
- 创建触发器:
在主机配置页面的“Triggers”标签,创建触发器:
Name: HTTP response time is too high
Expression: {hostname:web.page.get[example.com,,80].last()} > 2
Severity: High
- 配置告警通知:
导航到“Configuration” -> “Actions”,创建告警动作,发送电子邮件通知管理员。
案例二:监控数据库服务器
配置Zabbix监控一台MySQL数据库服务器的性能指标,包括CPU使用率、内存使用率、磁盘I/O、数据库查询性能等。当某项指标超出阈值时,发送告警通知。
- 添加数据库服务器主机:
在Zabbix前端添加数据库服务器主机,配置基本信息。
- 导入MySQL模板:
导航到“Configuration” -> “Templates”,导入MySQL监控模板。
- 应用模板到数据库服务器:
在数据库服务器主机配置页面,导航到“Templates”标签,选择MySQL模板并应用。
- 创建自定义监控项和触发器:
根据具体需求,创建额外的监控项和触发器。例如,监控MySQL查询时间:
Name: MySQL query time
Type: Zabbix agent
Key: mysql.query.time
Type of information: Numeric (float)
Units: s
创建触发器:
Name: MySQL query time is too high
Expression: {hostname:mysql.query.time.last()} > 1
Severity: High
深入配置与高级功能
除了基本的安装和配置,Zabbix还提供了一些高级功能,可以更有效地帮助管理员监控和管理网络系统。
使用Zabbix代理和代理守护进程
Zabbix代理(Agent)和代理守护进程(Proxy)是Zabbix的重要组件,允许在被监控主机上收集数据,并将其发送到Zabbix服务器。
Zabbix代理:
Zabbix代理安装在被监控主机上,直接从操作系统和应用程序收集数据,并将其发送到Zabbix服务器。以下是安装和配置Zabbix代理的步骤:
- 在被监控主机上安装Zabbix代理:
sudo yum install zabbix-agent
- 配置Zabbix代理:
编辑/etc/zabbix/zabbix_agentd.conf
文件,配置服务器地址和主机名:
Server=your_zabbix_server_ip
Hostname=your_monitored_host_name
- 启动并启用Zabbix代理:
sudo systemctl start zabbix-agent
sudo systemctl enable zabbix-agent
Zabbix代理守护进程:
Zabbix代理守护进程用于代理模式下,可以收集分布式网络中的数据并汇总到一个或多个Zabbix服务器。这对于大规模分布式网络环境尤为有用。
- 在代理服务器上安装Zabbix代理守护进程:
sudo yum install zabbix-proxy-mysql
- 配置Zabbix代理守护进程:
编辑/etc/zabbix/zabbix_proxy.conf
文件,配置数据库和Zabbix服务器连接:
Server=your_zabbix_server_ip
Hostname=your_proxy_name
DBHost=localhost
DBName=zabbix_proxy
DBUser=zabbix
DBPassword=password
- 启动并启用Zabbix代理守护进程:
sudo systemctl start zabbix-proxy
sudo systemctl enable zabbix-proxy
使用Zabbix API进行自动化
Zabbix提供了功能强大的API接口,允许用户通过编程方式与Zabbix系统进行交互,进行自动化操作。例如,批量添加主机、监控项、触发器等。
- Zabbix API认证:
首先,需要获取Zabbix API的认证令牌:
import requests
import json
url = "http://your_zabbix_server_ip/api_jsonrpc.php"
headers = {
"Content-Type": "application/json"}
data = {
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "Admin",
"password": "zabbix"
},
"id": 1
}
response = requests.post(url, headers=headers, data=json.dumps(data))
auth_token = response.json()["result"]
- 通过API添加主机:
使用获取的认证令牌,通过API添加主机:
data = {
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "New_Host",
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "192.168.1.10",
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "2"
}
]
},
"auth": auth_token,
"id": 2
}
response = requests.post(url, headers=headers, data=json.dumps(data))
print(response.json())
通过这些API调用,可以实现Zabbix系统的自动化配置和管理,极大地提高工作效率。
使用Zabbix的可视化和报表功能
Zabbix提供了丰富的可视化和报表功能,帮助管理员更好地分析和展示监控数据。
- 创建图表:
在Zabbix前端界面,导航到“Monitoring” -> “Graphs”,选择需要展示的主机和监控项,创建图表。例如,展示CPU使用率、内存使用率等。
- 创建仪表盘:
导航到“Monitoring” -> “Dashboard”,创建自定义仪表盘,添加多个小组件(如图表、地图、报警视图等),实时监控系统状态。
- 生成报表:
导航到“Reports” -> “Availability Report”或“Triggers Top 100”,生成系统可用性报告或最频繁触发的告警报告,进行深入分析。
实际案例:监控复杂网络环境
以下是一个复杂的实际案例,展示了如何使用Zabbix监控一个包含多种设备和服务的网络环境。
案例背景
某公司拥有一个大型网络环境,包括多个Web服务器、数据库服务器、文件服务器和网络设备(如路由器、交换机)。公司希望使用Zabbix监控所有这些设备,并在出现问题时及时通知相关管理员。
案例配置
- 定义主机组:
为了更好地组织和管理主机,可以将相同类型的主机分组。例如,将所有Web服务器分为一个组:
define hostgroup {
hostgroup_name web-servers
alias Web Servers
members webserver1,webserver2,webserver3
}
define hostgroup {
hostgroup_name db-servers
alias Database Servers
members dbserver1,dbserver2
}
define hostgroup {
hostgroup_name file-servers
alias File Servers
members fileserver1,fileserver2
}
- 定义监控模板:
为了减少重复配置,可以定义一些监控模板。例如,定义一个HTTP服务模板:
define service {
name http-service
use generic-service
check_command check_http
notification_interval 30
notification_options w,u,c,r
register 0
}
- 应用模板到主机组:
将HTTP服务模板应用到所有Web服务器:
define service {
use http-service
hostgroup_name web-servers
service_description HTTP
}
- 添加特定服务监控:
为数据库服务器添加MySQL监控:
define service {
use generic-service
hostgroup_name db-servers
service_description MySQL
check_command check_mysql
notification_interval 10
notification_options w,u,c,r
}
- 配置告警策略:
为每个主机组配置不同的告警策略。例如,为Web服务器配置邮件告警,为数据库服务器配置短信告警:
define contact {
contact_name webadmin
alias Web Admin
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,u,r
service_notification_commands notify-service-by-email
host_notification_commands notify-host-by-email
email webadmin@example.com
}
define contact {
contact_name dbadmin
alias Database Admin
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,u,r
service_notification_commands notify-service-by-sms
host_notification_commands notify-host-by-sms
pager +1234567890
}