设为首页 收藏本站
查看: 35786|回复: 1

[经验分享] 解决Zabbix使用一段时间后总报Zabbix Agent不可到达的问题

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-4-1 08:38:54 | 显示全部楼层 |阅读模式
Zabbix使用一段时间后总是报Zabbix Agent不可到达,报错文字如下:
Zabbix Server Messages: PROBLEM: Zabbix agent on Zabbix server is unreachable for 5 minutes
wKiom1UaYVShGSy9AAB4dKsXH8g489.jpg
wKiom1UaYVXyfIrPAAKDYiKeydE204.jpg
首先查看Zabbix Agent的日志,找到关键出错信息,日志如下:
来自:/tmp/zabbix_agentd.log
mysqladmin: connect to server at 'localhost' failed   
error: 'Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)'     
Check that mysqld is running and that the socket: '/tmp/mysql.sock' exists!
wKioL1UaYpOAkGowAATVvyNZLzA994.jpg
由此可见,Zabbix Agent无法连接数据库(作为管理员应该清楚Zabbix Agent是不会连接数据库的),具体的是无法通过/tmp/mysql.sock连接到本地数据库服务器,由于这是一个socket文件,它的默认权限对其他用户或用户组是开发读写权限的。例如查看当前的配置:
wKiom1UaYVmQONPnAAB1Y5S17Gw410.jpg
而且数据库服务是正在运行的,而且socket文件的确存在,权限也是正常的。而且通过命令行可以验证通过socket文件确实可以连接。
wKiom1UaYVrj990dAAB9Nu7HD5w621.jpg
wKioL1UaYpvgSc4EAAFaLnazjRM253.jpg
问题分析与解决思路:
数据库服务器是一直正常的,这个作为管理员即使不运行任何命令也能做到心中有数,应该不是数据库服务器自身的问题,但不能排除跟客户端的连接方式有关。
查看mysql数据库的配置文件
[iyunv@chris ~]# delsc /etc/my.cnf   
[client]     
port = 3306     
socket = /tmp/mysql.sock     
[mysqld]     
port = 3306     
socket = /tmp/mysql.sock     
datadir = /usr/local/mysql/var     
skip-external-locking     
skip-name-resolve     
key_buffer_size = 384M     
max_connections = 5000     
max_allowed_packet = 1M     
table_open_cache = 64K     
sort_buffer_size = 128M     
net_buffer_length = 8K     
read_buffer_size = 256K     
read_rnd_buffer_size = 512K     
myisam_sort_buffer_size = 128M     
slow-query-log = 0     
tmp_table_size = 8G     
max_heap_table_size = 8G     
table_cache = 512     
binlog_cache_size = 6144M     
query_cache_type = 1     
query_cache_size = 128M     
query_cache_limit = 128M     
query_cache_min_res_unit = 1024     
myisam-recover-options = BACKUP     
innodb_data_home_dir = /usr/local/mysql/var     
innodb_data_file_path = ibdata1:10M:autoextend     
innodb_log_group_home_dir = /usr/local/mysql/var     
innodb_buffer_pool_size = 8G     
innodb_write_io_threads = 8     
innodb_read_io_threads = 8     
innodb_thread_concurrency = 16     
innodb_file_format = Barracuda     
innodb_log_file_size = 512M     
innodb_log_buffer_size = 64M     
innodb_flush_log_at_trx_commit = 1     
innodb_flush_method = O_DIRECT     
innodb_lock_wait_timeout = 50     
innodb_log_files_in_group = 3     
innodb_max_dirty_pages_pct = 90     
innodb_lock_wait_timeout = 120     
innodb_file_format = Barracuda     
innodb_use_sys_malloc = 0     
innodb_additional_mem_pool_size = 2G     
innodb_file_per_table = 1     
[mysqld_safe]     
log-error = /usr/local/mysql/var/mysql-error.log     
pid-file = /usr/local/mysql/var/mysql.pid     
[mysqldump]     
quick     
max_allowed_packet = 16M     
[mysql]     
no-auto-rehash     
[myisamchk]     
key_buffer_size = 512M     
sort_buffer_size = 512M     
read_buffer = 8M     
write_buffer = 8M     
[mysqlhotcopy]     
interactive-timeout     
[iyunv@chris ~]#
发现在[client]中存在socket = /tmp/mysql.sock一行,可能(可能性的情况参照下文)会默认导致mysql客户端连接时会自动使用socket进行连接。
查看Zabbix Agent的配置文件,观察是否有通过socket连接mysql的配置信息(前面提到,作为管理员应该清楚Zabbix Agent是不会连接数据库的,此时应该准确的说默认是不会连接数据库,如下图所示Zabbix Agent添加了一个与mysql有关的监控项,里面用到了mysql程序,但没写socket选项(事实上使用localhost作为连接主机名将会使用socket))。
wKioL1UaYpyCM9_oAAUdomQRMP8706.jpg
为了缩小问题范围,先将/etc/my.cnf文件中关于[client]中的socket那段先注释掉(事先应该知道没有其他客户端连接)。注意:如果把[client]中的socket注释掉,则在本机mysql客户端程序(包括mysqladmin,mysqldump等)时都需要指定主机名、端口和密码,否则客户端程序会查找socket的默认位置“/var/lib/mysql/mysql.sock”,而这个socket文件的位置并不一定是这个。
mysql连接通过套接字连接和通过端口号连接有什么不同?Unix平台上的MySQL客户端能够以两种不同的方式连接到MySQL服务器:通过文件系统中的文件(默认为/tmp/mysql.sock)使用Unix套接字进行连接,或通过端口号使用TCP/IP进行连接。Unix套接字文件的连接速度比TCP/IP快,但仅能在与相同计算机上的服务器相连时使用。如果未指定指定主机名或指定了特殊的主机名localhost(注意此处,如果指定了连接的主机名为localhost将使用socket连接),将使用Unix套接字。套接字连接可以理解为指定了IP+端口。
因此按照上述理论将localhost换成127.0.0.1,取消socket连接方式,改用TCP/IP连接。其实反过来回想,假如指定了连接的主机名(除了localhost)或IP地址、端口号,就不用再使用socket,因此可以将socket那个注释给去掉,这样方便管理员平时连接调试。
wKioL1UaYpzyGIPnAAChecqyRTw446.jpg
因为Zabbix Server是要连接数据库的,因此也顺便检查一下。果然有收获:关于DBPort有一个有用的注释“Database port when not using local socket. Ignored for SQLite.”意思是说如果socket不使用则使用DBPort,而默认DBPort是不使用而优先使用socket的。
wKioL1UaYpzApnhBAACGetKuGt0103.jpg
因此也将这个DBPort设置成启用状态。
wKioL1UaYp3haHZqAAGKofdrgQQ722.jpg
其他可能影响因素:
iptables的规则-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT也是正常的,15   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:3306 。
SELinux是事先关闭好了的。
但修改完上述所提到的后发现问题依然,Zabbix依然报错(Zabbix Server Messages: PROBLEM: Zabbix agent on Zabbix server is unreachable for 5 minutes),查看Zabbix Server的日志后发现有这么一条信息(后来发现还有报数据库跑飞的信息):
wKiom1UaYWHT76l4AAB-trKPXR8900.jpg
wKiom1UaYWKRZsD5AAHMgYX5w3Y263.jpg 对于第一个报错:通过命令行测试这个key发现是可以获得这个key的数据的,但速度比较慢(需要三秒钟以上才能获取到数据),因此还需要检查一下这个item有没有类似timeout的数值设置。
wKioL1UaYqLC0QzvAAEnavlhX8M839.jpg
由上图可知,尽管能获取到ntp[pool.ntp.org]数据,但花费的时间比较长,但是没有在Zabbix Web管理界面中找到跟超时相关的设置,因此可以考虑换一个ntp服务器或者干脆禁用掉。后来也发现这个key获取不到数据时就会导致触发Zabbix Agent不可到达的报警。
对于第二个报错:问题可能比较复杂,例如数据库所允许传递的包的大小(max_allowed_packet),数据库查询超时时间,(connect_timeout、wait_timeout)等。原始配置数据:
wKioL1UaYqay5yNkAAQ0fum2NqI728.jpg
因此将max_allowed_packet = 1M改的大一些,例如改成max_allowed_packet = 2M。

经历了以上几个个操作后,发现Zabbix Server 不再产生Zabbix Agent不可到达的报警。
小总结:
(1)尽可能快速和有效地缩小问题范围,利用敏捷方法减少故障时间。
(2)能先解决问题,就不要慢慢去研究;但能慢慢解决问题,就要仔仔细细去研究。
(3)遇到小问题一定要像面对大问题一样对待,免得小问题发展成大问题。
(4)要想快速定位问题,需要对自己的服务器环境、整个工作环境中的每一个组件、组件与组件之间的关系都需要了如指掌。
(5)如果不是自己在维护这些服务,一定要及时与同事做好沟通。
(6)做好问题记录,温故而知新,哪怕花时间写成一篇博文也是值得的。
--end--


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-52657-1-1.html 上篇帖子: zabbix 监控打印机 下篇帖子: zabbix action 执行远程命令
累计签到:6 天
连续签到:1 天
发表于 2016-10-26 08:21:16 | 显示全部楼层
路过学习了

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表