网络工程师常用的2个监控工具:Nagios、Zabbix

网络东西不好懂 2024-06-12 17:01:10

在现代网络管理中,监控工具是确保网络运行正常、快速发现和解决问题的关键。本文将详细介绍网络工程师常用的两款监控工具: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 httpdsudo systemctl enable httpd下载并解压Nagios Core源码包:cd /tmpwget https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.4.6.tar.gztar -zxvf nagios-4.4.6.tar.gzcd nagios-4.4.6配置、编译并安装Nagios:./configuremake allsudo make installsudo make install-initsudo make install-commandmodesudo make install-configsudo make install-webconf创建Nagios用户和组:sudo useradd nagiossudo groupadd nagcmdsudo usermod -a -G nagcmd nagiossudo usermod -a -G nagcmd apache下载并解压Nagios插件:cd /tmpwget https://nagios-plugins.org/download/nagios-plugins-2.3.3.tar.gztar -zxvf nagios-plugins-2.3.3.tar.gzcd nagios-plugins-2.3.3配置、编译并安装Nagios插件:./configure --with-nagios-user=nagios --with-nagios-group=nagiosmakesudo make install启动Nagios服务并配置为开机自启动:sudo systemctl start nagiossudo systemctl enable nagios确保Apache服务器也在运行:sudo systemctl start httpdsudo 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.cfgcfg_file=/usr/local/nagios/etc/objects/contacts.cfgcfg_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 10command[check_load]=/usr/lib64/nagios/plugins/check_load -w 15,10,5 -c 30,25,20启动并启用NRPE服务:sudo systemctl start nrpesudo 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 mariadbsudo systemctl start mariadbsudo systemctl enable mariadb安装Apache和PHP:sudo yum install httpd php php-mysql php-gd php-xml php-bcmath php-mbstringsudo systemctl start httpdsudo 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.rpmsudo yum clean all安装Zabbix Server、Web前端和Agent:sudo yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent创建Zabbix数据库和用户:mysql -uroot -pCREATE 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=localhostDBName=zabbixDBUser=zabbixDBPassword=password启动并启用Zabbix Server和Agent:sudo systemctl start zabbix-serversudo systemctl enable zabbix-serversudo systemctl start zabbix-agentsudo 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 LoadType: Zabbix agentKey: system.cpu.load[percpu,avg1]Type of information: Numeric (float)Units: %

创建触发器:

在主机配置页面,导航到“Triggers”标签,点击“Create trigger”按钮,添加告警触发条件。例如,CPU使用率超过80%时触发告警:

Name: CPU load is too highExpression: {hostname:system.cpu.load[percpu,avg1].last()} > 0.8Severity: High配置告警和通知添加媒体类型:

导航到“Administration” -> “Media types”,添加新的媒体类型(如电子邮件、短信等)。

配置告警动作:

导航到“Configuration” -> “Actions”,点击“Create action”按钮,配置告警动作。例如,配置当CPU使用率超过阈值时发送电子邮件通知:

Name: CPU load high alertEvent source: TriggerCondition: 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 timeType: HTTP agentKey: web.page.get[example.com,,80]Type of information: Numeric (float)Units: s创建触发器:

在主机配置页面的“Triggers”标签,创建触发器:

Name: HTTP response time is too highExpression: {hostname:web.page.get[example.com,,80].last()} > 2Severity: High配置告警通知:

导航到“Configuration” -> “Actions”,创建告警动作,发送电子邮件通知管理员。

案例二:监控数据库服务器

配置Zabbix监控一台MySQL数据库服务器的性能指标,包括CPU使用率、内存使用率、磁盘I/O、数据库查询性能等。当某项指标超出阈值时,发送告警通知。

添加数据库服务器主机:

在Zabbix前端添加数据库服务器主机,配置基本信息。

导入MySQL模板:

导航到“Configuration” -> “Templates”,导入MySQL监控模板。

应用模板到数据库服务器:

在数据库服务器主机配置页面,导航到“Templates”标签,选择MySQL模板并应用。

创建自定义监控项和触发器:

根据具体需求,创建额外的监控项和触发器。例如,监控MySQL查询时间:

Name: MySQL query timeType: Zabbix agentKey: mysql.query.timeType of information: Numeric (float)Units: s

创建触发器:

Name: MySQL query time is too highExpression: {hostname:mysql.query.time.last()} > 1Severity: 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_ipHostname=your_monitored_host_name启动并启用Zabbix代理:sudo systemctl start zabbix-agentsudo 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_ipHostname=your_proxy_nameDBHost=localhostDBName=zabbix_proxyDBUser=zabbixDBPassword=password启动并启用Zabbix代理守护进程:sudo systemctl start zabbix-proxysudo systemctl enable zabbix-proxy使用Zabbix API进行自动化

Zabbix提供了功能强大的API接口,允许用户通过编程方式与Zabbix系统进行交互,进行自动化操作。例如,批量添加主机、监控项、触发器等。

Zabbix API认证:

首先,需要获取Zabbix API的认证令牌:

import requestsimport jsonurl = "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}
0 阅读:0

网络东西不好懂

简介:感谢大家的关注