How to / Установка Zabbix-server (FreeBSD, PostgreSQL, Nginx)

    «В жизни каждого системного администратора рано или поздно наступает момент, когда глаз и рук уже не хватает уследить за всеми серверами, то там, то там возникают какие-то проблемы, а для решения их очень хочется узнать что же было „до этого“. И именно здесь на выручку приходят они — великие и ужасные системы мониторинга.» (с) xanf
    Такая ситуация возникла и у меня, следить за всем постоянно невозможно, писать кучу скриптов тоже не вариант, а необходимо иметь возможность оперативно реагировать на различные сбои, хранить историю некоторых параметров, ну и просто всякие «красивые» графики любы моему сердцу. Поэтому решил поставить систему мониторинга. Выбран был Zabbix. На хабре есть некоторые рецепты использования zabbix, но не освещена тема установки. Я не претендую на оригинальность, описанный способ довольно тривиален и аккумулирует информацию из интернета и официальной документации. Итак. Себе на память и друзьям на помощь:
    Вариант установки Zabbix 1.8 с СУБД PostgreSQL и вебмордой через Nginx + PHP-FPM.
    UPD: Актуализировано для версии zabbix 3.4

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

    1. Устанавливаем FreeBSD. (mc, bash, и остальное по вкусу)


    2. Устанавливаем zabbix-server


    Изначально я пытался поставить на SQLite, но make считал что в системе нет SQLite выше версии 3.0.0, хотя ./configure из исходников определял все нормально. Решение крылось в файле заголовков sqlite3.h, которого не было там где его искали. Но я не стал заморачиваться т.к. на сайте zabbix'a в документации сказано, что версия zabbix 1.8 не поддерживает SQLite. Я решил использовать PostgreSQL, просто в силу того что с ним я работал больше чем с MySQL.
    cd /usr/ports/net-mgmt/zabbix-server
    make install clean (выбираем Postgresql)

    3. Устанавливаем PostgreSQL

    такой же версии как postgres-client, которого поставил zabbix-server.
    Смотрим версию:
    pkg_info |grep postgr
    postgresql-client-9.5.9 PostgreSQL database (client)
    cd /usr/ports/databases/postgresql95-server/
    make install clean

    Добавляем postgresql_enable=«YES» в /etc/rc.conf

    4. Далее создаем базу для zabbix-server:


    У меня была ошибка работы вебморды, ей не хватало прав на базу, т.к. базу и таблицы я сделал сначала от пользователя pgsql, а уже потом завел пользователя zabbix. Я дал ему полные на все таблицы и вебморда заработала. В данной статье я учел этот момент.
    su pgsql
    /usr/local/bin/initdb -D /usr/local/pgsql/data

    и стартуем /usr/local/etc/rc.d/postgresql start
    su pgsql
    psql -d template1
    psql> create database zabbix;
    psql> CREATE USER zabbix WITH password ‘tmppassword’ (Создаем пользователя для сервера zabbix)
    psql> GRANT ALL PRIVILEGES ON DATABASE zabbix to zabbix;
    psql> \q
    cd /usr/local/share/zabbix34/server/database/postgresql/
    cat schema.sql | psql -U zabbix zabbix
    psql -U zabbix zabbix < images.sql
    psql -U zabbix zabbix < data.sql

    (в версии 1.8 порядок был другой. сначала data.sql затем images.sql)

    5. Конфигурируем zabbix-server:


    cp /usr/local/etc/zabbix34/zabbix_server.conf.sample /usr/local/etc/zabbix34/zabbix_server.conf

    Необходимо указать:
    Dbuser=zabbix, Dbpassword=tmppassword (пользователь для подключения к базе)
    DBSocket=/tmp/.s.PGSQL.5432 или Dbport=5432 (по умолчанию там для mysql)

    Я использую подключение через сокет(т.к. у меня все на одной машине). Остальное оставляем как есть.
    Добавляем в /etc/rc.conf строку zabbix_server_enable=«YES» и стартуем
    echo 'zabbix_server_enable=«YES»' >> /etc/rc.conf
    /usr/local/etc/rc.d/zabbix_server start

    6. Устанавливаем Zabbix-Frontend (вебморду):


    cd /usr/ports/net-mgmt/zabbix-frontend
    make install clean

    Выбираем опцию PGSQL
    • Устанавливаем PHP с подержкой FPM и Postgresql

    UPD:Текущие порты ставят это как зависимость к вебморде, но если у вас не так то:
    cd /usr/ports/lang/php5
    make deinstall (если уже установлен но с другими параметрами)
    make config install clean (выбираем PHP_FPM)
    cd /usr/ports/lang/php5-extensions
    make config install clean (выбираем Postgresql)

    Тут тоже будем работать через сокет (если нет, то оставляем все как есть), конфиг: /usr/local/etc/php-fpm.conf, правим:
    listen = /tmp/php-fpm.sock

    Добавляем строку 'php_fpm_enable=«YES» в файл '/etc/rc.conf' и стартуем

    echo 'php_fpm_enable=«YES»' >> /etc/rc.conf
    service php-fpm start

    Проверяем:
    sockstat |grep php

    Вебморду настраивают обычно через апач, но я сделал на nginx. Конфиг проще, ресурсов ест меньше. Думаю с данной задачей он справится не хуже апача.
    cd /usr/ports/www/nginx
    make install clean

    Правим конфиг /usr/local/etc/nginx/nginx.conf. У меня получился такой:
    http {
    include mime.types;
    default_type application/octet-stream;
    #Раскомментируем
    log_format main '$remote_addr — $remote_user [$time_local] "$request" '
    '$status $body_bytes_sent "$http_referer" '
    '"$http_user_agent" "$http_x_forwarded_for"';

    # Логируем попытки доступа к веб-серверу (раскомментируем и меняем путь)
    access_log /var/log/nginx/access.log main;

    sendfile on;
    keepalive_timeout 65;
    #Включаем сжатие
    gzip on;

    server {
    listen 80;
    server_name ZABBIX_SERVER_IP_OR_NAME; # Об этом ниже
    #Лог доступа только к вебморде zabbix-server'a
    access_log /var/log/nginx/zabbix.access.log main;

    # Папка с файлами вебморды
    location / {
    root /usr/local/www/zabbix;
    index index.html index.php;
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    root /usr/local/www/nginx-dist;
    }
    # Дружим Nginx и PHP-FPM
    location ~ \.php$ {
    root html;
    fastcgi_pass unix:/tmp/php-fpm.sock; # или 127.0.0.1:9000 если не правили конфиг php-fpm
    fastcgi_param SCRIPT_FILENAME /usr/local/www/zabbix$fastcgi_script_name;
    fastcgi_param QUERY_STRING $query_string;
    include fastcgi_params;
    }

    #Deny access to zabbix files
    location ~* /(?:api|conf|include)/ {
    return 301 ht_p://zabbix.local/index.php;
    }

    }

    По поводу server_name. Сначала я оставил там localhost. Все работало, но при попытке отсортировать по столбцу (например список хостов) URL строился от localhost. Я долго бился с этими граблями лазил в конфигах и кодах zabbix'a, но безуспешно. Обратил внимание на этот параметр при написании статьи и все заработало. Может кто-нибудь объяснит почему так, если не сложно? :)
    Еще я изменил пути к файлам с логами поэтому создаем директорию для файлов с логами:
    mkdir /var/log/nginx
    chown www:www /var/log/nginx

    Прописываем в /etc/rc.conf строку nginx_enable=«YES» и стартуем:
    /usr/local/etc/rc.d/nginx start

    Далее заходим в браузере на ht_p://zabbix_server_ip и продолжаем установку по визардам:
    На 3 шаге идет проверка параметров PHP, правятся они в файле /usr/local/etc/php.ini
    Если файла нет, можно скопировать его из php.ini.development или php.ini.production
    Я правил:
    memory_limit = 128M
    post_max_size = 20M
    upload_max_filesize = 16M
    max_execution_time = 300
    max_input_time = 300
    date.timezone = «Asia/Irkutsk»

    После рестартим php-fpm
    /usr/local/etc/rc.d/php-fpm restart

    На 4 шаге выбираем PostgreSQL и вписываем пользователя и пароль для доступа к базе zabbix (в нашем случае zabbix\tmppassword). Адресс сервера оставляем localhost, т.к. PostgreSQL установлен на этой же машине что и вебморда, и по умолчанию принимает соединения от localhost. UPD1: Чтобы вебморда подключалась к PostgreSQL тоже через сокет, вместо localhost пишем /tmp/ (путь до папки с .s.PGSQL.5432). Или в файле /usr/local/www/zabbix/conf/zabbix.conf.php пишем $DB[«SERVER»] = '/tmp'; Теперь (по желанию) подключение к PostgreSQL по tcp/ip можно вообще отключить.
    На 7 шаге жмем скачать конфиг и создаем файл /usr/local/www/zabbix/conf/zabbix.conf.php с содержимым cкачаного файла

    Вопросы безопасности не были учтены. В основном это ограничение доступа к файлам конфигураций, особенно где лежат пароли, ограничение доступа вебсервера к папкам и доступ к базе извне. Если есть грубые огрехи конфигураций (почти все конфигурации используются по умолчанию) прошу указать мне на это.
    Рассмотрение установки zabbix-agent и настройка мониторинга устройств выходит за рамки данной памятки.
    P.S.: Я не обладаю большим опытом и знаниями по настройке и сопровождению использованных компонент, поэтому буду рад замечаниям и рекомендациям.
    • 0
    • 38,6k
    • 6
    Поделиться публикацией

    Комментарии 6

      0
      Если серверов много, то как правило это компания у которой есть деньги и она предоставляет некий сервис, возможно кластерные решения с большим количеством апликаций (Java, tomcat, DataBases ...).
      Сам долго заморачивался с опенсорсными системами, но имея цель повысить качество сервиса и мониторинга систем я выбрал продукцию от компании Мanageengine — Applications Manager.

      Все быстро и просто настраивается, имеет в своем распоряжении БД и составляет годовые тренды, мониторит практически все стандартные приложения от apache, Java RMI до SAP.

      Но основное вкусное в этой системе, что можно построить инфраструктуру и указать влияние одной единицы на сервис в целом.

      Ну и красивейшие отчеты по заданым параметрам.

      ИМХО идеальное решение для мониторинга именно инфраструктуры (SLA, operator, admin, owner)
        0
        А что не умеет мониторить из коробки, то понимает самописные плагины на любом языке
          0
          в zabbix это все тоже есть, кроме разве что влияния одной единицы на сервис, но SLA я еще не настраивал поэтому может и есть.
        0
        Хм… а зачем писать тоже что есть и в документации?
        Статья ни о чем.
          0
          location ~ \.php$ {
              ...
              fastcgi_index index.php;

          Смысл fastcgi_index в данном локэйшене поясните?

          location ~* /(api|conf|include)/ {
              rewrite ^/(.*)$ zabbix.local/index.php permanent;
          }

          А должно быть:
          location ~* /(?:api|conf|include)/ {
              return 301 http://zabbix.local/index.php;
          }
            0
            Извиняюсь fastcgi_index index.php; остался от экспериментов.
            Второй location поправил. Спасибо за подсказку.

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.