RocksDB & Zabbix

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 10:46, 24 сентября 2018.

В данной статье рассмотрим установку Zabbix, используя в качестве СУБД MariaDB с RocksDB в качестве встраиваемого компонента.

Краткий обзор компонентов

RocksDB. - проект Facebook, встраиваемая база данных, применяемая для систем мониторинга. Это высокопроизводительная NoSQL система оптимизированная для выполнения на многоядерных центральных процессорах. Предназначена для хранения данных в формате ключ/значение. Хранилище БД обеспечивает возможность хранения упорядоченных наборов данных, в которых строковые ключи сопоставлены со строковыми значениями. Начиная с версии 10.2 встраивается в MariaDB. [Источник 1]

MariaDB - это форк MySQL, который разрабатвается под лицензией GNU GPL и имеет расширенные возможности. [Источник 2]

Zabbix — свободная система мониторинга и отслеживания статусов разнообразных сервисов компьютерной сети, серверов и сетевого оборудования.

Основные возможности:

  • Распределённый мониторинг — до нескольких тысяч узлов. Конфигурация младших узлов полностью контролируется старшими узлами, находящимися на более высоком уровне иерархии.
  • Сценарии на основе мониторинга
  • Автоматическое обнаружение
  • Централизованный мониторинг журналов
  • Веб-интерфейс для администрирования и настройки
  • Отчётность и тенденции
  • SLA-мониторинг
  • Поддержка высокопроизводительных агентов (zabbix-agent) практически для всех платформ
  • Комплексная реакция на события
  • Поддержка SNMP v1, 2, 3
  • Поддержка SNMP-ловушек
  • Поддержка IPMI
  • Поддержка мониторинга JMX-приложений
  • Поддержка выполнения запросов в различные базы данных без необходимости использования сценарной обвязки
  • Расширение за счёт выполнения внешних скриптов
  • Гибкая система шаблонов и групп
  • Возможность создавать карты сетей

Веб-интерфейс — часть Zabbix-сервера, и, как правило (но не обязательно), запускается на том же физическом узле, что и Zabbix-сервер. Работает на PHP (требуется установкаа пакетов на ubuntu из репозитория), требует веб-сервер (в нашем случае будет установлен apache2). [Источник 3]

Установка MariaDB (+RocksDB)

Перед загрузкой и установкой MariDB необходимо также установить php пакеты.

sudo apt update
sudo apt upgrade
sudo apt install apache2
sudo apt-get install php php-mbstring php-gd php-xml php-bcmath php-ldap php-mysql libapache2-mod-php
sudo apt-get install mariadb-server

Установка Zabbix

Предварительно необходимо скачать и установить отсутствующий libevent-2.0-5

wget http://repo.zabbix.com/zabbix/3.4/ubuntu/pool/main/z/zabbix-release/zabbix_3.4-1+xenial_all.deb
dpkg -i zabbix-release_3.4-1+xenial_all.deb
apt-get update
apt-get install zabbix-server-mysql zabbix-frontend-php

Zabbix таблицы при отправке необходимо перекодировать в utf8_bin. Для этого используем скрипт на perl:

#!/usr/bin/perl
$tablename='';
$has_constraints=0;
while(<>) {
  s/CHARACTER SET latin1//;
  if(/CREATE TABLE `(.*)`/) {
    $tablename=$1;
    $has_constraints=0;
  };
  if(/CONSTRAINT/) {
    $has_constraints=1;
  };
  if(/ENGINE=InnoDB/ and $has_constraints==0) {
     s/ENGINE=InnoDB/ENGINE=ROCKSDB/;
     s/CHARSET=([^ ^;]+)/CHARSET=$1 COLLATE=$1_bin/;
  };
  print $_;
};

В настройках сервера Zabbix прописываем использование localhost в качестве хоста (см. скриншот).

Установка хоста

Если потребуется использование удалённого сервера, сначала необходимо сконфигурировать apache сервер, отредактировав файл Httpd.conf [Источник 4]

Настройка RocksDB

Редактируем my.cnf, добавляя после раздела [mysqld] строки:

rocksdb
default-storage-engine=rocksdb
skip-innodb
default-tmp-storage-engine=MyISAM
collation-server=utf8_bin

log-bin
binlog-format=ROW

Инициализируем базу данных:

mysql_install_db --defaults-file=/path/to/my.cnf
mysqld_safe --defaults-file=/path/to/my.cnf

"Из коробки" RocksDB поддерживает следующие операции с данными:

Операции в Zabbix
Get Получить одно значение по ключу
Multi get Атомарно получить несколько значений по набору ключей
Set Установить одно значение по ключу
Multi set Атомарно установить несколько значений по набору ключей
Delete key Удалить ключ из БД
Multi delete Атомарно удалить несколько ключей
Check key exist Быстрая проверка существования ключа в БД
Increment Атомарное увеличение/уменьшение значения на заданную величину

При этом поддерживается расширение списка команд с помощью C++ интерфейса:

struct RequestBase 
    { 
        virtual ~RequestBase() {} 

        /** 
         *  Runs request listener 
         *  @param       event request object 
         *  @param       event buffer object 
         */ 
        virtual void run(const EvRequest &, const EvBuffer &) = 0; 
    };

Пример таблицы:

CREATE TABLE `linktable` (
      `id1` bigint(20) unsigned NOT NULL DEFAULT '0',
      `id1_type` int(10) unsigned NOT NULL DEFAULT '0',
      `id2` bigint(20) unsigned NOT NULL DEFAULT '0',
      `id2_type` int(10) unsigned NOT NULL DEFAULT '0',
      `link_type` bigint(20) unsigned NOT NULL DEFAULT '0',
      `visibility` tinyint(3) NOT NULL DEFAULT '0',
      `data` varchar(255) NOT NULL DEFAULT '',
      `time` bigint(20) unsigned NOT NULL DEFAULT '0',
      `version` int(11) unsigned NOT NULL DEFAULT '0',
      PRIMARY KEY (link_type, `id1`,`id2`) COMMENT 'cf_link_pk',
      KEY `id1_type` (`id1`,`link_type`,`visibility`,`time`,`version`,`data`) COMMENT 'rev:cf_link_id1_type'
    ) ENGINE=RocksDB DEFAULT COLLATE=utf8_bin; 
[Источник 5]

Пример установки

Источники

  1. RocksDB & Zabbix // habr.com/. https://habr.com/post/334276/ (дата обращения: 19.09.2018).
  2. MariaDB // mariadb.com/. https://mariadb.com/kb/ru/mariadb-vs-mysql-features/ (дата обращения: 19.09.2018).
  3. Zabbix official site // zabbix.com/. https://www.zabbix.com/ru/about(дата обращения: 19.09.2018).
  4. Настройка сервера apache // opennet.ru/. https://www.opennet.ru/docs/RUS/apache/ (дата обращения: 19.09.2018).
  5. Getting Started with MyRocks // github.com/. https://github.com/facebook/mysql-5.6/wiki/Getting-Started-with-MyRocks(дата обращения: 19.09.2018).