Мониторинг является неотъемлимой частью любого современного бизнес процесса. При этом выполняется постоянное наблюдение за системой и в случае отклонения от некоторого установленного состояния имеется возможность мгновенного реагирования а иногда и автоматического устранения неисправности. Мониторинг компьютерных систем является сложнейшей задачей в виду огромного разнообразия сервисов, служб и параметров проверки. Поиски решения, которое максимально охватило бы все аспекты мониторинга привели меня к 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 получим ошибку о нехватке ресурсов
Я правлю примерно так. Можно использовать текстовый редактор
# 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 дней. Рекомендуется установить реально необходимые сроки хранения истории.
Установив даже самые короткие сроки информации будет много. По-этому рекомендуется рулить данные и средствами СУБД, а именно добавить параметр 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 % от общей оперативной памяти) innodb_strict_mode = 0
Сохраняем и запускаем в режиме безопасной установки:
# 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. Для получения самых свежих пакетов можно установить релиз или добавить репозиторий вручную:
# yum localinstall http://repo.zabbix.com/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm # yum install php-pecl-mysql.x86_64 # yum -y install zabbix-server-mysql zabbix-agent zabbix-web-mysql
После установки необходимо создать структуру базы данных вручную имтортировав структуру и метаданные:
# zcat /usr/share/doc/zabbix-server-mysql-4.4.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; fastcgi_buffer_size 32k; fastcgi_buffers 4 32k; 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
Перед установкой необходимо так же выставить необходимые права на запись
chown -R nginx:nginx /etc/zabbix/web/
Переходим к установке веб интерфейса
1) Приветствие
2) Проверка системных требований
3) Установка соединения с сервером БД 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
Добрый.
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
Приветствую, 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, но права на чтение есть у всех
А что у вас?
Все тоже самое -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»
Если позволите, это прочитал на другом сайте (удалите, если нельзя):
Перезапустим 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. Здесь менял и рестарт сделал /etc/nginx/nginx.conf — не помогло.
2. «сменить владельца файлов и директорий веб интерфейса Zabbix на пользователя Nginx» — это через команду — chown -R nginx:nginx /usr/share/zabbix ??? (если да, тогда тоже не помогло).
На сколько я вижу с правами у вас всё правильно.
У меня владелец /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)
Решил проблему!
chown -R nginx:nginx /etc/zabbix/web (был apache)
Спасибо!
Поздравляю! 🙂
подправьте «Можно заходить на веб интерфейс с логином admin и паролем zabbix» — Admin (с большой буквы) 🙂
эхх.. правил для iptables не хватает еще, а так статья зашибись!
В некоторой степени вы правы, в админке пользователь указан с большой буквы, но авторизация проходит с пользователем admin и Admin. Сейчас обновлю информацию. Спасибо 😉
у меня авторизация не проходит с маленькой буквы.
А zabbix на 80 порту работает и все? Ничего открывать больше не надо?
Зависит от того, как вы планируете мониторить.
Если использовать пассивные проверки(сервер сам опрашивает всех клиентов) то больше ничего не нужно.
Я использую активные проверки(все клиенты отправляют данные на сервер в автоматическом режиме) и для этого открыт порт 10051. Этот вариант намного удобнее и проще для массового добавления серверов.
К примеру ваш сервер находится на VPS у хостера, а вы хотите мониторить порядка 15 машин в вашем офисе. Очевидно, что все они находятся за NAT и в случае пассивных проверок для каждой нужно пробрасывать порт.
По-этому я не использую этот метод совсем, а остановился исключительно на активных проверках
О, спасибо. Буду экспериментировать 🙂
Я еще вопрос задам. Только не ругайтесь:)
Вот есть допустим вирт. хостинг файл в nginx для подключения phpmyadmin через http://site.ru/phpmyadmin/.
В нем локейшен и алиас:
location /phpmyadmin/ {
alias /usr/share/phpMyAdmin/;
Локейшен (место нахождение) — это каталог, который должен быть в корне веб-сервера или тут мы указываем путь в адресной строке?
локейшн это как раз ссылочка
а alias это физический путь к файликам.
Я иногда делаю хитро: конфиг nginx-а вообще не трогаю, а просто создаю симлинк на реальный каталог с phpMyAdmin внутри того каталога, где находится сайт 🙂
Во! Теперь все понятно. Спасибо!
Very good post! We will be linking to this great article on our website.
Keep up the great writing.
If you want to get a good deal from this article then you have to apply these strategies to your
won web site.
Highly descriptive post, I enjoyed that a lot. Will there be a part 2?
I got this site from my pal who told me regarding this web page and now this time I am visiting this
website and reading very informative content here.