安装基础组件
yum -y install epel-release screen wget net-tools mariadb-server mariadb
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install net-snmp net-snmp-utils
wget --no-check-certificate https://mirrors.aliyun.com/remi/enterprise/remi-release-7.rpm -O remi-release-7.rpm && rpm -ivh remi-release-7.rpm
yum install yum-utils
yum-config-manager --enable remi-php73
yum -y install php php-{cli,common,dba,devel,embedded,fpm,gd,imap,interbase,intl,mbstring,mysqlnd,pdo,opcache,pear,phpdbg,recode,snmp,soap,xml,xmlrpc,bcmath,ldap,pecl-memcached} curl curl-devel
安装zabbix
rpm -Uvh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent
Mysql操作
systemctl enable mariadb
systemctl start mariadb
mysql_secure_installation进行Mysql初始化安装
CREATE USER 'zabbix'@'host' IDENTIFIED BY 'P@ssw0rd';
create database zabbix character set utf8 collate utf8_bin;
grant all privileges on zabbix.* to zabbix@localhost identified by 'P@ssw0rd';
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
修改配置文件
vi /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=<password>
修改PHP.ini参数
php_value max_execution_time 300
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 2M
php_value max_input_time 300
php_value max_input_vars 10000
php_value always_populate_raw_post_data -1
php_value date.timezone Asia/Shanghai
启动httpd及php-fpm进程
systemctl enable httpd
systemctl start httpd
systemctl enable php-fpm
systemctl start php-fpm
注:任何对于httpd.conf及php.ini文件的修改,改完后都需要重启httpd及php-fpm进程使配置生效
SELinux设置
yum -y install setroubleshoot setroubleshoot-server
setsebool -P httpd_can_connect_zabbix on
setsebool -P httpd_can_network_connect_db on
ausearch -c 'zabbix_server' --raw | audit2allow -M my-zabbixserver
semodule -i my-zabbixserver.pp
SELinux的排错
必装组件:
yum -y install setroubleshoot setroubleshoot-server setools-console
webfront安装
完成上述操作后,防火墙开启对应协议并启动对应程序
firewall-cmd --add-service={http,https} --permanent
firewall-cmd --reload
开启对应的程序:
systemctl enable zabbix-server
systemctl enable zabbix-agent
systemctl start zabbix-server
systemctl start zabbix-agent
访问http://yourserverip/zabbix填入相关参数即可开始安装
注:/var/lib/php/session
注意权限为root apache drwxrwx---
,否则安装webfront会失败
模板配置
对于不在官方支持范围内的设备,需要自己添加模板进行设备的监控,例如H3C的设备,官方默认只有Cisco等超级厂商的模板,如果你使用的是Cisco的产品那么你很幸运;如果非常不幸的你的是H3C等国产设备,那么可以参考以下步骤进行模板添加,目前我所做的模板主要检测CPU&Memory利用率、端口状态及端口实时流量,以H3C ER3200路由器为例,首先在路由器中设置SNMP的参数,默认使用 community 为pubic,版本为V2C
无论是什么厂商,大多数参数基本都遵循共有的MIB标准,比如端口流量、端口类型这些常用的参数,但是也有很多ODI为厂商的私有OID,比如H3C的CPU、内存利用率,每个厂商可能都不一样,具体自行查找官方文档或咨询厂商客服。
以下为本次监控用到的OID,均为公有标准MIB:
说明 | 参数 | OID |
---|---|---|
接口描述 | ifDescr | 1.3.6.1.2.1.2.2.1.2.X |
接口速率 | ifSpeed | 1.3.6.1.2.1.2.2.1.5.X |
接口类型 | ifType | 1.3.6.1.2.1.2.2.1.3.X |
接口接收字节数 | ifInOctets | 1.3.6.1.2.1.2.2.1.10.X |
接口发送字节数 | ifOutOctets | 1.3.6.1.2.1.2.2.1.16.X |
接口管理状态 | ifAdminStatus | 1.3.6.1.2.1.2.2.1.7.X |
接口运行状态 | ifOperStatus | 1.3.6.1.2.1.2.2.1.8.X |
OID中的X代表该OID下面还有值,需要运行对应的OID后才能知道下一个值是什么,例如1.3.6.1.2.1.2.2.1.2
一般情况是创建模板->添加主机->调用模板,但是常规模板只能是一个接口一个接口的添加,我们这个情况不一般,好几十几百台设备,难道要一台主机一台主机的添加模板?那不得累死,所以我们需要创建一个通用模板,让他可以自动发现设备接口,查看接口流量,自动绘图。
模板创建
configuration->Templates->create template创建一个模板,建议不同型号的设备都创建一个模板,如果OID都一样也可以共用一个模板。
自动发现接口
在新建的模板上点到Application,创建一个Application;然后点击Discovery创建一个发现规则,Type选择SNMPv2 Agent,名称就写Interface Discovery
,key填写ifDescr
,SNMP OID填写discovery[{#SNMPVALUE},.iso.org.dod.internet.mgmt.mib-2.interfaces.ifTable.ifEntry.ifDescr]
,
SNMP community根据自己的设置填写,默认是public
; update Interval这个时间不宜设置频繁,我设置为1d,一天发现一次,太过频繁影响设备性能,而且接口板卡也不是一会增加一会减少的。
创建号以后在模板界面就可以看到Discovery标记为1,代表有一个规则,点进去,我们需要在Discovery中去创建items和Graphs以及Triggers,以便所有设备可以调用;
创建项目
点击item prototypes,新建一个item,这里需要监控的有三个,接口出站流量、入栈流量、状态;
监控接口状态
Name填写Interface $1 status
; type还是snmp,key填ifOperStatus[{#SNMPVALUE}]
;SNMP OID填IF-MIB::ifOperStatus.{#SNMPINDEX}
,这里的SNMPINDEX是zabbix的一个内置Macro参数,指可以生成一个索引值不断的去获取数据,因为你的接口不会只有一个,主OID下面都会有一个子值和每一个接口对应,也就是上面表中的X。community还是根据自己设置填写,后面不再多赘述;更新时间建议为60S,一分钟更新一次,基本算是很频繁了。Application 那里选择我们之前创建的Application的名称,提交即可。
监控接口入站流量
还是创建item prototypes,名称填Inbound Traffice on interface $1
,key填ifHCInOctets[{#SNMPVALUE}]
,OID填IF-MIB::ifHCInOctets.{#SNMPINDEX}
,单位填bps,更新周期为1S,因为我要实时监控流量,Aplication选之前建立的Application名称。因为默认获取到的是接口上额总流量,所以我们需要换算一下单位,并且让zabbix自动计算每秒的流量(取最后一秒的值与上一秒的值相减为实际值)。点击上方Preprocessing
,然后在Preprocessing steps
下点击两次add,其中一个选择Change per second
,另一个选择Custom multiplier
,值填8,然后update即可。
监控接口出站流量
方法和上面一样,只是参数填的不一样,说一下不同的参数值即可;name填Outbound Traffic on interface $1
,key填ifHCOutOctets[{#SNMPVALUE}]
,OID填IF-MIB::ifHCOutOctets.{#SNMPINDEX}
。
端口状态预警
判断标准:接口有两个状态,管理状态和运行状态,当管理状态和运行状态不一致时认为端口down掉,进行报警;在SNMP中管理状态为up获取的值为1,管理状态为down,获取值为0;接口运行状态为up,获取值也为1,如果运行状态为down,获取值为2;
在Discovery下面点击Trigger prototypes
,创建一个预警,名称 为Port {#SNMPVALUE} Down
,报警级别自己定,表达式为{MP8900:ifAdminStatus[{#SNMPVALUE}].last(#1)}=1 and {MP8900:ifOperStatus[{#SNMPVALUE}].last(#1)}>1
然后直接update即可
上面的8900为我的模板名称,这个可以手动选择,让系统自动生成条件,模板名称不同会被替换掉
绘制流量监控图
点击Graph prototypes
,新进一个图表,名称为Interface Traffic on {#SNMPVALUE}
,其他默认值即可,在items中点add prototype,选择之前创建的 Inbound Traffice on interface {#SNMPVALUE}
和Outbound Traffic on interface {#SNMPVALUE}
然后update即可;这样就可以在图表中同时看到下载和上传流量。
下图为效果图,以做参考
流量峰值监控报警
比如百兆带宽的WAN口,当下载峰值达到90Mbit/S的时候进行报警,需要添加一个Tigger,在里面选择对应的的条件,峰值计算方式为90M乘以1024的次方除以8,即为接口峰值流量值
本文由 Ethan 创作,采用 知识共享署名4.0 国际许可协议进行许可。
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。