我有一台安装了 zabbix 代理的服务器,它运行正常。
我想监控服务器上的数据库,我按照的文档进行操作MySQL by Zabbix agent
。
我的日志里有一个错误
mysqladmin: connect to server at '127.0.0.1' failed
error: 'Access denied for user 'zabbix'@'localhost' (using password: NO)'
以下是日志的较长部分:
15110:20220919:154820.657 In zbx_waitpid()
15110:20220919:154820.657 zbx_waitpid() exited, status:0
15110:20220919:154820.658 End of zbx_waitpid():15142
15110:20220919:154820.658 Run remote command [ mysqladmin -h"127.0.0.1" -P"3306" ping] Result [0] []...
15110:20220919:154820.658 Sending back []
15110:20220919:154820.658 listener #2 [waiting for connection]
15110:20220919:154820.719 listener #2 [processing request]
15110:20220919:154820.719 Requested [system.cpu.util[,iowait]]
15110:20220919:154820.719 Sending back [0.071416]
15110:20220919:154820.719 listener #2 [waiting for connection]
15111:20220919:154821.077 listener #3 [processing request]
15111:20220919:154821.077 Requested [mysql.ping["127.0.0.1","3306"]]
15111:20220919:154821.077 In zbx_popen() command:' mysqladmin -h"127.0.0.1" -P"3306" ping'
15111:20220919:154821.078 End of zbx_popen():8
15143:20220919:154821.078 zbx_popen(): executing script
mysqladmin: connect to server at '127.0.0.1' failed
error: 'Access denied for user 'zabbix'@'localhost' (using password: NO)'
15111:20220919:154821.089 In zbx_waitpid()
15111:20220919:154821.089 zbx_waitpid() exited, status:0
15111:20220919:154821.089 End of zbx_waitpid():15143
15111:20220919:154821.089 Run remote command [ mysqladmin -h"127.0.0.1" -P"3306" ping] Result [0] []...
15111:20220919:154821.089 Sending back []
15111:20220919:154821.090 listener #3 [waiting for connection]
15112:20220919:154821.114 In send_buffer() host:'<ip>' port:10051 values:0/100
15112:20220919:154821.114 End of send_buffer():SUCCEED
15112:20220919:154821.114 active checks #1 [idle 1 sec]
15108:20220919:154821.116 collector [processing data]
15108:20220919:154821.116 In update_cpustats()
15108:20220919:154821.116 End of update_cpustats()
15108:20220919:154821.116 collector [idle 1 sec]
15109:20220919:154821.543 listener #1 [processing request]
但我的.my.cnf
那个看起来/var/run/zabbix/
像这样:
[client]
user='zbx_monitor'
password='<password>'
用户的主目录zabbix
就是/var/run/zabbix/
这样工作的。
我在其他服务器上也做过,运行良好。但在这个服务器上却.my.cnf
不行,我找不到原因。
服务器之间唯一不同的地方是:
- 主目录
- 服务器日期,因此 Linux 版本不同
你知道什么可能导致这个问题吗?
编辑:
namei -l /var/run/zabbix/.my.cnf
f: /var/run/zabbix/.my.cnf
drwxr-xr-x root root /
drwxr-xr-x root root var
lrwxrwxrwx root root run -> /run
drwxr-xr-x root root /
drwxr-xr-x root root run
drwxr-xr-x zabbix zabbix zabbix
-rw-r----- zabbix zabbix .my.cnf
如果我尝试以用户身份运行该命令,zabbix
它会起作用:
sudo -u zabbix mysqladmin -h"127.0.0.1" -P"3306" ping
mysqld is alive
因此,仅当 zabbix 代理运行命令时才会发生错误。
这是我的 zabbix 用户的主目录
getent passwd zabbix
zabbix:x:109:115::/var/run/zabbix/:/bin/false
答案1
即使我的 Zabbix 用户的主目录是/var/run/zabbix
,但它似乎不是 zabbix 命令用作主目录的目录。
我是/etc/zabbix/zabbix_agentd.conf.d/template_db_mysql.conf
这样改变的,我HOME=/var/run/zabbix
在每个命令前添加了:
UserParameter=mysql.ping[*],HOME=/var/run/zabbix mysqladmin -h"$1" -P"$2" ping
UserParameter=mysql.get_status_variables[*], HOME=/var/run/zabbix mysql -h"$1" -P"$2" -sNX -e "show global status"
UserParameter=mysql.version[*], HOME=/var/run/zabbix mysqladmin -s -h"$1" -P"$2" version
UserParameter=mysql.db.discovery[*], HOME=/var/run/zabbix mysql -h"$1" -P"$2" -sN -e "show databases"
UserParameter=mysql.dbsize[*], HOME=/var/run/zabbix mysql -h"$1" -P"$2" -sN -e "SELECT COALESCE(SUM(DATA_LENGTH + INDEX_LENGTH),0) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='$3'"
UserParameter=mysql.replication.discovery[*], HOME=/var/run/zabbix mysql -h"$1" -P"$2" -sNX -e "show slave status"
UserParameter=mysql.slave_status[*], HOME=/var/run/zabbix mysql -h"$1" -P"$2" -sNX -e "show slave status"
答案2
你的权限.my.cnf
太开放了。
$ ls -l .my.cnf
-rwxrwxrwx 1 user user 44 Sep 14 15:40 .my.cnf
$ mysqladmin ping
mysqladmin: [Warning] World-writable config file '/home/user/.my.cnf' is ignored.
mysqladmin: connect to server at 'localhost' failed
设置适当的权限。
chmod 640 /var/run/zabbix/.my.cnf
答案3
不要在你的值两边加上单引号,
[client]
user='zbx_monitor'
password='<password>'
让我们知道结果如何。