Знакомимся с zabbix начиная с правильной установки на Nginx в Centos 7

Мониторинг является неотъемлимой частью любого современного бизнес процесса. При этом выполняется постоянное наблюдение за системой и в случае отклонения от некоторого установленного состояния имеется возможность мгновенного реагирования а иногда и автоматического устранения неисправности. Мониторинг компьютерных систем является сложнейшей задачей в виду огромного разнообразия сервисов, служб и параметров проверки. Поиски решения, которое максимально охватило бы все аспекты мониторинга привели меня к Zabbix. Это реализация клиент-серверной архитектуры с очень гибкими параметрами конфигурации как серверной так и клиентской части, что позволяет мониторить что и как угодно.
Со времён моего первого знакомства с этой системой прошло немало времени и zabbix превратился из просто хорошей в абсолютную систему. И тем не менее проект развивается.
В данном случае у меня имеется новенький сервер с только что установленной операционной системой CentOS 7 и самыми последними обновлениями. Zabbix имеет клиентскую часть, серверную часть и web-интерфейс управления системой. Все настройки и аналитические данные хранятся в базе данных(MySQL, PostgreSQL и т.д.) что добавляет удобства в поддержке, обновлении и переносе системы. Следовательно для полноценной работы сервиса нам потребуется настроить WEB-сервер и сервер баз данных(в данном случае MySQL).

Установка Nginx с официального репозитория

# vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

Так же для некоторых компонентов нам понадобится дополнительный репозиторий EPEL (Extra Packages for Enterprise Linux)

# yum install epel-release
# yum install nginx
# systemctl enable nginx
# systemctl start nginx
# yum install php-fpm phpmyadmin

На всякий случай устанавливаю и phpMyAdmin. Он тянет некоторые модули php, которые лишними точно не будут
По умолчанию менеджер процессов FastCGI запускается на 9000 порту. Я обычно изменяю эту настройку на использование доменных сокетов. Так шустрее и безопаснее.

# vim /etc/php-fpm.d/www.conf
;listen = 127.0.0.1:9000
listen = /var/run/php-fpm/php-fpm.sock

Забегая наперёд скажу, что нужно отредактировать некоторые параметры php. Если этого не сделать, то при установке веб-интерфейса Zabbix получим ошибку о нехватке ресурсов
error
Я правлю примерно так. Можно использовать текстовый редактор

# sed -i 's/^post_max_size.*/post_max_size=16M/' /etc/php.ini
# sed -i 's/^max_execution_time.*/max_execution_time=300/' /etc/php.ini
# sed -i 's/^max_input_time.*/max_input_time=300/' /etc/php.ini
# sed -i "s/^\;date.timezone.*/date.timezone=\'Europe\/Kiev\'/" /etc/php.ini
# systemctl enable php-fpm
# systemctl start php-fpm

Ни для кого не секрет, что CentOS 7 претерпела серьёзных изменений. Вплоть до того, что теперь нельзя установить mysql-server. Вместо него теперь устанавливается mariadb-server.
Как заявляет разработчик MariaDB существенно лучше обычного MySQL и вот чем именно:
— Еще больше механизмов хранения данных
— Улучшенная производительность
— Расширения и новые возможности
— Улучшенное тестирование
— Меньше предупреждений и ошибок
— Настоящий Open Source

Не берусь комментировать, время покажет 🙂 Просто верим и просто устанавливаем:

# yum install mariadb mariadb-server

Работая некоторое время с заббиксом я узнал определённые нюансы, от которых попытаюсь Вас убереч
Хаускипер.
Камень преткновения Zabbix, если вовремя не обратить на него внимание.
Очистка истории (Housekeeper) — периодический процесс, выполняемый Zabbix сервером. Этот процесс удаляет устаревшую информацию и информацию удаленную пользователем. Так же историю хранимых действий и событий.
Zabbix сервер каждую минуту получает информацию о состоянии агента всех наблюдаемых серверов. В том числе о состоянии сервисов на каждом из хостов. Это довольно большой объём информации. При этом хранится информация за 365 дней. Рекомендуется установить реально необходимые сроки хранения истории.
housekeeper
Установив даже самые короткие сроки информации будет много. По-этому рекомендуется рулить данные и средствами СУБД, а именно добавить параметр innodb_file_per_table. При добавления таблицы с механизмом InnoDB сервер MySQL будет создавать для неё отдельный файл .ibd для хранения данных и индексов
Это глобальный параметр и его нельзя просто сменить на уже работающем сервере. Для этого потребуется ещё ряд действий.
Добавим следующие строки в конфигурационный файл в секцию [mysqld]

# vim /etc/my.cnf
[mysqld]
innodb_file_per_table=1
innodb_flush_method=O_DIRECT
innodb_log_file_size=1G
innodb_buffer_pool_size=4G #(Устанавливается порядка 60-70 % от общей оперативной памяти)

Сохраняем и запускаем в режиме безопасной установки:

# systemctl enable mariadb
# systemctl start mariadb
# mysql_secure_installation

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!

Remove anonymous users? [Y/n] y
 ... Success!

Disallow root login remotely? [Y/n] y
 ... Success!

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reload privilege tables now? [Y/n] y
 ... Success!

Thanks for using MariaDB!

Что бы далеко не ходить сразу создадим БД, пользователя и доступ для zabbix.
Что бы русский язык корректно отображался кодировку по умолчанию ставлю UTF-8

# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 11
Server version: 5.5.41-MariaDB MariaDB Server

Copyright (c) 2000, 2014, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> CREATE DATABASE zabbix CHARACTER SET utf8 COLLATE utf8_general_ci;

Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by '$ecur3Z@bb!xp@$S';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> \q
Bye

Подготовительные работы окончены. Дальше сам Zabbix. Для получения самых свежих пакетов можно установить релиз или добавить репозиторий вручную:

# rpm -Uvh http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm
Retrieving http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm
warning: /var/tmp/rpm-tmp.GKfB4z: Header V4 RSA/SHA512 Signature, key ID a14fe591: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:zabbix-release-3.2-1.el7         ################################# [100%]
# yum -y install zabbix-server-mysql zabbix-agent zabbix-web-mysql

После установки необходимо создать структуру базы данных вручную имтортировав структуру и метаданные:

# zcat /usr/share/doc/zabbix-server-mysql-3.2.1/create.sql.gz | mysql -uzabbix -p zabbix
Enter password:

Последний шаг — настройка веб сервера:

# vim /etc/nginx/conf.d/default.conf

server {
    listen       80;
    server_name  zabbix.tradenark.com.ua www.zabbix.tradenark.com.ua;
    root /usr/share/zabbix;

    location / {
        root   /usr/share/zabbix;
        index  index.php index.html;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }


    location ~ \.php$ {
        #root html;
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

   
}

проверяем правила и перечитываем их:

# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# nginx -s reload

Переходим к установке веб интерфейса
1) Приветствие
Welcome
2) Проверка системных требований
Проверка системных требований
3) Установка соединения с сервером БД MySQL
Установка соединения с сервером БД MySQL
4) Имя и порт сервера
Имя и порт сервера
5) Итоговая информация
Итоговая информация
6) Сообщение об успешной установке
Сообщение об успешной установке

И теперь укажем в конфигурационном файле zabbix-сервера параметры соединения с БД

# sed -i 's/^# DBPassword=.*/DBPassword=$ecur3Z@bb!xp@$S/' /etc/zabbix/zabbix_server.conf

Добавим сервисы в автозагрузку и запустим их:

# systemctl enable zabbix-server
ln -s '/usr/lib/systemd/system/zabbix-server.service' '/etc/systemd/system/multi-user.target.wants/zabbix-server.service'
# systemctl enable zabbix-agent
ln -s '/usr/lib/systemd/system/zabbix-agent.service' '/etc/systemd/system/multi-user.target.wants/zabbix-agent.service'
# systemctl start zabbix-agent.service
# systemctl start zabbix-server.service

Можно заходить на веб интерфейс с логином admin(Admin с заглавной буквы тоже подходит) и паролем zabbix

Админпанель

Естественно, первым делом устанавливаем свой пароль

UPD1:
Если получаем ошибку типа

Cannot display item queue.
Connection to Zabbix server "localhost" failed. Possible reasons:
1. Incorrect server IP/DNS in the "zabbix.conf.php";
2. Incorrect DNS server configuration.
Permission denied

То скорее всего необходимо отключить SELinux

# setenforce 0

Это до первой перезагрузки
Что бы отключить SELinux перманентно нужно в файле /etc/selinux/config исправить

SELINUX=enforcing

на

SELINUX=disabled

Знакомимся с zabbix начиная с правильной установки на Nginx в Centos 7: 21 комментарий

  1. Alex

    Добрый.

    500 ошибка при переходе к установке веб интерфейса.

    nginx errot.log

    FastCGI sent in stderr: «PHP message: PHP Warning: require_once(/etc/zabbix/web/maintenance.inc.php): failed to open stream: Permission denied in /usr/share/zabbix/include/classes/core/ZBase.php on line 292

    1. Воронов Глеб Автор записи

      Приветствую, Alex
      Проверьте права (или наличие) файла /etc/zabbix/web/maintenance.inc.php
      Вот что у меня:
      # ls -l /etc/zabbix/web/maintenance.inc.php
      -rw-r—r—. 1 root root 1036 Aug 10 11:56 /etc/zabbix/web/maintenance.inc.php

      Владелец и группа root, но права на чтение есть у всех
      А что у вас?

      1. Alex

        Все тоже самое -rw-r—r— 1 root root 1036 Nov 12 13:12 /etc/zabbix/web/maintenance.inc.php.

        Полный лог:

        [error] 4434#0: *165 FastCGI sent in stderr: «PHP message: PHP Warning: require_once(/etc/zabbix/web/maintenance.inc.php): failed to open stream: Permission denied in /usr/share/zabbix/include/classes/core/ZBase.php on line 292
        PHP message: PHP Fatal error: require_once(): Failed opening required ‘/etc/zabbix/web/maintenance.inc.php’ (include_path=’.:/usr/share/pear:/usr/share/php’) in /usr/share/zabbix/include/classes/core/ZBase.php on line 292» while reading response header from upstream, client: x.x.x.x, server: zabbix.xxx.ru, request: «GET / HTTP/1.1», upstream: «fastcgi://unix:/www/php-fpm.sock:», host: «zabbix.xxx.ru»

        1. Alex

          Если позволите, это прочитал на другом сайте (удалите, если нельзя):

          Перезапустим Nginx:
          systemctl restart nginx

          Открываем страницу и получаем 500ю ошибку т.к. некоторые файлы не погрузились, из-за того что не хватает прав доступа, есть 2 пути решения проблемы, первый и более сложный, сменить владельца файлов и директорий веб интерфейса Zabbix на пользователя Nginx ( под этим пользователем работает web сервер) или более простой запустить Nginx под другим пользователем, а именно apache происходит это потому что, изначально, веб морда zabbix рассчитана на работу с Apache и про Nginx ничего не знает, этот пользователь создается автоматически при установке php-fpm, в общем идем в:
          nano /etc/nginx/nginx.conf

          находим строку:
          user nginx;

          и меняем ее на
          user apache;

          1. Alex

            1. Здесь менял и рестарт сделал /etc/nginx/nginx.conf — не помогло.

            2. «сменить владельца файлов и директорий веб интерфейса Zabbix на пользователя Nginx» — это через команду — chown -R nginx:nginx /usr/share/zabbix ??? (если да, тогда тоже не помогло).

  2. Воронов Глеб Автор записи

    На сколько я вижу с правами у вас всё правильно.
    У меня владелец /usr/share/zabbix вообще root
    Скажите, сокет php-fpm у вас /www/php-fpm.sock? Именно он указан в тексте ошибки.
    Может быть ошибка в имени файла?
    Обычно он находится в /var/run/php-fpm/php-fpm.sock (/var/run/php5-fpm/php5-fpm.sock в ubuntu/debian)

        1. Воронов Глеб Автор записи

          В некоторой степени вы правы, в админке пользователь указан с большой буквы, но авторизация проходит с пользователем admin и Admin. Сейчас обновлю информацию. Спасибо 😉

          1. Alex

            у меня авторизация не проходит с маленькой буквы.

            А zabbix на 80 порту работает и все? Ничего открывать больше не надо?

            1. Воронов Глеб Автор записи

              Зависит от того, как вы планируете мониторить.
              Если использовать пассивные проверки(сервер сам опрашивает всех клиентов) то больше ничего не нужно.
              Я использую активные проверки(все клиенты отправляют данные на сервер в автоматическом режиме) и для этого открыт порт 10051. Этот вариант намного удобнее и проще для массового добавления серверов.
              К примеру ваш сервер находится на VPS у хостера, а вы хотите мониторить порядка 15 машин в вашем офисе. Очевидно, что все они находятся за NAT и в случае пассивных проверок для каждой нужно пробрасывать порт.
              По-этому я не использую этот метод совсем, а остановился исключительно на активных проверках

  3. Alex

    Я еще вопрос задам. Только не ругайтесь:)

    Вот есть допустим вирт. хостинг файл в nginx для подключения phpmyadmin через http://site.ru/phpmyadmin/.
    В нем локейшен и алиас:

    location /phpmyadmin/ {
    alias /usr/share/phpMyAdmin/;

    Локейшен (место нахождение) — это каталог, который должен быть в корне веб-сервера или тут мы указываем путь в адресной строке?

    1. Воронов Глеб Автор записи

      локейшн это как раз ссылочка
      а alias это физический путь к файликам.
      Я иногда делаю хитро: конфиг nginx-а вообще не трогаю, а просто создаю симлинк на реальный каталог с phpMyAdmin внутри того каталога, где находится сайт 🙂

Добавить комментарий