其他分享
首页 > 其他分享> > 记录一次zabbix排错

记录一次zabbix排错

作者:互联网

记录一次zabbix监控异常

前言:由于监控系统并非我部署的,而zabbix作为一个“安插在服务器间的细作”,阶段性“谎报军情”,领导吩咐“两周时间,乃一组特”。

一、监控架构:

二、问题描述

# zabbix-server部署在公司,zabbix-proxy部署在数据中心,阶段性出现部分服务器监控异常。
# 报错 $host on Zabbix server is unreachable for 5 minutes.
# 但是,这些所在主机对外的服务正常的,主机没有任何问题。

三、问题排查

# 第一想法:
# 问题分析:	
      配置文件(agent、proxy、server)
      DataSenderFrequency 
      ConfigFrequency
      unreachable
      cachesize
      server 压力太大
      磁盘io
      数据库读写故障
# 验证猜想:
      首先,找到agent的所在服务器的日志,看是不是agent的问题。 
[root@zabbix-agent ~]# cat /var/log/message  | grep zabbix 
[root@zabbix-agent ~]# tail -1000 /var/log/zabbix/zabbix-agent.log 
      发现日志的内容都是几点几分向哪台主机发送什么信息... 在这里先不管它,再去看zabbix-proxy
[root@zabbix-proxy ~]# cat /var/log/message  | grep zabbix 
[root@zabbix-proxy ~]# tail -1000 /var/log/zabbix/zabbix-proxy.log 	
      日志内容差不多,但是发现出error:
“ Zabbix agent item "net.if.in[vethd19d42e8]" on host "192.159.18.111" failed: first network error, wait for 120 seconds ”
      第一印象还是想到是不是数据中心网络那边有什么问题,导致这个问题,随后又否认了,因为不是所有主机,整时整点出问题,
   所以这个锅甩不过去。
      其次就是proxy端设置的有问题,比如主机失联多久再次访问?在发现主机故障的时候,到底多少个poller回去再次获取信息,
   再或者向server端获取配置信息失败?
      说的很复杂,其实就是查看proxy和server端配置文件中部分参数设定。
比如:
      datasender 数据发送时间,或者叫发送频率
      frentrency 获取sever信息频率
      unreachable 多长时间主机不可达
      poller 线程数量
      ...
#   主动式proxy+主动式监控项
# 最大延迟时间=(agent的RefreshActiveChecks)
#	被动式proxy+被动式监控项:
# 最大延迟时间=(Server的ProxyConfigFrequency配置)
#	被动式proxy+主动式监控项:
# 最大延迟时间=(Server的ProxyConfigFrequency配置)+(agent的RefreshActiveChecks)
# 	主动式proxy+被动式监控项:
# 最大延迟时间=(Server的ProxyConfigFrequency配置)
      在查看server配置的过程中发现,server端没有进行内核优化,time-wait数量很多,顺便做了一个内核优化和监控脚本,
   如果是因为time-wait的原因导致的,也好留下证据,但为了控制环境变量,做了内核优化并未使其生效,可以在没解决问题的情况
   下使其生效,再进行使用cron + 脚本的方式,进行监控“监控”。
[root@zabbix-proxy zabbix]# cat /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
#-------------------------------------------------------
net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.ip_local_port_range = 4000    65000
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_max_orphans = 16384
#---------------------------------------------------------
#net.nf_conntrack_max = 25000000
#net.netfilter.nf_conntrack_max = 25000000
#net.netfilter.nf_conntrack_tcp_timeout_established = 180
#net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
#net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
#net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
#----------------------------------------------------------
#net.core.wmem_defaule = 8388608
#net.core.rmem_defaule = 8388608
net.core.wmem_max = 16777216
net.core.rmem_max = 16777216
	修改proxy端datasender和ConfigFrequency的时间设置,将其缩短。
[root@zabbix-proxy zabbix]# cat /etc/zabbix/zabbix_proxy.conf  | grep -v "#" | grep DataSenderFrequency
DataSenderFrequency=30
[root@zabbix-proxy zabbix]# cat /etc/zabbix/zabbix_proxy.conf  | grep -v "#" | grep Config
ConfigFrequency=3600
[root@zabbix-proxy zabbix]# systemctl daemon-reload
[root@zabbix-proxy zabbix]# systemctl restart zabbix-proxy
        效果是有的,只不过不是明显,报警的服务器减少了,但是并没有完全解决,还是觉得主要问题在server端。
[root@zabbix-server ~]# cat /var/log/message  | grep zabbix 
[root@zabbix-server ~]# tail -1000 /var/log/zabbix/zabbix-server.log 	
        因为已经临近下班,我只写了一个监控服务器cpu,负载的脚本就下班了。编写脚本的意义在于,记录半夜如果还是有服务器报错,
    我对应时间就可以看出当时服务器的负载情况(其实多此一举了,zabbix-server上安装有agent,当时下班心切就忘了...)
        根据脚本设置,发现即使有服务器报错,但zabbix-server所在服务器并没有出现负载过高,导致任务处理不及时,导致故障,
    即服务器并没有完全工作,但是任务还有积留,那调大poller的数量,会不会减少这个数量呢?
[root@zabbix-server ~]#  cat /etc/zabbix/zabbix_server.conf | grep -i Startpollers=
StartPollers=300
        将poller数量调大,zabbix是几年前“前辈们”部署的,可随着监控的服务器数量增多,之前的设定已经不足以应对现在的情况,
    那就调大,具体调多大,取决于服务器配置和主机数量设置。
        现zabbix使用正常,截至至今天4天无错报,故障解决。

四、问题总结

    在服务器配置足够的情况下,开启的线程数不够,导致任务积留,proxy采集的数据不能第一时间完成,所谓的优化zabbix更多
的是从数据库下手,但本次问题解决没有来得及,问题就已经解决,所以还没来得及具体去学习。
    最后,如果哪里理解有什么问题,欢迎大家批评指正。

标签:记录,排错,tcp,server,zabbix,proxy,net,ipv4
来源: https://www.cnblogs.com/tanukisama/p/15715812.html