Zabbix 데이터베이스 파티셔닝을 수행하는 방법을 배우고 싶습니까? 이 튜토리얼에서는 Ubuntu Linux를 실행하는 컴퓨터에서 Zabbix MySQL 데이터베이스를 분할하는 방법을 보여줍니다.

• Zabbix 버전 : 4.0.5
• Linux : 우분투 18.04
• MySQL : Ver 14.14 Distrib 5.7.25

우리의 튜토리얼은 새로운 Zabbix 설치를 고려합니다.

하드웨어 목록 :

다음 섹션에서는이 Zabbix 자습서를 만드는 데 사용 된 장비 목록을 보여줍니다.

위에 나열된 모든 하드웨어는 Amazon 웹 사이트에서 찾을 수 있습니다.

Zabbix Playlist:

이 페이지에서는 Zabbix 설치와 관련된 비디오 목록에 빠르게 액세스 할 수 있습니다.

우리의 YouTube 채널을 구독하는 것을 잊지 마세요. FKIT.

튜토리얼 - Zabbix 데이터베이스 파티셔닝

다음 명령을 사용하여 필수 소프트웨어를 설치하십시오.

# apt-get update
# apt-get install perl libdbi-perl libdatetime-perl libdbd-mysql-perl

Zabbix 데이터베이스에서 다음 테이블을 분할해야합니다.

• 역사
• history_log
• history_str
• history_text
• history_uint
• 동향
• trends_uint

귀하의 Zabbix 서버는 이미 데이터베이스 내에서 모니터링 정보를 가지고있을 것입니다.

MySQL 콘솔에 액세스하여 위에 나열된 7 개의 테이블에 대한 Zabbix 가장 오래된 입력 날짜를 확인하십시오.

# mysql -u root -p

use zabbix;
SELECT FROM_UNIXTIME(MIN(clock)) FROM `history`;
SELECT FROM_UNIXTIME(MIN(clock)) FROM `history_log`;
SELECT FROM_UNIXTIME(MIN(clock)) FROM `history_str`;
SELECT FROM_UNIXTIME(MIN(clock)) FROM `history_text`;
SELECT FROM_UNIXTIME(MIN(clock)) FROM `history_uint`;
SELECT FROM_UNIXTIME(MIN(clock)) FROM `trends`;
SELECT FROM_UNIXTIME(MIN(clock)) FROM `trends_uint`;

이 MySQL 명령 각각에 대해 출력은 다음과 유사해야합니다.

+---------------------------------------+
| FROM_UNIXTIME(MIN(clock)) |
+---------------------------------------+
| 2019-03-22 17:48:07                       |
+---------------------------------------+
1 row in set (0.00 sec)

중대한! 각 테이블에 대해 표시된 날짜를 메모하십시오.

이제 역사표 각각을 날짜별로 분할 해 봅시다.

먼저, History 테이블을 분할하자.

# mysql -u root -p
# use zabbix;

ALTER TABLE `history` PARTITION BY RANGE ( clock)
(PARTITION p2019_03_22 VALUES LESS THAN (UNIX_TIMESTAMP("2019-03-23 00:00:00")) ENGINE = InnoDB);

이 예에서 p2019_03_22라는 파일은 2019-03-23 이전의 모든 MySQL 정보를 갖습니다.

목표 날짜가 2019-03-22 인 경우 2019-03-23 전에 모든 것을 입력해야합니다.

둘째, history_log 테이블을 분할합니다.

ALTER TABLE `history_log` PARTITION BY RANGE ( clock)
(PARTITION p2019_03_22 VALUES LESS THAN (UNIX_TIMESTAMP("2019-03-23 00:00:00")) ENGINE = InnoDB);

셋째, history_str 테이블을 분할합니다.

ALTER TABLE `history_str` PARTITION BY RANGE ( clock)
(PARTITION p2019_03_22 VALUES LESS THAN (UNIX_TIMESTAMP("2019-03-23 00:00:00")) ENGINE = InnoDB);

넷째, history_text 테이블을 분할하자.

ALTER TABLE `history_text` PARTITION BY RANGE ( clock)
(PARTITION p2019_03_22 VALUES LESS THAN (UNIX_TIMESTAMP("2019-03-23 00:00:00")) ENGINE = InnoDB);

다섯째, history_uint 테이블을 분할합니다.

ALTER TABLE `history_uint` PARTITION BY RANGE ( clock)
(PARTITION p2019_03_22 VALUES LESS THAN (UNIX_TIMESTAMP("2019-03-23 00:00:00")) ENGINE = InnoDB);

이제 Trends Table을 한 달씩 나누어 보겠습니다.

먼저, Trends 테이블을 분할합니다.

ALTER TABLE `trends` PARTITION BY RANGE ( clock)
(PARTITION p2019_03 VALUES LESS THAN (UNIX_TIMESTAMP("2019-04-01 00:00:00")) ENGINE = InnoDB);

이 예에서 p2019_03이라는 파일은 2019-04-01 이전의 모든 MySQL 정보를 갖습니다.

목표 날짜가 2019-03이면 2019-04-01 전에 모든 것을 입력해야합니다.

둘째, trends_uint 테이블을 분할합니다.

ALTER TABLE `trends_uint` PARTITION BY RANGE ( clock)
(PARTITION p2019_03 VALUES LESS THAN (UNIX_TIMESTAMP("2019-04-01 00:00:00")) ENGINE = InnoDB);

Zabbix 데이터베이스 파티션이 성공적으로 생성되었습니다.

튜토리얼 - Zabbix 데이터베이스 파티셔닝 스크립트

Perl 스크립트를 사용하여 다음 작업을 수행합니다.

MySQL 데이터베이스 파티션의 10 일을 미리 작성하여 서비스가 중지되지 않도록하십시오.

더 이상 필요하지 않은 이전 MySQL 파티션을 삭제하십시오.

# mkdir /downloads/zabbix_script
# cd /downloads/zabbix_script
# vi zabbix_partition_creator.pl

다음은 zabbix_partition_creator.pl 스크립트의 내용입니다.

use strict;
use Data::Dumper;
use DBI;
use Sys::Syslog qw(:standard :macros);
use DateTime;
use POSIX qw(strftime);
openlog("mysql_zbx_part", "ndelay,pid", LOG_LOCAL0);
my $db_schema = 'zabbix';
my $dsn = 'DBI:mysql:'.$db_schema.':mysql_socket=/var/run/mysqld/mysqld.sock';
my $db_user_name = 'zabbix';
my $db_password = 'kamisama123';
my $tables = ;
my $amount_partitions = 10;
my $curr_tz = 'America/Sao_Paulo';
my $part_tables;
my $dbh = DBI->connect($dsn, $db_user_name, $db_password, );
my $sth = $dbh->prepare(qq);
$sth->execute($db_schema);
while (my $row = $sth->fetchrow_hashref())
$sth->finish();
foreach my $key (sort keys %)
delete_old_data();
$dbh->disconnect();
sub create_next_partition
sub remove_old_partitions
sub name_next_part
sub date_next_part
sub delete_old_data

MySQL 환경을 반영하기 위해 스크립트의 다음 부분을 변경해야합니다.

my $db_schema = 'zabbix';
my $dsn = 'DBI:mysql:'.$db_schema.':mysql_socket=/var/run/mysqld/mysqld.sock';
my $db_user_name = 'zabbix';
my $db_password = 'kamisama123';
my $tables = ;
my $amount_partitions = 10;
my $curr_tz = 'America/Sao_Paulo';

이 예에서는 zabbix MySQL 사용자 이름과 kamisama123 MySQL 암호를 사용합니다.

이 예에서는 30 일 간의 기록 테이블 내용을 보존합니다.

이 예에서는 2 개월 간의 트렌드 테이블 콘텐츠를 유지합니다.

이 예에서는 America / Sao_Paulo 날짜 시간대를 설정합니다.

이제 수동으로 오류없이 스크립트를 실행해야합니다.

# cd /downloads/zabbix_script
# chmod 700 zabbix_partition_creator.pl
# ./zabbix_partition_creator.pl

MySQL 콘솔에 액세스하여 시스템에서 10 일의 히스토리 파티션을 미리 생성했는지 확인하십시오.

# mysql -u root -p

use zabbix;
show create table history;

/*!50100 PARTITION BY RANGE ( clock)
(PARTITION p2019_03_22 VALUES LESS THAN (1553310000) ENGINE = InnoDB,
PARTITION p2019_03_23 VALUES LESS THAN (1553396400) ENGINE = InnoDB,
PARTITION p2019_03_24 VALUES LESS THAN (1553482800) ENGINE = InnoDB,
PARTITION p2019_03_25 VALUES LESS THAN (1553569200) ENGINE = InnoDB,
PARTITION p2019_03_26 VALUES LESS THAN (1553655600) ENGINE = InnoDB,
PARTITION p2019_03_27 VALUES LESS THAN (1553742000) ENGINE = InnoDB,
PARTITION p2019_03_28 VALUES LESS THAN (1553828400) ENGINE = InnoDB,
PARTITION p2019_03_29 VALUES LESS THAN (1553914800) ENGINE = InnoDB,
PARTITION p2019_03_30 VALUES LESS THAN (1554001200) ENGINE = InnoDB,
PARTITION p2019_03_31 VALUES LESS THAN (1554087600) ENGINE = InnoDB,
PARTITION p2019_04_01 VALUES LESS THAN (1554174000) ENGINE = InnoDB) */

MySQL 콘솔에 액세스하여 시스템이 트렌드 분할로 10 개월 전에 미리 생성했는지 확인하십시오.

# mysql -u root -p

use zabbix;
show create table trends;

/*!50100 PARTITION BY RANGE ( clock)
(PARTITION p2019_03 VALUES LESS THAN (1554087600) ENGINE = InnoDB,
PARTITION p2019_04 VALUES LESS THAN (1556679600) ENGINE = InnoDB,
PARTITION p2019_05 VALUES LESS THAN (1559358000) ENGINE = InnoDB,
PARTITION p2019_06 VALUES LESS THAN (1561950000) ENGINE = InnoDB,
PARTITION p2019_07 VALUES LESS THAN (1564628400) ENGINE = InnoDB,
PARTITION p2019_08 VALUES LESS THAN (1567306800) ENGINE = InnoDB,
PARTITION p2019_09 VALUES LESS THAN (1569898800) ENGINE = InnoDB,
PARTITION p2019_10 VALUES LESS THAN (1572577200) ENGINE = InnoDB,
PARTITION p2019_11 VALUES LESS THAN (1575165600) ENGINE = InnoDB,
PARTITION p2019_12 VALUES LESS THAN (1577844000) ENGINE = InnoDB,
PARTITION p2020_01 VALUES LESS THAN (1580522400) ENGINE = InnoDB) */ |

이제 Perl 스크립트가 매일 실행되도록 예약 해 봅시다.

# crontab -e

1  0  *  *  * /downloads/scripts/zabbix_partition_creator.pl

축하해! Zabbix MySQL 데이터베이스 테이블을 분할했습니다.