Архив рубрики: CentOS

GLPI установка на CentOS

Расскажу про установку системы GLPI на операционную систему CentOS. Удобней системы для ведения ИТ-инфраструктуры я не встречал. Кроме ведения заявок можно контролировать рабочие станции, вести справочную документацию и много чего ещё делать.

Введение

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

Основные причины по которым я пришел к выводу что такая система необходима следующие:

  • Удобное ведение поступивших заявок —  заявки поступившие в систему не забываются и не надо вести дополнительных блокнотов;
  • Хронология каждой заявки — в процессе решения собирается вся необходимая информация в одном месте;
  • История заявок — в случае проблем с заказчиком всегда можно посмотреть все события по заявке и освежить в памяти события которые со временем забываются.

Требования к системе предъявлялись следующие:

  • Свободная система работающая на свободных операционных системах;
  • Система должна активно развиваться и иметь возможность простого обновления;
  • Система должна работать на популярном языке программирования;
  • Возможность удобной подачи заявки и последующего ведения;
  • Ведение в одной системе разных организаций;
  • Гибкое администрирование уровня доступа пользователей;
  • Создание базы знаний для пользователей;
  • Использование доменных пользователей;
  • Личный планировщик заданий.

Перепробовал большое количество разных систем, но остановился на GLPI, так как эта система максимально удовлетворяет всем моим требованиям и позиционирует себя как свободный менеджер ИТ-инфраструктуры.

Основное что меня порадовало в системе GLPI это:

  • Систему GLPI можно установить на простой хостинг как обычный сайт так как он написан на PHP (при условии что можно сделать некоторые специфические настройки);
  • Настроек очень много и это позволяет реализовать практические любые пожелания;
  • Простота и продуманность обновления;
  • Информативность по выполняемым действиям очень радует, так как можно посмотреть подробную историю как действий пользователей так и автоматических заданий;
  • Расширение возможностей с помощью большого количества дополнений;
  • Почти во всех настройках есть история изменений где можно посмотреть кто и что делал;
  • Делать резервные копии базы данных перед серьезными настройками в системе GLPI.

Если сравнить по функционалу и подходу разработчиков, то система похожа на популярную систему мониторинга Zabbix.

Еще один из главных аргументов которые меня склонили к окончательному выбору системы это то что в разработке принимает активное участие Remi Collet и ведет поддержку GLPI в своем репозитории.

В статье вы узнаете полную версию установки на операционную систему CentOS c нуля.

Подготовка сервера

Дальнейшая информация в статье подразумевает что вы воспользовались статьёй CentOS 8 установка и настройка.

Скачивание последней версии GLPI

Создадим корневую папку и папку для логов для сайта:

mkdir -p /var/www/support.sevo44.ru/log

-p -- создаст все отстутствующие папки в пути

Идем на сайт GLPI и смотрим последнюю версию версию.

В нашем случаем последняя стабильная версия GLPI version 9.4.4.

Переходим в корневую папки для сайта и скачиваем туда архив с исходниками GLPI:

cd /var/www/support.sevo44.ru
wget https://github.com/glpi-project/glpi/releases/download/9.4.4/glpi-9.4.4.tgz

Устанавливаем архиватор tar, если его нет:

dnf install tar

Распаковываем архив:

tar zxvf glpi-9.4.4.tgz

Переименовываем папку glpi в www:

mv glpi www

Переходим к настройки программного обеспечения необходимого для работы GLPI.

Настройка доступа по SFTP

Настроим удобный и безопасный доступ к файлам сайта.

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

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

В нашем случае мы настраиваем доступ к сайту support.sevo44.ru. Добавим пользователя с нужными параметрами и создадим ему пароль:

useradd -s /sbin/nologin support.sevo44.ru
passwd support.sevo44.ru

Добавляем пользователя 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

Назначаем владельцем содержимого сайта пользователя которого мы создали выше:

chown -R support.sevo44.ru:support.sevo44.ru /var/www/support.sevo44.ru/

Возвращаем обратно рута владельцем корня сайта:

chown root. /var/www/support.sevo44.ru/
chown root. /var/www/support.sevo44.ru/log/

Все папки в пути /var/www/support.sevo44.ru/ должны быть пользователя root!

Только в таком варианте все будет корректно работать!

Для безопасности запретим пользователю редактировать папку log.

Редактирование будет возможно только в папке WWW где находятся все файлы сайта!

Даем необходимые права на папки и файлы

Найдём в папке /var/www/support.sevo44.ru/www все файлы (f) и выставим им права 644 а для всех папок (d) выставим права 755:

find /var/www/support.sevo44.ru/www -type f -exec chmod 644 {} \;
find /var/www/support.sevo44.ru/www -type d -exec chmod 755 {} \;

Подключаемся по sftp и если подключились продолжаем настройку дальше.

Установка PHP

Устанавливать версию PHP будем с репозитория Remi Collet. Более подробно как работать c репозиторием можно из статьи PHP от Remi для CentOS.

Подключаем репозиторий и активируем версию php 7.2:

dnf install dnf-utils http://rpms.remirepo.net/enterprise/remi-release-8.rpm
dnf module reset php
dnf module enable php:remi-7.2

Подключаем расширенный вариант репозитория Remi:

yum-config-manager --disable remi-safe
yum-config-manager --enable remi

С репозитория Remi можно установить GLPI, но настроен он будет для работы с Apache.

Установим Php версии 7.2 со всеми необходимыми пакетами. Возможно их больше чем необходимо, но именно они устанавливаются если устанавливать используя репозиторий Remi:

dnf install php php-psr-container php-symfony-common php-jsonlint php-mysqlnd php-composer-semver php-psr-simple-cache php-bcmath php-htmLawed php-intl php-sabre-xml2 php-zendframework-zend-stdlib php-symfony-config php-Monolog php-phpmailer6 php-symfony-browser-kit php-zendframework-zend-serializer php-symfony-event-dispatcher php-symfony3-debug php-pecl-imagick php-json php-fedora-autoloader php-process php-pdo php-container-interop php-symfony-class-loader php-symfony-process php-symfony-finder php-cli php-fpm php-symfony-css-selector php-symfony-expression-language php-composer-ca-bundle php-composer-spdx-licenses php-psr-cache php-sabre-uri2 php-seld-phar-utils php-ldap php-pecl-selinux php-iamcal-lib-autolink php-symfony-polyfill php-pecl-zip php-tidy php-imap php-xmlrpc php-mbstring php-zendframework-zend-servicemanager php-symfony-yaml php-symfony-dependency-injection php-simplepie php-elvanto-litemoji php-paragonie-random-compat php-sabre-vobject4 php-symfony-dom-crawler php-symfony-http-foundation php-zendframework-zend-json php-zendframework-zend-cache php-symfony-console php-symfony-http-kernel php-symfony3-common php-symfony3-console php-tcpdf php-common php-PsrLog php-pecl-apcu php-symfony-filesystem php-symfony-debug php-composer-xdebug-handler php-markdown php-sebastian-diff3 php-opcache php-xml php-zendframework-zend-eventmanager php-IDNA_Convert php-justinrainbow-json-schema5 php-scssphp php-true-punycode php-zendframework-zend-i18n php-gd php-symfony-var-dumper php-pear-CAS

На сайте разработчика GLPI вы можете посмотреть какие требования предъявляются для php.

Внесем необходимые изменения в файл настроек 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, создадим новый и приводим к следующему виду:

mv /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf_orig
vim /etc/php-fpm.d/www.conf
= необходимый код =
[www]
user = nginx
group = nginx

listen = /run/php-fpm/www.sock
listen.mode = 0660
listen.owner = nginx
listen.group = nginx

pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35

;pm.process_idle_timeout = 10s;
;pm.max_requests = 500

Назначим каталогу /var/lib/php правильное владение:

chown -R root:nginx /var/lib/php

Перезапускаем php-fpm командой:

systemctl restart php-fpm

Проверяем, стартовал ли указанный сокет:

ll /run/php-fpm/www.sock
srw-rw---- 1 nginx nginx 0 фев 13 10:35 /run/php-fpm/www.sock

Всё успешно настроено.

Создадим отдельный пул для php-fpm, который будет обслуживать сайт support.sevo44.ru на котором и будет работать GLPI. Удобно когда для каждого сайта используется независимый пул в котором можно выставить необходимые значения.

Переходим в нужную папку, копируем существующий конфигурационный файл и делаем необходимые изменения:

cd /etc/php-fpm.d/
cp www.conf support.sevo44.ru.conf
vim /etc/php-fpm.d/support.sevo44.ru.conf
= необходимые параметры =
[support.sevo44.ru]
user = support.sevo44.ru
group = support.sevo44.ru

listen = /run/php-fpm/support.sevo44.ru.sock
listen.mode = 0660
listen.owner = support.sevo44.ru
listen.group = support.sevo44.ru

pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35

;pm.process_idle_timeout = 10s;
;pm.max_requests = 500

Перезапускаем:

systemctl restart php-fpm

Проверяем работу пула:

ll /run/php-fpm/support.sevo44.ru.sock
= вывод команды =
srw-rw---- 1 support.sevo44.ru support.sevo44.ru 0 ноя 10 16:34 /run/php-fpm/support.sevo44.ru.sock

Все работает как надо и в настройках Nginx для сайта мы укажем этот пул.

Установка NGINX

Более подробно как работать c Nginx можно из статьи NGINX установка и настройка.

Создадим файл использующий стабильный репозиторий:

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 прокси. Сертификат получаем на проксирующем сервере.

Более подробно про получение сертификата можно из статьи SSL бесплатный для сайта 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

Установка MariaDB

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

Добавим необходимый репозиторий создав файл с кодом:

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

Установим MariaDB:

dnf install boost-program-options
dnf install MariaDB-server MariaDB-client --disablerepo=AppStream

Запустим и добавим в автозагрузку:

systemctl enable --now mariadb

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

/usr/bin/mysql_secure_installation

Для удобства работы с базой вы можете установить PhpMyAdmin и создать там базу или воспользоватся статьёй MariaDB работа из консоли и создать базу данных в консоли.

Установка и начальная настройка GLPI

Сам процесс установки и начальной настройке прост и понятен. Все дальнейшие «сюрпризы» и нюансы будут при настройке системы для работы.

Система настолько гибкая что порой начинаешь путаться во всех её возможных схемах работы.

Главное делайте бэкап базы данных средствами самой 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 52
compress
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";

Изменим заголовок сайта после авторизации:

inc/html.class.php
=== примерно 1203 строка ===
echo "<!DOCTYPE html>\n";
echo "<html lang=\"{$CFG_GLPI["languages"][$_SESSION['glpilanguage']][3]}\">";
echo "<head><title>CЭВО:Техподдержка - ".$title."</title>";
echo "<meta charset=\"utf-8\">";

Замена в теме письма GPLI на Ticket:

inc/notificationtargetticket.class.php
=== примерно 63 строка ===
    if (empty($perso_tag)) {
       $perso_tag = 'Ticket';
     }
     return sprintf("[$perso_tag #%07d] ", $this->obj->getField('id'));
   }
   return parent::getSubjectPrefix();
}

Убираем внизу сообщений информацию Automatically generated by GLPI:

inc/notificationtemplate.class.php
=== По поиску в 2 местах меняем ===
Automatically generated by GLPI ---> Сгенерировано автоматически

Обновление 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.

После того как всё перенесено необходимо выставить правильного пользователя и правильные права на файлы с папками:

chown -R support.sevo44.ru:support.sevo44.ru /var/www/support.sevo44.ru/www/
find /var/www/support.sevo44.ru/www -type f -exec chmod 644 {} \; 
find /var/www/support.sevo44.ru/www -type d -exec chmod 755 {} \;

Переходим на сайт и видим информацию об обновлении.

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

Инициализируем данные часовых поясов из часовых поясов нашей системы:

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 для CentOS

Версии 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 достаточно выполнить команду:

# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

Посмотреть активные репозитории можно следующей командой:

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.

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

ls /etc/yum.repos.d/ -l
итого 92
-rw-r--r-- 1 root root 1664 ноя 23 16:16 CentOS-Base.repo
-rw-r--r-- 1 root root 1309 ноя 23 16:16 CentOS-CR.repo
-rw-r--r-- 1 root root 649 ноя 23 16:16 CentOS-Debuginfo.repo
-rw-r--r-- 1 root root 314 ноя 23 16:16 CentOS-fasttrack.repo
-rw-r--r-- 1 root root 630 ноя 23 16:16 CentOS-Media.repo
-rw-r--r-- 1 root root 1331 ноя 23 16:16 CentOS-Sources.repo
-rw-r--r-- 1 root root 5701 ноя 23 16:16 CentOS-Vault.repo
-rw-r--r-- 1 root root 951 окт 2 2017 epel.repo
-rw-r--r-- 1 root root 1050 окт 2 2017 epel-testing.repo
-rw-r--r-- 1 root root 261 фев 8 15:23 mariadb.repo
-rw-r--r-- 1 root root 113 июл 15 2014 nginx.repo
-rw-r--r-- 1 root root 446 дек 21 20:50 remi-glpi91.repo
-rw-r--r-- 1 root root 446 дек 21 20:50 remi-glpi92.repo
-rw-r--r-- 1 root root 446 дек 21 20:50 remi-glpi93.repo
-rw-r--r-- 1 root root 446 дек 21 20:50 remi-glpi94.repo
-rw-r--r-- 1 root root 456 дек 21 20:50 remi-php54.repo
-rw-r--r-- 1 root root 1314 дек 21 20:50 remi-php70.repo
-rw-r--r-- 1 root root 1314 дек 21 20:50 remi-php71.repo
-rw-r--r-- 1 root root 1314 дек 21 20:50 remi-php72.repo
-rw-r--r-- 1 root root 1314 дек 21 20:50 remi-php73.repo
-rw-r--r-- 1 root root 2605 дек 21 20:50 remi.repo
-rw-r--r-- 1 root root 750 дек 21 20:50 remi-safe.repo

Надеюсь, вы заметили что есть репозитории glpi.

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 выполнив команды:

yum-config-manager --disable remi-safe
yum-config-manager --enable remi

Перед тем как определится какую версию PHP использовать я всегда смотрю на сайте Supported Versions PHP.

В списке имеющихся репозиториев нет версии php5.6, так как он входит в состав remi.repo. Для установки достаточно в команде указать remi-php56.

для CentOS 8

В 8 версии CentOS используется версия php 7.2 которая уже может удовлетворять требования множества новых сайтов, но если вам нужны версии новее подключайте Remi.

Подключаем репозиторий Remi, выполнив следующую команду:

dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

Посмотрим список всех доступных вариантов установки 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 и наиболее популярные модули, которые могут пригодится в процессе эксплуатации веб сервера.

yum install php-fpm php-cli php-mysqlnd php-gd php-ldap php-odbc php-pdo php-pecl-memcache php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap php-zip php-opcache php-imap

Проверим установленную версию выполнив команду в консоли сервера:

php -v
= вывод команды =
PHP 7.2.16 (cli) (built: Mar 5 2019 14:45:10) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.16, Copyright (c) 1999-2018, by Zend Technologies

для CentOS 8

Активируем репу php remi-7.2, для этого выполняем команды:

dnf module reset php
dnf module enable php:remi-7.2
= вывод команды =
Последняя проверка окончания срока действия метаданных: 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 и все популярные модули следующей командой:

dnf install php php-fpm php-cli php-mysqlnd php-gd php-ldap php-odbc php-pdo php-pecl-memcache php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap php-zip php-opcache php-imap

Файл конфигурации php.ini

Внесем необходимые изменения в файл настроек 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, создадим новый и приводим к следующему виду:

mv /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf_orig
vim /etc/php-fpm.d/www.conf
= необходимый код =
[www]
user = nginx
group = nginx
;listen = 127.0.0.1:9000
listen = /run/php-fpm/www.sock
listen.mode = 0660
listen.owner = nginx
listen.group = nginx
listen.allowed_clients = 127.0.0.1

pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
;pm.process_idle_timeout = 10s;
;pm.max_requests = 500

slowlog = /var/log/php-fpm/www-slow.log

;php_flag[display_errors] = off
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on
;php_admin_value[memory_limit] = 128M
php_value[session.save_handler] = files
;php_value[session.save_path]    = /var/lib/php/session
;php_value[soap.wsdl_cache_dir]  = /var/lib/php/wsdlcache
;php_value[opcache.file_cache]  = /var/lib/php/opcache

Вы можете для каждого сайта созать свой пул и указать там все необходимые параметры. Например, для каждого сайта я создаю свой пул для гибкости настройки и благодаря этому я настраиваю корректный доступ к файлам по sftp.

Более подробно прочтите в статье SFTP настройка для веб хостинга.

Назначим каталогу /var/lib/php правильное владение:

=== было ===
ls -l /var/lib/php
= вывод команды =
итого 0
drwxrwx--- 2 root apache  6 окт 22 12:08 opcache
drwxr-xr-x 2 root root   59 окт 28 10:05 peclxml
drwxrwx--- 2 root apache  6 окт 22 12:08 session
drwxrwx--- 2 root apache  6 окт 22 12:08 wsdlcache

=== Назначаем правильные права ===
chown -R root:nginx /var/lib/php

Перезапускаем php-fpm командой:

systemctl restart php-fpm

Проверяем, стартовал ли указанный сокет.

ll /run/php-fpm/www.sock 
srw-rw---- 1 nginx nginx 0 фев 13 10:35 /run/php-fpm/www.sock

Всё успешно настроено.

В настройках 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-fpm командой:

systemctl stop php-fpm

Выводим список всех установленных пакетов php:

rpm -qa | grep php
= вывод команды =
php-json-7.2.16-1.el7.remi.x86_64
php-process-7.2.16-1.el7.remi.x86_64
php-odbc-7.2.16-1.el7.remi.x86_64
php-soap-7.2.16-1.el7.remi.x86_64
php-fpm-7.2.16-1.el7.remi.x86_64
php-xml-7.2.16-1.el7.remi.x86_64
php-xmlrpc-7.2.16-1.el7.remi.x86_64
php-pecl-memcache-3.0.9-0.9.20170802.e702b5f.el7.remi.7.2.x86_64
php-gd-7.2.16-1.el7.remi.x86_64
php-mbstring-7.2.16-1.el7.remi.x86_64
php-pdo-7.2.16-1.el7.remi.x86_64
php-pear-1.10.8-1.el7.remi.noarch
php-snmp-7.2.16-1.el7.remi.x86_64
php-opcache-7.2.16-1.el7.remi.x86_64
php-ldap-7.2.16-1.el7.remi.x86_64
php-common-7.2.16-1.el7.remi.x86_64
php-cli-7.2.16-1.el7.remi.x86_64
php-7.2.16-1.el7.remi.x86_64
php-fedora-autoloader-1.0.0-1.el7.remi.noarch
php-mysqlnd-7.2.16-1.el7.remi.x86_64
php-pecl-zip-1.15.4-1.el7.remi.7.2.x86_64
php-imap-7.2.16-1.el7.remi.x86_6

Произведём удаление всех выведенных пакетов необходимой командой:

yum remove php-json php-process php-odbc php-soap php-fpm php-xml php-xmlrpc php-pecl-memcache php-gd php-mbstring php-pdo php-pear php-snmp php-opcache php-ldap php-common php-cli php php-fedora-autoloader php-mysqlnd php-pecl-zip php-imap

Внимательно смотрим вывод команды при удалении! В выводе вы должны увидеть примерно такие строки:

предупреждение: /etc/php-fpm.d/www.conf сохранен как /etc/php-fpm.d/www.conf.rpmsave

предупреждение: /etc/php.ini сохранен как /etc/php.ini.rpmsave

Удалим старый репозиторий php7.2 и установим новый php7.3 выполнив команды:

yum-config-manager --disable remi-php72
yum-config-manager --enable remi-php73

Проверяем правильность установки нужного репозитория выполнив команду:

yum repolist
= вывод части команды =
Загружены модули: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.sale-dedic.com
* epel: mirrors.colocall.net
* extras: mirror.sale-dedic.com
* remi: mirror.23media.de
* remi-php73: mirror.23media.de
* updates: centos-mirror.rbc.ru
remi-php73 Remi's PHP 7.2 RPM repository for Enterprise Linux 7 - x86_64   362

Устанавливаем пакеты аналогичные удаленным:

yum install php-json php-process php-odbc php-soap php-fpm php-xml php-xmlrpc php-pecl-memcache php-gd php-mbstring php-pdo php-pear php-snmp php-opcache php-ldap php-common php-cli php php-fedora-autoloader php-mysqlnd php-pecl-zip php-imap

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

Осталось проверить файлы что выдала команда при удалении старой версии 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.

CentOS 8 установка и настройка

Рассмотрим установку системы CentOS 8 и последующую настройку исходя из практики использования этой операционной системы. Данная система для меня является основной для использования на серверах. Стабильность работы гарантированна. Поддержка до 2029 года.

Введение

В данной статье собраны все основные моменты базовой настройки сервера CentOS 8 которые использую на практике.

Установка CentOS 8

Создания USB носителя для установки

Существует множество программ для записи iso образа на устройство. Например, у меня два варианта для создания носителя для установки:

  1. Rufus — использую эту программа для создание загрузочных USB-дисков в системе Windows;
  2. ROSA ImageWriter — использую эту программу для любой системы Linux.

Варианты установки

Рассмотрим два самых популярных варианта установки СentOS 8.

Образы iso CentOS 8

Образы можно скачать c зеркала Yandex по ссылке Download CentOS. Существует два варианта:

  1. CentOS-8-x86_64-1905-dvd1.iso — полный образ 7G;
  2. CentOS-8-x86_64-1905-boot.iso  — загрузочный образ 550M.

Какой вариант использовать решать вам. Например, мне нравится устанавливать загрузочный образ и дальше настраивать руками, так и опыт приходит и понимаешь как что работает.

Больше нет минимального образа, но радует что есть загрузочный при установке с которого надо только руками внести требуемый репозиторий и выбрать нужные параметры установки.

Смотрим список всех возможных репозиториев и выбираем необходимый который будем использовать при установке с загрузочного образа.

Указывать надо путь к той папке, где лежит каталог repodata. Например, mirror.yandex.ru/centos/8/BaseOS/x86_64/os/.

В выборе программ выбираем базовое окружение «Минимальная установка» а в дополнительных параметрах «Гостевые агенты» и «Стандарт».

Шаблоны

Шаблоны используются как правило для установки на VDS и предоставляются компаниями предоставляющие такие услуги. Удобно, но тем не менее я пару раз попадал в дурацкие ситуации.

Вот моменты почему я советую использовать установку на VDS систем с iso образа:

  • Разбивка диска порой не учитывает конфигурацию тарифа или требований вашей системы — например, на одном хостинге при 2 G оперативной памяти был создал SWAP раздел в 512 М в результате пришлось переустанавливать систему дабы не терять место на и так небольшом диске;
  • Локализация как правило Английская — мне приятней работать на своем родном языке хотя и на английском если надо всё настрою;
  • Присутствие в шаблоне каких-то изменений отличающихся от стандартных минимальных параметров установки — порой не понимаешь откуда взялись какие то настройки которых раньше не видел. Кроме того, можно потратить кучу времени не понимая почему не работает то что всегда работало как часы. В итоге выясняется что в шаблоне установки нет пакета который всегда ставился в стандартном минимальном образе.

Все компании предоставляющие услуги VDS могут предоставить возможность установки системы с ISO образа системы. При установке надо правильно указать сетевые параметры исходя из предоставленных сетевых параметров настроек выбранного тарифа!

Разбивка диска для установки

Вариантов разбивки диска для CentOS 8 может быть множество исходя из пожеланий и предпочтений. Например, мне нравиться придерживаться таких параметров:

  • Размер диска под систему Linux 50 G — этого мне хватает с запасом;
  • Создаю раздел boot размером 1 G — так я гарантирую что при заполнении диска система загрузится однозначно;
  • Создаю SWAP — согласно требованиям системы.

Можно выносить логи и кэш в отдельные разделы, но это лишняя трата времени. Лучше всегда выполнять мониторинг размера диска и в случае проблем оперативно принять необходимые меры. Прежде всего, так и головная боль пропадает о том какой размер указывать разделам ( вариант с перераспределением очень сюрпризная тема) и больше времени потратится на правильную настройку сервера.

SWAP

Тема организации SWAP на сервере очень важная и поэтому я описал все основные моменты использования в статье SWAP для Linux

Настройка CentOS 8

Пакетный менеджер DNF

Используется новый менеджер пакетов который поддерживает модульный формат пакетов.

По прежнему можно вносить команды yum вместо dnf и всё будет работать. Для yum сделан алиас для запуска dnf.

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

dnf
= вывод части команды =
usage: dnf [options] COMMAND

Список основных команд:
alias                     List or create command aliases
autoremove                удалить все ненужные пакеты, первоначально установленные по зависимостям
check                     поиск проблем в packagedb
check-update              проверить доступные обновления для пакетов
clean                     удалить кэшированные данные
deplist                   Показывать список зависимостей пакета и какие пакеты их предоставляют
distro-sync               обновить установленные пакеты до последних имеющихся версий
downgrade                 Откат к предыдущей версии пакета
group                     показать или использовать информацию о группах
help                      отобразить подсказку по использованию
history                   отобразить (или использовать) историю транзакций
info                      отобразить информацию о пакете или группе пакетов
install                   установка пакета(ов) в систему
list                      вывести список пакетов или групп пакетов
makecache                 создание кэша метаданных
mark                      отметить или снять отметку пользовательской установки с установленных пакетов.
module                    Взаимодействие с репозиторием Modules.
provides                  найти пакет по заданному значению
reinstall                 переустановка пакета
remove                    удалить пакет или пакеты из системы
repolist                  отобразить настроенные репозитории ПО
repoquery                 поиск пакетов по ключевому слову
repository-packages       выполнить команды над всеми пакетами заданного репозитория
search                    поиск информации о пакете по заданной строке
shell                     запустить интерактивную оболочку DNF
swap                      запустить интерактивный вариант dnf для удаления и установки одной спецификации
updateinfo                показать рекомендации к пакетам
upgrade                   обновить пакет или пакеты в системе
upgrade-minimal           обновление, но только «новейших» пакетов, которые исправляют проблему в вашей системе

Информация об установленной системе

Узнать какая система установлена на сервере можно следующей командой:

uname -a
= вывод команды = 
Linux localhost.localdomain 4.18.0-80.11.2.el8_0.x86_64 #1 SMP Tue Sep 24 11:32:19 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

Этой информации достаточно для понимания с какой системой предстоит работать.

Отключение SELinux

Отключаем SELinux. Его использование и настройка в системе CentOS отдельный разговор.

vi /etc/sysconfig/selinux
= меняем значение =
SELINUX=disabled

Перезагрузим для применения изменений. После перезагрузки проверяем статус:

sestatus
= вывод команды =
SELinux status: disabled

Надо иметь четкое понимание что SELinux система требующая хорошего понимания в том как она работает и как настраивать. Надо или отключить сразу или потратить время на изучение как она работает.

Добавление репозиториев

Для инсталляции различного софта необходимо подключить репозитории в CentOS 8. Со временем пришло понимание того что относится к добавляемым репозиториям надо очень внимательно, чтобы в последствии не возникало проблем при обслуживании.

Всегда подключаю самый популярный репозиторий Epel (Extra Packages for Enterprise Linux). Epel хранилище пакетов, созданное группой специалистов операционной системы Fedora. Пакеты из Epel репозитория никогда не конфликтуют и не переустанавливают базовые пакеты RHEL.

dnf -y install epel-release

Старюсь подключать репозитории которые поддерживают сами разработчики программ. Например, такие как Nginx, Zabbix, MariaDB.

Обновление CentOS 8

Обновление системы очень важный момент и следует относится к нему очень внимательно. Всегда проще найти проблему когда проходит немного обновлений.

Прежде всего, всегда перед обновлениями делайте резервные копии!

Перед выполнением настройки лучше выполнить полное обновление системы:

dnf update

Автоматическое обновление системы

Для безопасности сервера его необходимо своевременно обновлять. Вариантов обновления CentOS 8 несколько и это тема отдельного длинного разговора.

Например, получать сообщения на почту об появившихся обновлениях и уже на основании этого принимать решение о необходимости обновления — для меня лучший вариант.

При моих пожеланиях мне подойдёт утилита dnf-automatic. Ставится она из базового репозитория командой:

dnf install dnf-automatic

Управлением запуском по расписанию занимается systemd со своим встроенным планировщиком. Посмотреть таймеры автоматического запуска можно командой:

systemctl list-timers *dnf-*
= вывод команды =
NEXT                        LEFT      LAST PASSED UNIT          ACTIVATES
Thu 2019-10-24 14:36:56 MSK 5min left n/a  n/a    dnf-makecache.timer dnf-makecache.service

Посмотрим настройки этого таймера выполнив команду:

cat /etc/systemd/system/multi-user.target.wants/dnf-makecache.timer
= вывод команды =
[Unit]
Description=dnf makecache --timer
ConditionKernelCommandLine=!rd.live.image
# See comment in dnf-makecache.service
ConditionPathExists=!/run/ostree-booted
Wants=network-online.target

[Timer]
OnBootSec=10min
OnUnitInactiveSec=1h
Unit=dnf-makecache.service

[Install]
WantedBy=multi-user.target

Если заданий нет, то можно добавить таймер выполнив команду:

systemctl enable --now dnf-automatic.timer

Настройка этого таймера будет по пути — /etc/systemd/system/multi-user.target.wants/dnf-automatic.timer.

Настройка системы автоматического обновления находится по пути  /etc/dnf/automatic.conf. По-умолчанию он только скачивает обновления, и отправляет сообщение на почту root.

Самый важный параметр это update_type — которой будет говорить системе какие выполнять обновления. Доступно несколько вариантов:

  • default — полное обновление;
  • security — только обновление безопасности.

Мой вариант настройки выглядит следующим образом:

vim /etc/dnf/automatic.conf
= часть вывода с пояснениями
[commands]
# What kind of upgrade to perform:
# default = all available upgrades
# security = only the security upgrades
upgrade_type = security
random_sleep = 0

# To just receive updates use dnf-automatic-notifyonly.timer

# Whether updates should be downloaded when they are available, by
# dnf-automatic.timer. notifyonly.timer, download.timer and
# install.timer override this setting.
download_updates = yes

# Whether updates should be applied when they are available, by
# dnf-automatic.timer. notifyonly.timer, download.timer and
# install.timer override this setting.
apply_updates = no

Согласно этих параметров будут скачаны все обновления безопасности и будет отправлено сообщение пользователю root.

В настройках можно настроить отправку почты на другой почтовый ящик, но мне больше нравится вариант когда все сообщения пользователя root пересылаются на мой почтовый ящик.

Популярные и полезные утилиты

Установим в начале основные популярные утилиты которые обычно требуются в работе.

dnf -y install net-tools bind-utils htop atop iftop lsof wget bzip2 traceroute gdisk yum-utils
  • net-tools bind-utils — сетевые утилиты после установки которых будут работать команды # ifconfig и # nslookup,
  • htop atop — два интересных диспетчера задач,
  • iftop — показывает в режиме реального времени загрузку сетевого интерфейса,
  • lsof — вывода информации о том, какие файлы используются теми или иными процессами,
  • wget — неинтерактивная консольная программа для загрузки файлов по сети,
  • bzip2 — утилита командной строки с открытым исходным кодом для сжатия данных,
  • traceroute — утилита предназначенная для определения маршрутов следования данных в сетях TCP/IP,
  • gdisk — умеет работать с GPT-дисками разработано по подобию fdisk,
  • yum-utils — это набор утилит для управления репозиторием, установки и отладки пакетов, поиска пакетов и много другого.

Отправка почты с авторизацией на другом SMTP сервере

Настраиваем на базе Postfix.

Проверка статуса:

systemctl status postfix

Если Postfix не установлен то производим установку выполнив команду:

dnf install postfix

Запускаем и добавляем в автозагрузку командами:

systemctl start postfix
systemctl enable postfix

Чтобы отправлять письма с консоли необходимо установить пакет mailx:

dnf install mailx

После этого можно отправлять с консоли сервера сообщения на свою почту:

uname -a | mail -s "info server" info@sevo44.ru

В результате на почту придёт сообщение:

Мы не уверены в подлинности отправителя этого письма. Возможно, данные были подменены.
Отправитель: vds-micro2.sevo44.ru
Подпись: Нет
Шифрование: Нет

Из за выше сказанного сообщение может попасть в спам, либо вообще не будет принято сервером получателя, потому что на сервере нет корректных настроек для отправки почты. Чтобы почта корректно отправлялась, надо воспользоваться внешним почтовым сервером.

Например, мне удобно в данном случае везде использовать почту noreply@sevo44.ru которая обслуживается Yandex.

Переименуем дефолтный конфигурационный файл Postfix. После этого, создадим рабочий и добавим необходимые настройки:

mv /etc/postfix/main.cf /etc/postfix/main.cf_orig
vim /etc/postfix/main.cf
= необходимый код =
# DEFAULT CONFIG 
compatibility_level = 2
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
# Имя сервера, которое выводит команда hostname
myhostname = vds-micro2.sevo44.ru
# По логике нужно оставлять только домен, но в данном случае лучше оставить полное имя сервера, чтобы в поле отправитель 
# фигурировало полное имя сервера, так удобнее разбирать служебные сообщения
mydomain = vds-micro2.sevo44.ru
myorigin = $mydomain
mydestination = $myhostname, localhost.$mydomain, localhost
inet_interfaces = localhost
inet_protocols = all
unknown_local_recipient_reject_code = 550
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
debug_peer_level = 2
debugger_command =
         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
         ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix/samples
readme_directory = /usr/share/doc/postfix/README_FILES

smtpd_tls_cert_file = /etc/pki/tls/certs/postfix.pem
smtpd_tls_key_file = /etc/pki/tls/private/postfix.key
smtpd_tls_security_level = may
smtp_tls_CApath = /etc/pki/tls/certs
smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt
meta_directory = /etc/postfix
shlib_directory = /usr/lib64/postfix

# SMTP YANDEX CONFIG
relayhost = smtp.yandex.ru:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
# База параметров авторизации с SMPT
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
# Беза подмены имени почтового ящика 
smtp_generic_maps = hash:/etc/postfix/generic
smtp_sasl_security_options = noanonymous
smtp_tls_security_level = may

Создаем файл с информацией об имени пользователя и пароле для авторизации на сервере SMTP:

vim /etc/postfix/sasl_passwd
= необходимый код =
smtp.yandex.ru:587 noreply@sevo44.ru:PASSWORD

Создаем db файл:

postmap /etc/postfix/sasl_passwd

Для того чтобы почта уходила надо чтобы адрес отправителя а адрес авторизации на сервер smtp совпадал!

В случае если у нас имеется сайт отправляющий почту средствами PHP можно настроить корректную отправку почты. Например, добавим параметр для сайта crystalium44.ru.

Переименуем дефолтную базу подмены имени почтового ящика. После этого, создадим рабочий и добавим необходимые настройки:

mv /etc/postfix/generic /etc/postfix/generic_orig
vim /etc/postfix/generic
= необходимый код =
root@vds-micro2.sevo44.ru noreply@sevo44.ru
crystalium44.ru@php7-lxc-vds-micro2.sevo44.ru noreply@sevo44.ru

Создаем db файл:

postmap /etc/postfix/generic

При получении ошибки «warning: SASL authentication failure: No worthy mechs found» Необходимо установить еще несколько пакетов для работы SASL!

Установим необходимые пакеты:

dnf -y install cyrus-sasl cyrus-sasl-lib cyrus-sasl-plain

Перезапустим Postfix и проверим работу.

systemctl restart postfix

Отправляем тестовое письмо через консоль.

uname -a | mail -s "info server" info@sevo44.ru

Отправитель письма подтверждён и проверен Спамообороной Яндекса.
Отправитель: sevo44.ru
Подпись: sevo44.ru
Шифрование: Да

Так выглядит письмо отправленное с сайта crystalium44.ru c помощью PHP:

 

Как видим теперь всё работает как надо!

В случае ошибок проверяем почтовый лог выполнив команду:

tail -n 10 /var/log/maillog

В заключение, осталось добавить к стандартному алиасу для root в /etc/aliases, внешний адрес, куда будет дублироваться почта, адресованная root. Для этого редактируем указанный файл, изменяя последнюю строку:

vim /etc/aliases
= необходимо привести к виду =
# Person who should get root's mail
root: root,info@sevo44.ru

Обновляем базу сертификатов:

newaliases

Настройка времени

Определим текущее время на сервере:

date
= вывод команды =
Ср ноя 14 12:17:34 CET 2018

Как видим временная зона не настроена.

Выполним необходимую настройку временной зоны Europe — Moscow:

= Сделать резервную копию текущей timezone =
mv /etc/localtime /etc/localtime.bak

= В папке /usr/share/zoneinfo/ ищем что надо и делаем ссылку =
ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime

В итоге получим:

date
= вывод команды =
Сб окт 13 02:59:46 MSK 2018

Можно использовать одну команду зная точно что эта временная зона присутствует в настройках:

timedatectl set-timezone Europe/Moscow

Синхронизация времени

В CentOS 8 по-умолчанию используется утилита для синхронизации времени chrony. Если у вас её нет, то устанавливайте:

dnf install chrony

Запускаем chrony и добавляем в автозагрузку:

systemctl start chronyd
systemctl enable chronyd

Проверяем правильность работы:

systemctl status chronyd
= вывод команды =
 chronyd.service - NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
Active: active (running) since Ср 2018-10-03 21:55:18 MSK; 27min ago
Docs: man:chronyd(8)
man:chrony.conf(5)
Main PID: 631 (chronyd)
CGroup: /system.slice/chronyd.service
└─631 /usr/sbin/chronyd

окт 03 21:55:17 lemp.sevo44.loc systemd[1]: Starting NTP client/server...
окт 03 21:55:17 lemp.sevo44.loc chronyd[631]: chronyd version 3.2 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SECHASH +SIGND +ASYNCDNS +IPV6 +DEBUG)
окт 03 21:55:17 lemp.sevo44.loc chronyd[631]: Frequency 1.141 +/- 1.440 ppm read from /var/lib/chrony/drift
окт 03 21:55:18 lemp.sevo44.loc systemd[1]: Started NTP client/server.
окт 03 21:55:35 lemp.sevo44.loc chronyd[631]: Selected source 89.109.251.23
окт 03 21:55:35 lemp.sevo44.loc chronyd[631]: System clock wrong by 1.035954 seconds, adjustment started
окт 03 21:55:36 lemp.sevo44.loc chronyd[631]: System clock was stepped by 1.035954 seconds

Сетевые параметры

При установке CentOS 8 уделяю особое внимание настройки сетевых параметров. Кроме того, на странице настройки сетевых параметров указывается название хоста.

Всегда отключаю ipv6 так как в большинстве случаев он не используется а вот проблемы при работе с системой может создать.

Для управления сетевыми настройками в CentOS 8 после установки можно воспользоваться графической утилитой nmtui:

nmtui
= вывод команды =
-bash: nmtui: команда не найдена
= команда установки необходимого пакета для работы nmtui =
yum install NetworkManager-tui

В CentOS 8, сеть управляется только через Network Manager. Сетевые настройки лучше выполнять с помощью утилиты nmtui.

Руками вся настройка сводится к редактированию файлов в паке /etc/sysconfig/network-scripts/. Для определения интерфейсов необходимо предварительно выполнить команду ip addr которая покажет название всех имеющихся интерфейсов.

Например, мой файл настройки сетевого интерфейса ens18:

vim /etc/sysconfig/network-scripts/ifcfg-ens18
= вывод команды =
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="yes"
IPV6INIT="no"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens18"
UUID="2f1479ad-8a41-4886-acf4-64f0c5eff5c2"
DEVICE="ens18"
ONBOOT="yes"
IPADDR="135.21.15.51"
PREFIX="24"
GATEWAY="18.22.52.1"
DNS1="165.2.92.3"
ZONE=public

Для применения изменений необходимо перезагрузить Network Manager выполнив команду:

= или командой =
systemctl restart NetworkManager

= предварительно поняв название необходимого сервиса =
systemctl list-units | grep -i network

Смена пароля root

Смена пароля производится командой:

passwd
= вывод команды =
Изменяется пароль пользователя root.
Новый пароль : 
Повторите ввод нового пароля : 
passwd: все данные аутентификации успешно обновлены.

Брандмауэр FirewallD

По умолчанию в системе CentOS 8 используется брандмауэр FirewallD.

О том как работать я описывал в статье FirewallD базовая настройка.

Ниже я выполню необходимые действия не описывая всё подробно.

Вывод информации об активных зонах:

firewall-cmd --get-active-zones
= вывод команды =
public
  interfaces: ens18

Выведем информацию о конкретной зоне:

firewall-cmd --list-all --zone=public
= вывод команды =
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens18
  sources: 
  services: cockpit ssh dhcpv6-client
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

Для безопасности порт ssh лучше поменять на нестандартный.

Добавим разрешение подключаться по этому порту:

firewall-cmd --permanent --zone=public --add-port=25555/tcp
= вывод команды = 
success

Кроме того, сразу удалим ненужный сервис:

firewall-cmd --permanent --zone=public --remove-service=dhcpv6-client
= вывод команды =
success

Применим изменения и посмотрим результат сделанных действий:

firewall-cmd --reload
= вывод команды =
success

firewall-cmd --list-all --zone=public
= вывод команды =
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens18
  sources: 
  services: cockpit ssh 
  ports: 25555/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

Только после настройки ssh для работы по новому порту удаляйте сервис ssh из FirewallD! Иначе в случае ошибки настройки можете потерять доступ к серверу.

Смена порта SSH

Укажем порт в настройках ssh открыв конфигурационный файл командой:

vi /etc/ssh/sshd_config
= необходимые изменения =
Раскоментируем строку Port 22 и заменим на наш 25555

Перезапускаем сервис ssh командой:

systemctl restart sshd

Проверяем какой порт слушает sshd (для работы нужен установленный пакет net-tools):

netstat -tulpn | grep sshd
tcp 0 0 0.0.0.0:25555 0.0.0.0:* LISTEN 453/sshd 
tcp6 0 0 :::25555 :::* LISTEN 453/sshd

Подключение к SSH по нестандартному порту

Подключение производится с указанием необходимого порта командой:

ssh -p 25555 root@193.124.180.195

Авторизация SSH по ключу

Вводить каждый раз пароль не удобно да и не помешает добавить безопасности.

После настройки можно отключить в параметрах ssh авторизацию по паролю, но иногда подключение по паролю просто необходимо. Обычно я создаю 16 злачный пароль и меняю его если давал временный доступ специалистам любого уровня и моего доверия. Безопасность лишней не бывает!

Более подробно о том как настроить подключение по ключу можно в статье RSA или авторизация SSH по ключу

Добавляем на сервер необходимый ключ командой:

ssh-copy-id -i /home/local/.ssh/sevo44_rsa.pub -p 25555 root@243.21.12.24

Установка Midnight Commander

Установим самый популярный файловых менеджеров с текстовым интерфейсом командой:

dnf -y install mc

Включаем подсветку синтаксиса всех файлов, которые не обозначены явно в файле /usr/share/mc/syntax/Syntax. Этот универсальный синтаксис подходит для конфигурационных файлов, с которыми чаще всего приходится работать на сервере. Именно этот шаблон будет применяться к .conf и .cf файлам, так как к ним явно не привязано никакого синтаксиса. Перезаписываем файл unknown.syntax:

cp /usr/share/mc/syntax/sh.syntax /usr/share/mc/syntax/unknown.syntax
= вывод команды =
cp: переписать «/usr/share/mc/syntax/unknown.syntax»? y

В случае отказа от использования встроенного редактора MC необходимо в настройках «Настройки — Конфигурация» снять галки у параметров «Встроенный редактор» и «Встроенный просмотр»

Установка редактора Vim

По умолчанию в системе работает редактор vim и это вполне оправдано.

Обоснование использования редактора VIM и как с ним работать можно в статье Vim текстовый редактор

В случае отсутствия редактора его можно установить без вопросов командой:

dnf -y install vim

Отображение приглашения в консоли bash

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

Стандартный вариант отображения приветствия после установки CentOS 8:

[root@vds-micro ~]#

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

Выведем имеющиеся параметры:

echo $PS1
= вывод команды =
[\u@\h \W]\$

Изменим для текущей сессии:

export PS1='\[\033[01;31m\]\u@\H\[\033[01;34m\] \w \$\[\033[00m\] '
= в результате =
root@vds-micro.sevo44.ru ~ # 

Для постоянного применения настроек необходимо в папке пользователя в файл .bashrc добавить необходимый код:

vim .bashrc
= необходимые дополнения =
# Приветствие bash
PS1='\[\033[01;31m\]\u@\H\[\033[01;34m\] \w \$\[\033[00m\] '

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

vim /etc/profile.d/bash_completion.sh
= необходимое дополнение =
# Вид bash
PS1='\[\033[01;32m\]\u@\H\[\033[01;34m\] \w \$\[\033[00m\] '

В итоге я получил следующее:

root@vds-micro.sevo44.ru /etc #  = права root
root@vds-micro.sevo44.ru /etc #  = простой пользователь

Более подробно можно почитать в статье Изменение приглашения терминала в bash.

Настройка хранения истории bash

Список последних выполненных команд хранится в домашней директории пользователя в файле .bash_history (в начале точка). Его можно открыть любым редактором и посмотреть.

По умолчанию вывод команды history в консоли нам покажет:

history
= вывод команды =
1 yum update
2 reboot
3 htop
4 df -h

Как видим вывод не информативный. Кроме того, покажет только последние 1000 команд.

Быстро найти конкретную команду, можно с помощью фильтрации только нужных строк, например вот так:

history | grep yum

Изменим эту ситуацию добавив в файл .bashrc находящийся в папке пользователя необходимые параметры:

# Настройки history
export HISTSIZE=10000
export HISTTIMEFORMAT="%h %d %H:%M:%S "
PROMPT_COMMAND='history -a'
export HISTIGNORE="ls:ll:history:w"

Расшифруем параметры:

  • Первый параметр увеличивает размер файла до 10000 строк;
  • Второй параметр указывает, что необходимо сохранять дату и время выполнения команды;
  • Третья строка вынуждает сразу же после выполнения команды сохранять ее в историю;
  • В последней строке мы создаем список исключений для тех команд, запись которых в историю не требуется.

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

source ~/.bashrc

В итоге мы получим:

history
= вывод команды =
1  янв 22 18:33:08 yum update
2  янв 22 18:33:08 reboot
3  янв 22 18:33:08 htop
4  янв 22 18:33:08 df -h

Можно применить эту настройку для всех пользователей указав параметр в файле /etc/profile.d/bash_completion.sh.

В таком варианте получаем гораздо большую информативность.

Установка Tmux

Установим пожалуй один из самых необходимых и удобных программ для удаленной работы с сервером. Tmux терминальный оконный менеджер при использовании дает возможность при обрыве связи с сервером по ssh не терять информацию о выполняемых действиях.

Установка выполняется командой:

dnf install tmux

Более подробная информация по настройке и работе с программой Tmux можно в статье Tmux терминальный оконный менеджер

Cockpit: Веб-интерфейс управления сервером CentOS 8

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

При авторизации по ssh вы увидите следующее сообщение:

Activate the web console with: systemctl enable --now cockpit.socket

Достаточно выполнить команду в консоли systemctl enable —now cockpit.socket и при следующей авторизации вы увидите следующее сообщение:

Web console: https://localhost:9090/ or https://192.168.0.252:9090/

Порт 9090 должен быть открыт. Работающий по умолчанию сервис cockpit в FirewallD открывает этот порт.

При вводе в браузере https://192.168.0.252:9090 увидите приглашение ввести данные авторизации.

После входа вы увидите главную страницу с выводом графиков нагрузки основных параметров сервера.

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

Единственное что я делаю это то что не держу её включенной. Убираю из автозагрузки в самой панели управления или командой:

systemctl disable cockpit.socket

В случае необходимости мне не сложно включить при необходимости и отключить после использования следующими командами:

systemctl start cockpit.socket
systemctl stop cockpit.socket

Вывод

В результате я получил статью в которой свёл в одно место все основные моменты которые я на практике использую при базовой настройке сервера CentOS 8. Возможно что-то сказано с ошибками или можно улучшить. Комментируйте и советуйте я всегда рад обратной связи с пользователями систем Linux.

ZFS мониторинг в Zabbix

ZFS мониторинг файловой системы с помощью системы Zabbix. Контроль состояния происходит с учетом значения DEGRADED появляющегося в выводе статуса ZFS при ошибках с дисками. Своевременно полученная информация может избавить от серьезных проблем.

Введение

Не представляю как можно спокойно жить системному администратору без тотального контроля файловых систем. Например, для меня чем больше механизмов меня оповестят о проблемах дисков тем лучше. К сожалению жесткий диск может выйти из строя в любой момент и это не зависит от того дорогой он или дешевый.

В этой статье вы узнаете как с помощью системы Zabbix можно держать под контролем все имеющие диски в файловой системе ZFS.

Более подробно про систему ZFS можно узнать на сайте разработчика.

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

После необходимого параметра добавляем нужный код. В моем случае получился следующий код:

UserParameter=pve-1.zfs,cat /etc/zabbix/scripts/zfs_degraded.txt

Параметры имеют следующие значения:

  • UserParameter — параметр согласно которого агент понимает что с ним надо работать;
  • pve-1.zfs — название параметра который мы будем использовать при добавлении элемента данных;
  • cat /etc/zabbix/scripts/zfs_degraded.txt — команда и путь по которому брать данные.

Перезапускаем агент Zabbix и проверяем правильность получения параметра агентом:

systemctl restart zabbix-agent

zabbix_get -s 127.0.0.1 -k pve-1.zfs
= вывод команды =
3

В случае получения ошибок

zpool clear rpool-bash: zabbix_get: command not found 
или
zabbix_get [20065]: Check access restrictions in Zabbix agent configuration

перейдите по ссылке и узнаете почему не работает zabbix_get.

Действия на сервере Zabbix

Добавление элемента данных

Открываем необходимый узел и перейдя в «Элементы данных» добавляем новый нажав «Создать элемент данных«.

Необходимо заполнить следующие поля:

  • Имя — 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

Мониторинг 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. При меньших значениях однозначно будут проблемы в работе сервера.

Общий принцип мониторинга FSYNCS для Proxmox

Схема действий для мониторинга параметра будет следующей:

  • Создаем скрипт 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
= вывод команды =
81.52

Параметры имеют следующие значения:

  • 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

После необходимого параметра добавляем нужный код. В моем случае получился следующий код:

UserParameter=pve-1.fsyncs,cat /etc/zabbix/scripts/fsyncs.txt

Параметры имеют следующие значения:

  • UserParameter — параметр согласно которого агент понимает что с ним надо работать;
  • pve-1.fsyncs — название параметра который мы будем использовать при добавлении элемента данных;
  • cat /etc/zabbix/scripts/fsyncs.txt — команда и путь по которому брать данные.

Так как скрипт отрабатывает не быстро необходимо увеличить время ожидания.

vim /etc/zabbix/zabbix_agentd.conf 
= необходимый параметр = 
Timeout=15

Перезагружаем агент и проверим как он получает данные.

systemctl restart zabbix-agent

zabbix_get -s 127.0.0.1 -k pve-1.fsyncs
= вывод команды =
123.56

В случае получения ошибок

-bash: zabbix_get: command not found 
или
zabbix_get [20065]: Check access restrictions in Zabbix agent configuration

перейдите по ссылке и узнаете почему не работает zabbix_get.

Действия на сервере Zabbix

Добавление элемента данных

Открываем необходимый узел и перейдя в «Элементы данных» добавляем новый нажав «Создать элемент данных«.

Необходимо заполнить следующие поля:

  • Имя — pve-1 fsyncs zfs;
  • Ключ — pve-1.fsyncs;
  • Тип информации — Числовой (с плавающей точкой);
  • Интервал обновления — 5m;
  • Период хранения истории — 1w;
  • Группы элементов данных — Filesystem.

Добавление тригера

Открываем необходимый узел и перейдя в «Тригеры» добавляем новый нажав «Создать тригер«.

Необходимо заполнить следующие поля:

  • Имя тригера — pve-1 fsyncs zfs;
  • Выражение — {pve-1:pve-1.fsyncs.last()}<200.

Добавление графика

Открываем необходимый узел и перейдя в «Графики» добавляем новый нажав «Создать график«.

Например, мне нравится выводить все параметры  fsyncs для всех серверов в один график.

Заключение

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

Вот примерно такие графики вы можете наблюдать в период настройки.

Полезные ссылки:

Мониторинг температуры в Zabbix

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

Введение

Мониторинг температуры сервера это перовое что я обычно настраиваю сразу. Контролирую по максимуму все важные элементы.

Описание подойдёт для разных систем Linux. Более детально про установку и настройку Zabbix агентов для разных систем можно узнать в статье Zabbix agent установка и настройка.

Общий принцип мониторинга температуры

Для любой операционной системы необходимо выполнить 4 условия:

  1. Возможными способами извлечь данные с датчиков температуры нужного устройства;
  2. Обработать данные получив нужное значение;
  3. Передать полученное значение на сервер Zabbix;
  4. На сервере Zabbix добавить элемент данных, тригер и график.

Мониторинг температуры в системах Linux

Для примера я буду использовать систему Debian 10 Buster.

Мониторинг температуры CPU и Memory

Для получения данных о температуре будем применять утилиту  lm-sensors. Утилита очень популярна и присутствует во всех дистрибутивах Linux.

Установим пакет выполнив необходимую команду:

apt install lm-sensors

= Для CentOS 7 =
yum install lm_sensors

После установки необходимо запустить мастер настройки. Мастер обнаружит все доступные в системе встроенные аппаратные датчики, а также автоматически определит подходящие драйвера для них.

sensors-detect
= необходимые действия =
На все вопросы отвечаем Y

В конце спросит:
Do you want to add these lines automatically to /etc/modules? (yes/NO)
Отвечаем YES.

Перезагрузим систему и выполним команду которая выведет информацию о всех имеющихся датчиках:

sensors
= вывод команды =
coretemp-isa-0001
Adapter: ISA adapter
Core 0: +81.0°C (high = +86.0°C, crit = +100.0°C)
Core 1: +77.0°C (high = +86.0°C, crit = +100.0°C)
Core 2: +73.0°C (high = +86.0°C, crit = +100.0°C)
Core 3: +73.0°C (high = +86.0°C, crit = +100.0°C)
i5k_amb-isa-0000
Adapter: ISA adapter
Ch. 0 DIMM 0: +75.5°C (low = +110.5°C, high = +124.0°C)
Ch. 0 DIMM 1: +71.0°C (low = +110.5°C, high = +124.0°C)
Ch. 0 DIMM 2: +63.5°C (low = +104.5°C, high = +124.0°C)
Ch. 0 DIMM 3: +64.5°C (low = +110.5°C, high = +124.0°C)
Ch. 1 DIMM 0: +74.5°C (low = +110.5°C, high = +124.0°C)
Ch. 1 DIMM 1: +77.0°C (low = +110.5°C, high = +124.0°C)
Ch. 1 DIMM 2: +69.0°C (low = +104.5°C, high = +124.0°C)
Ch. 1 DIMM 3: +60.0°C (low = +109.0°C, high = +124.0°C)
coretemp-isa-0000
Adapter: ISA adapter
Core 0: +83.0°C (high = +86.0°C, crit = +100.0°C)
Core 1: +79.0°C (high = +86.0°C, crit = +100.0°C)
Core 2: +77.0°C (high = +86.0°C, crit = +100.0°C)
Core 3: +77.0°C (high = +86.0°C, crit = +100.0°C)

Примерно такой вывод будет при отрицательном ответе на последний вопрос при настройке. При положительном ответе вы увидите гораздо больше параметров.

В выводе мы видим следующие группы датчиков:

  • coretemp-isa-0001 — второй 4 ядерный процессор;
  • i5k_amb-isa-0000 — 8 модулей памяти;
  • coretemp-isa-0000 — первый 4 ядерный процессор.

Можно вывести показания одной группы датчиков.

sensors coretemp-isa-00000
= вывод команды =
coretemp-isa-0000
Adapter: ISA adapter
Core 0: +82.0°C (high = +86.0°C, crit = +100.0°C)
Core 1: +79.0°C (high = +86.0°C, crit = +100.0°C)
Core 2: +75.0°C (high = +86.0°C, crit = +100.0°C)
Core 3: +77.0°C (high = +86.0°C, crit = +100.0°C)

Команды для вывода нужных параметров

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

Например, в моем случае имеется 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}'

Коды подсмотрел тут.

Для вывода параметра с одной строки можно использовать следующий код:

sensors coretemp-isa-00000 | grep 'Core 0' | cut -c16-17
=вывод команды =
65.45

Где параметры имеют следующее значение:

  • sensors — сама программа;
  • 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}'
UserParameter=pve-t.core1,sensors coretemp-isa-00001 | awk -F'[:+°]' '{if(max==""){max=$3}; if(max<$3) {max=$3};} END {print max}'
UserParameter=pve-t.memory,sensors i5k_amb-isa-0000 | awk -F'[:+°]' '{if(max==""){max=$3}; if(max<$3) {max=$3};} END {print max}'

Расшифрую первую строчку кода которая содержит следующие значения:

  • 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

перейдите по ссылке и узнаете почему не работает zabbix_get.

Переходим к настройкам на стороне Zabbix сервера.

Мониторинг температуры HDD и SSD

Можно получить данные о температуре жесткого диска с системы 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

После проверки наличия параметра добавляем необходимый код:

UserParameter=pve-t.sda,hddtemp /dev/sda | cut -c24-25
UserParameter=pve-t.sdb,hddtemp /dev/sdb | cut -c24-25

Расшифрую первую строчку кода которая содержит следующие значения:

  • UserParameter — параметр согласно которого агент понимает что с ним надо работать;
  • pve-t.sda — название параметра который мы будем использовать при добавлении элемента данных;
  • hddtemp /dev/sda | cut -c24-25 — команда которой получается требуемое значение.

После внесения изменений в файл настройки Zabbix агента его обязательно нужно перезапустить.

Для систем использующих Systemd команда перезапуска агента будет одинаковой. Например, для Debian 10 и CentOS 7 команда будет следующая:

systemctl restart zabbix-agent

Проверка получения значения Zabbix агентом

Советую всегда проверять как агент получает значения на самом узле сбора данных.

Перейдите по ссылке сможете узнаете почему Не работает zabbix_get.

Пробуем получить данные температуры диска sda:

zabbix_get -s 127.0.0.1 -k pve-t.sda
= вывод команды =
/dev/sda: open: Permission denied

Мы получили ошибку в которой говорится что нет доступа на выполнение команды от пользователя 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

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

Мониторинг температуры в системах Windows

Настроить мониторинг на системе 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 agent можно установить практически на любую операционную систему. В этой статье будет собираться опыт установки агентов Zabbix на разные операционные системы и устройства. Контроль любых параметров после изучения документации от разработчика.

Введение

Узнать как производится установка системы вы можете из статьи Установка Zabbix 4.2. Понять основный принцип работы а так же вникнуть в структуру работы с системой можно в статье Настройка Zabbix сервера. В базовой версии настроек агента вполне достаточно, но если вы захотите контролировать какие то свои параметры вам это удастся после изучения документации на сайте разработчика.

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

Действия на сервере 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 выполнив необходимую команду:

rpm -Uvh https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-release-4.2-1.el7.noarch.rpm
= вывод команды =
Загружается https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-release-4.2-1.el7.noarch.rpm
предупреждение: /var/tmp/rpm-tmp.W8KoVE: Заголовок V4 RSA/SHA512 Signature, key ID a14fe591: NOKEY
Подготовка...                 ############################## [100%]
Обновление / установка...
1:zabbix-release-4.2-1.el7    ############################## [100%]

Очистим и пересоздадим кэш yum:

yum clean all
yum makecache

Произведем установку введя в консоли следующую команду:

yum install zabbix-agent

В случае использования FirewallD необходимо выполнить команды которые открою порт 10050:

firewall-cmd --permanent --zone=public --add-service=zabbix-agent

= применить изменения =
firewall-cmd --reload

Более подробно как работать с FirewallD рассказано в статье FirewallD базовая настройка.

В файле конфигурации агента /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 адрес.

Запускаем агент и добавляем в автозагрузку:

systemctl start zabbix-agent
systemctl enable zabbix-agent

Проверяем лог файл агента для CentOS 7 следующей командой:

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 для Debian

На сайте разработчика Zabbix на странице Скачать и установить Zabbix выбираем необходимый дистрибутив и версию.

В примере описан вариант установки и настройки Zabbix agent для операционной системы Debian 10 Buster.

Подключаем репозиторий версии Zabbix 4.2 выполнив необходимые команды:

wget https://repo.zabbix.com/zabbix/4.2/debian/pool/main/z/zabbix-release/zabbix-release_4.2-1+buster_all.deb
dpkg -i zabbix-release_4.2-1+buster_all.deb

Обновляем список пакетов:

apt update

Произведем установку выполнив в консоли следующую команду:

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 адрес.

Добавляем в автозагрузку и производим перезапуск агента:

systemctl enable zabbix-agent
systemctl restart zabbix-agent

Проверяем лог файл агента следующей командой:

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 дайте необходимые права на папку с программой и лог файл:

chown -R zabbix:zabbix /var/run/zabbix
chown zabbix:zabbix /tmp/zabbix_agentd.log

После этого служба будет нормально стартовать после перезагрузки.

В случае если не дать права на лог файл будет ошибка. Надо или давать права на лог файл или менять путь в файле настройки.

service zabbix_agentd start
= ошибка при отсутствии прав на лог файл =
zabbix_agentd [2455]: cannot open "/tmp/zabbix_agentd.log": [13] Permission denied

Установка Zabbix agent на Windows

Переходим на страницу загрузок Zabbix agent и скачиваем самую последнюю версию агента для Windows нужной разрядности.

Распаковываем архив. Создаем на диске С: папку 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.log 
LogFileSize=1
Server=192.168.0.109 # IP адрес сервера Zabbix
ServerActive=192.168.0.109 # IP сервера Zabbix на который активный агент будет отправлять данные 
Hostname=test # имя узла мониторинга, которое указано на сервере zabbix

Не забываем создать разрешающее правило в Брандмауэр, если он у вас включен. Находясь в настройках Брендмауэра идем по пути:

Дополнительные параметры — Правило для входящих подключений — Создать правило.

  • Тип правила: Для порта;
  • Протоколы и порты: Протокол TCP; Определенные локальные порты: 10050;
  • Действие: Разрешить подключение;
  • Профиль (ставим галочки): Доменный, Частный, Публичный;
  • Имя: Zabbix Agent 10050.

В случае использования активного агента идем по пути (даже если не используется лучше открыть):

Дополнительные параметры — Правило для исходящих подключений — Создать правило.

  • Тип правила: Для порта;
  • Протоколы и порты: Протокол TCP; Определенные локальные порты: 10051;
  • Действие: Разрешить подключение;
  • Профиль (ставим галочки): Доменный, Частный, Публичный;
  • Имя: Zabbix Agent 10051.

Ищем службу с именем 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 и устанавливать её надо согласно командам применяемым в используемом дистрибутиве.

Debian 8-10
apt install zabbix-get

CentOS 7
yum install 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

Заключение

Статья будет постоянно дополняться и изменяться. Не вижу смысла держать информацию если версия программы сильно устарела. Возможно, при таком подходе, я буду терять часть ссылок в поисковых системах. Зато знаю точно, что никого не будут бесить мои статьи которые потеряли актуальность, но по запросу в поисковике вылазят на первую страницу.

Настройка Zabbix сервера

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

Цели статьи

  • Простыми словами описать принцип работы Zabbix;
  • Рассказать как производится настройка Zabbix на личном примере;
  • Коротко пройтись по основным возможностям системы Zabbix.

Введение

Настройка Zabbix мониторинга, это самое главное что должен делать каждый нормальный системный администратор.

Главных причин по которым вам надо использовать мониторинг несколько:

  • Не возможно качественно поддерживать работоспособность сети без постоянного анализа её параметров;
  • Вы первый будете в курсе при возникновении проблемы на обслуживающем оборудовании.

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

Иногда руководители просто не понимают в чем разница между приглашением специалиста по вызову и заключением договора на абонентское обслуживание.

Например, один клиент поймал шифровальщик файлов и восстановление данных ему обошлось в кругленькую сумму. Другой, который заключил договор на обслуживание (я успел на 80 % выполнить работы по защите баз данных и мониторинга сети) отделался легким испугом.

В этой статье я специально не делаю упор как производиться настройка Zabbix определенной версии, так как мигрируя с версии на версию я не заметил принципиальных изменений в работе с системой. При желании вы можете прочитать статью и узнать как производится Установка Zabbix 4.2 на операционную систему CentOS 7.

Главный принцип и подход разработчиков остается неизменным. В системе нет ничего лишнего и порой кажущееся усложнение на практике оказывается удобным механизмом упрощающим жизнь системному администратору контролирующему большой парк разнообразной техники.

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

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

Простое описание работы Zabbix

Система Zabbix это клиент-серверное решение. На всех контролируемых узлах должен быть установлен клиент (агент) который собирает данные для мониторинга узла.

Когда начнете изучать вы поймете что если описывать все доскональна, то статья получиться очень большая и нудная. Надеюсь из ниже сказанного основную суть вы поймёте.

Порты работы

Один из важных моментов который надо учитывать при настройке это знать на каких портах по умолчанию работает Zabbix.

Порта всего два:

  1. 10051 — по нему сервер получает данные от активных агентов. Порт должен быть открыть на сервере;
  2. 10050 — по нему сервер опрашивает клиентов и забирает данные. Порт должен быть открыть на клиенте.

Клиенты

Клиент  может быть двух видов:

  • Обычный агент — сервер получает доступ к узлу мониторинга и забирает данные;
  • Активный агент — клиент сам отправляет данные серверу.

Далеко не сразу я смог разобраться в нюансах использования активного агента. Из статьи вы узнаете как правильно пользоваться мониторингом компьютеров которые не имеют статического IP адреса.

Шаблоны

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

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

В шаблоне основное понятие — элементы данных.  В элементе данных указано какой параметр контролируется, по каким принципам и с указанием периода хранения данных в базе данных. Элементы данных можно группировать, что даёт удобство при выводе необходимых данных из огромной массы собираемых данных.

Для мониторинга кроме стандартных параметров существуют и те что невозможно указать в жестко. Например, количество и буквы разделов жестких дисков. Для этого в шаблоне присутствует раздел правила обнаружения в котором и указаны правила обнаружения жестких дисков, сетевых интерфейсов и служб (для Windows систем).

Триггеры

Триггеры это то на чем держится и в чем заключается вся прелесть мониторинга. В триггере указываются параметры при которых вы получите сообщение о изменении важного для вас контролируемого значения. Например, при большой нагрузке процессора, при маленьком количество свободной памяти на жестких дисках, и тд. и тп. В триггере указывается важность события. При добавлении нового триггера разработчик придумал конструктор выражения по которому можно составить необходимый вам вариант срабатывания триггера.

Оповещения

Способы оповещений, по умолчанию, в системе не много и основной является сообщение на e-mail. При желании можно настроить отправку сообщений в различные менеджеры. Так же можно настроить что система будет звонить на телефон и проговаривать возникшую проблему. Про то что каждому пользователю можно выбрать период и время получения оповещений я промолчу.

Настройка Zabbix сервера после установки

Со временем вы сами поймете как вам лучше и удобней настроить свою систему мониторинга.

Не рекомендую тупо использовать мои варианты и настоятельно советую оставить стандартные настройки по умолчанию! Все меняется, и то что я меняю сейчас в следующих версиях может уже быть или реализовано другим способом.

Настройка главного пользователя

Первым делом необходимо сменить стандартные данные авторизации (Admin — пользователь, zabbix — пароль) администратора.

Заходим по пути Administration — Users — Admin

В открывшейся форме меняем необходимые параметры.

При выборе другого языка при повторной авторизации он будет задействован.

Можно поменять данные главного пользователя по умолчанию или создать своего и удалить стандартного. Как поступить решайте сами.

После создания своего пользователя и назначив ему главные права вы не сможете удалить пользователя по умолчанию, так как ему присвоены некоторые элементы по умолчанию. Не буду указывать какие элементы вам надо будет переназначить, так как система сама вам скажет почему не может удалить пользователя и по ним вы сможете понять что надо сделать.

Следующим этапом настроим куда и по каким правилам будут приходить оповещения. Например, в моем случае сделано оповещение на почту.

Обязательно проверяйте права! В случае добавления нового главного администратора это сделайте обязательно.

Общие настройки

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

Настройка e-mail оповещений

Просто добавить пользователю способ оповещения не достаточно. Необходимо сделать еще несколько настроек.

Для отправки сообщений на почту необходимо вначале активировать необходимый способ оповещения. В примере указаны настройки для почты работающей на yandex.

После выполненных настроек обязательно выполните проверочный тест.

Последнее что надо сделать что бы работало оповещение это активировать действие которое отвечает за отправку почты. В настройках действия указывается шаблон вида письма которое отправляеться на почту при произошедших событиях триггеров.

Мне удобней в получаемом письме видеть вначале название узла мониторинга, статус и название проблемы. Для применения моих предпочтений изменяю параметр в поле «Тема по умолчанию» для «Операции» и «Операции восстановления»

Вот шаблон для копирования:

{HOST.NAME} — {TRIGGER.STATUS}: {TRIGGER.NAME}

Настройка Zabbix шаблонов

В следующих статьях обязательно расскажу как создавать свои шаблоны или экспортировать стороние. Сейчас моя задача сделать понятным для вас как работать с шаблонами и из чего они состоят.

На примере шаблона Template OS Linux расскажу из чего он состоит.

Все шаблоны имеют одинаковую структуру и содержат:

  • Группы элементов данных — все элементы данных сгруппированы по типу событий. Например, все что связано с процессором находится в одной группе и тд. и тп.;
  • Элементы данных — сами параметры подвергающиеся мониторингу;
  • Триггеры — правила по которым срабатывает оповещение о произошедшем событии с контролируемым значениями;
  • Графики — варианты графиков которые могут выводится для данного шаблона;
  • Комплексные экраны — это экраны которые могут быть выведены для узлов которые наблюдаются по данному шаблону. Не стоит путать эти экраны с комплексными экранами находящимися в закладке «Мониторинг»;
  • Правила обнаружения — это правила которые определяют параметры которые свойственны для каждого узла мониторинга персонально. Например, дисковые системы и сетевые интерфейсы;
  • Веб-сценарии — возможность добавлять сайты и осуществлять их мониторинг.

К каждому шаблону можно присоединить любой другой шаблон. Например, для многих шаблонов присоединен шаблон «Template App Zabbix Agent» который отвечает за параметры мониторинга самого агента.

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

Нажав «Полное клонирование» и введя свое имя вы получите полную копию в которой сможете проводить свои эксперименты.

Для шаблона Windows я отключаю правило обнаружения «Windows service discovery» по причине очень частых срабатываний всяких «очень важных параметров»  Windows.

Использование активного агента Zabbix

В сети я не смог найти боле мене полной информации о том как правильно добавлять узлы мониторинга которые не имеют статического IP. Постараюсь закрыть эту брешь в этой статье.

Для добавления узла мониторинга не имеющего статического IP необходимо выполнить 4 условия:

  1. В параметре «ServerActive» настройки агента указывается IP сервера Zabbix;
  2. Брандмауэр должен иметь разрешение на исходящий порт 10051 (будет не плохо если сразу добавите правило и для входящего порта 10050);
  3. Шаблон который используется для узла должен иметь во всех элементах данных параметр «Zabbix агент (активный)»;
  4. При настройке узла в параметре «Интерфейсы агента» указывается IP адрес 0.0.0.0 (говорит что принимать данные нужно с любого адреса), подключение через IP и указывается порт 10051.

По умолчанию почти во всех шаблонах параметр сбора стоит «»Zabbix агент». Менять эти параметры в стандартных шаблонах не целесообразно.

Например, для мониторинга узла без статического IP работающего на операционной системе Linux необходимо взять шаблон «Template OS Linux» и произвести его полное клонирование. Название шаблона сделайте понятным для понимания что в шаблоне используется параметр активного агента.

Как в новом шаблоне сделать параметр «Zabbix агент (активный)» во всех параметрах вы разберетесь сами. Обязательно создайте полную копию шаблона «Template App Zabbix Agent» с аналогичным изменением параметра агента. Главное не забудьте поменять его в присоединенных шаблонах вашего нового шаблона.

Больше никаких различий в дальнейшей работе я не заметил. Единственное что бросается в глаза это отсутствие цветовой зеленой метки на цветовой индикации состояния агента.

На обычных агентах в случае успеха он должен быть зеленым.

Карты сетей

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

Например, схема моей небольшой личной сети выглядит следующим образом.

Описывать как создавать карты сети  их настраивать нет смысла, так как всё там до безобразия просто.

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

Параметр «Комплексные экраны узла сети» выведет именно комплексные экраны которые настраиваются в шаблоне!

Комплексные экраны

Комплексные экраны которые которые находятся в закладках Мониторинг — Комплексные экраны вы можете настроить на основании реально получаемых данных с разных узлов сети.

Заключение

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