监控工具之Nagios,搭建和使用 nacos监控
liebian365 2024-10-19 08:08 17 浏览 0 评论
这是我整理的第四篇关于监控工具的文章,前三篇分别介绍了Prometheus、Zabbix和Cacti,这次再整理一篇关于Nagios的,算是把主流监控工具做了个阶段性梳理,希望能帮助到需要的朋友。
一、简介
1.1 Nagios监控框架工具介绍
Nagios是一款开源软件,能有效监控 Windows 、Linux、VMware 和 Unix 主机状态,交换机、路由器等网络设置等。当监控出异常时提醒系统管理员,当异常恢复时也会通知。Nagios提供一个基于浏览器的web界面,方便管理人员查看系统的运行状态,网络状态、服务状态、日志信息,以及其他异常现象。
2. 安装
说明:安装机器为CentOS系统
2.1更新yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo yum clean all && yum makecache fast #安装epel源 yum install -y epel-release yum makecache fast
2.2安装依赖包
由于Nagios提供了Web界面,因此需要安装Apache;由于配置Web界面需要PHP模块支持,所以需要安装PHP,还需要其他插件。
sudo yum install httpd php php-cli gcc glibc glibc-common gd gd-devel net-snmp
2.3创建用户和分组
sudo useradd -m nagios #新建用户
sudo passwd nagios #修改密码
sudo groupadd nagcmd #新建分组
sudo usermod -a -G nagcmd nagios #添加用户到分组
2.4安装Nagios
1、下载
wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-4.0.8.tar.gz
2、安装
tar xzf nagios-4.0.8.tar.gz #解压
cd nagios-4.0.8
sudo ./configure --with-command-group=nagcmd
sudo make all
sudo make install
sudo make install-init
sudo make install-config
sudo make install-commandmode #安装 Web界面
sudo make install-webconf
3、为web界面创建登录账号
sudo htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
其中nagiosadmin为账号名可更改,同时会提示添加密码。 重启Apache服务
sudo service httpd restart
目录说明:
bin:Nagios 可执行程序所在目录
etc:Nagios 配置文件目录
sbin:Nagios cgi 文件所在目录, 也就是执行外部 命令所需要文件所在的目录
share:Nagios 网页存放路径
libexec:Nagios 外部插件存放目录
var:Nagios 日志文件、Lock 等文件所在的目录
var/archives:agios 日志自动归档目录
var/rw:用来存放外部命令文件的目录
2.5安装plugins
下载
wget http://nagios-plugins.org/download/nagios-plugins-2.0.3.tar.gz
安装
tar xzf nagios-plugins-2.0.3.tar.gz
cd nagios-plugins-2.0.3
sudo ./configure --with-nagios-user=nagios --with-nagios-group=nagios
sudo make
sudo make install
安装目录:/usr/local/nagios/ 安装完毕,web界面
3. 基本配置
[root@zz lib64]# cd /usr/local/nagios/
[root@zz nagios]# ls
bin etc include libexec sbin share var
[root@zz nagios]# ll
总用量 12
drwxrwxr-x. 2 nagios nagios 38 6月 1 11:42 bin #nagios相关命令
drwxrwxr-x. 3 nagios nagios 96 6月 1 11:42 etc #nagios配置文件及目录信息
drwxr-xr-x. 2 root root 6 6月 1 12:13 include #包含文件目录
drwxrwxr-x. 2 nagios nagios 4096 6月 1 12:13 libexec #插件目录路径
drwxrwxr-x. 2 nagios nagios 4096 6月 1 11:42 sbin #nagios的cgi程序,将来换web的时候需要支持cgi。
drwxrwxr-x. 11 nagios nagios 4096 6月 1 12:13 share #界面展示的php程序等内容目录
drwxrwxr-x. 5 nagios nagios 45 6月 1 11:42 var #日志文件和数据目录
[root@zz nagios]# cd etc/
[root@zz etc]# ll
总用量 64
-rw-rw-r--. 1 nagios nagios 12015 6月 1 11:42 cgi.cfg
-rw-r--r--. 1 root root 50 6月 1 11:43 htpasswd.users
-rw-rw-r--. 1 nagios nagios 44475 6月 1 11:42 nagios.cfg
drwxrwxr-x. 2 nagios nagios 167 6月 1 11:42 objects
-rw-rw----. 1 nagios nagios 1312 6月 1 11:42 resource.cfg
[root@zz etc]# cd objects/
[root@zz objects]# ll
总用量 48
-rw-rw-r--. 1 nagios nagios 7688 6月 1 11:42 commands.cfg
-rw-rw-r--. 1 nagios nagios 2138 6月 1 11:42 contacts.cfg
-rw-rw-r--. 1 nagios nagios 5375 6月 1 11:42 localhost.cfg
-rw-rw-r--. 1 nagios nagios 3096 6月 1 11:42 printer.cfg
-rw-rw-r--. 1 nagios nagios 3265 6月 1 11:42 switch.cfg
-rw-rw-r--. 1 nagios nagios 10621 6月 1 11:42 templates.cfg
-rw-rw-r--. 1 nagios nagios 3180 6月 1 11:42 timeperiods.cfg
-rw-rw-r--. 1 nagios nagios 3991 6月 1 11:42 windows.cfg
3.1 配置文件列表配置文件作用
配置文件说明:
cgi.cfg: 控制CGI访问的配置文件
nagios.cfg:Nagios的主配置文件
resource.cfg:变量定义文件,在此定义的变量,用于其它配置文件中使用,如USER1USER1
objects:objects为目录,内部含有大量的配置文件
objects/command.cfg:命令定义配置文件
objects/contacts.cfg:联系人和联系人分组配置文件
objects/localhost.cfg:定义监控本机的配置文件
objects/printer.cfg:监控打印机的配置文件,默认不启用此文件
objects/switch.cfg:监控路由器的配置文件,默认不启用此文件
objects/templates.cfg:定义主机和服务的配置文件
objects/timeperiods.cfg:定义监控时间段的配置文件
objects/windows.cfg:监控Windows机器的配置文件,默认没有启动此文件
注:在以后修改配置文件后,可以利用以下命令行检测配置文件是否正确,可以根据错误提示修改
sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
修改完配置文件后web界面不会立马修改,需要重新加载、启动nagios服务。
sudo service nagios reload
sudo service nagios restart
3.2 命令配置文件
文件名称:commands.cfg 文件定义格式:
define command{
command_name *******
command_line *******
例如,查看本地负载的命令
# 'check_local_load' command definition
define command{
command_name check_local_load
command_line $USER1$/check_load -w $ARG1$ -c $ARG2$
}
其中,变量USER1USER1在resource.cfg中定义
# Sets $USER1$ to be the path to the plugins
$USER1$=/usr/local/nagios/libexec
USER1USER1中自带很多可执行的文件,可在命令行使用-v,查看具体的用法,这里ARG1是发出警告(w)的条件,ARG1是发出警告(w)的条件,ARG2是发出严重警告(c)的条件。可以用命令执行,命令执行,如
[master@usr]$ /usr/local/nagios/libexec/check_load -w 5.0,4.0,3.0 -c 10.0,6.0,4.0
OK - load average: 0.00, 0.01, 0.05|load1=0.000;5.000;10.000;0; load5=0.010;4.000;6.000;0; load15=0.050;3.000;4.000;0;
3.3 监控本地主机
确认nagios.cfg中有对localhoast.cfg文件的引用
# Definitions for monitoring the local (Linux) host
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg
localhost.cfg自带了对HTTP、ROOTPartition、SSH等服务的定义。 在localhost.cfg定义主机
define host{
use linux-server
host_name localhost
alias localhost
address 127.0.0.1
}
其中host_name是对被监控机器的名称,alias是被监控机器名称的别称,address是被监控机器的ip(127.0.0.1表示本地机器),use指明的是被监控机器继承的模板(定义模板的位置在templates.cfg,具体含义参考报警部分)。
然后在localhost.cfg里完成对服务(service)的定义
define service{
use local-service
host_name localhost
service_description 磁盘空间
check_command check_local_disk!20%!10%!/
}
use指被监控机器集成的服务模板(定义模板的位置在templates.cfg,具体含义参考报警部分)
host_name指主机名,与上面定义的host_name所指含义相同
service_description指要显示在web界面的内容
check_command指明要执行的命令名称(命令定义的位置是commands.cfg),示例中的参数20%表示,磁盘剩余空间少于20%(ARG1)时开始报警,10ARG1)时开始报警,10ARG2$)表示,磁盘剩余空间少于10)时开始报警。
对本机其他的监控的配置一样。配置完成后可以在浏览器上浏览效果(地址:部署nagios所在机器的ip/nagios)监控主机页面
3.4 监控远程Linux/UNIX主机
1、原理
监控远程的Linux/UNIX由两部分组成:运行在监控主机上的check_nrpe,运行在被监控主机上的NRPE守护进程。其中check_nrpe不是nagios自带的可执行文件,是安装plugins时带的可执行文件(位置在: /usr/lib64/nagios/plugins/)。 当监控远程的Linux/UNIX时,工作流程如下:
- nagios运行check_nrpe这个插件,并告诉它要执行什么命令
- check_nrpe连接到被监控端的NRPE守护进程,告诉它命令
- 被监控端的NRPE守护进程执行具体的操作
- 被监控端的NRPE守护进程把执行的结果返回给Nagios做后处理
2、被监控端的插件安装与配置
(1)CentOS系统
yum install epel-release
yum install nrpe nagios-plugins-all openssl
(2)Debian/Ubuntu系统
apt-get install epel-release
sudo apt-get install nagios-nrpe-server nagios-plugins
安装完后进行配置 打开/etc/nagios/nrpe.cfg文件,在allowed_hosts后面添加上监控机器的ip
## Find the following line and add the Nagios server IP ##
allowed_hosts=127.0.0.1 192.168.1.150
3、开启NRPE服务
(1)CentOS系统
systemctl start nrpe
chkconfig nrpe on
(2)Debian/Ubuntu系统
sudo /etc/init.d/nagios-nrpe-server restart
回到监控主机,新建目录servers
sudo mkdir /usr/local/nagios/etc/servers
创建监控远程Linux/UNIX主机的脚本
sudo touch /usr/local/nagios/etc/servers/clients.cfg
在nagios.cfg中添加上目录servers,这样目录中的文件都会被引入到监控中来。
cfg_dir=/usr/local/nagios/etc/servers
举例
以“监控远程Linux/UNIX主机的CPU负载”为例 被监控端 进入目录cd /etc/nagios/nrpe.cfg 添加命令行:
command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
修改后重启服务
service nagios-nrpe-server restart
监控端 打开servers/clients.cfg文件 定义主机
define host{
use linux-server
host_name 10.61.88.23
alias 10.61.88.23
address 10.61.88.23
}定义服务
define service {
use generic-service,srv-pnp
host_name 10.61.88.23
service_description CPU负载
check_command check_nrpe!check_load
notifications_enabled 1
}
其中check_command中check_nrpe!后面的命令check_load对应被监控端的command[check_load]对应的命令。
4、监控远程windows
说明
nagios对windows进行监控需要在被监控端安装NSClient,NSClient++来监控windows主机有三种方式:check_nt、check_nrpe、nsca。check_nt自带很多功能,可以完成很多基本的需求,但是扩展性差;check_nrpe可以通过执行自己定义的脚本做到很好地扩展。为了满足自己的需求,可以以上几种方式结合使用。 在objects目录下创建文件windows.cfg,添加主机和服务。
check_nt
添加主机和服务
define host{
use windows-server
host_name ruanxi
alias My Windows Server
address 192.168.0.5
}
#监控 windows 主机的开机运作时间
define service{
use generic-service
host_name ruanxi
service_description Uptime
check_command check_nt!UPTIME
}
#监控 windows 主机的内存使用状况
define service{
use generic-service
host_name ruanxi
service_description Memory Usage
check_command check_nt!MEMUSE!-w 80 -c 90 #内存使用到达80%则warn,到达90%则Critical
}
check_nrpe
原理
使用check_nrpe监控windows的原理与监控linux主机的原理一致,这样可以根据特定的需求自己写脚本。 以监控某个进程是否运行为例 编辑NSClient配置文件NSC.ini,去掉以下几行前面的“;”号(去掉注释,使其生效)
NRPEListener.dll
script_dir=scripts\
CheckExternalScripts.dll
在NSClient安装目录下的scripts文件夹下,新建一个check_run.bat批处理文件,如下
@echo off
tasklist |find "%1" >NUL
IF ERRORLEVEL 1 GOTO err
IF ERRORLEVEL 0 GOTO ok
:err
echo CRITICAL: Process does not exist
exit /B 1
:ok
echo OK: The process of normal
exit /B 0
说明:脚本的退出值与nagios的报警提示对应关系为:0--正常,1--警告,2--严重警告 在NSC.ini文件中[External Scripts]下面添加如下行:
check_run=scripts\check_run.bat chrome.exe
重启NSClinet 可以在被监控端check_nrpe所在的目录(CentOs默认的安装目录为:/usr/lib64/nagios/plugins/)
./check_nrpe -H hostip -c check_run
注:-H后写刚才脚本所在的机器,-c后写命令,这里对应配置文件中的check_run
如果结果与预期的一致,那么就可以继续配置监控端了
配置监控端 修改commands.cfg,增加命令
define command{
command_name check_run
command_line /usr/lib64/nagios/plugins/check_nrpe -H yourip -c check_run
}
修改windows.cfg,增加服务
define service{
use generic-service-urgent,srv-pnp
host_name youip ;要展示信息的机器的ip
service_description check_fileexistspan
check_command check_run
}
4. 报警
4.1 报警配置文件
修改联系人
配置文件是contacts.cfg. 联系人定义方式为:
define contact{
contact_name nagiosadmin ; 用户名称
use generic-contact ;
alias Nagios Admin ; 用户别称
email ****@**** ;修改为需要通知的邮箱
}
该contact继承了templates.cfg中的genetic-contact,如下
define contact{
name generic-contact ; The name of this contact template
service_notification_period 24x7 ; service notifications can be sent anytime
host_notification_period 24x7 ; host notifications can be sent anytime
service_notification_options w,u,c,r,f,s ; send notifications for all service states, flapping events, and scheduled downtime events
host_notification_options d,u,r,f,s ; send notifications for all host states, flapping events, and scheduled downtime events
service_notification_commands notify-service-by-email ; send service notifications via email
host_notification_commands notify-host-by-email ; send host notifications via email
register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL CONTACT, JUST A TEMPLATE!
}
host_notification_commands指定的方式为notify-host-by-email,如果是微信或短信等其他方式,用逗号隔开写在后面即可。其中命令notify-host-by-email的定义在commands.cfg中默认已定义,如下
# 'notify-host-by-email' command definition
define command{
command_name notify-host-by-email
command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
}
联系人分组定义方式为:
define contactgroup{
contactgroup_name admins
alias Nagios Administrators
members nagiosadmin ;这里填写刚才定义的contact_name
}
4.2 修改报警时间周期
define host{
use linux-server
host_name server_10.61.91.37
alias server_10.61.91.37
address 127.0.0.1
contact_groups admins ;这里添加报警组名称(上面刚定义的)
}
要使主机或服务能够发邮件,必须在定义主机或服务时添加说明,以服务为例。修改localhost.cfg中本机的修改。这样主机出现异常时会发送异常到报警组,报警组把异常分配给组里的成员,然后成员按照自己预先设定的报警方式进行报警。主机继承了linux-server模板,模板的定义在templates.cfg文件,文件中存在着主机和服务的继承关系,可以根据需要自己定制参数,以linux-server模板为例:
define host{
name linux-server ; 主机模板名称
use generic-host ; 继承通用模板
check_period 24x7 ; 监控的时间段为一周七天,每天24小时,具体定义详见timeperiods.cfg
check_interval 5 ; 对主机每5分钟检测一次(注:这里的数值单位默认为分钟)
retry_interval 1 ; 重试检测时间为1分钟
max_check_attempts 1 ; nagios对主机的最大检查次数,即nagios在检查发现某主机异常时,并不马上下定论
check_command check-host-alive ;指定检查主机状态的命令,其中“check-host-alive”在commands.cfg文件中定义
notification_period workhours ; 主机故障时,发送通知的时间范围,其中“workhours”在timeperiods.cfg中进行了定义;
notification_interval 30 ; 故障出现,没有修复,每30分钟再发一次告警
notification_options d,u,r ; 定义主机在什么状态下可以发送通知给使用者,d即down,表示宕机状态;
register 0 ;指明这非真正主机,这只是模板而已
}注:这里的时间是时间片的含义,定义在nagios.cfg中command_check_interval=60,默认单位是s 。30即30*60s
4.3 邮件报警
上面是以邮件报警为例说明的,但是前提是系统可以往外发邮件,配置如下(以CentOs为例) 打开/etc/mail.rc文件 添加 其中 set from=[发送人邮箱地址] set smtp=[smtp服务器地址] set smtp-auth-user=[邮箱用户名] set smtp-auth-password=[邮箱密码] set smtp-auth=login 测试: mail -s [邮件主题] [邮件地址] 回车,然后输入邮件内容,最后按“Ctrl + D”。如果发送成功表明配置成功。
5. 分组
完成了以上的配置,已经完成了nagios的基本配置,但是当有多个机器时,所有的机器显示在一起会显得很乱,并且和自己无关的主机也会对自己报警。为了作区分可以对主机和服务进行分组,这样管理人员就可以只关注自己管理的主机和服务。
5.1 主机分组
定义分组的位置放哪都行,只要引入到nagios.cfg中即可,为了方便找,这里把分组放到localhost.cfg和windows.cfg里。
define hostgroup{
hostgroup_name linux-servers ; The name of the hostgroup
alias Linux Servers ; Long name of the group
members server_10.61.91.37,172.16.41.211,10.61.88.23 ; 主机名
}点击web界面左边导航条中主机组的表格,分组示例
5.2 服务分组
define servicegroup{
servicegroup_name dbservices
alias Database Services
members 进程CPU与内存,10.61.88.23,监控端口状态 ;这里写service中的service_description
}
点击web界面左边导航条中服务组的表格,分组示例
6. 界面美化
6.1 汉化
可以根据自己的需求对web界面的显示选项进行定制和修改。 对左边导航条的修改文件是/usr/local/nagios/share/side.php 修改后,需要重新加载、启动nagios。简易修改效果如下:
相关推荐
- 看黑客是如何获取你电脑最高权限的,一定要看
-
在渗透过程中,通过各种方式获取到一枚cmdshell,但是这个shell的权限比较低,无法让我们做我们想要做的一些操作,比如说获取系统密码,获取数据库信息,又或者比如说拿到服务器中的另一个站点的权限,...
- 是50个常用的Visual Basic代码示例:
-
以下是50个常用的VisualBasic代码示例:1.声明变量```vb...
- 电脑系统型号怎么看版本(如何看电脑系统型号)
-
有时候我们会需要进行查看电脑上安装的windows系统版本及系统版本号,但对于不懂电脑知识的小白来说要怎么查看电脑系统版本信息呢?别着急,有小编在接下来,就将查看电脑系统版本的教程来分享给你们,希望对...
- dos命令systeminfo,查看系统启动时间。电脑卡慢,win10怎么了?
-
最近一段时间,有几个反应电脑卡慢的,都是windows10的系统。询问得知每天电脑有关机,打开任务管理器,内存使用量达到百分之九十多,而程序只打开微信、wps、360浏览器。cmd窗口运行命令syst...
- systeminfo命令:全面解析系统信息!
-
你是否曾想过,仅凭一条简单的命令,就能深入了解计算机的"内心世界"?是不是有点不可思议?那么,让我们一起探寻这个神奇的命令,揭开它背后的奥秘吧!它能提供的信息超乎你的想象,从操作系统到硬件配置,再到驱...
- 电脑序列号怎么查询?只需两行命令一键查询
-
当我们的电脑出问题需要保修的时候,需要查询到电脑的型号和序列号才更便于进行下一步的操作,有包装盒的朋友还可以在包装盒上查询,笔记本用户可以在电脑底部标签上查询,没有包装盒和标签破损的用户就无从下手了。...
- 快速显示系统信息:Systeminfo命令详解
-
Systeminfo命令是windows系统中显示系统信息的命令,此命令可以显示出计算机的操作系统的详细配置信息,包括操作系统配置、安全信息、产品ID和硬件属性(如RAM、磁盘空间和网卡)。使用...
- dos命令systeminfo图文教程,显示操作系统配置信息msinfo32
-
大家好,我是老盖,首先感谢观看本文,本篇文章做的有视频,视频讲述的比较详细,也可以看我发布的视频。今天我们学习systeminfo命令,该工具显示本地或远程机器(包括服务包级别)的操作系统配置的信息,...
- 基于uniapp+vue3跨端仿制chatgpt实例uniapp-chatgpt
-
#夏日生活打卡季#...
- 原创新作uniapp+vue3+pinia2高仿微信App聊天
-
前段时间有给大家分享一个flutter3.x桌面端os系统。今天再分享一款最新原创之作uniapp-vue3-wechat聊天实例。uni-vue3-wechat采用...
- UniApp开发的设备适配(uniapp服务器配置)
-
UniApp是一个跨平台开发框架,支持多端应用(如H5、小程序、iOS、Android等)。由于不同设备的屏幕尺寸、分辨率、操作系统等存在差异,设备适配是开发过程中需要重点关注的问题。以下是Uni...
- 如何用服务器搭建自己的个人网站(自己服务器怎么做网站)
-
这篇教程主要是告诉大家如何利用TCP和HTTP协议来完成网站的搭建。首先你需要有C/C++语言基础,且有服务器、客户端概念,如果你了解TCP或者HTTP协议的话,那么将会帮助你更快的学会如何搭建个人网...
- 大话C语言:字符数组(c语言字符数组教学视频)
-
1字符数组概述C语言中没有字符串这种数据类型,可以通过char的数组来替代。数字0(和字符'\0'等价)结尾的char数组就是一个字符串,字符串是一种特殊的char的数组。...
- 源码分享:在pdf上加盖电子签章(pdf怎么加电子签章)
-
在pdf上加盖电子签章,并不是只是加个印章图片,。而是要使用一对密钥中的私钥对文件进行签字。为啥要用私钥呢?很简单,因为公钥是公开的,其他人才可以用公钥为你证明,这个文件是你签的。这就是我们常说的:私...
- C语言wcstombs函数详解:宽字符字符串到多字节的「翻译官」
-
核心定位wcstombs是C语言中用于将宽字符字符串转换为多字节字符串的「翻译官」,它能将宽字符(wchar_t)转换为多字节字符(如UTF-8编码的中文)。就像一位翻译官,它能将一种语言(宽字符...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- wireshark怎么抓包 (75)
- qt sleep (64)
- cs1.6指令代码大全 (55)
- factory-method (60)
- sqlite3_bind_blob (52)
- hibernate update (63)
- c++ base64 (70)
- nc 命令 (52)
- wm_close (51)
- epollin (51)
- sqlca.sqlcode (57)
- lua ipairs (60)
- tv_usec (64)
- 命令行进入文件夹 (53)
- postgresql array (57)
- statfs函数 (57)
- .project文件 (54)
- lua require (56)
- for_each (67)
- c#工厂模式 (57)
- wxsqlite3 (66)
- dmesg -c (58)
- fopen参数 (53)
- tar -zxvf -c (55)
- 速递查询 (52)