Zabbix之SNMP部署心得

0x00 前言

zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。
zabbix可以通过SNMP,Agent,ssh/telnet,IPMI(端口监视)等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux,Solaris,HP-UX,AIX,Free BSD,Open BSD,OS X等平台上。

0x01 zabbix概念

一般情况下,我们将zabbix agent部署到被监控主机上,由agent采集数据,报告给负责监控的中心主机,负责监控的中心主机被称为zabbix server,zabbix server将从agent端接收到的信息存储于zabbix的数据库中,我们把zabbix的数据库端称为zabbix database, 如果管理员需要查看各种监控信息,则需要zabbix的GUI,zabbix的GUI是一种Web GUI,我们称之为zabbix web,zabbix web是使用php编写的,所以,如果想要使用zabbix web展示相关监控信息,需要依赖LAMP环境,不管是zabbix server ,或是zabbix web,他们都需要连接到zabbix database获取相关数据。下面配一张zabbix的架构图帮助理解一下:
Zabbix之SNMP部署心得_第1张图片
zabbix web:zabbix的web界面,管理员通过web界面管理zabbix配置以及查看zabbix相关监控信息,可以单独部署在独立的服务器上。
zabbix database:用于存储所有zabbix的配置信息、监控数据的数据库。
zabbix server:负责接收agent发送的报告信息,并且负责组织配置信息、统计信息、操作数据等。
zabbix agent:部署在被监控主机上,负责被监控主机的数据,并将数据发送给zabbix server。

0x02 zabbix安装

操作系统:centos7
zabbix版本:4.2 (安装过程可参考:https://www.zabbix.com/download 或 http://www.zsythink.net/archives/500 )

# 配置zabbix官方源
# rpm -Uvh https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-release-4.2-2.el7.noarch.rpm
# yum clean all 

# zabbix server、web、agent安装
# yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent 

# 初始化数据库
# mysql -uroot -p
password
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by 'password';
mysql> quit; 
# 导入zabbix数据库
# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix 

# 配置数据库用户和密码
# vim /etc/zabbix/zabbix_server.conf
DBPassword=zabbix

# 编辑Zabbix前端PHP配置,更改时区
# vim /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/Shanghai      # 修改为亚洲上海,记得去除前面的#

# 设置zabbix和httpd服务开机自启
# systemctl restart zabbix-server zabbix-agent httpd
# systemctl enable zabbix-server zabbix-agent httpd 

通过浏览器访问http://server_ip_or_name/zabbix即可
Zabbix之SNMP部署心得_第2张图片

接下来正常安装配置即可,默认登录账号密码:Admin/zabbix
Zabbix之SNMP部署心得_第3张图片

如zabbix服务没有正常启动,如下图所示:
Zabbix之SNMP部署心得_第4张图片

则可能存在以下几种原因:

1、zabbix-server未正常启动
可用命令查看:systemctl status zabbix-server

2、已经开启selinux,但是没有正常设置对应权限。
用getenforce查看selinux状态,如果是Enforcing则会存在问题,可用setenforce 0临时关闭

3、zabbix-server未能正常连接数据库。
检查文件/etc/zabbix/zabbix_server.conf和/etc/zabbix/web/zabbix.conf.php是否配置正确

4、zabbix.conf.php文件中$ZBX_SERVER参数对应的主机名不能正常解析。
检查文件/etc/httpd/conf.d/zabbix.conf是否配置正确

5、其他原因,需要查看zabbix server日志。

0x03 zabbix监控

zabbix中添加主机

添加主机具体可以参考:http://www.zsythink.net/archives/551 ,我这里简单说一下

在zabbix web控制台选择:配置–>主机–>创建主机
Zabbix之SNMP部署心得_第5张图片

模板:
在工作中会有许多相同的或者类似的主机,我们在对它们进行配置的时候会花费我们大量时间去做相同而配置操作,而模板的引入就解决了这个问题。我们可以将那些实体配置写到一个模板中,然后根据需要将模板应用于尽可能多的主机。当然模板并不是必须的,而它自身所提供的模板也是有限的,很多时候还需要你自己去创建符合运维要求的模板。

宏:
zabbix宏变量让zabbix变得更灵活,变量可以定义在主机、模板以及全局,变量名称类似:{$MACRO},宏变量都是大写的。当然这个也不是必须的,不过可以简化你在配置中的操作。你可以理解为在代码中定义的变量,到时候可以引用一样。

zabbix中添加监控项

添加监控项具体可以参考:http://www.zsythink.net/archives/551

在zabbix web控制台选择:配置–>主机–>选择要创建监控项的主机–>监控项–>创建监控项(前提是添加好主机)
Zabbix之SNMP部署心得_第6张图片
监控项的配置中最主要的就是选择对监控类型、键值、信息类型,其他的一般默认即可。

SNMP

因为在监控的设备中并不是所有设备都支持agent,如防火墙、IPS、AD等,且agent相对来讲没有SNMP安全。

下面我们来说一下监控类型中的SNMP,具体可以参考官方文档:https://www.zabbix.com/documentation/3.4/zh/manual/config/items/itemtypes/snmp

在zabbix中SNMP分为三个版本:v1、v2c、v3,每个版本的安全性不同,版本越高安全性越好,当然也就意味着配置更麻烦。

首先你得在客户端配置好SNMP协议
SNMPv2c:一般只需要配置一个团体名即可。
SNMPv3:实现原理和SNMPv1、SNMPv2c基本一致,唯一的区别是SNMPv3增加了身份验证和加密处理,提高了安全性。

在客户端配置好以后,在服务端可以用SNMP检测工具来测试能不能获取到数据,如果可以则客户端配置正常,否则可能某个环节存在问题。
首先在服务端装好SNMP测试工具yum install -y net-snmp net-snmp-utils

# SNMPv2c
团体名:public IP:192.168.0.10
snmpwalk -v 2c -c public 192.168.0.10

# SNMPv3
用户名:test IP:192.168.0.10 
snmpwalk –v 3 –l noAuthNoPriv –u test 192.168.0.10

用户名:test 用户密码:pass 加密算法:MD5 IP:192.168.0.10 
snmpwalk –v 3 –l authNoPriv –u test –A MD5 –a "pass" 192.168.0.10

用户名:test 用户密码:pass 加密算法:MD5 传输加密密码:word 传输加密协议:DES IP:192.168.0.10 
snmpwalk –v 3 –l authPriv –u test –A MD5 –a "pass" –X DES –x "word" 192.168.0.10

一般假如客户端SNMP协议配置正常,使用snmpwalk命令可以获得该设备的整个MIB(Management Information Base),具体可参考:https://www.cnblogs.com/LittleHann/p/3834860.html
https://blog.csdn.net/u011857683/article/details/79915260

OID(对象标识符),是SNMP代理提供的具有唯一标识的键值。MIB(管理信息基)提供数字化OID到可读文本的映射。

MIB

MIB(Management Information Base)是用于管理通信网络中的实体的数据库。通常与简单网络管理协议(SNMP)相关联,数据库是分层的(树形结构的),并且每个条目通过对象标识符(OID)来寻址。

对于MIB,我们可以理解为一个中央数据库,用来保存网络中各种设备的参数信息,类似于数据库中常说的唯一标识每条记录的"主键",在MIB中,由对象识别符(OID:Object Identifier)唯一指定每条MIB记录。

下面来看一下深信服的MIB,我们可以从中得到我们想要参数的OID,如果是第一次看需要好好研究一下,你只要把它想象成一个树状结构还是很好理解的。
Zabbix之SNMP部署心得_第7张图片

OID

Object IDentifiers(OID)在计算中,对象标识符或OID是由国际电信联盟(ITU)和ISO / IEC标准化的标识符机制,用于命名具有全局明确持久名称的任何对象,概念或“事物”。关于OID的结构可以参考:http://oid-info.com/cgi-bin/display
OID结构图大致如下:
Zabbix之SNMP部署心得_第8张图片

类别 标号 所包含信息
system (1) 主机或路由器的操作系统
interface (2) 各种网络接口及它们的测定通信量
address translation (3) 地址转换(例如ARP映射)
ip (4) Internet软件(IP分组统计)
icmp (5) ICMP软件(已收到ICMP消息的统计)
tcp (6) TCP软件(算法、参数和统计)
udp (7) UDP软件(UDP通信量统计)
egp (8) EGP软件(外部网关协议通信量统计)

通过这颗“对象命名树”我们可以看出来OID也分为通用管理的和私人企业的
通用的一般都是:.1.3.6.1.2.1.x.x.x
私人企业的一般都是:.1.3.6.1.4.1.x(企业标识符).x.x
贴一个常用OID表参考一下:https://blog.csdn.net/qq_20332637/article/details/82691364

如果要是碰到一些不常用的企业,个人认为有以下三种方法:
1.假如客户端SNMP协议配置正常可通过snmpwalk命令获得
在这里插入图片描述
2.通过查询文档,贴个网址基本上记录了所有企业的标识符 http://www.iana.org/assignments/enterprise-numbers/enterprise-numbers
Zabbix之SNMP部署心得_第9张图片
3.直接打电话给相关企业,我觉得这是最好也是最直接的方法,因为一般企业会把整个MIB发给你供你作参考。

下面还有两个命令可以了解一下
snmptranslate
通过snmptranslate命令在MIBOID在数字和文字名称之间进行转换

[root@zabbix ~]# snmptranslate .1.3.6.1.2.1.25.2.3.1.6.1
HOST-RESOURCES-MIB::hrStorageUsed.1

snmpdf
通过snmpdf监视远程主机的磁盘空间,相当于直接在主机上执行df -h

[root@zabbix ~]# snmpdf -v 3 -u test -a MD5 -A "pass" -x DES -X "word" -l authPriv 192.168.0.10
Description              size (kB)            Used       Available Used%
Physical memory            3915440         1769556         2145884   45%
Virtual memory             3915440         1769556         2145884   45%
Memory buffers             3915440            4756         3910684    0%
Cached memory               512960          512960               0  100%
Shared memory                    0               0               0    0%
Swap space                       0               0               0    0%
/                         10194224          973844         9220380    9%
/etc                       5032856           28304         5004552    0%
/var                      15356420          161020        15195400    1%
/logfs                    25673452           42420        25631032    0%
/virus                    10193524             148        10193376    0%
/app                      10193848         1542580         8651268   15%
/aclog                    42165088         2344628        39820460    5%
/sys/fs/cgroup/blkio               0               0               0    0%
/sys/fs/cgroup/cpu               0               0               0    0%

因为一些厂商出厂的MIB里一般只有内存的使用大小(单位:KB),内存总量(单位:KB),所以在我们想要监控内存使用率时就需要使用表达式了,关于表达式这里我就不分析了,因为本人也只是略懂,有兴趣的读者可以自行百度去研究研究。

你可能感兴趣的:(Linux,运维)