监控三剑客<cacti、nagios、zabbix>
在企业网络运维过程中,管理员闭虚随时关注服务器和网络运行情况,以便及时发现问题,尽可能减少故障的发生。当网络中的设备、服务器数量较多时,为了更加方便,快捷的获得各种监控信息,通常会借助一些集中监测软件。
下面为大家介绍一下日常生活中的三种监控软件,俗称:监控三剑客(基于CentOS7安装)
一、cacti
cacti是一款使用PHP语言开的发性能与流量检测软件,检测对象可以是Linux、Windows服务器,也可以是路由交换机等网络设备,主要基于SNMP(simple、Network、Management、Protocol,简单网络管理协议)来搜集CPU占用、内存使用、运行进程、网卡流量等数据
1、服务器配置
构建cacti监控平台时要先进行LAMP架构,这边实验我直接用yum一键安装、在生产环境中最好使用手工编译安装
LAMP手工编译安装可以参考以下博客文章
Apache手工编译安装
https://blog.51cto.com/13645280/2117794
MySQL数据库基础
https://blog.51cto.com/13645280/2132869
构建PHP运行环境
https://blog.51cto.com/13645280/2136415
(1)yum安装LAMP
yum -y install httpd
yum -y install mariadb mariadb-server
yum -y install php php-mysql#编写php首页进行测试机
cd /var/www/html/
vim index.php
<?php
phpinfo();
?>#关闭防火墙、SELinux
systemctl stop firewalld
setenforce 0
网页测试截图
(2)安装工具包,snmp协议,rrdtool
yum -y install zlib freetype libjpeg fontconfig gd libxml2 php-gd
yum -y install net-snmp net-snmp-utils
yum -y install rrdtool rrdtool-devel
(3)安装cacti监控源码包
#用wget下载最新的源码包
wget https://www.cacti.net/downloads/cacti-1.1.38.tar.gz#解压到/var/www/html底下然后用mv重命名为cacti
tar zxvf cacti-1.1.38.tar.gz -C /var/www/html/
mv /var/www/html/cacti-1.1.38/ /var/www/html/cacti#创建cacti管理用户
useradd -M -s /sbin/nologin cacti#修改cacti属主和数组
chown -R cacti.cacti /var/www/html/cacti/#修改cacti底下include底下config.php文件
$database_type = "mysql";
$database_default = "cacti"; #修改数据库名称
$database_hostname = "localhost";
$database_username = "cacti"; #修改授权用户
$database_password = "asd123"; #修改授权密码
$database_port = "3306";
$database_ssl = false;
(3)创建数据库斌授予权限
#首先开启数据库并数据库设置密码
systemctl start mariadb.service
mysqladmin -uroot password abc123#进入数据库船舰cacti数据库并授予权限
mysql -u root -p#创建名为cacti的数据库并设定字符集utf-8
create database cacti default character set utf8;#授予cacti用户权限登陆密码为asd123
grant all on cacti.* to cacti@localhost identified by 'asd123';
quit#把cacti目录底下的cacti.sql导入到cacti数据库里面(这边使用的用户时cacti用户授予的密码时asd123)
mysql -u cacti -p cacti < cacti.sql
(3)修改snmp协议的配置文件
在本机模拟linux cacti被控端
vim /etc/snmp/snmpd.conf41行:com2sec notConfigUser 192.168.179.151 public62行:access notConfigGroup "" any noauth exact all none none85行:view all included .1 80 #去掉前面的#号#开启snmp协议
systemctl start snmpd.service
(4)进入安装页面http://192.168.1789.151/cacti
进入下面页面后,要解决PHP一些拓展应用
1、解决PHP拓展模块
1:安装ldap
yum install php-ldap
打开php.ini配置文件找到ldap那个区域模块添加
extension=ldap.so2:安装mbstring拓展模块
yum install php-mbstring
打开php.ini配置在配置文件最后一行添加
extension=mbstring.so3:安装posix模块
yum -y install php-process
查看验证是否安装成功
php -m|grep posix
posix
显示红色字体posix就表示安装成功
2、解决数据库时间问题
#进入数据库授权
GRANT SELECT ON mysql.time_zone_name TO cacti@localhost IDENTIFIED BY 'cactiwhsir';
#再把以下命令重新授权一下
grant all on cacti.* to cacti@localhost identified by 'asd123';
#刷新
flush privileges;#又会出现下面报错
ERROR: Your MySQL TimeZone database is not populated. Please populate this database before proceeding.
#解决办法
mysql_tzinfo_to_sql /usr/share/zoneinfo/Asia/Shanghai Shanghai | mysql -u root -p mysql#重启数据库
systemctl restart mariadb.service
3、我们再看问题都解决了还是不能安装因为还有一个cacti报错看下图:
报错的意思是:错误:您的Web服务器没有设置PHP时区设置。请编辑PHP。然后取消对日期的评论。在安装Cacti之前,根据PHP安装说明将其设置为Web服务器时区。
解决方法:
#打开php.ini配置文件找到date.timezone原本是注释状态需要去掉前面的;分号然后在=等于后面空格加上Asia/Shanghai
date.timezone = Asia/Shanghai
重启HTTP服务
点击next下一步安装好后进入以下页面:
默认账号密码admin,登陆进去后会提示当前密码不安全重新设置密码,密码要求符合复杂性要求:大写字母加数字加特殊符号一般我用的符合复杂性密码是ABcd123!
下面是进入了监控页面,监控那台主机需要自行添加
添加被控端
console->Create devices ->Add->前两项输入服务端IP、模板选择ucd/net SNMP Host->Create->Save生成监控图像
console->Create graphs ->勾选需监控的对象(CPU、内存、网卡等)->Create
Graph Trees->Default Tree->Add->Type选择Host->Create->Save执行采集数据
/usr/bin/php /var/www/html/cacti/poller.php
计划性任务
echo '*/5 * * * * /usr/bin/php /var/www/html/cacti/poller.php > /dev/null' >> /var/spool/cron/rootgraphs->Default Tree->查看监测结果图像
二、nagios
Nagios是一款开源的计算机系统和网络监视工具,能有效地监控Windows,Linux和UNIX的主机服务状态,在系统服务发生异常时会发出电子邮件和短信通知报警第一时间通知网站维护人员
Nagios可识别的四种监控状态返回信息:
0(ok)表示状态正常/绿色
1(WARNING)表示出现警告/×××
2(CRITICAL)表示出先严重的错误/红色
3(UNKNOWN)表示位置错误/深×××
Nagios通过插件的返回值,来判断监控对象的状态,并通过Web显示出来
Nagios通过nrpe插件来远程管理服务
- Nagios执行安装在它里面的check_nrpe插件,并告诉check_nrpe来检测那些服务
- 通过SSH,check_nrpe连接远端机器上的NRPE daemon
- NRPE运行本地各种插件检测本地服务器状态(check_disk,...etc)
- NRPE把检测结果传给主机端的check_nrpe,check_nrpe再把结果送到Nagios状态队列中
- Nagios依次读取队列中的信息。再把结果显示出来
案例实施
实验环境:linux:192.168.179.151(监控主机)linux:192.168.179.134(被监控机)
1:安装工具开发包
yum install -y gcc glibc glibc-common gd gd-devel xinetd openssl-devel
2:创建nagios用户和组
useradd -s /sbin/nologin nagiosmkdir /usr/local/nagios
chown -R nagios.nagios /usr/local/nagios
3:同不系统时间(两台都执行)
ntpdate pool.ntp.org
27 Aug 11:30:44 ntpdate[2084]: adjust time server 85.199.214.100 offset 0.002483 sec
4:编译安装Nagios
tar zxvf nagios-4.0.1.tar.gz -C /opt/
./configure --prefix=/usr/local/nagiosmake all
make install
make install-init
make install-commandmodechkconfig --add /etc/rc.d/init.d/nagios
chkconfig --level 35 nagios on[root@bogon nagios-4.0.1] chkconfig --list nagios注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。 要列出 systemd 服务,请执行 'systemctl list-unit-files'。查看在具体 target 启用的服务请执行'systemctl list-dependencies [target]'。nagios 0:关 1:关 2:关 3:开 4:关 5:开 6:关
5:检查 /usr/local/nagios 是否存在etc、bin、sbin、share、var 这五个目录
[root@bogon nagios-4.0.1] cd /usr/local/nagios/
[root@bogon nagios] ls
bin etc libexec sbin share var
6:编译安装 nagios-plugins
tar zxvf /abc/nagios-plugins-1.5.tar.gz -C /opt/
cd /opt/nagios-plugins-1.5
./configure --prefix=/usr/local/nagios
make && make install
7:yum安装LAMP架构
yum -y install httpd
yum -y install mariadb mariadb-server
yum -y install php php-mysql
8:修改httpd.conf配置文件
找到:
User apache
Group apache
修改为
User nagios
Group nagios
然后找到
<IfModule dir_module> DirectoryIndex index.html
</IfModule>
修改为
<IfModule dir_module> DirectoryIndex index.html index.php
</IfModule> 接着增加如下内容:
AddType application/x-httpd-php .php
为了安全起见,一般情况下要让nagios 的web 监控页面必须经过授权才能访问,
这需要增加验证配置,即在httpd.conf 文件最后添加如下信息:
#setting for nagios
ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"
<Directory "/usr/local/nagios/sbin"> AuthType Basic Options ExecCGI AllowOverride None Order allow,deny Allow from all AuthName "Nagios Access" AuthUserFile /usr/local/nagios/etc/htpasswd Require valid-user
</Directory>
Alias /nagios "/usr/local/nagios/share"
<Directory "/usr/local/nagios/share"> AuthType Basic Options None AllowOverride None Order allow,deny Allow from all AuthName "nagios Access" AuthUserFile /usr/local/nagios/etc/htpasswd Require valid-user
</Directory>
9:设置网页访问密码
[root@bogon nagios-plugins-1.5]# htpasswd -c /usr/local/nagios/etc/htpasswd jack
New password: 321321
Re-type new password: 321321
Adding password for user jack[root@bogon nagios-plugins-1.5]# cat /usr/local/nagios/etc/htpasswd
jack:$apr1$G40eVtso$JGHxlhg0dolYoeGWZ4pkA0
10:配置nagios一般在目录/usr/local/nagios/etc/下
[root@bogon ~] cd /usr/local/nagios/etc/
[root@bogon etc] ls
cgi.cfg htpasswd nagios.cfg objects resource.cfg
[root@bogon etc] cd objects/
[root@bogon objects] ls
commands.cfg localhost.cfg switch.cfg timeperiods.cfg
contacts.cfg printer.cfg templates.cfg windows.cfg
1.templates.cfi nagios
主要用于监控主机资源以及服务,在nagios配置中称为对象,
为了不必重复定义一些监控对象,Nagios引入了一个模板配置文件,
将一些共性的属性定义成模板,以便于多次引用。
contact_groups 联系组属性改成 ts 将在后面的contacts.cfg文件中定义
contact_groups ts 注:所有contact_group的admins都要改成ts
- hosts.cfg文件
此文件默认不存在,需要手动创建,hosts.cfg主要用来指定被监控的主机地址以及相关属性信息(不能有任何空格)
define host{ use linux-server#引用主机linux-server的属性信息,linux-server主机在templates.cfg文件中进行了定义。host_name Nagios-Linux#主机名alias Nagios-Linux#主机别名address 192.168.179.134#被监控的主机地址,这个地址可以是ip,也可以是域名。}
#定义一个主机组
define hostgroup{ hostgroup_name bsmart-servers#主机组名称,可以随意指定。alias bsmart servers#主机组别名members Nagios-Linux#主机组成员,其中“Nagios-Linux”就是上面定义的主机。 }
3.services.cfg文件 此文件默认也不存在,需要手动创建主要用于定义监控的服务和主机资源define service{ use local-service#引用local-service服务的属性值,local-service在templates.cfg文件中进行了定义。host_name Nagios-Linux#指定要监控哪个主机上的服务,“Nagios-Server”在hosts.cfg文件中进行了定义。service_description check-host-alive#对监控服务内容的描述,以供维护人员参考。check_command check-host-alive#指定检查的命令。}
4.contacts.cfg文件 contacts.cfg是一个定义联系人和联系人组的配置文件(不能有空格)define contact{contact_name jack#联系人的名称,这个地方不要有空格use generic-contact#引用generic-contact的属性信息,其中“generic-contact”在templates.cfg文件中进行定义alias Nagios Adminemail 13951868284@139.com}
define contactgroup{contactgroup_name ts#联系人组的名称,同样不能空格alias Technical Support#联系人组描述members jack#联系人组成员,其中“jack”就是上面定义的联系人,如果有多个联系人则以逗号相隔}
5.cgi.cfg文件 此文件用来控制相关cgi脚本
由于nagios的web监控界面验证用户为jack,所以只需在cgi.cfg文件中添加此用户的执行权限
在最后加入
default_user_name=jack
authorized_for_system_information=nagiosadmin,jack
authorized_for_configuration_information=nagiosadmin,jack
authorized_for_system_commands=jack
authorized_for_all_services=nagiosadmin,jack
authorized_for_all_hosts=nagiosadmin,jack
authorized_for_all_service_commands=nagiosadmin,jack
authorized_for_all_host_commands=nagiosadmin,jack
6.nagios.cfg文件
将对象配置文件在Nagios.cfg文件中进行引用cfg_file=/usr/local/nagios/etc/objects/hosts.cfg
cfg_file=/usr/local/nagios/etc/objects/services.cfgcommand_check_interval=10s 该变量用于设置nagios对外部命令检测的时间间隔
7.用/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg 验证配置文件
Nagios Core 4.0.1
Copyright (c) 2009-present Nagios Core Development Team and Community Contributors
Copyright (c) 1999-2009 Ethan Galstad
Last Modified: 10-15-2013
License: GPLWebsite: http://www.nagios.org
Reading configuration data...Read main config file okay...Read object config files okay...Running pre-flight check on configuration data...Checking objects...Checked 9 services.Checked 2 hosts.Checked 2 host groups.Checked 0 service groups.Checked 1 contacts.Checked 1 contact groups.Checked 24 commands.Checked 5 time periods.Checked 0 host escalations.Checked 0 service escalations.
Checking for circular paths...Checked 2 hostsChecked 0 service dependenciesChecked 0 host dependenciesChecked 5 timeperiods
Checking global event handlers...
Checking obsessive compulsive processor commands...
Checking misc settings...Total Warnings: 0
Total Errors: 0Things look okay - No serious problems were detected during the pre-flight check
启动nagios
[root@localhost ~]# cd /usr/local/nagios/
[root@localhost nagios]# ls
bin etc libexec sbin share var
[root@localhost nagios]# cd bin/
[root@localhost bin]# ls
nagios nagiostats
[root@localhost bin]# ./nagios -d ../etc/nagios.cfg
重启httpd服务
验证:
http://192.168.179.151/nagios/
登陆页面:
下面是监控本机与192.168.179.134的监控页面
三、zabbix
Zabblx是一个高度集成的企业级开源网络监控解决方案,与Cacti、Nagios提供分布式监控以以及集中的Web管理界面。Zabbix具备常见商业监控软件所具备的功能,例如主机性能监控、网络设备性能监控、数据库性能监控、ftp等通用协议的监控,能够利用灵活的可定制警告机制、允许用户对事件发送基于E-mail 的警告, 保证相关维护人员对问题做出快速解决;还能够利用存储数据提供杰出的报表及实时的图形化效据处理,实现对Linux、Windows 主机的7x24小时集中监控。
Zabbix具备常见商业监控软件所具备的功能:
- 主机性能监控
- 网络设备性能监控
- 数据库性能监控
- ftp等通用协议监控
安装配置Zabbix
Zabbix官方首页:https://www.zabbix.com/
1-安装LAMP架构
yum install -y \
httpd \
mariadb-server mariadb \
php \
php-mysql \
php-gd \
libjpeg* \
php-ldap \
php-odbc \
php-pear \
php-xml \
php-xmlrpc \
php-mhash
设置httpd配置文件域名和支持添加php首页存放点,设置php.ini设置时区
vim /etc/httpd/conf/httpd.conf
ServerName www.benet.com
DirectoryIndex index.html index.phpvi /etc/php.ini
date.timezone = PRC //设置中国时区
关闭防火墙和SElinux
systemctl stop firewalld.service
setenforce 0
启动httpd、mariadb,设置数据库密码,添加php首页验证php主页面
systemctl start httpd.service
systemctl start mariadb.servicemysql_secure_installation vi /var/www/html/index.php
<?php
phpinfo();
?>
2-进入数据库创建zabbix数据库,授予zabbix用户操作权限
mysql -u root -pCREATE DATABASE zabbix character set utf8 collate utf8_bin;
GRANT all privileges ON *.* TO 'zabbix'@'%' IDENTIFIED BY 'admin123';
flush privileges;
编辑index.php测试能否连接数据库,连接成功页面显示Success!!连接失败显示Fail!!
vim /var/www/html/index.php
<?php
$link=mysql_connect('192.168.179.151','zabbix','admin123');
if($link) echo "<h1>Success!!</h1>";
else echo "Fail!!";
mysql_close();
?>
3-部署Zabbix-Sever
yum install php-bcmath php-mbstring -yrpm -ivh http://repo.zabbix.com/zabbix/3.5/rhel/7/x86_64/zabbix-release-3.5-1.el7.noarch.rpm //会自动生成yum源文件,保证系统可以上网yum install zabbix-server-mysql zabbix-web-mysql -yzcat /usr/share/doc/zabbix-server-mysql-4.0.0/create.sql.gz | mysql -uzabbix -p zabbix //生成数据库文件,注意密码不要输成root的#//生成数据库文件,注意密码不要输成root的
[root@bogon ~]# zcat /usr/share/doc/zabbix-server-mysql-4.0.0/create.sql.gz | mysql -uzabbix -p zabbix
Enter password: admin123(授权的zabbix密码)
查看/etc/zabbix底下zabbix_server.conf 文件(grep过滤查看)
38:LogFile=/var/log/zabbix/zabbix_server.log
49:LogFileSize=0
72:PidFile=/var/run/zabbix/zabbix_server.pid
82:SocketDir=/var/run/zabbix
101:DBName=zabbix
117:DBUser=zabbix
125:DBPassword=admin123 //修改本行 (配置文件里面没有此行需要手动添加)
347:SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
465:Timeout=4
507:AlertScriptsPath=/usr/lib/zabbix/alertscripts
517:ExternalScripts=/usr/lib/zabbix/externalscripts
553:LogSlowQueries=3000
修改zabbix.conf配置文件里面的时区
vi /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/Shanghai
修正图表中的乱码
vi /usr/share/zabbix/include/defines.inc.php //修正图表中文乱码:%s /graphfont/kaiti/g //从微软系统下复制相应的字体文件到 /usr/share/zabbix/fonts 目录中注意字体名称要对应配置文件,且注意大小写cp STKAITI.TTF /usr/share/zabbix/fonts/
#STKAITI.TTF 如果需要可留言,也可以在网上查找
启动zabbix-server
systemctl enable zabbix-server
systemctl start zabbix-server
netstat -anpt | grep zabbix //监听在10051端口上
重启httpd服务登陆zabbix页面
systemctl restart httpd.servicehttp://192.168.175.155/zabbix/ //安装后登录 用户名Admin 密码:zabbix设置中文环境Administrator-Users-点击用户-语言中设置
下面是监控页面,不过没有添加被监控端
添加被监控端
1-被监控端安装zabbix-agent
rpm -ivh http://repo.zabbix.com/zabbix/3.5/rhel/7/x86_64/zabbix-release-3.5-1.el7.noarch.rpmyum install -y zabbix-agent
2-查看/etc/zabbix/zabbix_agentd.conf配置文件
grep -n '^'[a-Z] /etc/zabbix/zabbix_agentd.conf13:PidFile=/var/run/zabbix/zabbix_agentd.pid
32:LogFile=/var/log/zabbix/zabbix_agentd.log
43:LogFileSize=0
98:Server=192.168.175.155
139:ServerActive=192.168.175.155
150:Hostname=test
268:Include=/etc/zabbix/zabbix_agentd.d/*.conf
被监控端关闭防火墙SElinux,开启zabbix-agent
service firewalld stop
setenforce 0
systemctl enable zabbix-agent.service
systemctl restart zabbix-agent.service#被监控端端口为10050
[root@bogon ~] netstat -anpt | grep zabbix
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 2850/zabbix_agentd
增加被控主机在WEB平台上做
配置-主机-创建主机:主机页面根据需求配置
模板页需要链接模板,根据需要链接相应的模板
0K
监控页面切换中文设置
添加被监控主机
进入到下面添加页面:(红色※代表必填)
添加完后刷新页面,过一会就会报错