Модификация Icinga2 для использования модели Master / Client в CentOS 6 или CentOS 7

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

Например: допустим, у вас есть 4 различных веб-сервера с балансировкой нагрузки. Если вы знаете, что у вас будет всплеск нагрузки (возможно, продажа или что-то, для чего вы ожидаете много активности), вы можете захотеть увеличить уровни, при которых высокая загрузка ЦП предупреждает системных администраторов. Если вы используете чеки NRPE, вам нужно будет перейти на каждый сервер и изменить /etc/nrpe.d/common_commands.cfgдокумент на каждом из них. В модели мастер-клиент вы можете просто изменить их определения хостов в /etc/icinga2/repository.d/hosts/папке, а затем перезагрузить Icinga. Проверки будут распространяться на каждый сервер и будут получены автоматически. Вы также можете очень легко добавлять чеки, изменяя /etc/icinga2/repository.d/services/файлы, и они будут автоматически распространяться и распознаваться, пока плагины существуют на клиентских серверах.

Предпосылки

  • Экземпляр сервера с именами Icinga2 и Icingaweb2 уже установлен и настроен ( инструкции ) icinga2master.example.com.
  • Свежий экземпляр сервера Vultr CentOS 6 или 7, который вы хотите отслеживать по имени icinga2client.example.com.
  • Доступ в судо.

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

Шаг 1: Обновите систему

Добавьте репозиторий «ICINGA» в клиентскую систему для установки пакетов Icinga.

sudo cat > /etc/yum.repos.d/ICINGA-release.repo << 'EOF'
[icinga-stable-release]
name=ICINGA (stable release for epel)
baseurl=http://packages.icinga.org/epel/$releasever/release/
enabled=1
gpgcheck=1
gpgkey=http://packages.icinga.org/icinga.key
EOF

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

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

# CentOS 6
sudo yum -y install icinga2 mysql-server mysql icinga2-ido-mysql nagios-plugins-disk nagios-plugins-load nagios-plugins-procs nagios-plugins-ssh nagios-plugins-users nagios-plugins-swap nagios-plugins-ping icingacli

# CentOS 7
sudo yum -y install icinga2 mariadb-server mysql icinga2-ido-mysql nagios-plugins-disk nagios-plugins-load nagios-plugins-procs nagios-plugins-ssh nagios-plugins-users nagios-plugins-swap nagios-plugins-ping icingacli

CentOS 7 использует MariaDB вместо MySQL, поэтому необходимые пакеты немного отличаются. Запустите службы и установите их для запуска при загрузке.

sudo chkconfig icinga2 on
sudo service icinga2 start

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

# CentOS 6
sudo chkconfig mysqld on
sudo service mysqld start

#CentOS 7
sudo systemctl enable mariadb.service
sudo systemctl start mariadb.service

Защитите установку MySQL / MariaDB. Оба CentOS 6 и 7 используют одну и ту же команду.

sudo mysql_secure_installation

Во время процесса ответьте на вопросы, как показано:

Enter current password for root (enter for none): Enter
Set root password? [Y/n]: Y
New password: $newRootPassword
Re-enter new password: $newRootPassword
Remove anonymous users? [Y/n]: Y
Disallow root login remotely? [Y/n]: Y
Remove test database and access to it? [Y/n]: Y
Reload privilege tables now? [Y/n]: Y

Запишите, $newRootPasswordкак вам это понадобится несколько раз, и сбросить это будет больно.

Шаг 3: Настройте базу данных

Вам необходимо создать icingaимя пользователя и импортировать схему в базу данных. Это делается одинаково на CentOS 6 и 7.

sudo mysql -u root -p
>CREATE DATABASE icinga;
>GRANT SELECT, INSERT, UPDATE, DELETE, DROP, CREATE VIEW, INDEX, EXECUTE ON icinga.* TO 'icinga'@'localhost' IDENTIFIED BY '$someIcingaPassword'; 
>exit

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

sudo mysql -u root -p icinga < /usr/share/icinga2-ido-mysql/schema/mysql.sql

Вам нужно будет ввести $newRootPasswordпароль MySQL / MariaDB, который вы использовали в приведенной mysql_secure_installationвыше команде, а не тот, который $someIcingaPasswordвы только что создали - этот пароль будет использован позже.

Включить idoмодуль (база данных).

sudo icinga2 feature enable ido-mysql

Вам нужно будет отредактировать /etc/icinga2/features-enabled/ido-mysql.confфайл, чтобы добавить информацию о базе данных. Вы можете сделать это с помощью следующей команды.

sudo vi /etc/icinga2/features-enabled/ido-mysql.conf

В этом файле найдите закомментированные строки (начните с //).

//user = "icinga"
//password = "icinga"
//host = "localhost"
//database = "icinga"

... и отредактируйте их, используя только что созданного пользователя / пароль.

user = "icinga"
password = "$someIcingaPassword"
host = "localhost"
database = "icinga"

Убедитесь, что вы раскомментировали строки, удалив первые две косые черты.

Далее перезапустите сервис, чтобы забрать изменения.

sudo service icinga2 restart

Вам нужно будет добавить соединение между клиентским сервером и мастером Icinga2, который уже настроен. Это необходимо сделать с помощью Firewalld в CentOS 7 или IPTables в CentOS 6 или 7.

# CentOS 6
sudo vi /etc/sysconfig/iptables
...
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5665 -j ACCEPT
...
#Icinga2 Master
-A OUTPUT -p tcp -m state --state NEW -m tcp --dport 5665 -j ACCEPT

sudo iptables restart

# CentOS 7    
sudo firewall-cmd --add-port=5665/tcp --permanent
sudo firewall-cmd --reload

Теперь отредактируйте файл hosts, чтобы добавить мастер в качестве имени локального домена.

sudo vi /etc/hosts
...
$masterIP  icinga2master icinga2master.example.com

Шаг 4: Инициализируйте мастер

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

sudo icinga2 node wizard

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

Welcome to the Icinga 2 Setup Wizard!

We'll guide you through all required configuration details.

Please specify if this is a satellite setup ('n' installs a master setup) [Y/n]: n
Starting the Master setup routine...
Please specify the common name (CN) [icinga2-master1.localdomain]: icinga2master.example.com
Checking for existing certificates for common name 'icinga2master.example.com'...
Certificates not yet generated. Running 'api setup' now.
information/cli: Generating new CA.
information/base: Writing private key to '/var/lib/icinga2/ca/ca.key'.
information/base: Writing X509 certificate to '/var/lib/icinga2/ca/ca.crt'.
information/cli: Generating new CSR in '/etc/icinga2/pki/icinga2master.example.com.csr'.
information/base: Writing private key to '/etc/icinga2/pki/icinga2master.example.com.key'.
information/base: Writing certificate signing request to '/etc/icinga2/pki/icinga2master.example.com.csr'.
information/cli: Signing CSR with CA and writing certificate to '/etc/icinga2/pki/icinga2master.example.com.crt'.
information/cli: Copying CA certificate to '/etc/icinga2/pki/ca.crt'.
Generating master configuration for Icinga 2.
information/cli: Adding new ApiUser 'root' in '/etc/icinga2/conf.d/api-users.conf'.
information/cli: Enabling the 'api' feature.
Enabling feature api. Make sure to restart Icinga 2 for these changes to take effect.
information/cli: Dumping config items to file '/etc/icinga2/zones.conf'.
information/cli: Created backup file '/etc/icinga2/zones.conf.orig'.
Please specify the API bind host/port (optional):
Bind Host []: <hit enter>
Bind Port []: <hit enter>
information/cli: Created backup file '/etc/icinga2/features-available/api.conf.orig'.
information/cli: Updating constants.conf.
information/cli: Created backup file '/etc/icinga2/constants.conf.orig'.
information/cli: Updating constants file '/etc/icinga2/constants.conf'.
information/cli: Updating constants file '/etc/icinga2/constants.conf'.
information/cli: Updating constants file '/etc/icinga2/constants.conf'.
Done.

Now restart your Icinga 2 daemon to finish the installation!

Затем перезапустите Icinga2, чтобы получить изменения.

sudo service icinga2 restart

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

sudo icinga2 pki ticket --cn icinga2client.example.com

Вы получите некоторую строку $pkiString. Скопируйте эту строку, так как она понадобится вам на клиенте.

Шаг 5: Инициализировать клиента

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

sudo icinga2 node wizard

Это придет с похожей страницей выше. Эта страница показана ниже с ответами.

Welcome to the Icinga 2 Setup Wizard!

We'll guide you through all required configuration details.



Please specify if this is a satellite setup ('n' installs a master setup) [Y/n]: Y
Starting the Node setup routine...
Please specify the common name (CN) [icinga2client.example.com]:
Please specify the master endpoint(s) this node should connect to:
Master Common Name (CN from your master setup): icinga2master.example.com
Do you want to establish a connection to the master from this node? [Y/n]: Y
Please fill out the master connection information:
Master endpoint host (Your master's IP address or FQDN): icinga2master.example.com
Master endpoint port [5665]: 5665
Add more master endpoints? [y/N]: N
Please specify the master connection for CSR auto-signing (defaults to master endpoint host):
Host [icinga2master.example.com]: icinga2master.example.com
Port [5665]: 5665
information/cli: Created backup file '/etc/icinga2/pki/icinga2client.example.com.key.orig'.
information/cli: Created backup file '/etc/icinga2/pki/icinga2client.example.com.crt.orig'.
information/base: Writing private key to '/etc/icinga2/pki/icinga2client.example.com.key'.
information/base: Writing X509 certificate to '/etc/icinga2/pki/icinga2client.example.com.crt'.
information/cli: Fetching public certificate from master (icinga2master.example.com, 5665):

Certificate information:

 Subject:     CN = icinga2master.example.com
 Issuer:      CN = Icinga CA
 Valid From:  Jan 10 21:08:37 2017 GMT
 Valid Until: Jan  7 21:08:37 2032 GMT
 Fingerprint: FE 72 AB F3 18 A5 12 E0 0C 5D 94 8B 96 C4 57 3B 00 5C E0 04

Is this information correct? [y/N]: Y
information/cli: Received trusted master certificate.

Please specify the request ticket generated on your Icinga 2 master.
 (Hint: # icinga2 pki ticket --cn 'icinga2client.example.com'): $pkiString

information/cli: Requesting certificate with ticket '$pkiString'.

warning/cli: Backup file '/etc/icinga2/pki/icinga2client.example.com.crt.orig' already exists. Skipping backup.
information/cli: Writing signed certificate to file '/etc/icinga2/pki/icinga2client.example.com.crt'.
information/cli: Writing CA certificate to file '/etc/icinga2/pki/ca.crt'.
Please specify the API bind host/port (optional):
Bind Host []: <enter key>
Bind Port []: <enter key>
Accept config from master? [y/N]: Y
Accept commands from master? [y/N]: Y
information/cli: Disabling the Notification feature.
Disabling feature notification. Make sure to restart Icinga 2 for these changes to take effect.
information/cli: Enabling the Apilistener feature.
warning/cli: Feature 'api' already enabled.
information/cli: Created backup file '/etc/icinga2/features-available/api.conf.orig'.
information/cli: Generating local zones.conf.
information/cli: Dumping config items to file '/etc/icinga2/zones.conf'.
information/cli: Created backup file '/etc/icinga2/zones.conf.orig'.
information/cli: Updating constants.conf.
information/cli: Created backup file '/etc/icinga2/constants.conf.orig'.
information/cli: Updating constants file '/etc/icinga2/constants.conf'.
information/cli: Updating constants file '/etc/icinga2/constants.conf'.
Done.

Now restart your Icinga 2 daemon to finish the installation!

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

sudo icinga2 restart

Это уже может быть сделано, но вам нужно убедиться, что функции команд и API включены.

sudo icinga2 feature enable command
sudo icinga2 feature enable api

Если они не были включены, будет указано «функция включена», поэтому вам нужно будет перезапустить демон Icinga2. Но сначала вам нужно изменить владельца файлов в /etc/icinga2каталоге, так как некоторые из них имеют неправильные разрешения после запуска мастера узлов. Все они должны иметь своего владельца и группу icinga. Измените разрешения с помощью следующей команды:

sudo chown -R icinga:icinga /etc/icinga2/

Теперь вы можете перезапустить демон Icinga2.

sudo service icinga2 restart

Шаг 6: Настройте клиент

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

  • /etc/icinga2/zones.conf: Содержит конечные точки (серверы) и зоны, которые их содержат. Вот как серверы разделены. Убедитесь, что имена клиентов совпадают с именами серверов.
  • /etc/icinga2/icinga2.conf: Вы принимаете команды и конфигурации от мастера, поэтому вам нужно внести незначительные изменения в этот файл, чтобы избежать дублирования определений команд.

Во-первых, мы собираемся изменить zones.confфайл, чтобы определить сервер и зону, в которой он находится, а также создать «глобальную» зону для определений команд, которые являются универсальными для ВСЕХ серверов, а не уникальными для каждого (например, проверки диска) ,

sudo vi /etc/icinga2/zones.conf

object Zone clientZone { 
        endpoints = [ "icinga2master.example.com" ]
}

object Zone "global-templates" { # Add global templates zone
        global = true
}

object Endpoint NodeName {
        host = "$icinga2clientIP" 
}

object Zone ZoneName {
        endpoints = [ NodeName ]
        parent = clientZone
} 

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

Теперь внесите изменения в /etc/icinga2/icinga2.confфайл. Вы должны закомментировать строку include_recursive "conf.d".

sudo vi /etc/icinga2/icinga2.conf
...
//include_recursive "conf.d"
...

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

sudo icinga2 daemon -C

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

sudo chown -R icinga:icinga /etc/icinga2/

Есть и другие проблемы с конфигами, обычно информация, полученная из выходных данных sudo icinga2 daemon -Cкоманды, будет достаточно подробной, чтобы отследить их. Решение всех возможных проблем выходит за рамки данного руководства.

Если проверка прошла успешно, перезапустите сервис:

sudo service icinga2 restart

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

sudo vi /etc/sudoers
...
Defaults:icinga !requiretty
icinga          ALL=(ALL) NOPASSWD: /usr/lib64/nagios/plugins/

Теперь настройка клиента официально завершена. Вам не нужно вносить какие-либо дополнительные изменения, любые проверки служб будут настроены на главном сервере и распространятся на клиент. Однако вам нужно будет установить любые дополнительные плагины, которые вам могут понадобиться. Плагины также могут быть написаны с использованием Python, Perl, BASH, PHP и других скриптовых языков.

Шаг 7: Добавить клиента в мастер конфигурации

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

  1. Добавьте конфигурацию хоста в repository.d.
  2. Добавьте хост в зону в качестве конечной точки.
  3. Настройте любые проверки для клиента. Это немного выходит за рамки данного руководства, я приведу только базовое объяснение необходимых шагов.

Конфигурация хоста будет введена в /etc/icinga2/repository.d/hosts/icinga2client.example.com.confфайл.

sudo vi /etc/icinga2/repository.d/hosts/icinga2client.example.com.conf
object Host "icinga2client.example.com" {
  import "satellite-host"
  address = "$icinga2clientIP"
  vars.os = "Linux"
}
sudo chown icinga:icinga /etc/icinga2/repository.d/hosts/icinga2client.example.com.conf

Теперь хост существует в конфигурации клиента, но его нужно поместить в зону. Эта зона будет находиться в /etc/icinga2/repository.d/zonesпапке с тем же именем, что и имя зоны, чтобы ее было легче отслеживать.

sudo vi /etc/icinga2/repository.d/zones/clientZone.conf
object Zone "clientZone" {
        endpoints = [ "icinga2client.example.com" ]
        parent = "icinga2master.example.com"
}

Далее нужно добавить global-templatesзону.

sudo vi /etc/icinga2/repository.d/zones/global-templates.conf
object Zone "global-templates" {
        global = true
}

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

sudo vi /etc/icinga2/repository.d/endpoints/icinga2client.example.com.conf

#Change values to match the host you're adding
object Endpoint "icinga2client.example.com" {
        host = "$icinga2clientIP"
}

Чтобы убедиться в отсутствии проблем с разрешениями, перейдите и снова измените владельца / группу.

sudo chown -R icinga:icinga /etc/icinga2

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

sudo icinga2 daemon -C

Если проверка прошла успешно, продолжайте перезагрузку.

sudo service icinga2 restart

Если вы посетите свой веб-сайт Icinga2, вы увидите, что сервер стал доступным.

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

Вы можете столкнуться с ошибками «команда не найдена» или «проверка не определена». Это где зона глобальных шаблонов вступает в игру. Вам нужно будет скопировать конфигурацию в /etc/icinga2/conf.d/файлы и поместить их в /etc/icinga2/zones.d/global-templates/файлы. Например, чтобы создать команду «check_software», вам нужно сделать следующее.

sudo mkdir /etc/icinga2/zones.d/global-templates
sudo vi /etc/icinga2/zones.d/global-templates/commands.conf
object CheckCommand "check_software" {
  import "plugin-check-command"
  command = [ "/usr/bin/sudo",  PluginDir + "/software_service_check.sh" ]
}

software_service_check.shФайл должен будет существовать в /usr/lib64/nagios/pluginsпапке на клиенте .

Затем добавьте сервисную проверку в /etc/icinga2/repository.d/hosts/services.confфайл.

sudo vi /etc/icinga2/repository.d/hosts/services/services.conf
apply Service "Check Software Service" {
  import "mail-service"
  check_command = "check_software" # This check command is the same name as the one you defined in global-templates/commands.conf

  assign where host.vars.client_endpoint # This will apply to every client server. If you need it to be more restrictive, you should look into custom variables
}

Вам нужно будет снова изменить разрешения.

sudo chown -R icinga:icinga /etc/icinga2

Затем повторно проверьте конфигурацию.

sudo icinga2 daemon -C

Наконец, если это удастся, перезагрузите:

sudo service icinga2 restart

Поздравляем! Теперь вы используете Icinga2 в модели мастер-клиент и теперь можете избежать использования небезопасных проверок NRPE!



Leave a Comment

Изучение 26 методов анализа больших данных: часть 1

Изучение 26 методов анализа больших данных: часть 1

Изучение 26 методов анализа больших данных: часть 1

6 невероятных фактов о Nintendo Switch

6 невероятных фактов о Nintendo Switch

Многие из вас знают Switch, который выйдет в марте 2017 года, и его новые функции. Для тех, кто не знает, мы подготовили список функций, которые делают «Switch» обязательным гаджетом.

Технические обещания, которые все еще не выполнены

Технические обещания, которые все еще не выполнены

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

Функциональные возможности уровней эталонной архитектуры больших данных

Функциональные возможности уровней эталонной архитектуры больших данных

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

Как ИИ может вывести автоматизацию процессов на новый уровень?

Как ИИ может вывести автоматизацию процессов на новый уровень?

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

CAPTCHA: как долго она может оставаться жизнеспособным методом различения между человеком и ИИ?

CAPTCHA: как долго она может оставаться жизнеспособным методом различения между человеком и ИИ?

CAPTCHA стало довольно сложно решать пользователям за последние несколько лет. Сможет ли он оставаться эффективным в обнаружении спама и ботов в ближайшем будущем?

Технологическая сингулярность: далекое будущее человеческой цивилизации?

Технологическая сингулярность: далекое будущее человеческой цивилизации?

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

Телемедицина и удаленное здравоохранение: будущее уже здесь

Телемедицина и удаленное здравоохранение: будущее уже здесь

Что такое телемедицина, дистанционное здравоохранение и их влияние на будущее поколение? Это хорошее место или нет в ситуации пандемии? Прочтите блог, чтобы узнать мнение!

Вы когда-нибудь задумывались, как хакеры зарабатывают деньги?

Вы когда-нибудь задумывались, как хакеры зарабатывают деньги?

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

Обновление дополнения к macOS Catalina 10.15.4 вызывает больше проблем, чем решает

Обновление дополнения к macOS Catalina 10.15.4 вызывает больше проблем, чем решает

Недавно Apple выпустила macOS Catalina 10.15.4, дополнительное обновление для исправления проблем, но похоже, что это обновление вызывает больше проблем, приводящих к поломке компьютеров Mac. Прочтите эту статью, чтобы узнать больше