Регистрация домена и его управление процедура не сложная, но имеет некоторые нюансы. Существует возможность зарегистрировать домен у разных регистраторов, но я нашел самый выгодный и удобный вариант по регистрации и продлению доменов.
Введение
В статье расскажу как на практике произвожу регистрацию и управление доменом когда клиенты просят зарегистрировать домен.
Требования предъявляются следующие:
Минимальная цена регистрации и продления;
Управление доменом без привязки к компаниям оказывающим услуги хостинга;
Удобное и понятное управление доменом;
Простая передача прав владельцу домена.
Схема проста и имеет несколько шагов:
Регистрация почты на Yandex;
Регистрация домена у регистратора RuWEB;
Делегирование прав на Reg.ru
Добавление домена в Yandex Коннект;
Подтверждение прав с помощью Reg.ru.
Теперь обо всём расскажу по порядку.
Регистрация почты на Yandex
Регистрация почты на Yandex обусловлена тем что зарегистрированный домен будет подключен к сервису Yandex Коннект. Откуда можно создавать и контролировать почтовые ящики по типу имя@домен и управлять DNS записями домена.
При желании можно воспользоваться и другими услугами. Например, я создаю отдельный почтовый ящик куда в Yandex Диск кладу резервные копии данных сайта.
Внешний вид и все настройки для почтового ящика будут соответствовать всем возможностям почтового сервиса Yandex.
Единственное значимое ограничение заключается в том что нельзя будет рассылать большое количество писем, но это как правило никому и не надо.
Действия у регистратора RuWEB
Были времена когда регистрация домена и его продление имели одинаковую стоимость, но это время прошло и теперь один и тот же домен можно зарегистрировать за разную цену.
Может кому конечно и нужны такие тарифы на продление, но в большинстве случаев это просто навязанные услуги.
У регистратора RuWEB цены на регистрацию и продление остались стабильными и по разговору со службой поддержки я понял что они не планируют повышать цены.
Например, был один домен цена продления которого была в районе 1000 рублей. Переведя его на управление в RuWEB я был приятно удивлен что у них цена продления будет 330 рублей.
В ссылке добавлен партнерской код. В случае если вы зарегистрируйтесь в системе по этой ссылке мне будут приходить небольшие суммы с каждой вашей оплаты. Цена для вас что по моей ссылке что без неё будет одинаковая.
Скажу сразу такая схема сотрудничества очень распространена и частенько ради этих вознаграждений люди рекламируют продукты которые этого совсем не заслуживают.
Например, ребята с adminvps.ru сделали очень хитрых ход по продвижению своих услуг. Мне на почту пришло сообщение что им понравился мой сайт и они хотят повесить баннер за выгодное мне вознаграждение. После не долгих переговоров я повесил баннер в надежде на выгодное мне сотрудничество. Ребята предлагали и бесплатный хостинг и помесячную оплату, но дальше разговоров ничего не пошло. В результате когда прошел месяц и я обратился с вопросом об оплате они еще раз предложили бесплатный хостинг с минимальным тарифом а когда я отказался сказали что не будут у меня рекламировать. Компания такая прошла у них на ура, так как в течении нескольких месяцев я встречал их баннер на большом количестве сайтов, но спустя время народ просек фишку и больше такого большого количества баннеров на тематических сайтах вы не увидите.
Для меня не приемлемо рекламировать продукт если заведомо знаю что есть варианты лучше.
Главное при регистрации на RuWEB укажите почту которую специально создали в Yandex.
Сравнение цен у разных регистраторов доменов
Например, возьмем домен slavna44.ru и посмотрим сколько будет стоить регистрация домена и его продление у разных регистраторов.
Имейте ввиду что некоторые регистраторы позволят вам зарегистрировать домен дешево, но вот цена продления будет дорогая.
Вот что предлагает reg.ru:
Вот что предлагает nic.ru:
Вот какие варианты предлагает ruweb.net:
Вы всё еще думайте где регистрировать и продлевать домен? Я нет.
Если домен уже зарегистрирован вы можете его перенести и платить меньше.
Упускаю моё недовольство что у других регистраторов цена продления спрятана и не так то просто сразу найти её. RuWEB в простом и понятном виде показывает всю информацию о возможных вариантах регистрации и сразу показывает цену продления.
Регистрация домена
Можете регистрируйте домен на себя или клиента это не принципиально, так как информацию о владельце домена можно скрыть а права на управление вы передадите. Поменять владельца не сложно, если клиенту это важно.
Желательно указать свою рабочую почту при регистрации домена на которую будут приходить сообщения о том что пора продлевать домен. Бывали случаи когда указанная почта клиентом не контролируется и домен просто перестает работать :).
Делегирование прав на REG.RU
В последствии нам понадобится сделать подтверждение владения доменом при подключении к Yandex Коннект и делать это мы будем через записи DNS на сайте reg.ru.
Разрешаем управлять доменом с сайта регистратора Регру:
Указываем имя профиля куда будет представлена возможность управления:
При успешном выполнении операции вы увидите:
Обращаю внимание на то что вы не передаете полностью управление на reg.ru а только разрешаете управлять доменом.
Увидим такую страницу на которой жмем «Попробовать»:
Увидите страницу с разными возможными Yandex. Выбираем раздел «Админка»:
Выбрав «Админка» мы увидим следующую страницу:
Жмем «Домены» и добавляем необходимый домен:
После добавления домена попадем на страницу где сказано что домен необходимо подтвердить:
Выбираем вариант подтверждения по DNS и переходим на сайт регистратора reg.ru, где мы укажем необходимый параметр.
Подтверждение прав на домен
Авторизуемся на сайте reg.ru и переходим на наш сайт:
Нажимаем «Изменить» и выбрав DNS серверы reg.ru должны увидеть следующую картинку:
Теперь мы сможем добавить необходимую TXT запись.
Нажимаем «Добавить запись» и добавляем TXT:
Вносим необходимые данные:
В результате мы должны получить:
Теперь на следующий день переходим в панель Yandex Коннект и периодически нажимая «Проверить» ждем пока не увидим страницу:
Видим что проверка пройдена, но нет необходимой MX записи.
Обычно проверка проходит в течении суток, хотя может длится и трое суток.
Идем опять на сайт reg.ru и указываем DNS сервера Yandex:
На этом все процедуры по передаче управления доменом переданы на Yandex Коннект и осталось подождать еще немного (примерно сутки) пока окончательно не получим страницу вида:
Права полностью переданы и можно управлять доменом.
О том как работать со своим Web сервером на операционной системе Linux вы можете в разделе Сервисы — Web сервер.
Управление DNS домена
Например, так добавляются записи:
В результате мы указали что основной сайт работает на сервере с ip 1.1.1.1. Добавили под домен forum.slavna44.ru который будет работать на этом же адресе.
В результате нам не надо будет скакать по управлению DNS в разных панелях управления. Перенесли сайт на другой хостинг, поменяли значение записи IP домена и задача выполнена.
Создание почтового ящика
На главной странице «Админка» добавляем нового пользователя:
Указываем Имя Фамилия и название почтового ящика по шаблону какой вас устраивает.
В результате получим:
Авторизация проходит со страницы сервиса почты Yandex. Логин указывается полный и при первом заходе необходимо поставить галочку согласившись с лицензией:
Вот так выглядит главная страница почты:
Подключение к почте со сторонних программ осуществляется по тем же правилам что и у стандартной почты Yandex.
Заключение
После всех этих действий для передачи прав владельцу домена вам достаточно передать данные от почты и аккаунта регистратора хозяину домена.
Пользуюсь этой схемой уже давно и улучшения которые делает Yandex только радуют.
Расскажу про установку системы GLPI на операционную систему CentOS. Удобней системы для ведения ИТ-инфраструктуры я не встречал. Кроме ведения заявок можно контролировать рабочие станции, вести справочную документацию и много чего ещё делать.
Введение
Практически сразу начав заниматься обслуживанием компьютерной техники я столкнулся с необходимостью вести учет всех поступивших заявок по обслуживанию в удобном виде.
Основные причины по которым я пришел к выводу что такая система необходима следующие:
Удобное ведение поступивших заявок — заявки поступившие в систему не забываются и не надо вести дополнительных блокнотов;
Хронология каждой заявки — в процессе решения собирается вся необходимая информация в одном месте;
История заявок — в случае проблем с заказчиком всегда можно посмотреть все события по заявке и освежить в памяти события которые со временем забываются.
Требования к системе предъявлялись следующие:
Свободная система работающая на свободных операционных системах;
Система должна активно развиваться и иметь возможность простого обновления;
Система должна работать на популярном языке программирования;
Возможность удобной подачи заявки и последующего ведения;
Ведение в одной системе разных организаций;
Гибкое администрирование уровня доступа пользователей;
Создание базы знаний для пользователей;
Использование доменных пользователей;
Личный планировщик заданий.
Перепробовал большое количество разных систем, но остановился на GLPI, так как эта система максимально удовлетворяет всем моим требованиям и позиционирует себя как свободный менеджер ИТ-инфраструктуры.
Основное что меня порадовало в системе GLPI это:
Систему GLPI можно установить на простой хостинг как обычный сайт так как он написан на PHP (при условии что можно сделать некоторые специфические настройки);
Настроек очень много и это позволяет реализовать практические любые пожелания;
Простота и продуманность обновления;
Информативность по выполняемым действиям очень радует, так как можно посмотреть подробную историю как действий пользователей так и автоматических заданий;
Расширение возможностей с помощью большого количества дополнений;
Почти во всех настройках есть история изменений где можно посмотреть кто и что делал;
Делать резервные копии базы данных перед серьезными настройками в системе GLPI.
Если сравнить по функционалу и подходу разработчиков, то система похожа на популярную систему мониторинга Zabbix.
Еще один из главных аргументов которые меня склонили к окончательному выбору системы это то что в разработке принимает активное участие Remi Collet и ведет поддержку GLPI в своем репозитории.
В статье вы узнаете полную версию установки на операционную систему CentOS c нуля.
Добавляем пользователя nginx в группу support.sevo44.ru:
usermod -aG support.sevo44.ru nginx
Открываем конфигурационный файл ssh находящийся по пути /etc/ssh/sshd_config. Комментируем один параметр и добавим необходимый код:
vim /etc/ssh/sshd_config
= необходимые изменения и добавления =
# Закоментируем параметр
#Subsystem sftp /usr/lib64/misc/sftp-server
# Для работы sftp
Subsystem sftp internal-sftp
# Для support.sevo44.ru
Match User support.sevo44.ru
X11Forwarding no
AllowTcpForwarding no
AllowAgentForwarding no
PermitTunnel no
ForceCommand internal-sftp
ChrootDirectory /var/www/support.sevo44.ru
# /support.sevo44.ru
Перезапускаем службу sshd:
systemctl restart sshd
Назначаем владельцем содержимого сайта пользователя которого мы создали выше:
С репозитория Remi можно установить GLPI, но настроен он будет для работы с Apache.
Установим Php версии 7.2 со всеми необходимыми пакетами. Возможно их больше чем необходимо, но именно они устанавливаются если устанавливать используя репозиторий Remi:
Внесем необходимые изменения в файл настроек php.ini:
vim /etc/php.ini
= необходимые изменения =
# Запрет на исполнение произвольного кода на сервере с правами php процесса при загрузке файла.
cgi.fix_pathinfo=0
# Необходимая временная зона
date.timezone = "Europe/Moscow"
Запускаем php-fpm и добавляем в автозагрузку:
systemctl enable --now php-fpm
Запускать php-fpm будем через unix сокет. Для этого переименуем конфиг /etc/php-fpm.d/www.conf, создадим новый и приводим к следующему виду:
Создадим отдельный пул для php-fpm, который будет обслуживать сайт support.sevo44.ru на котором и будет работать GLPI. Удобно когда для каждого сайта используется независимый пул в котором можно выставить необходимые значения.
Переходим в нужную папку, копируем существующий конфигурационный файл и делаем необходимые изменения:
vim /etc/yum.repos.d/nginx.repo
= необходимый код =
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
Устанавливаем:
dnf install nginx
Добавляем в автозагрузку и запускаем:
systemctl enable --now nginx
Проверяем работу:
curl http://localhost
= вывод команды =
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
Для удобства всегда правлю файл сайта по умолчанию для понимания к какому серверу подключился:
vim /usr/share/nginx/html/index.html
= необходимый код =
<!DOCTYPE html>
<html>
<head>
<title>Welcome!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working.</p>
<p><em>lemp.sevo44.loc</em></p>
</body>
</html>
Переименуем главный конфигурационный файл Nginx и создадим новый с нужными параметрами:
mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf_orig
vim /etc/nginx/nginx.conf
= необходимый код c пояснениями=
# Пользователь и группа, от имени которых будет запущен процесс
user nginx nginx;
# Число воркеров в новых версиях рекомендовано устанавливать параметр auto
worker_processes auto;
# Уровни лога debug, info, notice, warn, error, crit, alert или emerg
# перечислены в порядке возрастания важности. При установке определённого уровня
# в лог попадают все сообщения указанного уровня и уровней большей важности.
# Например, при стандартном уровне error в лог попадают сообщения уровней error, crit, alert и emerg.
# Если параметр не задан, используется error.
error_log /var/log/nginx/error.log warn;
# Файл в котором будет храниться идентификатор основного процесса
pid /var/run/nginx.pid;
events {
# Максимальное количество соединений одного воркера
worker_connections 1024;
# Метод выбора соединений (для FreeBSD будет kqueue)
use epoll;
# Принимать максимально возможное количество соединений
multi_accept on;
}
http {
# Отключить вывод версии nginx в ответе
server_tokens off;
# Указываем файл с mime-типами и указываем тип данных по-умолчанию
include /etc/nginx/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 эффективнее чем read+write
sendfile on;
# Ограничивает объём данных, который может передан за один вызов sendfile().
# Нужно для исключения ситуации когда одно соединение может целиком захватить воркер
sendfile_max_chunk 128k;
# Отправлять заголовки и начало файла в одном пакете
tcp_nopush on;
tcp_nodelay on;
# Параметр задаёт таймаут, в течение которого keep-alive соединение с клиентом не будет закрыто со стороны сервера
keepalive_timeout 65;
# Сбрасывать соединение если клиент перестал читать ответ
reset_timedout_connection on;
# Разрывать соединение по истечению таймаута при получении заголовка и тела запроса
client_header_timeout 3;
client_body_timeout 5;
# Разрывать соединение, если клиент не отвечает в течение 3 секунд
send_timeout 3;
# Задание буфера для заголовка и тела запроса
client_header_buffer_size 2k;
client_body_buffer_size 256k;
# Ограничение на размер тела запроса
client_max_body_size 12m;
# Подключение дополнительных конфигов
include /etc/nginx/conf.d/*.conf;
}
Проверяем правильность настроек Nginx:
nginx -t
= вывод команды =
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Всё хорошо. Выполняем обновление правил без перезагрузки Nginx:
nginx -s reload
Конфигурационный файл Nginx для GLPI
Создаем фал Nginx для работы GLPI:
vim /etc/nginx/conf.d/support.sevo44.ru.conf
= необходимый код =
### support.sevo44.ru
server {
listen 80;
server_name support.sevo44.ru www.support.sevo44.ru;
root /var/www/support.sevo44.ru/www/;
index index.php index.html index.htm;
access_log /var/www/support.sevo44.ru/log/support.sevo44.ru-access.log;
error_log /var/www/support.sevo44.ru/log/support.sevo44.ru-error.log;
# Для записи в log реальных ip при использовании прокси nginx
set_real_ip_from 10.10.0.1;
real_ip_header X-Real-IP;
# Без него не грузит файлы больше 1 метра
client_max_body_size 10m;
keepalive_timeout 60;
add_header Strict-Transport-Security 'max-age=604800';
location / {
try_files $uri $uri/ =404;
autoindex on;
}
location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff)$ {
access_log off;
expires max;
}
location /api {
rewrite ^/api/(.*)$ /apirest.php/$1 last;
}
location ~ \.php$ {
try_files $uri = 404;
fastcgi_index index.php;
fastcgi_pass unix:/run/php-fpm/support.sevo44.ru.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SERVER_NAME $host;
fastcgi_param HTTPS on;
fastcgi_intercept_errors on;
fastcgi_ignore_client_abort off;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_param PHP_VALUE "
memory_limit = 64M
file_uploads = on
max_execution_time = 600
session.auto_start = off
session.use_trans_sid = 0
";
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
#allow all;
deny all;
log_not_found off;
access_log off;
}
location ~ /\.ht {
deny all;
}
}
В моем варианте сигнал проксируется с помощью Nginx прокси. Сертификат получаем на проксирующем сервере.
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
Добавим необходимый репозиторий создав файл с кодом:
vim /etc/yum.repos.d/mariadb.repo
= необходимый код =
# MariaDB 10.4 CentOS repository list - created 2019-10-24 18:16 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/centos8-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
Сам процесс установки и начальной настройке прост и понятен. Все дальнейшие «сюрпризы» и нюансы будут при настройке системы для работы.
Система настолько гибкая что порой начинаешь путаться во всех её возможных схемах работы.
Главное делайте бэкап базы данных средствами самой GLPI и тогда сможете сэкономить много своего времени.
Установка GLPI
Разработчики для безопасности рекомендуют вынести некоторые папки за рамки веб сервера для безопасности и об это рассказано тут.
В данном примере я не выношу папки за пределы веб сервера, хотя на практике это использую. Лишняя безопасность еще никому не вредила.
Запускаем установку введя в браузере адрес сайта.
Выбираем язык:
Соглашаемся с лицензией:
Выбираем вариант установить:
Смотрим результат проверок:
На предупреждение не обращаем внимания так как мы не вынесли некоторые папки за пределы веб сервера по рекомендации разработчиков.
Вводим данные от базы данных:
Выбираем созданную ранее базу данных:
Проверка подключения к базе данных прошла успешно:
Соглашаемся с отправкой статистики использования если уважаем свободное программное обеспечение:
Если посмотрите по ссылке какие данные отправятся то увидите что ничего секретного там нет.
Продолжаем и при желании открываем страницу на которой сказано как можно помочь материально проекту:
В результате увидим сообщение об удачной установке и список всех пользователей по умолчанию с паролями:
Вот таким видом нас встретит страница авторизации GLPI:
Вот так выглядит главная страница при авторизации GLPI:
По рекомендации удаляем указанный файл и меняем пароль у пользователя glpi. У остальных пользователей или меняем пароль или просто отключаем их.
Настройка CRON для GLPI
Добавление в cron правильной команды один из главных моментов в GLPI, так как он будет обрабатывать все автоматические задачи.
Добавим файл с необходимым кодом:
vim /etc/cron.d/glpi
= необходимый код =
# GLPI core
# Run cron to execute task even when no user connected
*/5 * * * * root /usr/bin/php /var/www/support.sevo44.ru/www/front/cron.php
Где указаны следующие параметры:
*/5 * * * * — задание выполняется каждые 5 минут;
support.sevo44.ru — пользователь которому принадлежит файл;
/usr/bin/php — с помощью чего обрабатывать файл;
/var/www/support.sevo44.ru/www/front/cron.php — путь до необходимого файла.
После добавления обязательно нужно проверить как он выполняется. Посмотрим логи cron:
cat /var/log/cron
= часть вывода кода =
Nov 10 21:57:01 support.sevo44.loc CROND[527]: (root) CMD (/usr/bin/php /var/www/support.sevo44.ru/www/front/cron.php)
Nov 10 21:58:01 support.sevo44.loc CROND[540]: (root) CMD (/usr/bin/php /var/www/support.sevo44.ru/www/front/cron.php)
Nov 10 21:59:01 support.sevo44.loc CROND[556]: (root) CMD (/usr/bin/php /var/www/support.sevo44.ru/www/front/cron.php)
Из вывода видно что задачи успешно выполняются каждую минуту.
Ротация логов
В системе GLPI присутствует свой хороший механизм логирования, но держать логи на уровне сайта не помешает.
Настроим сразу ротацию логов что бы при необходимости было удобно их просматривать.
Создадим необходимый файл:
vim /etc/logrotate.d/sites
= необходимый код =
/var/www/support.sevo44.ru/log/*.log
{
daily
missingok
rotate 52compress
delaycompress
notifempty
create 644 nginx adm
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
Согласно кода ротация будет проводится раз в день, и хранить архивы будет 52 дня. Файлы будут сжиматься и иметь права 644.
Backup сайта GLPI
После настройки настоятельно рекомендую настроить резервное копирование файлов и базы данных. Посмотреть о том как я произвожу резервное копирование в подобных случаях можно из статьи Backup надежный и безопасный.
Изменения в файлах GLPI
Обычно я сторонник не вносить изменения в файлы разработчика, но в данном случае мне они кажутся разумными и снимают ненужные вопросы от пользователей системы.
Произведем изменении графики:
pics/favicon.ico — иконка сайта;
pics/fd_logo.png — логотип справа после авторизации;
pics/login_logo_glpi.png — логотип при авторизации.
Берем оригинальные файлы и не меняя разрешения делаем новые картинки. Для создания иконки сайта существуют куча онлайн сайтов и Вы можете воспользоваться ими.
Изменим заголовок сайта до авторизации:
index.php
=== примерно 76 строка ===
echo '<head><title>'.__('CЭВО:Техподдержка - Аутентификация').'</title>'."\n";
Убираем внизу сообщений информацию Automatically generated by GLPI:
inc/notificationtemplate.class.php
=== По поиску в 2 местах меняем ===
Automatically generated by GLPI ---> Сгенерировано автоматически
Обновление GLPI
Механизм обновления разработчиками продуман и хорошо документируется. При правильном подходе проблем с обновлением не возникнет. Например, мне без проблем удается обновлять уже в течении трех лет.
Перед обновление обязательно посмотрите какие у Вас установлены плагины и проверьте будут ли они работать в новой версии. В случае если плагина для новой версии еще нет Вам необходимо отказаться от его использования или повременить с обновлением GLPI.
Перед обновление обязательно делайте резервную копию файлов и базы данных.
Перед началом обновления всегда ставлю пароль на открытие сайта средствами Nginx. Это позволит вам избежать случая когда пользователь который хочет зайти на портал увидит там страницу с обновлением и начнет выполнять действия за вас 🙂
О том как сделать доступ к сайту по паролю средствами Nginx Вы можете посмотреть тут.
Посмотреть какая последняя версия и сохранить себе путь можно на странице Downloads сайта разработчика.
Переходим в корневую папку, скачиваем туда новую версию и распаковываем:
cd /var/www/support.sevo44.ru
wget https://github.com/glpi-project/glpi/releases/download/9.5.3/glpi-9.5.3.tgz
tar zxvf glpi-9.5.3.tgz
В результате у вас появиться папка glpi.
В папке www удаляем всё кроме нескольких папок:
files — все файлы что загружали;
plugins — все плагины;
config — настройки db.
Теперь всё что есть в папке glpi переносим в папку www. Например, я для подобных целей использую MC.
После того как всё перенесено необходимо выставить правильного пользователя и правильные права на файлы с папками:
Переходим на сайт и видим информацию об обновлении.
В данном обновление необходимо настроить работу с временными зонами и в документации про это сказано.
Инициализируем данные часовых поясов из часовых поясов нашей системы:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -p -u root mysql
Enter password: пароль пользователя root mariadb
Дадим необходимые права на чтение:
mysql -u root -p
Enter password: пароль пользователя root mariadb
GRANT SELECT (`Name`) ON `mysql`.`time_zone_name` TO 'support.sevo44.ru'@'%';
Query OK, 0 rows affected (0.082 sec)
FLUSH PRIVILEGES;
\q
Перезапустим сервис баз данных:
systemctl restart mariadb
Больше ошибок нет и переходим к обновлению базы данных.
Нажимаем кнопку «Обновление» и получим примерно такую картину:
Мы видим что обновление произошло с 9.4.4 до 9.5.3 и указало какие действия необходимо сделать.
В данном случае нам сказано что необходимо выполнить консольную команду которая преобразует в базе данных все необходимые поля относящиеся к временным зонам.
Произведем необходимые действия:
cd /var/www/support.sevo44.ru/www/bin
php console glpi:migration:timestamps
=== вывод команды ===
Found 185 table(s) requiring migration.
Do you want to continue ? [Yes/no]y
185/185 [============================] 100%
Migration done.
Возможно после обновления расширений необходимо будет повторить действие которое описано выше.
В заключении, необходимо обновить плагины, если это необходимо, и зайти на страницу с автоматическими заданиями. Возможно какие то задания будут в зависшем состоянии и их необходимо перезапустить на странице настроек конкретного задания.
Не забываем произвести изменения в файлах GLPI если это делалось ранее.
Заключение
Надеюсь статья оказалась понятной и информативной. Рассмотрены все основные моменты по установке, начальной настойке и последующего обновления системы GLPI. В следующей статье я обязательно поделюсь нюансами с которыми столкнулся при настройке системы. Некоторые моменты не логичны возможно по причине не правильного перевода, но в целом система очень удобна в работе.
Версии PHP от Remi являются самыми популярными и стабильными при использовании на Web серверах. Расскажу основные моменты работы с репозиторием. Рассмотрим как сменить версию PHP. Один из самых популярных репозиториев для CentOS.
Введение
Есть замечательный человек Remi Collet, который создал репозиторий пользующийся огромной популярностью у пользователей операционной системы CentOS. Познакомится с новостями репозитория можно на блоге Remi Collet.
В статье будет рассказано про использование репозитория на системах CentOS 7 и 8.
Les RPM de Remi repository поддерживает последние версии MySQL и PHP (бэкпорты федоровских rpm). Пакеты этого репозитория необходимо использовать с осторожностью, так как они заменяют базовые пакеты.
В другой статье вы можете узнать как использовать репозиторий WebtaticEL для CentOS 7. В нем так же используются последние версии PHP, но к сожалению там нет многих удобств которые есть у Remi. Например, используя репозиторий Remi можно всегда иметь последнюю версию phpMyAdmin.
Предварительная подготовка
Перед началом использования репозитория Remi необходимо подключить репозиторий Epel созданный группой специалистов операционной системы Fedora. Пакеты из Epel репозитория никогда не конфликтуют и не переустанавливают базовые пакеты RHEL.
Установка Epel в CetnOS 7 производится командой:
yum install epel-release
Установка Epel в CetnOS 8 производится командой:
dnf install epel-release
Подключение репозитория от Remi
для CentOS 7
Для установки репозитория Remi в CentOS 7 достаточно выполнить команду:
Посмотреть активные репозитории можно следующей командой:
yum repolist
= вывод части команды =
Загружены модули: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.corbina.net
* epel: mirror.logol.ru
* extras: mirror.reconn.ru
* remi-safe: mirror.reconn.ru
* updates: mirror.corbina.net
remi-safe Safe Remi's RPM repository for Enterprise Linux 7 - x86_64 3 144
По умолчанию установлен репозиторий remi-safe который имеет только дополнительные пакеты для базового хранилища и коллекций программного обеспечения. Например, при попытке установить phpMyAdmin будет установлена старая версии. Для установки последних версий надо активировать репозиторий remi.
Посмотрим репозитории что у нас есть в системе выполнив команду:
GLPI — это программный инструмент ITSM, который помогает вам легко планировать и управлять изменениями в ИТ структуре предприятия, эффективно решать возникающие проблемы используя систему заявок, так же позволяет вам получить контроль над ИТ-бюджетом и расходами вашей компании. В будущем я расскажу как работать с этим замечательным проектом. Кроме того, то что Remi Collet поддерживает репозиторий меня очень радует.
Перед работой с репозиториями Remi необходимо установите пакет yum-utils, что бы не получать ошибку «bash: yum-config-manager: command not found». Установим yum-utils выполнив необходимую команду:
yum install yum-utils
Сейчас у нас активирован remi-safe. Для активации remi надо вначале отключить remi-safe а потом активировать remi выполнив команды:
Перед тем как определится какую версию PHP использовать я всегда смотрю на сайте Supported Versions PHP.
В списке имеющихся репозиториев нет версии php5.6, так как он входит в состав remi.repo. Для установки достаточно в команде указать remi-php56.
для CentOS 8
В 8 версии CentOS используется версия php 7.2 которая уже может удовлетворять требования множества новых сайтов, но если вам нужны версии новее подключайте Remi.
Посмотрим список всех доступных вариантов установки php:
dnf module list php
= вывод команды =
Последняя проверка окончания срока действия метаданных: 1:41:10 назад, Пн 28 окт 2019 08:05:09.
CentOS-8 - AppStream
Name Stream Profiles Summary
php 7.2 [d] common [d], devel, minimal PHP scripting language
Remi's Modular repository for Enterprise Linux 8 - x86_64
Name Stream Profiles Summary
php remi-7.2 common [d], devel, minimal PHP scripting language
php remi-7.3 common [d], devel, minimal PHP scripting language
php remi-7.4 common [d], devel, minimal PHP scripting language
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
Из вывода выше видно что по умолчанию стоит базовая версия CentOS 7.2 и имена она будет установлена.
Установка версии PHP от Remi
для CentOS 7
Активируем репу remi-php72, для этого выполняем команду:
# yum-config-manager --enable remi-php72
Устанавливаем php7.2 выполнив команду:
yum install php72
Лучше указывать php72 и тогда пакеты будут установлены только из репозитория remi. Например, я всегда внимательно смотрю какая версия php будет установлена в списке устанавливаемых пакетов.
Установим php-fpm и наиболее популярные модули, которые могут пригодится в процессе эксплуатации веб сервера.
Последняя проверка окончания срока действия метаданных: 1:53:36 назад, Пн 28 окт 2019 08:05:09.
Зависимости разрешены.
====================================================================================================
Пакет Архитектура Версия Репозиторий Размер
====================================================================================================
Enabling module streams:
httpd 2.4
php remi-7.2
Результат транзакции
====================================================================================================
Продолжить? [д/Н]: д
Выполнено!
Switching module streams does not alter installed packages (see 'module enable' in dnf(8) for details)
Убедимся что версия выбрана правильно:
dnf module list php
= вывод команды =
Последняя проверка окончания срока действия метаданных: 1:55:03 назад, Пн 28 окт 2019 08:05:09.
CentOS-8 - AppStream
Name Stream Profiles Summary
php 7.2 [d] common [d], devel, minimal PHP scripting language
Remi's Modular repository for Enterprise Linux 8 - x86_64
Name Stream Profiles Summary
php remi-7.2 [e] common [d], devel, minimal PHP scripting language
php remi-7.3 common [d], devel, minimal PHP scripting language
php remi-7.4 common [d], devel, minimal PHP scripting language
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
Всё правильно.
Установим php remi-7.2 и все популярные модули следующей командой:
Внесем необходимые изменения в файл настроек php.ini:
vim /etc/php.ini
= необходимые изменения =
# Запрет на исполнение произвольного кода на сервере с правами php процесса при загрузке файла.
cgi.fix_pathinfo=0
# Необходимая временная зона
date.timezone = "Europe/Moscow"
Настройка Php-fpm для Nginx
Для того чтобы связать nginx и php будем использовать мост php-fpm. Основной файл настройки находится по пути /etc/php-fpm.conf и там должен быть параметр include=/etc/php-fpm.d/*.conf говорящий о том где лежат настройки пулов.
Запускаем php-fpm и добавляем в автозагрузку:
systemctl start php-fpm
systemctl enable php-fpm
=== Для CentOS 8 можно выполнить одну команду ===
systemctl enable --now php-fpm
Проверяем, запустился ли он.
systemctl status php-fpm
= вывод команды =
● php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2019-10-28 10:09:25 MSK; 1min 1s ago
Main PID: 463 (php-fpm)
Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 6 (limit: 11524)
Memory: 25.7M
CGroup: /system.slice/php-fpm.service
├─463 php-fpm: master process (/etc/php-fpm.conf)
├─464 php-fpm: pool www
├─465 php-fpm: pool www
├─466 php-fpm: pool www
├─467 php-fpm: pool www
└─468 php-fpm: pool www
окт 28 10:09:24 wp-lxc_pro-php7_sevo44_loc systemd[1]: Starting The PHP FastCGI Process Manager...
окт 28 10:09:25 wp-lxc_pro-php7_sevo44_loc systemd[1]: Started The PHP FastCGI Process Manager.
Все в порядке, сервис работает и находится в автозагрузке.
Использовать порт или сокет решать вам, но говорят что сокет использовать лучше. Запустим php-fpm через unix сокет. Для этого переименуем конфиг /etc/php-fpm.d/www.conf, создадим новый и приводим к следующему виду:
Вы можете для каждого сайта созать свой пул и указать там все необходимые параметры. Например, для каждого сайта я создаю свой пул для гибкости настройки и благодаря этому я настраиваю корректный доступ к файлам по sftp.
В настройках nginx для сайта необходимо указать требуемый пул. Например, прописать код fastcgi_pass unix:/run/php-fpm/www.sock; в секции location ~ \.php$
Обновление версий PHP от Remi
Схема обновления универсальна и подойдет как для всех версий CentOS. В примере ниже расмотрен вариант обновления для версии 7.
Обновление состоит из нескольких действий:
Остановка php-fpm,
Вывод и удаление всех имеющихся пакетов php,
Удаление старого и активирование нового репозитория требуемой версии php,
Установка новой версии,
Проверка настрое из старой версии,
Запуск php-fpm и проверка сервиса.
Выполним обновление PHP до версии 7.3 в системе CentOS 7.
Обязательно смотрим версию и репозиторий откуда будут ставится пакеты.
Осталось проверить файлы что выдала команда при удалении старой версии php:
предупреждение: /etc/php-fpm.d/www.conf сохранен как /etc/php-fpm.d/www.conf.rpmsave
предупреждение: /etc/php.ini сохранен как /etc/php.ini.rpmsave
В заключение, запустим сервис php-fpm и проверим статус:
systemctl start php-fpm
systemctl status php-fpm
● php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; disabled; vendor preset: disabled)
Active: active (running) since Ср 2019-03-13 21:16:12 MSK; 7s ago
Main PID: 1392 (php-fpm)
Status: "Ready to handle connections"
CGroup: /lxc/php7-lxc/system.slice/php-fpm.service
├─1392 php-fpm: master process (/etc/php-fpm.conf)
├─1393 php-fpm: pool www
├─1394 php-fpm: pool www
├─1395 php-fpm: pool www
├─1396 php-fpm: pool www
└─1397 php-fpm: pool www
мар 13 21:16:11 php7-lxc-lemp.sevo44.loc systemd[1]: Starting The PHP FastCGI Process Manager...
мар 13 21:16:12 php7-lxc-lemp.sevo44.loc systemd[1]: Started The PHP FastCGI Process Manager.
Из вывода видно что сервис не стартует при загрузке. Добавим сервис в автозагрузку выполнив команду:
systemctl enable php-fpm
Вывод
В статье рассказано про основные моменты работы с репозиторием Remi Collet. Репозиторий активно обновляется и мой выбор остановился на использовании именно его при работе с PHP.
Backup или резервное копирование данных самое важное и необходимое действие. Только постоянное регулярное сохранение резервной копии в надежном месте и их постоянная проверка и мониторинг даст полную гарантию защиты данных от потери.
Введение
Правильное создание и безопасное хранение бэкапов задача важная и необходимая. Можно относится халатно, но тогда в случае проблем можете обнаружить что резервных копий нет или они просто испорчены.
Из статьи вы узнаете как я подхожу к этому вопросу и защищаю бэкапы всех своих ресурсов надежно и безопасно.
В примере будет рассмотрен вариант для резервного копирования файлов и базы данных сайта, но можно этот подход использовать и для других задач.
Можно использовать для резервных копий разные программные комплексы или пользоваться средствами которые предоставляют хостинги, но для этого необходимо их изучать или производить финансовые затраты.
Основа безопасности бэкапов
Правильность и безопасность бэкапов включает в себя несколько простых правил:
Хранение бэкапов за продолжительный период времени. Вариантов почему лучше хранить бэкапы долго множество. Например, удалили какой то материал, но решили восстановить спустя некоторое время или необходимо найти ошибку когда появилась проблема которую обнаружили не сразу.
Забирать бэкапы сторонним сервером. В идеале лучше использовать под резервные копии специальный сервер использующийся только для бэкапов. В случае если копии бэкапов отправляются с самого сервера где делаются бэкапы это опасно, так как в случае взлома или вируса вы можете потерять все копии.
Мониторинг как создание бэкапа так и аналитика его размеров. Как бы вы не пытались отслеживать периодически сами как делаются бэкапы по закону подлости, когда они потребуются, обнаружите что они или не делаются или испорчены.
Ниже я по порядку опишу все свои действия которые использую на практике. Будут использованы стандартные программы используемые во всех версиях Linux.
Создание бэкапов на сервере
Самое надежное это когда производится создание резервных копии на самом сервере, так как это гарантирует что вы не получите проблем возникших с удаленным подключением к сторонним ресурсам. Например, при использовании бэкапа на Yndex Disk у меня периодически были ошибки при создании бэкапа.
Структура папок для бэкапов
Создавать папки можно где угодно. Например, мне больше нравится создавать их в корне папку backup и держать там всё что связанно с резервными копиями.
Создадим необходимые папки куда будем класть бэкапы
/backup — папка где будет находиться всё что связано с резервными копиями;
/backup/bin — папка где будут находиться скрипты запускаемые по расписанию;
/backup/sevo44.ru/day — папка где будут лежать ежедневные бэкапы;
/backup/sevo44.ru/month — папка где будут лежать ежемесячные бэкапы;
/backup/sevo44.ru/source — папка в которой я храню копии которые были начальными. Например, в случае когда ресурс переносится с другого сервера или возвращается в жизнь после продолжительного перерыва в работе.
Backup и его периодичность
Всегда сложно выбрать какой необходим период хранения и интервал резервного копирования. Для меня удобней организовать резервное копирование по следующей схеме:
Дневные копии — хранить 30 дней,
Месячные копии — хранить год.
Подход к резервированию сугубо личное дело и зависит от множества факторов. Главное чтобы эти копии всегда были доступны, исправны и удовлетворяли вашим требованиям.
Создание скриптов для бэкапов
Создадим два скрипта для ежедневного и ежемесячного бэкапа.
Создадим скрипт который будем ежедневно запускать по расписанию:
vim /backup/bin/day-backup-sevo44.ru.sh
= необходимый код =
#!/bin/sh
# Текущая дата в формате 2015-09-29_04-10
date_time=`date +"%Y-%m-%d_%H-%M"`
# Папка для бэкапа
inf_dir='/var/www/sevo44.ru/www'
# Куда размещаем backup
bk_dir='/backup/sevo44.ru/day'
# Название архива с файлами
name_www='www-sevo44.ru'
# Название архива с базой
name_sql='sgl-sevo44.ru'
# Пользователь базы данных
user='sevo44-ru'
# Пароль пользователя базы данных
password='пароль'
# Имя базы данных для бэкапа
bd_name='sevo44-ru'
# Команды для выполнения
# В случае необходимости хранить только последний бэкап
# очищаем папку удаляя только файлы в папке
rm -f $bk_dir/*
# Создание файла с датой для мониторинга в zabbix
echo `date +"%Y-%m-%d_%H-%M"` > $bk_dir/timestamp
# Создание архива папки с файлами
/bin/tar -czvf $bk_dir/$name_www-$date_time.tar.gz $inf_dir
# Создание архива базы данных
/usr/bin/mysqldump --opt -v --databases $bd_name -u$user -p$password | /bin/gzip -c > $bk_dir/$name_sql-$date_time.sql.gz
# Удаляем архивы старше 5-ти дней
#/usr/bin/find $bk_dir -type f -mtime +5 -exec rm {} \;
Для ежемесячных бэкапов создадим такой скрипт:
vim /backup/bin/month-backup-sevo44.ru.sh
= необходимый код =
#!/bin/sh
# Текущая дата в формате 2015-09-29_04-10
date_time=`date +"%Y-%m-%d_%H-%M"`
# Папка для бэкапа
inf_dir='/var/www/sevo44.ru/www'
# Куда размещаем backup
bk_dir='/backup/sevo44.ru/month'
# Название архива с файлами
name_www='www-sevo44.ru'
# Название архива с базой
name_sql='sgl-sevo44.ru'
# Пользователь базы данных
user='sevo44-ru'
# Пароль пользователя базы данных
password='пароль'
# Имя базы данных для бэкапа
bd_name='sevo44-ru'
# Команды для выполнения
# В случае необходимости хранить только последний бэкап
# очищаем папку удаляя только файлы в папке
rm -f $bk_dir/*
# Создание файла с датой для мониторинга в zabbix
echo `date +"%Y-%m-%d_%H-%M"` > $bk_dir/timestamp
# Создание архива папки с файлами
/bin/tar -czvf $bk_dir/$name_www-$date_time.tar.gz $inf_dir
# Создание архива базы данных
/usr/bin/mysqldump --opt -v --databases $bd_name -u$user -p$password | /bin/gzip -c > $bk_dir/$name_sql-$date_time.sql.gz
# Удаляем архивы старше одного года
#/usr/bin/find $bk_dir -type f -mtime +365 -exec rm {} \;
Первая и последняя команда в обоих скриптах взаимоисключающие. При варианте когда мало места и есть возможность хранить только один бэкап первая команда должна выполняться а последняя нет. В случае достаточного места под бэкапы первую команду не выполняем а в последней выставляем количество дней за которые хранятся бэкапы.
После создания скриптов сделаем их исполнительными выполнив необходимую команду:
chmod +x -R /backup/bin
Ошибка при выполнении mysqldump
Иногда вы можете увидеть ошибку при резервном копировании базы данных такого вида:
mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces
Ошибка говорит о том что данный пользователь не может получить доступ к созданию резервных копий у всех таблиц базы.
Исправить такое можно добавив к од следующий параметр:
Суть этой команды заключается в том что на момент бэкапа база остановится. Такой вариант меня не устраивает и мы дадим правильные права для пользователя базы данных (предварительно подключившись к базе данных):
= для случая когда доступ нужен снаружи =
GRANT ALL PRIVILEGES ON *.* TO 'пользователь бд'@'%';
= для случая когда доступ только с localhost =
GRANT ALL PRIVILEGES ON *.* TO 'пользователь бд'@'127.0.0.1';
= сохраним изменения =
FLUSH PRIVILEGES;
Добавление заданий в cron
Время в которое необходимо выполнять выбирайте на свое усмотрение. В большинстве случаев лучше использовать ночное время так как в это время сервера загружены минимально и можно использовать их ресурсы для выполнения своих внутренних задач.
Обязательно учитывайте время когда делается первый бэкап, так как дальнейшие копии сделанных бэкапов надо делать позже по времени для правильного мониторинга.
В случае если создается резервная копия для разных ресурсов выставляйте время с учетом времини которое необходимо для создания бэкапа.
Открываем необходимый файл и добавляем нужный код:
vim /etc/crontab
= необходимый код =
### Backup
# sevo44.ru
# ежедневно
20 1 * * * root /backup/bin/day-backup-sevo44.ru.sh >/dev/null 2>&1
# ежемесячно 1-го числа
25 1 1 * * root /backup/bin/month-backup-sevo44.ru.sh >/dev/null 2>&1
Согласно команде каждый день в 1:20 бедет выполнятся скрипт для создания ежедневного бэкапа и ежемесячно первого числа в 1:25 будет создаваться ежемесячная резервная копия.
Проверка создания бэкапов
Убедится что все работает правильно можно только запустив скрипт у посмотреть результат его работы.
Мне больше нравится брать код непосредственно из файла crontab, так как это последнее место которое выявит ошибки связаные с правильностью написания пути к скрипту.
=== Выводим на укран всё что есть заданиях ===
cat /etc/crontab
= часть вывода =
20 1 * * * root /backup/bin/day-backup-sevo44.ru.sh >/dev/null 2>&1
=== Копируем выделеный код и выполняем в консоли ===
/backup/bin/day-backup-sevo44.ru.sh
= часть вывода =
...
/var/www/sevo44.ru/www/modules/mod_syndicate/tmpl/
/var/www/sevo44.ru/www/modules/mod_syndicate/tmpl/default.php
/var/www/sevo44.ru/www/modules/mod_syndicate/mod_syndicate.xml
/var/www/sevo44.ru/www/modules/mod_syndicate/helper.php
/var/www/sevo44.ru/www/LICENSE.txt
-- Connecting to localhost...
-- Retrieving table structure for table oxsht_assets...
-- Sending SELECT query...
-- Retrieving rows...
...
-- Disconnecting from localhost...
Посмотреть результат работы cron можно заглянув в файл:
Для безопасности можно создать пользователя на ресурсе откуда забираете данные и ограничить его только в папке откуда забираем резервные копии.
Создание скрипта для выполнения rsync
Создадим необходимый скрипт:
vim /backup/bin/rsync-lemp.sevo44.ru.sh
= необходимый код =
#!/bin/bash
# Записываем информацию в лог о начале
#echo "`date +"%Y-%m-%d_%H-%M-%S"` Start rsync lemp.sevo44.ru" >> /var/log/rsync-lemp.sevo44.ru.log
# Копирование бэкапов с lemp.sevo44.ru
/usr/bin/rsync -avzhe "ssh -p 25555" root@192.168.0.33:/backup/ /backup/lemp.sevo44.ru
# Зеркало бэкапов с lemp.sevo44.ru
#/usr/bin/rsync --delete -avzhe "ssh -p 25555" root@192.168.0.33:/backup/ /backup/lemp.sevo44.ru
# Записываем информацию в лог о конце
#echo "`date +"%Y-%m-%d_%H-%M-%S"` End rsync lemp.sevo44.ru" >> /var/log/rsync-lemp.sevo44.loc.log
# Удаляем архивы старше 15-ти дней если не использовать параметр --delete
#
/usr/bin/find /backup/lemp.sevo44.ru/sevo44.ru/day -type f -mtime +15 -exec rm {} \;
Скрипт задокументирован и выберите параметры исходя из ваших требований.
Расшифрую параметры указанные в коде:
a — режиме архива;
v — увеличение детализации;
z — сжатие данных файла во время передачи;
h — вывод чисел в удобочитаемом формате;
e — используем ssh подключение.
После создания скриптов сделаем их исполнительными выполнив необходимую команду:
chmod +x -R /backup/bin
Добавление задания в cron
Обязательно учитывайте время когда делается первый бэкап, так как дальнейшие копии сделанных бэкапов надо делать позже по времени для избегания путаницы и правильного мониторинга.
В случае если создается резервная копия для разных ресурсов выставляйте время с учетом времени которое необходимо для создания бэкапа.
Открываем необходимый файл и добавляем нужный код:
Согласно команде каждый день в 6:30 будет выполнятся скрипт который будет забирать резервные копии согласно вашим пожеланиям.
Дальнейшие проверки аналогичны действиям указанным в разделе выше.
В случае вывода ошибки при выполнении скрипта:
Unexpected remote arg: root@192.168.0.33:/backup/
rsync error: syntax or usage error (code 1) at main.c(1343) [sender=3.1.2]
Смотрите правильность указания всех путей, параметров. Для вывода справки выполните в консоли команду rsync —help .
Использование Yndex.Disk для backups
При регистрации домена мне нравится переводить его управление на Yandex. Для бэкапов создаю отдельный почтовый ящик на домене и туда копирую бэкапы сайта. Удобно передавать заказчику управление доменом и резервные копии в одном месте.
Yandex.Disk дает возможность подключится с помощью WebDav. Необходимо добавить пакет davfs2 для работы по WebDav.
К сожалению на данный момент невозможно передавать данные большого размера по WebDav на Yandex.
Вы можете установить на систему консольный клиент от Yandex и проводить резервное копирование с помощью его.
Более подробно с описанием сервиса Yandex Disk вы можете ознакомиться перейдя в раздел техподдержки Яндекса.
Установка Davfs2
Рассмотрим настройку на примере системы CentOS 7.
Подключим репозиторий Еpel:
yum -y install epel-release
Установим пакет davfs2:
yum -y install davfs2
Настройка WebDav для Yandex.Disk
Создадим папку куда будем монтировать:
mkdir /backup/mnt/ydisk-sevo44.ru-backups
Чтобы не путаться в конце я указываю логин почты на котором находиться диск.
Смонтируем Yandex.Disk в необходимую папку:
mount -t davfs https://webdav.yandex.ru /backup/mnt/ydisk-sevo44.ru-backups/
= вывод команды с необходимыми данными =
Please enter the username to authenticate with server
https://webdav.yandex.ru or hit enter for none.
Username: вводим логин
Please enter the password to authenticate user zeroxzed@yandex.ru with server
https://webdav.yandex.ru or hit enter for none.
Password: вводим пароль
/sbin/mount.davfs: Warning: can't write entry into mtab, but will mount the file system anyway
Диск смонтировался в указанную папку.
Отмантировать диск можно командой:
umount /backup/mnt/ydisk-sevo44.ru-backups/
Введение вручную данных при монтировании не всегда удобно и для удобства мы автоматизируем этот процесс.
Отредактируем файл /etc/davfs2/secrets, добавив в конец строку с данными для авторизации:
vim /etc/davfs2/secrets
= необходимые данные для добавления =
# путь монитрования - почтовый ящик - пароль
/backup/mnt/ydisk-sevo44.ru-backups/ backups@sevo44.ru password
Так мы можем задать любое количество строчек с необходимыми ресурсами Yandex.Disk.
В случае если вы хотите чтобы диск монтировался при перезагрузке системы то в etc/fstab необходимо добавить строчку:
mcedit /etc/fstab
= необходимые данные для добавления =
https://webdav.yandex.ru /backup/mnt/ydisk-sevo44.ru-backups davfs rw,user,_netdev 0 0
# обязательно переход на новую строку
Теперь при перезагрузке сервера диск автоматически монтируется.
Не советую использовать монитрование через fstab, так как в случае обрыва связи копии не будут копироваться.
Можно конечно настроить механизм который будет окнтролировать это подключение и поднимать его в случае обрыва, но мне это кажется ненужным усложнением.
Создание скрипта для работы с Yandex.Disk
Создалим скрипт для выполнения копирования резервных копий на Yandex.Disk:
vim /backup/bin/ydisk-sevo44.ru-backups.sh
= необходимые данные =
#!/bin/sh
# Монтируем Yandex.Disk
mount -t davfs https://webdav.yandex.ru /backup/mnt/ydisk-sevo44.ru-backups/
# Создание зеркала ежедневных архивов
rsync -avzh --delete /backup/sevo44.ru/day /backup/mnt/ydisk-sevo44.ru-backups/
# Копирование резервных копий
#rsync -avzh /backup/sevo44.ru/day /backup/mnt/ydisk-sevo44.ru-backups/
# Удаляем копии старше 10 дней при использовани копирования
#/usr/bin/find $bk_dir -type f -mtime +30 -exec rm {} \;
# Отмонтирует Yandex.Disk
umount /backup/mnt/ydisk-sevo44.ru-backups/
# Очищения кэш davfs2
find /var/cache/davfs2/ -mindepth 1 -a -print0 | xargs -n 100 -0 rm -rf
Скрипт выполнит следующие действия:
Смонтирует удаленный Yandex.Disk;
Сделает зеркало с папки /backup/sevo44.ru/day;
Отмонтирует Yandex.Disk;
Очистит кэш создаваемый при работе davfs2.
Очищать кэш созданный при работе davfs2 надо обязательно иначе место на диске быстро закончиться.
После создания скриптов дадим необходимые права для всех файлов в папке backup:
chmod +x -R /backup/bin
Добавление задания в cron
Откроем для редактирования /etc/crontab файл откуда выполнятся задания:
vim /etc/crontab
= необходимые данные для добавления =
# sevo44.ru backup to Ydisk.Disk
# Каждый день в 6:30 запускается ежедневный backup
30 6 * * * root /root/backup/sevo44.ru/day.sh >/dev/null 2>&1
Перезагрузим cron в системе CentOS 7 для применения изминений:
systemctl restart crond
Проверки осуществляем по аналогии с предыдущими главами.
Заключение
Постарался описать максимально понятно все варианты которые я использую при создании резервных копий данных сайтов. В случае если вы найдете ошибки или знаете как можно улучшить данные примеры пожалуйста напишите в комментариях к статье.
ZFS мониторинг файловой системы с помощью системы Zabbix. Контроль состояния происходит с учетом значения DEGRADED появляющегося в выводе статуса ZFS при ошибках с дисками. Своевременно полученная информация может избавить от серьезных проблем.
Введение
Не представляю как можно спокойно жить системному администратору без тотального контроля файловых систем. Например, для меня чем больше механизмов меня оповестят о проблемах дисков тем лучше. К сожалению жесткий диск может выйти из строя в любой момент и это не зависит от того дорогой он или дешевый.
В этой статье вы узнаете как с помощью системы Zabbix можно держать под контролем все имеющие диски в файловой системе ZFS.
Схема действий для мониторинга параметра будет следующей:
Создаем скрипт bach который будет записывать нужное значение в текстовый файл;
Добавляем в cron задание которое будет с нужной нам периодичностью записывать показания в текстовый файл;
Добавляем необходимые параметры в агент Zabbix и проверяем правильность работы;
На сервере Zabbix для нужного узла добавляем все необходимые данные для контроля над параметром и настраиваем оповещение в случае плохих параметров.
Действия на Zabbix агенте
Команда для вывода нужных параметров ZFS
Выведем состояние zfs:
zpool status
= вывод команды =
pool: rpool
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
ata-ST3120811AS_5PT00YS1-part3 ONLINE 0 0 0
ata-ST3120811AS_5PT00DRP-part3 ONLINE 0 0 0
errors: No known data errors
Из вывода видно что имеются 2 диска сделанные в зеркале.
ZFS мониторинг будет основываться на появлении сообщения DEGRADED. Выполним команду которая проверит наличие этого сообщение:
/sbin/zpool status | grep DEGRADED | wc -l
= вывод команды =
0
При отсутствии значения DEGRADED выводится сообщение 0. При наличии значения выведется число соответствующее количеству встречающихся значений.
Отключим диск и подождав немного запросим статус ZFS:
zpool status
= вывод команды =
pool: rpool
state: DEGRADED
status: One or more devices has been removed by the administrator.
Sufficient replicas exist for the pool to continue functioning in a
degraded state.
action: Online the device using 'zpool online' or replace the device with
'zpool replace'.
scan: none requested
config:
NAME STATE READ WRITE CKSUM
rpool DEGRADED 0 0 0
mirror-0 DEGRADED 0 0 0
ata-ST3120811AS_5PT00YS1-part3 REMOVED 0 0 0
ata-ST3120811AS_5PT00DRP-part3 ONLINE 0 0 0
errors: No known data errors
Видим что у одного из дисков появилось значение REMOVED и параметр DEGRADED встречается 3 раза.
Проверим правильность выполняемой команды:
/sbin/zpool status | grep DEGRADED | wc -l
= вывод команды =
3
Всё правильно.
Создадим папку и в ней скрипт bash который будем запускать в cron для записи значения в текстовый файл.
mkdir /etc/zabbix/scripts
vim /etc/zabbix/scripts/zfs_degraded-bin.sh
= необходимый код =
#!/bin/bash
/sbin/zpool status | grep DEGRADED | wc -l > /etc/zabbix/scripts/zfs_degraded.txt
Сделаем скрипт исполнительным:
chmod +x /etc/zabbix/scripts/zfs_degraded-bin.sh
Произведем проверки. Запустим скрит, проверим создание текстового файла и информацию в нём. Выполнив по очереди 3 команды:
sh /etc/zabbix/scripts/zfs_degraded-bin.sh
= вывод пустой =
ls /etc/zabbix/scripts
= вывод команды =
zfs_degraded-bin.sh zfs_degraded.txt
cat /etc/zabbix/scripts/zfs_degraded.txt
= вывод команды =
3
Все работает как надо. Добавим задание в крон:
vim /etc/crontab
= необходимый код =
*/3 * * * * root /etc/zabbix/scripts/zfs_degraded-bin.sh >/dev/null 2>&1
Каждые 3 минуты в текстом фале будет обновляться информация.
Добавление параметров для Zabbix агента
Для того чтобы Zabbix агент мог работать с нашими параметрами необходимо добавить в файл настройки необходимый параметр.
vim /etc/zabbix/zabbix_agentd.conf
= необходимый параметр =
UnsafeUserParameters=1
После необходимого параметра добавляем нужный код. В моем случае получился следующий код:
Открываем необходимый узел и перейдя в «Элементы данных» добавляем новый нажав «Создать элемент данных«.
Необходимо заполнить следующие поля:
Имя — pve-1 degraded zfs;
Ключ — pve-1.zfs;
Тип информации — Числовой (целое положительное);
Интервал обновления — 5m;
Период хранения истории — 1w;
Группы элементов данных — Filesystem.
Добаление тригера
Открываем необходимый узел и перейдя в «Триггеры» добавляем новый нажав «Создать триггер«.
Необходимо заполнить следующие поля:
Имя триггера — pve-1 degraded zfs;
Выражение — {pve-1:pve-1.zfs.last()}>0.
Ждем немного времени и проверяем срабатывание триггера. В случае успешного срабатывания выключаем систему, подключаем диск назад и запускаем систему.
Cброс счетчиков ошибок ZFS
После того как мы подключили в диск в выводе статуса ZFS будет информация об ошибках. Например, в нашем случае мы знаем чем вызваны эти ошибки и разбираться в их причине не требуется.
Сбросить все ошибки в пуле мы можем следующей командой:
zpool clear rpool
Заключение
Возможно есть и другие варианты и подходы для мониторинга файловой системы ZFS и если вы знаете о них поделитесь информацией в комментариях.
Мониторинг FSYNCS параметра в системе виртуализации Proxmox является одним из главных, так как сильно влияет на качество работы системы. Контролируя данный параметр в системе Zabbix можно оптимально настроить производительность дисковой системы сервера.
Введение
В системе Proxmox есть замечательный механизм проверки работы дисковой системы. Выполнив в консоли команду pveperf мы увидим полезную информацию о скорости работы жестких дисков. Основной параметр который показывает скорость работы с дисками это FSYNCS/SECOND.
Выведя man сервиса мы увидим всю информацию о требовании к нашему параметру.
man pveperf
= часть вывода команды =
FSYNCS/SECOND value should be greater than 200 (you should enable write back cache mode on you RAID controller - needs a battery backed cache (BBWC)).
В описании четко сказано что параметр должен быть не меньше 200. При меньших значениях однозначно будут проблемы в работе сервера.
Схема действий для мониторинга параметра будет следующей:
Создаем скрипт bach который будет записывать нужное значение в текстовый файл;
Добавляем в cron задание которое будет с нужной нам периодичностью записывать показания в текстовый файл;
Добавляем необходимые параметры в агент Zabbix и проверяем правильность работы;
На сервере Zabbix для нужного узла добавляем все необходимые данные для контроля над параметром и настраиваем оповещение в случае плохих параметров.
Действия на Zabbix агенте
Команда для вывода нужных параметров FSYNCS
Для начала нам надо посмотреть куда и что у нас смонтировано в системе.
df -h
= часть вывода для ZFS =
rpool/ROOT/pve-1 99G 1001M 98G 1% /
= часть вывода для mdadm =
/dev/md2 3,5T 1,2T 2,2T 35% /mnt/md2-raid10
Выводим информацию для нужного раздела.
Обязательно указываем в параметре куда смонтировано иначе не увидим параметр FSYNCS/SECOND.
pveperf /
= вывод команды =
CPU BOGOMIPS: 10044.86
REGEX/SECOND: 1168356
HD SIZE: 98.08 GB (rpool/ROOT/pve-1)
FSYNCS/SECOND: 85.84
DNS EXT: 67.40 ms
DNS INT: 1.44 ms (sevo44.loc)
pveperf /mnt/md2-raid10
= вывод команды =
CPU BOGOMIPS: 37241.08
REGEX/SECOND: 595252
HD SIZE: 3570.96 GB (/dev/md2)
BUFFERED READS: 165.42 MB/sec
AVERAGE SEEK TIME: 18.32 ms
FSYNCS/SECOND: 510.48
DNS EXT: 65.53 ms
DNS INT: 0.82 ms (sevo44.loc)
Теперь нам необходимо вывести только цифровое значение и для этого выполним команду:
pveperf / -сама команда с указанием куда смантирован раздел;
grep ‘FSYNCS/SECOND’ — выбираем только значения из строки с этими данныи;
cut -c20-24 — выводи знаки с 20 по 24 от начала строки.
Создадим папку где будет находится скрипт bach, файл с данными и добавим необходимый скрипт.
mkdir /etc/zabbix/scripts
vim /etc/zabbix/scripts/fsyncs-bin.sh
= необходимые данные =
#!/bin/bash
pveperf / | grep 'FSYNCS/SECOND' | cut -c20-24 > /etc/zabbix/scripts/fsyncs.txt
По действию скрипта данные будут перезаписываться при каждом выполнении скрипта в файле /etc/zabbix/scripts/fsyncs.txt. Файл создавать не надо, так как при выполнении скрипта он создастся сам.
Сделаем файл запускаемым.
chmod +x /etc/zabbix/scripts/fsyncs-bin.sh
Проверим работу скрипта и правильность получения данных.
sh /etc/zabbix/scripts/fsyncs-bin.sh
= вывод пустой =
ls /etc/zabbix/scripts
= вывод команды =
fsyncs-bin.sh fsyncs.txt
cat /etc/zabbix/scripts/fsyncs.txt
= вывод команды =
117.9
Скрипт создал файл и записал туда правильные данные. Запускаем скрипт несколько раз для полной уверенности в правильности записи данных.
Добавляем скрипт в cron для выполнения по расписанию.
vim /etc/crontab
= необходимый код =
*/3 * * * * root /etc/zabbix/scripts/fsyncs-bin.sh >/dev/null 2>&1
Например, я запускаю скрипт каждые 3 минуты.
Добавление параметров для Zabbix агента
Для того чтобы Zabbix агент мог работать с нашими параметрами необходимо добавить в файл настройки необходимый параметр.
vim /etc/zabbix/zabbix_agentd.conf
= необходимый параметр =
UnsafeUserParameters=1
После необходимого параметра добавляем нужный код. В моем случае получился следующий код:
Открываем необходимый узел и перейдя в «Элементы данных» добавляем новый нажав «Создать элемент данных«.
Необходимо заполнить следующие поля:
Имя — pve-1 fsyncs zfs;
Ключ — pve-1.fsyncs;
Тип информации — Числовой (с плавающей точкой);
Интервал обновления — 5m;
Период хранения истории — 1w;
Группы элементов данных — Filesystem.
Добавление тригера
Открываем необходимый узел и перейдя в «Тригеры» добавляем новый нажав «Создать тригер«.
Необходимо заполнить следующие поля:
Имя тригера — pve-1 fsyncs zfs;
Выражение — {pve-1:pve-1.fsyncs.last()}<200.
Добавление графика
Открываем необходимый узел и перейдя в «Графики» добавляем новый нажав «Создать график«.
Например, мне нравится выводить все параметры fsyncs для всех серверов в один график.
Заключение
Вначале практики я контролировал параметры только при настройке систем. После того как я стал контролировать мне удалось максимально настроить дисковую систему на лучшую производительность. Параметр постоянно меняется от разных параметров системы и только контролируя его можно разобраться в чем проблема и принять верные решения.
Вот примерно такие графики вы можете наблюдать в период настройки.
Мониторинг температуры процессора, материнской платы, памяти и жестких дисков системой Zabbix очень важен и крайне необходим. Контроль над температурными параметрами компьютера избавляет от серьезных проблем связанных с постоянным перегревом важных узлов компьютера.
Введение
Мониторинг температуры сервера это перовое что я обычно настраиваю сразу. Контролирую по максимуму все важные элементы.
Описание подойдёт для разных систем Linux. Более детально про установку и настройку Zabbix агентов для разных систем можно узнать в статье Zabbix agent установка и настройка.
Общий принцип мониторинга температуры
Для любой операционной системы необходимо выполнить 4 условия:
Возможными способами извлечь данные с датчиков температуры нужного устройства;
Обработать данные получив нужное значение;
Передать полученное значение на сервер Zabbix;
На сервере Zabbix добавить элемент данных, тригер и график.
Мониторинг температуры в системах Linux
Для примера я буду использовать систему Debian 10 Buster.
Мониторинг температуры CPU и Memory
Для получения данных о температуре будем применять утилиту lm-sensors. Утилита очень популярна и присутствует во всех дистрибутивах Linux.
После установки необходимо запустить мастер настройки. Мастер обнаружит все доступные в системе встроенные аппаратные датчики, а также автоматически определит подходящие драйвера для них.
sensors-detect
= необходимые действия =
На все вопросы отвечаем Y
В конце спросит:
Do you want to add these lines automatically to /etc/modules? (yes/NO)
Отвечаем YES.
Перезагрузим систему и выполним команду которая выведет информацию о всех имеющихся датчиках:
Получить необходимые значения можно разными вариантами. Причем как в том как написать код так и в том какие параметры получать для мониторинга.
Например, в моем случае имеется 4 ядерный процессор который показывает температуры на каждом ядре. Можно передавать максимальное, минимальное или среднее значение.
Мне кажется что правильней передавать максимальное значение. Если одно из ядер будет сильно перегреваться а другие имеют температуру ниже среднего я увижу среднюю температуры немного выше обычного показателя и не пойму что надо срочно решать проблему. Возможно для процессора такое и не сможет произойти, но для 8 модулей памяти вполне реально. Контролировать все показатели ядер и каждой планки памяти можно, но не имеет смысла.
Для выборки параметра из всех полей где присутствует параметр Core и есть значение температуры можно использовать следующие универсальные команды:
Вывод минимального значения температуры
sensors | grep Core | awk -F'[:+°]' '{if(min==""){min=$3}; if($3<min) {min=$3};} END {print min}'
Вывод максимального значения температуры
sensors | grep Core | awk -F'[:+°]' '{if(max==""){max=$3}; if(max<$3) {max=$3};} END {print max}'
Вывод среднего значения температуры
sensors | grep Core | awk -F'[:+°]' '{avg+=$3}END{print avg/NR}'
coretemp-isa-00000 — группа датчиков с которой выводить значение;
grep ‘Core 0’ — название параметра;
cut -c16-17 — выводит 16 и 17 знак с начала строки.
В нашем случае присутствует два процессора и у обоих одинаковое значение параметра Core. Для вывода параметров для конкретного процессора необходимо указать группу датчиков.
Вывод максимальной температуры для процессора имеющего группу датчиков coretemp-isa-0000
sensors coretemp-isa-0000 | awk -F'[:+°]' '{if(max==""){max=$3}; if(max<$3) {max=$3};} END {print max}'
Для вывода нужной температуры для памяти можно использовать два варианта:
Вывод максимальной температуры из всех значений Ch. в строках
sensors | grep Ch. | awk -F'[:+°]' '{if(max==""){max=$3}; if(max<$3) {max=$3};} END {print max}'
Вывод максимальной температуры из группу датчиков coretemp-isa-0000
sensors i5k_amb-isa-0000 | awk -F'[:+°]' '{if(max==""){max=$3}; if(max<$3) {max=$3};} END {print max}'
Надеюсь вам стало понятно как можно используя эти команды вывести нужный вариант.
Если будут вопросы вы всегда можете задать их в комментариях или поделиться своим опытом.
Добавление параметров для Zabbix агента
Для того чтобы Zabbix агент мог работать с нашими параметрами необходимо добавить в файл настройки необходимый параметр.
vim /etc/zabbix/zabbix_agentd.conf
= необходимый параметр =
UnsafeUserParameters=1
После необходимого параметра добавляем нужный код. В моем случае получился следующий код:
Расшифрую первую строчку кода которая содержит следующие значения:
UserParameter — параметр согласно которого агент понимает что с ним надо работать;
pve-t.core0 — название параметра который мы будем использовать при добавлении элемента данных;
sensors coretemp-isa-00000 | awk -F'[:+°]’ ‘{if(max==»»){max=$3}; if(max<$3) {max=$3};} END {print max}’ — команда которой получается требуемое значение.
После внесения изменений в файл настройки Zabbix агента его обязательно нужно перезапустить.
Для систем использующих Systemd команда перезапуска агента будет одинаковой. Например, для систем CentOS7, Debian 10 команда следующая:
systemctl restart zabbix-agent
Проверка получения значения Zabbix агентом
Для уверенности в том что агент правильно получает данные нам необходимо выполнить команду которая покажет какой параметр получает агент Zabbix.
Выведем значение первого параметра который был в добавляемом коде:
zabbix_get -s 127.0.0.1 -k pve-t.core0
= вывод команды =
65.25
Параметр работает и получает правильное значение.
В случае получения ошибок
-bash: zabbix_get: command not found
или
zabbix_get [20065]: Check access restrictions in Zabbix agent configuration
Можно получить данные о температуре жесткого диска с системы SMART, которая присутствует на всех современных дисках. На сервере, с которого я собираюсь получать значения, работает система Proxmox в которой присутствует собственный механизм проверки дисков на основании SMART. Будем получать данные температуры другим способом.
Утилиту hddtemp которая присутствует во всех дистрибутивах Linux и позволяет получать значения температуры дисков нам идиально подходит.
Установим утилиту выполнив команду:
apt install hddtemp
Команды для вывода нужных параметров
Вначале нам необходимо вывести список дисков которые используются в системе. Например, я выполняю следующую команду:
lsblk
= вывод команды =
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 931,5G 0 disk
├─sda1 8:1 0 100M 0 part
├─sda2 8:2 0 292,9G 0 part
└─sda3 8:8 0 443G 0 part /mnt/sda8
sdb 8:16 0 119,2G 0 disk
├─sdb1 8:17 0 7,5G 0 part [SWAP]
├─sdb2 8:18 0 954M 0 part /boot
└─sdb3 8:19 0 110,9G 0 part /
Из вывода видно что в системе есть два диска sda и sdb.
Выведем показание температуры для диска sda:
hddtemp /dev/sda
= вывод команды =
/dev/sda: ST3120811AS: 46°C
Команда для получения значений температуры будет такой:
hddtemp /dev/sda | cut -c24-25
= вывод команды =
46
Где параметры в коде имеют следующее значение:
hddtemp /dev/sda — утилита и диск с которого нужно получить значение;
cut -c24-25 — вывод 24 и 25 знака с начала строки.
Добавление параметров для Zabbix агента
Для того чтобы Zabbix агент мог работать с нашими параметрами необходимо наличие в файл настройки необходимого параметра.
vim /etc/zabbix/zabbix_agentd.conf
= необходимый параметр =
UnsafeUserParameters=1
После проверки наличия параметра добавляем необходимый код:
Мы получили ошибку в которой говорится что нет доступа на выполнение команды от пользователя Zabbix. В интернете масса советов о том как эти права добавить использую sudo, но в нашем случае используется система Proxmox в которой нет этого механизма а усложнять сам гипервизор занятие дурное.
Выведем информацию о правах на утилиту:
ls -l /usr/sbin/hddtemp
= вывод команды =
-rwxr-xr-x 1 root root 40328 Jan 21 2018 /usr/sbin/hddtem
Из вывода видно что принадлежит она root и право запускать имеет только он.
Выполним команду которая позволит пользователю Zabbix запускать это файл:
chmod +s /usr/sbin/hddtemp
Проверим результат:
ls -l /usr/sbin/hddtemp
= вывод команды =
-rwsr-sr-x 1 root root 40328 Jan 21 2018 /usr/sbin/hddtemp
zabbix_get -s 127.0.0.1 -k pve-t.sda
= вывод команды =
45
Настроить мониторинг на системе Windows температурных параметров оказалось не просто. В большинстве случаев статьи в интернете описывают различные варианты использования программы Open Hardware Monitor а именно её консольной версии. На сайте разработчика я не нашел консольного варианта а скачивать с других сайтов считаю не целесообразно по разным причинам.
Программа позволяет создавать логи в формате csv и имеет веб лицо с выводом всех параметров. Возможно, как то использовать эти возможности, но ответа на этот вопрос я пока не нашел.
Поделитесь пожалуйста в комментариях своими вариантами мониторинга температур в системах Windows.
Действия на сервере Zabbix
Добавление данных для мониторинга будет показано на примере данных максимальной температуры ядра первого процессора.
Добавление элемента данных
Открываем необходимый узел и перейдя в «Элементы данных» добавляем новый нажав «Создать элемент данных«.
Необходимо заполнить следующие поля:
Имя — core0 Temperature;
Ключ — pve-t.core0;
Тип информации — Числовой (с плавающей точкой);
Интервал обновления — 1m;
Период хранения истории — 1w;
Группы элементов данных — CPU.
Добавление тригера
Открываем необходимый узел и перейдя в «Тригеры» добавляем новый нажав «Создать тригер«.
Необходимо заполнить следующие поля:
Имя тригера — pve-t core0 Temperature;
Выражение — {pve-t:pve-t.core0.last()}>80.
Выражение формируется на вкладке открывающейся по кнопке «Добавить» рядом с полем «Выражение«.
Добавление графика
Открываем необходимый узел и перейдя в «Графики» добавляем новый нажав «Создать график«.
Какое количество графиков и настройки параметров отображения решите сами. Например, мне нравится выводить все параметры температур в один график.
По нажатию кнопки «Добавить» в параметре «Элемент данных» выбираем все необходимые элементы данных для отображения на графике.
В результате мой график имеет следующий вид:
На графике видно как менялись показания когда я подбирал оптимальное положение и тип вентиляторов.
К моему удивлению расположение мощного вентилятора на выдув воздуха снижает общую температуру при закрытом корпусе лучше чем при его отсутствии и открытом корпусе.
Заключение
После того как вы увидите свой график температурных параметров вам захочется поиграться с корпусом системного блока и вентиляторами для получения оптимальных параметров температуры. Основываясь на реальных данных вы сможете правильно настроить охлаждение важных узлов системного блока. Иногда наши мнения ошибочны. Против законов физики не попрешь. Например, после того как я стал использовать мониторинг температуры я кардинально поменял отношение и к тому какие должны быть вентиляторы и как их располагать.
В результате все мои сервера стали работать тише а температурные параметры соответствует средним для данных типов устройств.
Zabbix agent можно установить практически на любую операционную систему. В этой статье будет собираться опыт установки агентов Zabbix на разные операционные системы и устройства. Контроль любых параметров после изучения документации от разработчика.
Введение
Узнать как производится установка системы вы можете из статьи Установка Zabbix 4.2. Понять основный принцип работы а так же вникнуть в структуру работы с системой можно в статье Настройка Zabbix сервера. В базовой версии настроек агента вполне достаточно, но если вы захотите контролировать какие то свои параметры вам это удастся после изучения документации на сайте разработчика.
В последствии я напишу еще много статей на тему Zabbix и возможно из них вы узнаете то что вам надо. Подпишитесь и тогда вы будете в курсе всех новых статей.
Действия на сервере Zabbix
Вы можете вначале настроить агента и лишь потом зайти на сервер и добавить необходимый узел, но мне такой вариант не нравится. Добавив узел мониторинга на сервере Zabbix, при проверке агента мы сразу увидим ошибки в случае их наличия.
Система позволяет сделать такие настройки обнаружения при которых сервер сам будет искать агентов и в случае их появления сразу добавлять к себе по ранее заданным сценариям. Конечно круто использовать такие механизмы, но они требуют хорошего понимания системы. Начнем с простого и по мере изучения будем усложнять настройки системы.
В поле «Имя узла сети» ставится значение которое указывается в настройках агента в поле «Hostname».
Для обычного агента:
Для активного агента:
Все последующие картинки и описания будут делаться с учетом использования обычного агента Zabbix!
Добавляем необходимый шаблон соответствующий операционной системе, устройству или службы .
В списке узлов сети вы всегда можете наглядно видеть короткую информацию об узлах мониторинга. Например, в примере ниже видно что первый узел работает по активному агенту, второй имеет проблемы с подключением и третий у которого всё хорошо.
Проверка получения данных с агента
После подключения узла сети к мониторингу обязательно проверьте правильность получения данных во всех группах элементов данных. Например, для наглядности на картинке ниже показаны только элементы группы OS.
Сразу не спешите смотреть, так как должно пройти время. Для получения данных об агенте минимум 5 минут.
Установка Zabbix Agent на Linux
Для установки агентов необходимо вначале подключить репозиторий для нужного дистрибутива. На сайте разработчика Zabbix на странице Скачать и установить Zabbix выбираем необходимый дистрибутив и версию.
Для любого дистрибутива необходимо сделать стандартные действия:
подключить репозиторий;
установить агент;
настроить параметры подключения;
добавить в автозагрузку и запустить;
проверить правильность работы.
При установке агента на самом сервере Zabbix никаких действий с настройкой не требуется, так как узел по умолчанию имеется на сервере.
Особое вниманию заостряю на порты работы агента Zabbix. На агенте должен быть открыт порт 10050 так как именно по нему Zabbix сервер будет пытаться получить данные с агента. В случае использования активного агента (агент сам отправляет данные на сервер Zabbix) должно быть разрешено исходящее подключения по порту 10051.
На сервере Zabbix должен быть открыть порт 10051.
В случае отсутствия нужного дистрибутива переходим на закладку Для установки агентов и скачиваем агент для необходимого нам дистрибутива.
Почти во всех дистрибутивах вы найдете пакет Zabbix агента и воспользовавшись имеющейся документацией от разработчика дистрибутива вы сможете найти ответ как устанавливается агент или сервер в нужной системе.
Zabbix agent для CentOS 7
После выбора необходимой операционной системы вы увидите страницу на которой указаны все необходимые команды которые необходимо выполнить в консоли.
Подключаем репозиторий версии Zabbix 4.2 выполнив необходимую команду:
В файле конфигурации агента /etc/zabbix/zabbix_agentd.conf необходимо указать параметры для подключения к серверу Zabbix:
vim /etc/zabbix/zabbix_agentd.conf
= необходимые параметры c пояснениями =
Server=192.168.0.109 # IP адрес сервера Zabbix
ServerActive=192.168.0.109 # IP сервера Zabbix на который активный агент будет отправлять данные
Hostname=test # имя узла мониторинга, которое указано на сервере zabbix
При использовании Zabbix proxy необходимо указывать его IP адрес.
Произведем установку выполнив в консоли следующую команду:
apt install zabbix-agent
В случае использования системы firewall открываем 10050 порт. 10051 порт должен быть открыт на исходящие соединения.
В файле конфигурации агента /etc/zabbix/zabbix_agentd.conf необходимо указать параметры для подключения к серверу Zabbix:
vim /etc/zabbix/zabbix_agentd.conf
= необходимые параметры c пояснениями =
Server=192.168.0.109 # IP адрес сервера Zabbix
ServerActive=192.168.0.109 # IP сервера Zabbix на который активный агент будет отправлять данные
Hostname=test # имя узла мониторинга, которое указано на сервере zabbix
При использовании Zabbix proxy необходимо указывать его IP адрес.
Добавляем в автозагрузку и производим перезапуск агента:
cat /var/log/zabbix/zabbix_agentd.log
= вывод команды =
14646:20190704:220547.611 Starting Zabbix Agent [Zabbix server]. Zabbix 4.2.4 (revision 059af02c82).
14646:20190704:220547.613 **** Enabled features ****
14646:20190704:220547.613 IPv6 support: YES
14646:20190704:220547.613 TLS support: YES
14646:20190704:220547.613 **************************
14646:20190704:220547.614 using configuration file: /etc/zabbix/zabbix_agentd.conf
14646:20190704:220547.616 agent #0 started [main process]
14647:20190704:220547.624 agent #1 started [collector]
14648:20190704:220547.632 agent #2 started [listener #1]
14650:20190704:220547.639 agent #4 started [listener #3]
14649:20190704:220547.643 agent #3 started [listener #2]
14651:20190704:220547.653 agent #5 started [active checks #1]
Согласно выводу всё в порядке.
Установка Zabbix agent на XigmaNAS
Открываем доступ пользователю Root по SSH в веб панели управления и заходим стандартными командами для подключения по ssh.
ssh root@192.168.0.108
root@192.168.0.108's password: вводим пароль
Last login: Fri Jul 12 22:09:31 2019
Welcome to XigmaNAS!
nas: ~#
Еmbedded версия XigmaNAS
При использовании версии Еmbedded, вы должны понимать, что все изменения, которые вы производите в системе пропадут при перезапуске системы!
Обновляем пакеты:
pkg update
Выводим список всех возможных пакетов Zabbix:
pkg search zabbix
На момент написания статьи актуальная версия была 4.2.4:
pkg install zabbix42-agent-4.2.4
Активируем сервис как службу:
sysrc zabbix_agentd_enable=YES
Копируем конфигурационный файл настройки агента и открываем его для редактирования:
cp /usr/local/etc/zabbix42/zabbix_agentd.conf.sample /usr/local/etc/zabbix42/zabbix_agentd.conf
ee /usr/local/etc/zabbix42/zabbix_agentd.conf
= необходимые параметры c пояснениями =
Server=192.168.0.109 # IP адрес сервера Zabbix
ServerActive=192.168.0.109 # IP сервера Zabbix на который активный агент будет отправлять данные
Hostname=test # имя узла мониторинга, которое указано на сервере zabbix
Сохраняем файл и запускаем агент Zabbix:
service zabbix_agentd start
Для проверки смотрими логи выполнив команду:
tail -f /tmp/zabbix_agentd.log
= вывод команды =
2466:20190717:212904.511 IPv6 support: YES
2466:20190717:212904.511 TLS support: YES
2466:20190717:212904.511 **************************
2466:20190717:212904.511 using configuration file: /usr/local/etc/zabbix42/zabbix_agentd.conf
2466:20190717:212904.513 agent #0 started [main process]
2467:20190717:212904.517 agent #1 started [collector]
2469:20190717:212904.542 agent #3 started [listener #2]
2468:20190717:212904.557 agent #2 started [listener #1]
2470:20190717:212904.565 agent #4 started [listener #3]
2471:20190717:212904.572 agent #5 started [active checks #1]
Проверить статус можно следующей командой:
service zabbix_agentd status
= вывод команды =
zabbix_agentd is running as pid 1812.
Full версия XigmaNAS
Вначале выполняем действия как для Еmbedded версии.
При использовании full версии после перезагрузки агент не запуститься и при попытке запустить в ручном режиме выдаст ошибку.
service zabbix_agentd start
= вывод команды =
zabbix_agentd [30451]: user zabbix does not exist
zabbix_agentd [30451]: cannot run as root!
Ошибка говорит о том что пользователя Zabbix нет. Добавлять пользователя через консоль используя стандартные команды для FreeBSD не получится. Работать с пользователями и группами вы сможете только используя веб панель управления.
Добавте пользователя и группу Zаbbix через веб панель управления XigmaNAS. При добавлении пользователя обязательно сделайте ему домашней папку /var/run/zabbix.
В консоли из под пользователя root дайте необходимые права на папку с программой и лог файл:
После этого служба будет нормально стартовать после перезагрузки.
В случае если не дать права на лог файл будет ошибка. Надо или давать права на лог файл или менять путь в файле настройки.
service zabbix_agentd start
= ошибка при отсутствии прав на лог файл =
zabbix_agentd [2455]: cannot open "/tmp/zabbix_agentd.log": [13] Permission denied
Распаковываем архив. Создаем на диске С: папку zabbix и купируем туда следующие файлы:
zabbix_agentd.exe
zabbix_get.exe
zabbix_sender.exe
zabbix_agentd.conf
Открываем командную строку с правами администратора и выполняем следующую команду для установки zabbix agent на операционную систему Windows:
= код для копирования =
c:/zabbix/zabbix_agentd.exe --config c:/zabbix/zabbix_agentd.conf --install
Открываем файл zabbix_agentd.win.conf любым текстовым редактором (можно WordPAD) и изменяем следующие параметры:
с:/zabbix/zabbix_agenttd.conf
= необходимые параметры c пояснениями =
LogFile=c:\zabbix\zabbix_agentd.logLogFileSize=1Server=192.168.0.109 # IP адрес сервера Zabbix
ServerActive=192.168.0.109 # IP сервера Zabbix на который активный агент будет отправлять данные
Hostname=test # имя узла мониторинга, которое указано на сервере zabbix
Не забываем создать разрешающее правило в Брандмауэр, если он у вас включен. Находясь в настройках Брендмауэра идем по пути:
Дополнительные параметры — Правило для входящих подключений — Создать правило.
Тип правила: Для порта;
Протоколы и порты: Протокол TCP; Определенные локальные порты: 10050;
Ищем службу с именем Zabbix agent в оснастке со службами запускаем ее.
Если все прошло успешно то в логе c:\zabbix\zabbix_agentd.log вы увидите примерно такую информацию:
3728:20190724:153807.390 Starting Zabbix Agent [test]. Zabbix 4.2.4 (revision 059af02).
3728:20190724:153807.394 **** Enabled features ****
3728:20190724:153807.397 IPv6 support: YES
3728:20190724:153807.400 TLS support: NO
3728:20190724:153807.402 **************************
3728:20190724:153807.406 using configuration file: c:\zabbix\zabbix_agentd.conf
3728:20190724:153807.410 agent #0 started [main process]
3448:20190724:153807.412 agent #1 started [collector]
5744:20190724:153807.441 agent #2 started [listener #1]
6856:20190724:153807.628 agent #3 started [listener #2]
6868:20190724:153807.766 agent #4 started [listener #3]
3532:20190724:153807.880 agent #5 started [active checks #1]
В вариантах агента есть возможность выбрать автоматический установщик, но мне больше нравится настраивать руками.
Возможные ошибки в работе
Буду описывать тут все ошибки которые буду считать общими для разных систем.
Периодические ошибки по сбору параметров
На сервере вы можете видеть периодические ошибки по сбору некоторых параметров. Например, кратковременные сообщения о недоступности агента и тому подобные ошибки. Особенно актуальна проблема если на агенте используется сложный механизм получения необходимых данных.
Timeout — параметр который отвечает за ожидание как на получение так и на отправку данных. По умолчанию выставлено значение в 3 секунды.
Необходимо увеличить этот параметр как на сервере так и на клиенте с которого получаете ошибки. В случае использование Zabbix proxy его там тоже необходимо увеличить. Например, я использую значение 10.
Timeout=10
Не работает zabbix_get
zabbix_get -s 127.0.0.1 -k pve-t.core1
= вывод команды =
-bash: zabbix_get: command not found
Ошибку показанную выше вы можете увидеть при попытке получить данные по любому параметру.
В новых версиях Zabbix утилита для опроса агентов вынесена в отдельный пакет zabbix-get и устанавливать её надо согласно командам применяемым в используемом дистрибутиве.
Следующую ошибку можно получить когда вы запрашивайте параметр на самом агенте.
zabbix_get -s 127.0.0.1 -k pve-t.core1
= вывод команды =
zabbix_get [20065]: Check access restrictions in Zabbix agent configuration
Необходимо в файл настройки агента в параметр Server добавить через запятую ip адреса компьютеров с которых отправляется запрос. Например, Server=127.0.0.1,192.168.11.19.
Теперь выполнив нужную команду вы увидите правильный ответ.
zabbix_get -s 127.0.0.1 -k pve-t.core1
= вывод команды =
65
Заключение
Статья будет постоянно дополняться и изменяться. Не вижу смысла держать информацию если версия программы сильно устарела. Возможно, при таком подходе, я буду терять часть ссылок в поисковых системах. Зато знаю точно, что никого не будут бесить мои статьи которые потеряли актуальность, но по запросу в поисковике вылазят на первую страницу.
Обслуживание компьютеров, ремонт, лечение вирусов, модернизация. Системы на ОС Linux. Создание и продвижение Интернет проектов. Бесплатные консультации. Офисные АТС. Видеонаблюдение.