Zabbix 템플릿 MySQL 사용에 대해 혼란스러워함(800개 이상의 항목)

Zabbix 템플릿 MySQL 사용에 대해 혼란스러워함(800개 이상의 항목)

이 템플릿의 전체 사용법을 설명해 주세요.링크 템플릿

구글에서 많이 검색해서 설명대로 구성했는데 아직은 사용이 안되네요. 완전히 설명해주실 수 있나요? 두 개의 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';

매크로를 설정했어요. (스크린샷 참조).

매크로 1 매크로 2

권한 파일:

[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" 및 "" 값을 각각 할당합니다. 호스트 수준 할당이 전역 할당보다 우선 적용되므로 템플릿이 잘못된 값을 사용하게 됩니다.

관련 정보