이 템플릿의 전체 사용법을 설명해 주세요.링크 템플릿
구글에서 많이 검색해서 설명대로 구성했는데 아직은 사용이 안되네요. 완전히 설명해주실 수 있나요? 두 개의 centos 7.zabbix 버전 3.4가 있습니다. zabbix-agent를 구성합니다:
/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/etc/zabbix mysql -N | awk '{print $$2}'
UserParameter=mysql.size[*],bash -c 'echo "select sum($(case "$3" in both|"") echo "data_length+index_length";; data|index) echo "$3_length";; free) echo "data_free";; esac)) from information_schema.tables$([[ "$1" = "all" || ! "$1" ]] || echo " where table_schema=\"$1\"")$([[ "$2" = "all" || ! "$2" ]] || echo "and table_name=\"$2\"");" | HOME=/etc/zabbix mysql -N'
UserParameter=mysql.ping,HOME=/etc/zabbix mysqladmin ping | grep -c alive
UserParameter=mysql.version,mysql -V
UserParameter=mysql[*],/etc/zabbix/mysql_check.pl $1 $2 $3 $4
사용자를 생성합니다 mysql
.
CREATE USER 'david'@'%' IDENTIFIED BY 'david123';
---------------------------------------------------------------
MariaDB [(none)]> select user,host from mysql.user;
+--------------+-----------+
| user | host |
+--------------+-----------+
| cluster_user | % |
| david | % |
| dav | 127.0.0.1 |
| root | 127.0.0.1 |
| root | ::1 |
| dav | db1 |
| root | db1 |
| root | db3 |
| dav | localhost |
| fazeli | localhost |
| root | localhost |
+--------------+-----------+
11 rows in set (0.00 sec)
------------------------------------------------
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
------------------------------------------------
MariaDB [(none)]> show grants for 'david'@'%';
+---------------------------------------------------------------------------------------------------------------+
| Grants for david@% |
+---------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'david'@'%' IDENTIFIED BY PASSWORD '*76E1DED67C484EF41716EFA3545C12098380B713' |
+---------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
------------------------------------------------
내가 만든 .my.cnf
곳/etc/zabbix
[mysql]
user=david
password=david123
[mysqladmin]
user=david
password=david123
내 perl
스크립트mysql_check.pl
/etc/zabbix
use strict;
use Data::Dumper;
use DBI;
my $user = shift;
my $password = shift;
my $type = shift;
my $search_like = shift;
my $dsn = "DBI:mysql:database=mysql;host=db2";
my $tmp_file = '/tmp/zbx_mysql.status';
my $zbx_sender_file = '/usr/bin/zabbix_sender';
my $zabbix_sender = '/usr/bin/zabbix_sender';
매크로를 설정했어요. (스크린샷 참조).
권한 파일:
[root@db2 zabbix]# ll
total 92
-rw-r--r-- 1 root root 78654 Jan 24 06:20 mysql_check.pl
-rw-r--r-- 1 root root 11124 Jan 21 10:28 zabbix_agentd.conf
drwxr-xr-x 2 root root 38 Jan 21 09:52 zabbix_agentd.d
당신을 감사하십시오.
답변1
노트:스크린샷에 MySQL 데이터베이스의 실제 루트 비밀번호가 포함되어 있는 경우 가능한 한 빨리 비밀번호를 변경하세요!
이 UserParameter 줄은 mysql_check.pl
템플릿에서 지정할 수 있는 네 가지 매개 변수를 제안합니다.
UserParameter=mysql[*],/etc/zabbix/mysql_check.pl $1 $2 $3 $4
템플릿과 함께 제공되는 원본은 mysql_check.pl
다음과 같이 시작됩니다.
#!/usr/bin/perl
use strict;
use Data::Dumper;
use DBI;
my $user = shift;
my $password = shift;
my $type = shift;
my $search_like = shift;
my $dsn = "DBI:mysql:database=mysql;host=<replace mysql host>";
my $tmp_file = '/tmp/zbx_mysql.status';
my $zbx_sender_file = '/tmp/zbx_mysql.sender';
[...continues...]
귀하의 질문에 이 부분의 중요/편집된 줄만 게시했다고 가정합니다. 두 가지 문제가 있습니다.
1.) CAS는 또한 정확한 인용이 부족하다는 점을 지적했습니다.
명백한 실수는 mysql_check.pl의 문자열 dav를 인용해야 한다는 것입니다: my $user = 'dav';. 저는 zabbix에 대해 잘 몰라서 더 이상 도움을 드릴 수 없습니다. –카스
나는 당신이 이 문제를 해결했다고 가정합니다.
2.) 이 네 가지 shift
명령은 수신된 명령줄 인수를 선택 mysql_check.pl
하고 순서대로 변수에 넣어야 합니다.
원래 버전에서는 첫 번째 매개변수가 변수에 저장되고 $user
, 두 번째 매개변수가 변수에 저장되는 $password
식입니다. 그러나 처음 두 명령을 하드코딩된 값으로 대체했습니다 shift
. 이로 인해 첫 번째 매개변수(분명히 템플릿을 통해 전달된 스크린샷 매크로의 MySQL 사용자 이름)가 에 할당되고 $type
대신 첫 번째 및 네 번째 $user
매개변수가 할당 $search_like
됩니다 . $password
명령줄 매개변수는 사용되지 않습니다. 이 두 매개변수는 무엇을 확인할지 알려줍니다 mysql_check.pl
.
스크립트 코드를 더 자세히 살펴보면 mysql_check.pl
수정된 버전은 사용자 이름을 값으로 해석하려고 하여 무의미한 작업을 수행하게 되어 $type
아무것도 반환하지 않거나 템플릿에서 구문 분석할 수 없는 항목을 반환하게 됩니다.
shift
에서 어떤 명령도 제거 하지 마십시오 mysql_check.pl
. 어떤 이유로든 사용자 이름과 비밀번호를 하드코딩해야 하는 경우 다음을 수행하세요.
[...]
use DBI;
my $user = shift;
my $password = shift;
#hard-coded user info for testing only; these should come from the zabbix macro instead
$user = 'dav';
$password = 'dav123456';
my $type = shift;
my $search_like = shift;
[...]
또한 Zabbix 매크로와 유사하며 ${MYSQL_USER}
전역 ${MYSQL_PWD}
수준에서는 "dav" 및 "dav123456" 값을 할당하지만 호스트 수준에서는 "root" 및 "" 값을 각각 할당합니다. 호스트 수준 할당이 전역 할당보다 우선 적용되므로 템플릿이 잘못된 값을 사용하게 됩니다.