以下监控系统内容很多都淘汰了,现在大多都用Prometheus了
监控系统 介绍 规模带来的挑战
每当系统规模扩大10倍,原有的技术栈则需要替代
更多系统、设备、应用的数量,不同的部署地点、不同的业务需求
系统问题不能及时得到反馈,响应处理不及时(被动响应)
设备服务间存在复杂的依赖关系,问题定位困难(这是分层带来的困扰)
网络问题造成应用无法访问
数据库问题造成应用无法访问
资源抢占造成后台进程系统杀掉
来自用户的问题反馈通常存在误导因素
系统缺乏统一的监控告警机制、失控
需要统一的监控系统,能自动告警、问题处理
监控系统介绍 可以周期性的检查系统、服务是否可用
日常使用的监控系统
Nagios
Zabbix
Manageengine
Solarwind
监控技术
第一类:基于客户端
适用于通用操作系统,需要在被监视设备上安装监控程序
第二类:基于SNMP协议
nagios介绍 Nagios是插件式的结构,它本身没有任何监控功能,所有的监控都是通过插件进行的,因此其是高度模块化和富于弹性的。
nagios是开源的系统监控工具
自动监视系统运行状态
发现问题及时通知相关人
支持客户端和SNMP兼容设备
支持的两类监控对象
Host:物理的、虚拟的、网络设备、打印机等(可分组划分)
Service:系统功能(系统服务、资源占用CPU、内存、存储)
Service至少关联到一个Host
检查结果的4种状态
OK
Warning
Critical
Unknown
具体的性能按需定义为以上状态
基于插件的系统框架
nagios将要检查什么,以及warning、critical的标准交给插件
所有检查工作由插件完成,并分析检查结果
内建插件主要由C语言开发(需要编译安装)
不支持的检查功能可自行开发插件
清晰的对象定义系统
Commands:插件之上的抽象层,将类似的操作分组处理
Time periods:应该或不应该执行监控操作的时间跨度,可以定义某个时间不做监控
Hosts / Groups:一个或是一组主机(一个主机可以属于多个组)
Services:主机上需要监视的具体功能和资源(CPU、存储、web服务)
Contacts / Groups:联系人
Notifications:不同等级事件、时间通知谁什么内容
何时以何种方式通知谁,具体什么信息
不是严格意义的对象,是其他对象的集合
Escalations:通知升级,告警持续一定时间后升级
Nagios是一个依赖系统
系统和服务依赖网络设备
服务之间互相依赖,被依赖的服务故障时,依赖它的服务不再检查和告警
计划宕机
维护性宕机调度时nagios不发告警
也可以通知计划宕机维护
软硬状态
为避免随机和临时性故障告警,Nagios状态区分软硬状态
当前与之前检测状态不同时故障为软状态,相同则为硬状态,这是怕网络状态抖动,要连续检测多次有问题,才置为硬状态。
Nagios Nagios安装 自动安装 ubuntu官方库包含Nagios3.X版本
1 sudo apt install nagios3 nagios-plugins
nagios官方最新版4,需要手动编译安装,Nagios3和4相当于python2和3的版本差异,Nagios3和4的版本都是独立发展的。
提供了web访问方式
编译安装 需要的依赖软件包 C编译器、C语言开发库、OpenSSL实现web加密访问、MySQL存储历史数据、PHP、SNMP、图形组件
1 sudo apt install -y wget gcc make binutils cpp libpq-dev libmysqlclient-dev libssl1.0.0 libssl-dev pkg-config libgd-dev libgd-tools perl libperl-dev libnet-snmp-perl snmp apache2 apache2-utils libapache2-mod-php unzip tar gzip php php-gd
创建目录结构 1 2 3 4 5 sudo mkdir /opt/nagios sudo mkdir /var/nagios sudo mkdir /etc/nagios
创建用户和组账号 1 2 3 4 5 sudo groupadd nagios sudo groupadd nagioscmd sudo useradd -g nagios -G nagioscmd -d /opt/nagios nagios sudo usermod -G nagioscmd www-data
文件系统权限 1 chown nagios:nagios /opt/nagios /etc/nagios /var/nagios
下载源码 1 2 3 4 5 6 wget https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.4.5.tar.gz wget https://nagios-plugins.org/download/nagios-plugins-2.3.1.tar.gz tar -zxvf nagios-4.4.5.tar.gz tar -zxvf nagios-plugins-2.3.1.tar.gz
编译安装nagios 1 2 3 4 5 6 7 8 9 10 11 cd cd nagios-4.4.5/./configure --prefix=/opt/nagios --sysconfdir=/etc/nagios --localstatedir=/var/nagios --libexecdir=/opt/nagios/plugins --with-command-group=nagioscmd make all make install make install-init make install-commandmode make install-config
验证配置文件 1 su -c '/opt/nagios/bin/nagios -v /etc/nagios/nagios.cfg'
编译安装插件 1 2 3 4 5 6 7 cd ../nagios-plugins-2.3.1/sh configure --prefix=/opt/nagios --sysconfdir=/etc/nagios --localstatedir=/var/nagios --libexecdir=/opt/nagios/plugins make all make install
创建站点配置文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 cd /etc/apache2/conf-available/vi nagios.conf ScriptAlias /nagios/cgi-bin /opt/nagios/sbin Alias /nagios /opt/nagios/share <Location "/nagios" > AuthName "Nagios Access" AuthType Basic AuthUserFile /etc/nagios/htpasswd.users require valid-user </Location> <Directory "/opt/nagios/share" > AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Require all granted Order allow,deny Allow from all </Directory> <Directory "/opt/nagios/sbin" > AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Require all granted Order allow,deny Allow from all </Directory>
加载模块并启动站点 1 2 3 a2enmod cgi a2enmod auth_basic a2enconf nagios
设置web登录密码 1 2 3 4 5 htpasswd -c /etc/nagios/htpasswd.users nagiosadmin systemctl restart apache2 systemctl restart nagios
web访问 http://192.168.1.104/nagios
Nagios配置 配置文件 1 2 3 4 5 6 7 8 /etc/nagios /etc/nagios/nagios.cfg cfg_file cfg_dir resource_file
目录结构 1 2 3 cd /etc/nagiosmkdir commands timeperiods contacts contactgroups hosts hostgroups services servicegroups templates
修改主配置文件 1 2 3 4 5 6 7 8 9 10 11 12 vi /etc/nagios/nagios.cfg cfg_dir=/etc/nagios/commands cfg_dir=/etc/nagios/timeperiods cfg_dir=/etc/nagios/contacts cfg_dir=/etc/nagios/contactgroups cfg_dir=/etc/nagios/hosts cfg_dir=/etc/nagios/hostgroups cfg_dir=/etc/nagios/services cfg_dir=/etc/nagios/servicegroups cfg_dir=/etc/nagios/templates
监控体系架构
nagios启动过程中要读取主配置文件,主配置文件中我们指定了其他的具体要监视的那些配置文件中的目录。
而具体监视的是什么呢?首先要定义主机,所有的服务都不能脱离主机单独存在,而主机是监视的开始,只有有了一个定义好的对象主机,才能对主机上的服务资源进行监控。
nagios系统要求一个主机至少定义一个服务。
如何检查呢?在command.cfg文件中定义检查指令,通过插件来完成检查。在command.cfg中还定义了检查完了如何处置的步骤,可以发邮件给负责人或者直接操作。
监控过程中会涉及到各种宏,在资源文件中定义宏。
nagios宏 介绍 可以在资源文件中定义256个宏,这些宏可以在Host中调用Host里面的属性。一方面可以在资源文件中手工定义,另一方面Host、Service、Contact这些对象,nagios会默认的生成对应的宏。
举例:
1 2 3 4 5 6 7 8 9 10 11 vi /etc/nagios/objects/localhost.cfg define host { use linux-server host_name localhost alias localhost address 127.0.0.1 }
这里用host_name主机名来区分,人为定义的用来区分这台主机是用来干什么用的。
alias是别名、描述名,可以写一段描述,更加清晰的描述这台主机是干什么用的
address是主机IP地址。
nagios系统会针对不同类型的对象(Host、Service、Contact)不同的属性会自动生成对应的宏。
1 2 3 4 5 $HOSTHOST_NAME$ $HOSTALIAS$ $HOSTADDRESS$
如果你觉得系统自带的定义host对象的属性字段不够用,可以自定义属性字段
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 define host { use linux-server host_name localhost alias localhost address 127.0.0.1 _MAC 00:11:22:33:44:55 } $_HOSTMAC$ __MAC $_HOST_MAC$
举例使用宏 1 2 3 4 5 6 7 8 9 10 11 12 define host{ host_name somemachine address 10.0.0.1 check_command check-host-alive } define command { command_name check-host-ssh command_line $USER1$/check_ssh -H $HOSTADDRESS$ } /opt/nagios/plugins/check_ssh -H 10.0.0.1
常用内建的宏(全局变量)
读取其他对象的宏 宏不但对象自身能读取相应的宏,还能引用其他对象的宏。
资源文件权限 1 chmod 600 /etc/nagios/resource.cfg
HOST 定义一个host对象
怎么描述被监视对象
短名 short name
描述名 descriptive name
地址 / 主机名
何时以及如何监视
故障时联系人
检查频率 / 重试次数
如何发出告警
……
定义主机范例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 cd /etc/nagios/hosts vi linuxserver.cfg define host{ host_name linuxbox01 hostgroups linuxservers alias Linux Server address 10.0.2.15 check_command check-host-alive check_interval 5 retry_interval 1 max_check_attempts 3 check_period 24x7 contact_groups linux-admins notification_interval 10 notification_period 24x7 notification_options d,u,r parents SW01 }
一般情况下不会定义这么多的内容,通常会将这些写在模板上。
Host Group 每个host可以同时属于多个group,把多个具有一定相似性的主机加入同一个组里面,进行统一的管理、监控,可以提高效率。
1 2 3 4 5 6 7 8 9 10 cd /etc/nagios/hostgroupvi linuxserversgroup.cfg define hostgroup{ hostgroup_name linux-servers alias Linux servers members server01,server02 hostgroup_members group01,group02 }
Service 监控一台主机是否存活并不是我们最关心的事,从业务角度讲我们更关心系统服务、资源占用、业务是否正常。操作系统本身不会出太大问题
NFS、FTP服务、存储空间、CPU负载
Service永远绑定于一个运行状态的HOST
每个一个HOST至少要定义一个Service
通过唯一的描述名标识
定义何时、如何进行检查
定义告警方式
文件放在/etc/nagios/serivces/目录下,一般命名:<host>-<service>.cfg
定义Service范例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 cd /etc/nagios/servicesvi services.cfg define service{ host_name localhost.srv1 service_description www check_command check_http check_interval 10 check_period 24x7 retry_interval 1 max_check_attempts 3 notification_interval 30 notification_period 24x7 notification_options w,c,u,r contact_groups web_admins }
notification_options
w:Warning
u:unknown
c:Critical
r:recovery(ok)
f:starts / stops flapping 一下好一下坏
s:scheduled downtime starts / ends
排除检查主机 1 2 3 4 5 6 define service{ hostgroup_name linux-servers host_name !srv01,srv02 service_description SSH …… }
Service group Service Group成员是多个 <host>, <service>对
1 2 3 4 5 6 7 define servicegroup{ servicegroup_name databaseservices alias All services related to database members srv01,mysql,srv01,pgsql,aix01,db2 }
另一定义组的方式
1 2 3 4 5 6 7 8 9 10 11 12 define servicegroup{ servicegroup_name databaseservices alias All services related to database } define service{ host_name linuxbox01 service_description mysql check_command check_ssh servicegroups databaseservices }
主机、主机组、服务、服务组在使用过程中互相调用的过程:
先定义主机H01、H02、H03、H04、H05、H06、H07、H08,按照不同的归类属性给主机分组,当要对这些主机、主机组来进行服务的监控时,一般都会创建服务,把主机组绑定到服务里,根据你进一步管理的需求,可以给服务进行分组。
Command
如何检查Host / Service
如何问题告警 / 事务处理
有两个参数:名称、命令行
命令执行插件或自定义命令
命令行会使用宏、参数等
定义command 无参数的
1 2 3 4 5 6 7 8 9 10 11 define command { command_name check-host-alive command_line $USER1$/chcek_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5 } define host{ host_name somemachine address 10.0.0.1 check_command check-host-alive }
带参数定义command
1 2 3 4 5 6 7 8 9 10 11 define command { command_name check-host-alive command_line $USER1$/chcek_ping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p 5 } define host{ host_name somemachine address 10.0.0.1 check_command check-host-alive-limits!3000.0%,80%!5000.0,100% }
针对不同主机设置不同的参数
Time period 定义时间区段 执行检查、告警的时间区段
1 2 3 4 5 6 7 8 9 10 define timeperiod{ timeperiod_name workinghours alias Working Hours,from Monday to Friday monday 09:00-17:00 tuesday 09:00-17:00 wednesday 09:00-17:00 thursday 09:00-17:00 friday 09:00-17:00 exclude first-mondays }
日期格式优先级 按照时间颗粒度排序,优先级从高到低:
1 2 3 4 5 YYYY-MM-DD July 4 day 14 Monday 1 April Monday
1 2 3 4 5 6 define timeperiod{ timeperiod_name weekends alias Weekends all day long saturday 00:00-24:00 sunday 00:00-24:00 }
定义联系人 1 2 3 4 5 6 7 8 9 10 11 12 define contact{ contact_name zs alias zhang san email zs@lab.com contactgroups admins,nagiosadmin host_notification_period workinghours service_notification_period workinghours host_notification_options d,u,r service_notification_options w,u,c,r host_notification_commands notify-host-by-email service_notification_commands notify-service-by-email }
告警状态 host_notification_options:
d : DOWN
u : UNREACHABLE
r : Recovery (UP)
f : starts / stops Flapping
s : Scheduled downtime starts / ends
n : Not receive any notifications 不接收任何的告警
service_notification_commands:
w : WARNING
u : UNKNOWN
c : CRITICAL
r : Recovery (OK)
f : the service starts and stops flapping
n : the person will not receive any service notifications
指定时间联系指定人群,硬件问题联系硬件管理员,服务问题联系系统管理员
1 2 3 4 5 6 define contactgroup{ contactgroup_name linux-admins alias Linux Administrators members jdoe,smith contactgroup_members }
验证配置文件
重启服务、系统前验证配置,避免nagios服务宕机
1 /opt/nagios/bin/nagios -v /etc/nagios/nagios.cfg
模板和继承
定义新对象时可重用模板定义的参数,简化管理
不加register的模板对象将被视为普通对象进行监控
通过use指令调用模板定义对象
定义对象时可使用多个模板。按模板先后顺序确定优先级
模板可层级继承调用,定义新的模板,模板里面定义模板
定义模板 1 2 3 4 5 6 7 8 9 10 11 12 define host{ name generic-server check_command check-host-alive check_interval 5 retry_interval 1 max_check_attempts 5 check_period 24x7 notification_interval 30 notification_period 24x7 notification_options d,u,r register 0 }
继承 1 2 3 4 5 6 7 define host{ use generic-server host_name linuxbox01 alias Linux Server 01 address 10.0.1.2 contact_groups linux-admins }
nagios的web界面
查看性能、故障、状态、历史信息
支持修改部分设置
显示状态、报告、系统
Nagios Exchange(社区站点)
安装Nagiosgraph Nagiosgraph性能图示 介绍
基于RRDtool实现历史数据的图形化显示,曲线图表的形式展示。
由perl语言编写
下载安装 安装依赖包 1 sudo apt install -y libcgi-pm-perl librrds-perl libgd-gd2-perl rrdtool perl libgd-perl
下载源码安装 1 2 3 4 5 6 7 8 9 curl -sSL https://sourceforge.net/projects/nagiosgraph/files/latest/download | tar xzv cd nagiosgraph-1.5.2/perl install.pl Modify the Nagios configuration? [n] y Modify the Apache configuration? [n] y Path of Apache configuration directory? /etc/apache2/sites-enabled
修改站点配置文件 1 2 3 4 5 vi /etc/apache2/sites-enabled/nagiosgraph.conf 替换: Allow from all --> Require all granted 删除: order allow,deny
重启服务:
1 2 systemctl restart apache2.service systecmtl restart nagios.service
访问测试 http://192.168.1.104/nagiosgraph/cgi-bin/show.cgi
集成nagiosgraph 将nagios图表集中到nagios主web页面
1 2 3 4 5 6 7 8 9 10 11 vi /etc/nagios/objects/templates.cfg define service { name local-service use generic-service max_check_attempts 4 check_interval 5 retry_interval 1 action_url /nagiosgraph/cgi-bin/show.cgi?host=$HOSTNAME$&service=$SERVICEDESC$&geom=1000x200 register 0 }
重启服务
1 2 systemctl restart apache2 systemctl restart nagios.service
MRTG监控nagios的运行状态 安装配置 1 2 3 4 5 6 7 8 9 apt install mrtg cp ~/nagios-4.4.5/sample-config/mrtg.cfg /etc/nagios/ mkdir /opt/nagios/share/stats vi /etc/nagios/mrtg.cfg WorkDir: /opt/nagios/share/stats
起始运行 1 env LANG=C mrtg /etc/nagios/mrtg.cfg
创建页面文件 1 indexmaker /etc/nagios/mrtg.cfg --output=/opt/nagios/share/stats/index.html
周期运行 1 2 3 4 vi /etc/cron.d/nagiostats */5 * * * * root env LANG=C /usr/bin/mrtg /etc/nagios/mrtg.cfg
访问测试 http://192.168.1.104/nagios/stats/
起始页更改为Service 1 2 3 4 vi /opt/nagios/share/index.php $url ="cgi-bin/status.cgi?host=all&limit=0" ;
菜单 1 2 3 4 5 6 7 8 9 10 11 12 13 vi /opt/nagios/share/side.php <div class="navsection" > <div class="navsectiontitle" >External Tools</div> <div class="navsectionlinks" > <ul class="navsectionlinks" > <li><a href="/nagios/stats" target="<?php echo $link_target ;?>" >Nagiostats</a> </li> <li><a href="/nagiosgraph/cgi-bin/show.cgi" target="<?php echo $link_target ;?>" >Nagiosgraph</a> </li> </ul> </div> </div>
SSH实现远程监控 介绍
监视远程主机的CPU、内存、存储等
利用SSH在远程主机上执行插件并返回结果以及退出代码
SSH是基于秘钥的身份认证
check_by_ssh插件建立SSH连接,指定主机名和具体执行的命令
Nagios client安装配置 1 2 3 4 5 6 7 8 9 10 11 apt -y install gcc make binutils cpp wget https://nagios-plugins.org/download/nagios-plugins-2.3.1.tar.gz cd ../nagios-plugins-2.3.1/sh configure --prefix=/opt/nagios --sysconfdir=/etc/nagios --localstatedir=/var/nagios --libexecdir=/opt/nagios/plugins make all make install
Nagios Server生成密钥对 1 2 su -s /bin/bash nagios ssh-keygen
Nagios client创建账号 1 2 3 4 useradd -d /opt/nagios nagios chown nagios:nagios /opt/nagioschmod 0700 /opt/nagiospasswd nagios
Nagios Server拷贝密钥 1 2 3 ssh-copy-id nagios@192.168.1.105 ssh -v nagios@192.168.1.105
测试 1 2 3 4 /opt/nagios/plugins/check_by_ssh -H 192.168.1.105 -C "/opt/nagios/plugins/check_uptime" opt/nagios/plugins/check_by_ssh -H 192.168.1.105 -C "/opt/nagios/plugins/check_disk -w 15% -c 60% -p '/'"
nagios配置 将检查的指令写到配置文件中
1 2 3 4 5 6 7 8 9 10 11 12 define command { command_name check_swap_by_ssh command_line $USER1$/check_by_ssh -H $HOSTADDRESS$ -C "$USER1$/check_swap -w $ARG1$ -c $ARG2$" } define service{ use generic-service host_name !localhost hostgroup_name linux-servers service_description SWAP check_command check_swap_by_ssh }
NPRE远程监控 介绍 nagios专用的客户端,安装在被监视的机子上。NRPE只适用于通用系统,在非通用操作系统上工作的硬件上的设备,无法安装NRPE,适用范围比较受限。
客户端 / 服务器架构,通过check_nrpe插件、NRPE daemon
通信支持加密(SSL over TCP)
通信流量小于SSH,节省CPU资源
只允许运行特定命令,不会造成任意指令执行,而SSH会。
默认工作端口在 TCP 5666
NPRE安装 库安装: 1 2 3 sudo apt install nagios-nrpe-server sudo apt install nagios-nrpe-plugin
编译安装 安装依赖包
1 sudo apt install gcc make binutils cpp pkg-config libc6-dev libssl-dev openssl
下载、编译、安装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 wget https://sourceforge.net/projects/nagios/files/npre-2.15/nrpe-2.15.tar.gz tar zxvf nrpe-2.15.tar.gz cd nrpe-2.15.tar.gzsh configure --sysconfdir=/etc/nagios --libexecdir=/opt/nagios/plugins --prefix=/opt/nagios --with-nrpe-group=nagios --with-nrpe-user=nagios --with-nagios-user=nagios --with-nagios-group=nagios --with-ssl-lib=/usr/lib/x86_64-linux-gnu --enable-ssl make all make install-plugin make install-daemon mkdir /etc/nagiosmake install-daemon-config
配置NRPE服务器 1 2 3 4 useradd -d /opt/nagios nagios mkdir /opt/nagioschown nagios:nagios /opt/nagiospasswd -l nagios
启动脚本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 vi /etc/init.d/nrpe is_running () { pgrep -u nagios nrpe >/dev/null } case "$1 " in start) echo -n "Starting NRPE: " if ! is_running ; then /opt/nagios/bin/nrpe -d -c /etc/nagios/nrpe.cfg fi echo "done." ;; stop) echo -n "Stopping NRPE: " if is_running ; then pkill -u nagios nrpe sleep 1 pkill -u nagios -9 nrpe fi echo "done." ;; restart) $0 stop sleep 2 $0 start ;; status) if is_running ; then echo "NRPE is running" exit 0 else echo "NRPE is NOT running" exit 1 fi ;; esac chmod 0755 /etc/init.d/nrpeupdate-rc.d nrpe
NRPE配置文件 1 2 3 4 5 6 7 8 9 vi /etc/nagios/nrpe.cfg allowd_hosts=nagios服务器的ip地址 command [check_disk_sys]=/opt/nagios/plugins/check_disk -w 20% -c 60% -p /systemctl restart nagios-nrpe-server.service
手动测试 1 2 3 4 5 /usr/lib/nagios/plugins/check_nrpe -H 192.168.2.52 -c check_load /opt/nagios/plugins/check_nrpe -H 192.168.2.52 -c check_users
配置nagios使用NRPE例子 1 2 3 4 define command { command_name check_swap_nrpe command_line $USER1$/check_nrpe -H "$HOSTADDRESS$" -c "chceck" }
NRPE工作流程
在nagios server上,通过nagios的后台进程,将配置文件编写好,每隔多长时间就要调用哪个插件做什么样的检查。调用check_nrpe这个插件去和远端的计算机连接,连接NRPE demon后台进程,也就是连接到侦听在被监视服务器的5666端口。这样就有了一个隧道,通过这个隧道,发过来执行什么检查,最终还是使用被监视服务器的Nagios plugin插件进行检查。检查的结果通过NRPE的隧道返回给check_nrpe,然后返回给nagios进程。
SNMP实现远程监控 SNMP(Simple Network Management Protocol)
介绍
工业标准,原则上所有设备厂商都支持
适合非通用操作系统的硬件设备(无法安装插件、nrpe)
统一的方法获取和设置设备参数
标准的层次化信息分组访问方式,称为管理信息库
Management Information Base(MIB)
MIB定义可访问的属性,即标准OID对应关系
厂商可自定义OID(不兼容)
OID(Object identifier)
协议端口:UDP 161 / 162
SNMP基本信息
被监视端运行agent进程侦听端口,监视端称为SNMP manager
get / set是从manager向agent的通信过程
trap是agent主动向manager通告信息的通信过程
版本:v1、v2、v2c、v2u、v3
v1是基于IP / community(public / private)的安全机制
v2、v2c增加了getbulk(获取节点下的所有数据)、inform(trap——请求manager确认ACK)
v2u是基于用户的身份验证安全机制(但不包含v1、v2c其他安全机制,很少用)
v3改进的安全模型、认证、隐私、访问控制
检查设备支持SNMP什么版本(proxy用于多版本之间的协调转换)
安装Net-SNMP工具包、MIB文件库(manager) 1 sudo apt install snmp snmp-mibs-downloader
安装SNMP Agent 1 2 3 4 5 sudo apt install snmpd vi /etc/snmp/snmpd.conf
服务端命令 1 2 3 4 5 snmpget -v 2c -c pub1 192.168.2.2 .iso.org.dod.internet.mgmt.mib-2.system.sysName.0 snmpget -v 2c -c pub1 192.168.2.2 .1.3.6.1.2.1.1.5.0 snmpwalk -v 1 -c pub1 192.168.2.2 .1.3.6.1.2.1.1.5.0
监控windows系统 在Windows上安装SNMP Agent
1 snmpwalk -v 2c -c pub2 192.168.2.102
nagios基于snmp监控 利用nagios插件check_snmp
1 2 3 4 5 6 7 8 9 10 11 /opt/nagios/plugins/check_snmp -H 192.168.2.102 -P 2c -C pub2 -o SNMPv2-MIB::sysLocation.0 -s "cwz" /opt/nagios/plugins/check_snmp -H 192.168.2.2 -P 2c -C pub1 -o SNMPv2-MIB::sysContact.0 -r "@" /opt/nagios/plugins/check_snmp -H 192.168.2.102 -P 2c -C pub2 -o HOST-RESOURCES-MIB::hrSystemProcesses.0 -w 0:20 -c 0:30 /opt/nagios/plugins/check_ifoperstatus -H 192.168.2.102 -C pub2 -k 65539 /opt/nagios/plugins/check_ifstatus -H 192.168.2.102 -v 2c -C pub2 -u 65539 route print
nagios利用snmp查看结果 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 define command { command_name check_snmp command_line $USER1$/check_snmp -P 1 -H $HOSTADDRESS$ -o $ARG1$ $ARG2$ } define service { use generic-service hostfroup_name snmp-aware service_description Processes check_command check_snmp!HOST-RESOURCES-MIB::hrSystemProcesses.0!-w 0:50 -c 0:100 } define host { use generic-host host_name linuxbox01 address 10.0.0.1 _SNMPVERSION 2c _SNMPCOMMUNITY public } define command { command_name check_snmp command_line $USER1$/check_snmp -H $HOSTADDRESS$ -o $ARF1$ -P $_HOSTSNMPVERSION$ -C $_HOSTSNMPCOMMUNITY$ $ARG2$ }
Zabbix监控 Zabbix介绍 Zabbix是最流行的开源的企业级的监控系统之一
能监控网络设备、操作系统、应用程序等。
支持Unix、Linux、Windows、MacOS平台
两种监控方式:
Agent。在被监视的服务器上安装agent程序,通过这个程序,由Zabbix服务器向安装了Zabbix客户端的机器发送各种控制性的指令。在使用agent的情况下,Zabbix和agent程序互相通信,获取监控的信息。
Agenless。在一些硬件设备不能安装应用程序,无法安装agent,可以使用agenless。
安装Zabbix服务器 IP地址:192.168.0.106
修改主机名:zab.lab.com
增加host解析
Zabbix基于图形化管理的web页面就是基于web的应用程序,所以要安装Apache、数据库、php,基于这个web环境,再去安装Zabbix的服务端的web程序。
安装Apache
1 2 3 4 5 6 7 8 9 10 11 12 13 sudo apt install apache2 sudo vim /etc/apache2/conf-enabled/security.conf ServerTokens Prod sudo vi /etc/apache2/apache2.conf ServerName zab.lab.com sudo vi /etc/apache2/sites-enabled/000-default.conf ServerAdmin webmaster@lab.com sudo systemctl restart apache2
安装php
1 2 3 4 5 6 7 8 9 10 11 12 sudo apt install php php-cgi libapache2-mod-php php-common php-pear php-mbstring sudo a2enconf php7.2-cgi sudo systemctl reload apache2 sudo vi /etc/php/7.2/apache2/php.ini date.timezone = "Asia/Shanghai" sudo vi /var/www/html/index.php <html><body><?php print "PHP Test" , ?></body></html>
安装数据库
1 2 sudo apt install mariadb-server mysql_secure_installation
给Zabbix创建数据库
1 2 3 4 5 6 7 CREATE DATABASE zabbix CHARACTER SET utf8 collate utf8_bin;grant all privileges on zabbix.* to zabbix@'localhost' identified by 'password' ;grant all privileges on zabbix.* to zabbix@'%' identified by 'password' ;flush privileges;
安装Zabbix
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 wget https://repo.zabbix.com/zabbix/4.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_4.0-3+bionic_all.deb sudo dpkg -i zabbix-release_4.0-3+bionic_all.deb sudo apt update sudo apt install zabbix-server-mysql zabbix-frontend-php zabbix-agent zcat /usr/share/doc/zabbix-server-mysql/create.sql.gz | mysql -uzabbix -p zabbix sudo vi /etc/zabbix/zabbix_server.conf DBPassword=password sudo systemctl restart zabbix-server.service
配置agent,让agent程序能找到被监视服务器,通知状态到服务器上去
1 2 3 4 5 6 7 8 9 10 11 sudo vi /etc/zabbix/zabbix_agentd.conf Hostname=zab.lab.com sudo systemctl restart zabbix-agent.service sudo systemctl enable zabbix-server.service sudo vi /etc/apache2/conf-enabled/zabbix.conf Allow from all sudo systemctl restart apache2
初始化:
用浏览器访问:http://zab.lab.com/zabbix/
然后点next
点击next
这样就完成了安装配置,就可以使用了
这样就可以添加被监视的机器了。
安装agent 准备一台被监视服务器,安装agent
IP地址:192.168.0.107
修改主机名:agent1.lab.com
修改host解析
安装:
1 2 3 4 5 6 7 8 9 wget https://repo.zabbix.com/zabbix/4.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_4.0-3+bionic_all.deb sudo dpkg -i zabbix-release_4.0-3+bionic_all.deb sudo apt update sudo apt install zabbix-agent
配置:
1 2 3 4 5 6 7 8 9 sudo vi /etc/zabbix/zabbix_agentd.conf Server=zab.lab.com ServerActive=zab.lab.com Hostname=agent1.lab.com TLSConnect=psk TLSAccept=psk TLSPSKIdentity=PSK 001 TLSPSKFile=/etc/zabbix/zabbix_agent.psk
出于安全考虑,共享密钥要足够的安全,够长、够够复杂。
1 2 openssl rand -hex 32 | sudo tee /etc/zabbix/zabbix_agent.psk
添加客户端 通过web界面来添加客户端
等待一会,agent1的数据就会被收集,展示在web界面上。