分布式监控与SNMP

分布式监控与SNMP

 

 

我们看如上的场景,我们使用zabbix,如果是在一个局域网内中,监控agent没有任何问题,但是如果夸数据中心,跨越机房了,zabbix-server和zabbix-agent之间的延迟,可能会高到服务端认为客户端机器挂掉了。

那么这里我们就得使用zabbix支持的分布式架构功能

zabbix支持proxy模式分布式,部署较为简单,proxy和zabbix-server一样,能够从被监控的主机上获取数据,且保存在本地数据库,达到一定条件之后,会吧这些数据发给zabbix-server,再进行后续的操作,例如执行触发器,发送报警等。

zabbix-server会定期将自己的配置,发送给proxy,这样保证配置都是在server上然后同步给proxy,保证分布式架构的一致性。

 

 proxy也主要用来解决网络问题,比如公司一般会有多个IDC机房,由于网络地域原因,机房之间的互通性不太好,又可能有防火墙的问题导致zabbix-server和zabbix-server之间的连通性不好。

 上图就是企业常见用法,在每个IDC机房里防止一个zabbix-proxy代理服务器用来检测本机房,这样我们只需要解决proxy和server之间的连通问题就好,zabbix-server和proxy之间的数据传输可靠性可以完全放心,proxy也会有缓存,保证数据的完整性。

分布式监控作用:

  1. 分担压力,降低server负载

    Agent > Proxy > Server

  2. 多机房监控

    上海IDC > Proxy > Server

部署分布式监控

环境准备

zabbix-server      zabbix-server01      10.0.1.50
zabbix-proxy       vpn_server    10.0.1.63
zabbix-agent     zbz-agent01   10.0.1.51


确保三台机器的防火墙关闭
10.0.1.50 zabbix-server01
10.0.1.51 zbz-agent01
10.0.1.63 vpn_server

  

部署

1.确保zabbix-server配置的自动发现和自动注册都给关闭了,【注意】

2.zabbix-server 服务端无须变动,运行着就可以

3.准备vpn_server机器,部署数据库,存储agent的监控数据,最终发给server
# 确保准备好了zabbix的源
# 安装使用了mysql的proxy
1.获取zabbix官方源
rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm

# 这一步很重要
sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' /etc/yum.repos.d/zabbix.repo

#安装
[root@vpn_server ~]# yum install zabbix-proxy-mysql zabbix-get -y


4.安装部署数据库
[root@zbz-agent01 ~]# yum install mariadb-server mariadb -y
[root@vpn_server ~]# systemctl start mariadb

5.建立数据库用户
mysql
create database zabbix_proxy character set utf8 collate utf8_bin;
grant all privileges on zabbix_proxy.* to zabbix@'localhost' identified by 'zabbix';
flush privileges;
exit

6.导入zabbix-proxy数据文件
[root@vpn_server ~]# rpm -ql zabbix-proxy-mysql
/etc/logrotate.d/zabbix-proxy
/etc/zabbix/zabbix_proxy.conf
/usr/lib/systemd/system/zabbix-proxy.service
/usr/lib/tmpfiles.d/zabbix-proxy.conf
/usr/lib/zabbix/externalscripts
/usr/sbin/zabbix_proxy_mysql
/usr/share/doc/zabbix-proxy-mysql-5.0.2
/usr/share/doc/zabbix-proxy-mysql-5.0.2/AUTHORS
/usr/share/doc/zabbix-proxy-mysql-5.0.2/COPYING
/usr/share/doc/zabbix-proxy-mysql-5.0.2/ChangeLog
/usr/share/doc/zabbix-proxy-mysql-5.0.2/NEWS
/usr/share/doc/zabbix-proxy-mysql-5.0.2/README
/usr/share/doc/zabbix-proxy-mysql-5.0.2/schema.sql.gz
/usr/share/man/man8/zabbix_proxy.8.gz
/var/log/zabbix
/var/run/zabbix
# 导入数据
zcat /usr/share/doc/zabbix-proxy-mysql-5.0.2/schema.sql.gz |mysql -uzabbix -pzabbix zabbix_proxy

7.修改proxy配置,连接数据库
sed -i.ori '162a DBPassword=zabbix' /etc/zabbix/zabbix_proxy.conf
sed -i 's#Server=127.0.0.1#Server=10.0.1.50#' /etc/zabbix/zabbix_proxy.conf
sed -i 's#Hostname=Zabbix proxy#Hostname=zbz-agent01#' /etc/zabbix/zabbix_proxy.conf

8.检查zabbix-proxy配置
[root@vpn_server ~]# grep ^'[a-Z]' /etc/zabbix/zabbix_proxy.conf
Server=10.0.1.50
ServerPort=10051
Hostname=vpn_server
LogFile=/var/log/zabbix/zabbix_proxy.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_proxy.pid
SocketDir=/var/run/zabbix
DBHost=localhost
DBPassword=zabbix
DBName=zabbix_proxy
DBUser=zabbix
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1


9.启动zabbix-proxy服务
systemctl restart zabbix-proxy.service

 此时proxy和server已经正确可以通信了

Agent客户端配置

 

 

 

 

 

 

   

1.修改agent配置,指向proxy


# 检查配置
[root@zbz-agent01 ~]# egrep -i '^server|^hostname' /etc/zabbix/zabbix_agent2.conf
Server=10.0.1.63
ServerActive=10.0.1.63
Hostname=zbz-agent01  

# 重启agent
[root@zbz-agent01 ~]# systemctl restart zabbix-agent2

 这一切都可以通过日志来看到结果

# 我们可以模拟,停掉zabbix-agent,查看server和proxy的日志

[root@vpn_server ~]# tail /var/log/zabbix/zabbix_proxy.log
  3655:20200812:173017.815 proxy #17 started [task manager #1]
  3666:20200812:173017.845 proxy #28 started [preprocessing worker #3]
  3664:20200812:173017.845 proxy #26 started [preprocessing worker #1]
  3665:20200812:173017.893 proxy #27 started [preprocessing worker #2]
  3656:20200812:173018.854 enabling Zabbix agent checks on host "zbz-agent01": host became available
  3656:20200812:173051.020 Zabbix agent item "vfs.fs.size[/,total]" on host "zbz-agent01" failed: first network error, wait for 15 seconds
  3661:20200812:173106.920 Zabbix agent item "vm.memory.size[available]" on host "zbz-agent01" failed: another network error, wait for 15 seconds
  3661:20200812:173121.939 Zabbix agent item "net.tcp.port[<10.0.1.51>,3306]" on host "zbz-agent01" failed: another network error, wait for 15 seconds
  3661:20200812:173136.959 temporarily disabling Zabbix agent checks on host "zbz-agent01": host unavailable
  3661:20200812:173236.020 enabling Zabbix agent checks on host "zbz-agent01": host became available

  

 

 

 SNMP监控

如果我们需要监控打印机、路由器等设备,肯定不能使用 zabbix agentd,因为他们不能安装软件

还好他们一般都支持SNMP协议,这样我可以使用SNMP来监控他们.如果你希望使用SNMP-agent来获取这些设备的信息

那么在安装 zabbix server 的时候你需要增加 snmp 的支持,备注:SNMP 检查基于 UDP 协议。

 snmp simple network manager protocol 简单网络管理协议
 很多无法安装zabbix-agent的设备,都可以通过snmp协议监控

  部署

1.服务端安装snmp程序
[root@zabbix-server01 ~]# yum -y install net-snmp net-snmp-utils

2.配置snmp程序
# 开启snmp的配置
sed -i.ori '57a view systemview   included  .1' /etc/snmp/snmpd.conf
systemctl start snmpd.service

3.测试snmp命令
snmpwalk -v 2c -c public 127.0.0.1 sysname

# 参数解释
# snmpwalk 类似 zabbix_get
# -v 2c  指定使用snmp协议的版本  snmp分为v1 v2 v3
# -c public  指定暗号
# sysname  类似zabbix的key

[root@zabbix-server01 ~]# snmpwalk -v 2c -c public 127.0.0.1 sysname
SNMPv2-MIB::sysName.0 = STRING: zabbix-server01

  

snmp-OID

Zabbix的snmp监控还没开始讲,不过先给大家列一些snmp常用的一些OID,比如cpu、内存、硬盘什么的。

先了解这些,再使用snmp监控服务器。

SNMP代理提供大量的对象标识符(OID-Object Identifiers)。一个OID是一个唯一的键值对。该代理存放这些值并让它们可用。

用法:

[root@zabbix-server01 ~]# snmpwalk -v 2c -c public 127.0.0.1 .1.3.6.1.2.1.1.5.0
SNMPv2-MIB::sysName.0 = STRING: zabbix-server01

[root@zabbix-server01 ~]# snmpwalk -v 2c -c public 127.0.0.1 .1.3.6.1.2.1.1.1.0
SNMPv2-MIB::sysDescr.0 = STRING: Linux zabbix-server01 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64
[root@zabbix-server01 ~]#
系统参数(1.3.6.1.2.1.1)   
OID 描述 备注 请求方式
.1.3.6.1.2.1.1.1.0 获取系统基本信息 SysDesc GET
.1.3.6.1.2.1.1.3.0 监控时间 sysUptime GET
.1.3.6.1.2.1.1.4.0 系统联系人 sysContact GET
.1.3.6.1.2.1.1.5.0 获取机器名 SysName GET
.1.3.6.1.2.1.1.6.0 机器坐在位置 SysLocation GET
.1.3.6.1.2.1.1.7.0 机器提供的服务 SysService GET
.1.3.6.1.2.1.25.4.2.1.2 系统运行的进程列表 hrSWRunName WALK
.1.3.6.1.2.1.25.6.3.1.2 系统安装的软件列表 hrSWInstalledName WALK

  

 

网络接口(1.3.6.1.2.1.2)   
OID 描述 备注 请求方式
.1.3.6.1.2.1.2.1.0 网络接口的数目 IfNumber GET
.1.3.6.1.2.1.2.2.1.2 网络接口信息描述 IfDescr WALK
.1.3.6.1.2.1.2.2.1.3 网络接口类型 IfType WALK
.1.3.6.1.2.1.2.2.1.4 接口发送和接收的最大IP数据报[BYTE] IfMTU WALK
.1.3.6.1.2.1.2.2.1.5 接口当前带宽[bps] IfSpeed WALK
.1.3.6.1.2.1.2.2.1.6 接口的物理地址 IfPhysAddress WALK
.1.3.6.1.2.1.2.2.1.8 接口当前操作状态[up\ down] IfOperStatus WALK
.1.3.6.1.2.1.2.2.1.10 接口收到的字节数 IfInOctet WALK
.1.3.6.1.2.1.2.2.1.16 接口发送的字节数 IfOutOctet WALK
.1.3.6.1.2.1.2.2.1.11 接口收到的数据包个数 IfInUcastPkts WALK
.1.3.6.1.2.1.2.2.1.17 接口发送的数据包个数 IfOutUcastPkts WALK
CPU及负载   
OID 描述 备注 请求方式
. 1.3.6.1.4.1.2021.11.9.0 用户CPU百分比 ssCpuUser GET
. 1.3.6.1.4.1.2021.11.10.0 系统CPU百分比 ssCpuSystem GET
. 1.3.6.1.4.1.2021.11.11.0 空闲CPU百分比 ssCpuIdle GET
. 1.3.6.1.4.1.2021.11.50.0 原始用户CPU使用时间 ssCpuRawUser GET
.1.3.6.1.4.1.2021.11.51.0 原始nice占用时间 ssCpuRawNice GET
. 1.3.6.1.4.1.2021.11.52.0 原始系统CPU使用时间 ssCpuRawSystem. GET
. 1.3.6.1.4.1.2021.11.53.0 原始CPU空闲时间 ssCpuRawIdle GET
. 1.3.6.1.2.1.25.3.3.1.2 CPU的当前负载,N个核就有N个负载 hrProcessorLoad WALK
. 1.3.6.1.4.1.2021.11.3.0 ssSwapIn GET  
. 1.3.6.1.4.1.2021.11.4.0 SsSwapOut GET  
. 1.3.6.1.4.1.2021.11.5.0 ssIOSent GET  
. 1.3.6.1.4.1.2021.11.6.0 ssIOReceive GET  
. 1.3.6.1.4.1.2021.11.7.0 ssSysInterrupts GET  
. 1.3.6.1.4.1.2021.11.8.0 ssSysContext GET  
. 1.3.6.1.4.1.2021.11.54.0 ssCpuRawWait GET  
. 1.3.6.1.4.1.2021.11.56.0 ssCpuRawInterrupt GET  
. 1.3.6.1.4.1.2021.11.57.0 ssIORawSent GET  
. 1.3.6.1.4.1.2021.11.58.0 ssIORawReceived GET  
. 1.3.6.1.4.1.2021.11.59.0 ssRawInterrupts GET  
. 1.3.6.1.4.1.2021.11.60.0 ssRawContexts GET  
. 1.3.6.1.4.1.2021.11.61.0 ssCpuRawSoftIRQ GET  
. 1.3.6.1.4.1.2021.11.62.0 ssRawSwapIn. GET  
. 1.3.6.1.4.1.2021.11.63.0 ssRawSwapOut GET  
.1.3.6.1.4.1.2021.10.1.3.1 Load5 GET  
.1.3.6.1.4.1.2021.10.1.3.2 Load10 GET  
.1.3.6.1.4.1.2021.10.1.3.3 Load15 GET

 

 

内存及磁盘(1.3.6.1.2.1.25)   
OID 描述 备注 请求方式
.1.3.6.1.2.1.25.2.2.0 获取内存大小 hrMemorySize GET
.1.3.6.1.2.1.25.2.3.1.1 存储设备编号 hrStorageIndex WALK
.1.3.6.1.2.1.25.2.3.1.2 存储设备类型 hrStorageType[OID] WALK
.1.3.6.1.2.1.25.2.3.1.3 存储设备描述 hrStorageDescr WALK
.1.3.6.1.2.1.25.2.3.1.4 簇的大小 hrStorageAllocationUnits WALK
.1.3.6.1.2.1.25.2.3.1.5 簇的的数目 hrStorageSize WALK
.1.3.6.1.2.1.25.2.3.1.6 使用多少,跟总容量相除就是占用率 hrStorageUsed WALK
.1.3.6.1.4.1.2021.4.3.0 Total Swap Size(虚拟内存) memTotalSwap GET
.1.3.6.1.4.1.2021.4.4.0 Available Swap Space memAvailSwap GET
.1.3.6.1.4.1.2021.4.5.0 Total RAM in machine memTotalReal GET
.1.3.6.1.4.1.2021.4.6.0 Total RAM used memAvailReal GET
.1.3.6.1.4.1.2021.4.11.0 Total RAM Free memTotalFree GET
.1.3.6.1.4.1.2021.4.13.0 Total RAM Shared memShared GET
.1.3.6.1.4.1.2021.4.14.0 Total RAM Buffered memBuffer GET
.1.3.6.1.4.1.2021.4.15.0 Total Cached Memory Memcached GET
.1.3.6.1.4.1.2021.9.1.2 Path where the disk is mounted dskPath WALK
.1.3.6.1.4.1.2021.9.1.3 Path of the device for the partition dskDevice WALK
.1.3.6.1.4.1.2021.9.1.6 Total size of the disk/partion (kBytes) dskTotal WALK
.1.3.6.1.4.1.2021.9.1.7 Available space on the disk dskAvail WALK
.1.3.6.1.4.1.2021.9.1.8 Used space on the disk dskUsed WALK
.1.3.6.1.4.1.2021.9.1.9 Percentage of space used on disk dskPercent WALK
.1.3.6.1.4.1.2021.9.1.10 Percentage of inodes used on disk dskPercentNode WALK

添加主机-SNMP

 

 

取消原有的主机模板,重新添加

注意点击原有的模板,【取消并清理】否则有些监控项冲突

 

 

稍微等待会,zabbix-server已然改为snmp监控了

 

zabbix自定义监控Nginx

 

zabbix本身有监控nginx的模板,可以直接使用该模板,我们再针对nginx做一些自定义的监控,主要是结合nginx的status模块添加监控。

zabbix自带的Nginx监控模板,这个我们先不用

 

 

 zabbix-agent部署好nginx

1.直接yum快速安装
yum install nginx -y

2.添加nginx的status状态功能
vim /etc/nginx/nginx.conf

        location /status {
            stub_status on;
            access_log off;
}

3.启动nginx,查看状态页
[root@zbz-agent01 ~]# curl  http://10.0.1.51/status
Active connections: 3
server accepts handled requests
 3 3 3
Reading: 0 Writing: 1 Waiting: 2


4.监控内容解释
Active  connections:当前所有处于打开状态的活动连接数(TCP连接数,即三次握手四次挥手次数)
accepts :                        已经接收连接数
handled :                      已经处理过的连接数
requests :                已经处理过的请求数,在保持连接模式下,请求数量可能会大于连接数量
Reading:                          正处于接收请求的连接数
Writing:                          请求已经接收完成,处于响应过程的连接数
Waiting :                      保持连接模式,处于活动状态的连接数

5.添加nginx的监控项,需要我们自定义了
[root@zbz-agent01 ~]# cd /etc/zabbix/zabbix_agent2.d/

# 作用主要是,格式化输出,取出每个指标的值
[root@zbz-agent01 zabbix_agent2.d]# cat userparameter_nginx.conf
UserParameter=nginx.active,curl -s http://127.0.0.1/status  2>/dev/null| grep 'Active' | awk '{print $NF}'
UserParameter=nginx.reading,curl -s http://127.0.0.1/status 2>/dev/null| grep 'Reading' | awk '{print $2}'
UserParameter=nginx.writing,curl -s http://127.0.0.1/status 2>/dev/null| grep 'Writing' | awk '{print $4}'
UserParameter=nginx.waiting,curl -s http://127.0.0.1/status 2>/dev/null| grep 'Waiting' | awk '{print $6}'
UserParameter=nginx.accepts,curl -s http://127.0.0.1/status 2>/dev/null| awk NR==3 | awk '{print $1}'
UserParameter=nginx.handled,curl -s http://127.0.0.1/status 2>/dev/null| awk NR==3 | awk '{print $2}'
UserParameter=nginx.requests,curl -s http://127.0.0.1/status 2>/dev/null| awk NR==3 | awk '{print $3}'

6.启动nginx和zabbix-agent服务
[root@zbz-agent01 zabbix_agent2.d]# systemctl start zabbix-agent2

  

zabbix-server配置

注意可能要关闭之前超哥讲解的snmp配置,还原为zbx默认agent形式

添加监控,依次添加7个

 

注意,关闭proxy代理,还要更改zabbix-agent的配置文件,重启服务

可以在添加好监控项之后,【测试】一下,看是否正确。

 

 创建图形

 

 查看图形效果

 

可以用ab压测命令,增大网站压力,查看zabbix图形监控

[root@zbz-agent01 zabbix_agent2.d]# yum install httpd-tools -y
ab -c 100 -n 100000 http://127.0.0.1/

  

 

posted @ 2021-01-27 00:48  时间的侵蚀  阅读(371)  评论(0编辑  收藏  举报