Как контролировать управляемую базу данных PostgreSQL с помощью Nagios Core в Ubuntu 18.04

Автор выбралFree and Open Source Fund для получения пожертвования в рамках программыWrite for DOnations.

Вступление

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

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

В этом руководстве вы настроите мониторинг базы данных PostgreSQL вNagios Core с помощью подключаемого модуляcheck_postgres Nagios и настроите оповещения на основе Slack. В итоге у вас будет система мониторинга для вашей управляемой базы данных PostgreSQL, и вы будете немедленно уведомлены об изменениях состояния различных функций.

Предпосылки

  • Сервер Ubuntu 18.04 с привилегиями root и вторичной учетной записью без полномочий root. Вы можете настроить это, выполнивthis initial server setup guide. В этом руководстве пользователь без полномочий root -sammy.

  • Nagios Core установлен на вашем сервере. Для этого выполните первые пять шагов учебникаHow To Install Nagios 4 and Monitor Your Servers on Ubuntu 18.04.

  • Учетная запись DigitalOcean иPostgreSQL managed database предоставлены DigitalOcean с доступной информацией о подключении. Убедитесь, что IP-адрес вашего сервера находится в белом списке. Чтобы узнать больше об управляемых базах данных DigitalOcean, посетитеproduct docs.

  • АккаунтSlack с полным доступом, добавленный в рабочую область, где вы хотите получать обновления статуса.

[[step-1 -—- install-check_postgres]] == Шаг 1. Установка check_postgres

В этом разделе вы загрузите последнюю версию плагинаcheck_postgres с Github и сделаете его доступным для Nagios Core. Вы также установите клиент PostgreSQL (psql), чтобыcheck_postgres мог подключаться к вашей управляемой базе данных.

Начните с установки клиента PostgreSQL, выполнив следующую команду:

sudo apt install postgresql-client

Затем вы загрузитеcheck_postgres в свой домашний каталог. Сначала перейдите к нему:

cd ~

Перейдите на страницуGithub releases и скопируйте ссылку на последнюю версию плагина. На момент написания последней версиейcheck_postgres была2.24.0; имейте в виду, что он будет обновлен, и по возможности рекомендуется использовать последнюю версию.

Теперь загрузите его, используя curl:

curl -LO https://github.com/bucardo/check_postgres/releases/download/2.24.0/check_postgres-2.24.0.tar.gz

Распакуйте его с помощью следующей команды:

tar xvf check_postgres-*.tar.gz

Это создаст каталог с тем же именем, что и файл, который вы скачали. Эта папка содержит исполняемый файлcheck_postgres, который вам нужно скопировать в каталог, где Nagios хранит свои плагины (обычно/usr/local/nagios/libexec/). Скопируйте его, выполнив следующую команду:

sudo cp check_postgres-*/check_postgres.pl /usr/local/nagios/libexec/

Затем вам нужно передать право собственности пользователюnagios, чтобы его можно было запускать из Nagios:

sudo chown nagios:nagios /usr/local/nagios/libexec/check_postgres.pl

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

Перейдите в каталог, где Nagios хранит плагины, выполнив следующую команду:

cd /usr/local/nagios/libexec

Затем создайте символические ссылки с помощью:

sudo perl check_postgres.pl --symlinks

Вывод будет выглядеть так:

OutputCreated "check_postgres_archive_ready"
Created "check_postgres_autovac_freeze"
Created "check_postgres_backends"
Created "check_postgres_bloat"
Created "check_postgres_checkpoint"
Created "check_postgres_cluster_id"
Created "check_postgres_commitratio"
Created "check_postgres_connection"
Created "check_postgres_custom_query"
Created "check_postgres_database_size"
Created "check_postgres_dbstats"
Created "check_postgres_disabled_triggers"
Created "check_postgres_disk_space"
Created "check_postgres_fsm_pages"
Created "check_postgres_fsm_relations"
Created "check_postgres_hitratio"
Created "check_postgres_hot_standby_delay"
Created "check_postgres_index_size"
Created "check_postgres_indexes_size"
Created "check_postgres_last_analyze"
Created "check_postgres_last_autoanalyze"
Created "check_postgres_last_autovacuum"
Created "check_postgres_last_vacuum"
Created "check_postgres_listener"
Created "check_postgres_locks"
Created "check_postgres_logfile"
Created "check_postgres_new_version_bc"
Created "check_postgres_new_version_box"
Created "check_postgres_new_version_cp"
Created "check_postgres_new_version_pg"
Created "check_postgres_new_version_tnm"
Created "check_postgres_pgagent_jobs"
Created "check_postgres_pgb_pool_cl_active"
Created "check_postgres_pgb_pool_cl_waiting"
Created "check_postgres_pgb_pool_maxwait"
Created "check_postgres_pgb_pool_sv_active"
Created "check_postgres_pgb_pool_sv_idle"
Created "check_postgres_pgb_pool_sv_login"
Created "check_postgres_pgb_pool_sv_tested"
Created "check_postgres_pgb_pool_sv_used"
Created "check_postgres_pgbouncer_backends"
Created "check_postgres_pgbouncer_checksum"
Created "check_postgres_prepared_txns"
Created "check_postgres_query_runtime"
Created "check_postgres_query_time"
Created "check_postgres_relation_size"
Created "check_postgres_replicate_row"
Created "check_postgres_replication_slots"
Created "check_postgres_same_schema"
Created "check_postgres_sequence"
Created "check_postgres_settings_checksum"
Created "check_postgres_slony_status"
Created "check_postgres_table_size"
Created "check_postgres_timesync"
Created "check_postgres_total_relation_size"
Created "check_postgres_txn_idle"
Created "check_postgres_txn_time"
Created "check_postgres_txn_wraparound"
Created "check_postgres_version"
Created "check_postgres_wal_files"

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

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

[[step-2 -—- configuring-your-database]] == Шаг 2. Настройка базы данных

В этом разделе вы создадите файл службы соединений PostgreSQL, содержащий информацию о соединении вашей базы данных. Затем вы проверите данные подключения, вызвав для нихcheck_postgres.

Файл службы подключения по соглашению называетсяpg_service.conf и должен находиться в папке/etc/postgresql-common/. Создайте его для редактирования в вашем любимом редакторе (например, nano):

sudo nano /etc/postgresql-common/pg_service.conf

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

/etc/postgresql-common/pg_service.conf

[managed-db]
host=host
port=port
user=username
password=password
dbname=defaultdb
sslmode=require

Файл службы соединений может содержать несколько информационных групп соединений с базой данных. Начало группы обозначается заключением ее имени в квадратные скобки. После этого идут параметры соединения (host,port,user,password и так далее), разделенные новыми строками, которым необходимо присвоить значение.

Сохраните и закройте файл, когда вы закончите.

Теперь вы проверите правильность конфигурации, подключившись к базе данных черезcheck_postgres, выполнив следующую команду:

./check_postgres.pl --dbservice=managed-db --action=connection

Здесь вы указываетеcheck_postgres, какую группу информации о подключении к базе данных использовать с параметром--dbservice, а также указываете, что она должна пытаться подключиться к ней, указавconnection в качестве действия.

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

OutputPOSTGRES_CONNECTION OK: service=managed-db version 11.4 | time=0.10s

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

Вы создали и заполнили служебный файл подключения PostgreSQL, который работает какconnection string. Вы также проверили данные соединения, запустив на нихcheck_postgres и наблюдая за выводом. На следующем шаге вы настроите Nagios для мониторинга различных частей вашей базы данных.

[[step-3 -—- created-monitoring-services-in-nagios]] == Шаг 3 - Создание сервисов мониторинга в Nagios

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

Nagios хранит ваши пользовательские файлы конфигурации в папке/usr/local/nagios/etc/objects. Новые файлы, которые вы добавляете туда, должны быть вручную включены в центральном файле конфигурации Nagios, расположенном в/usr/local/nagios/etc/nagios.cfg. Теперь вы определите команды, хост и несколько сервисов, которые вы будете использовать для мониторинга управляемой базы данных в Nagios.

Сначала создайте папку в/usr/local/nagios/etc/objects для хранения вашей конфигурации, связанной с PostgreSQL, выполнив следующую команду:

sudo mkdir /usr/local/nagios/etc/objects/postgresql

Вы сохраните команды Nagios дляcheck_nagios в файле с именемcommands.cfg. Создайте его для редактирования:

sudo nano /usr/local/nagios/etc/objects/postgresql/commands.cfg

Добавьте следующие строки:

/usr/local/nagios/etc/objects/postgresql/commands.cfg

define command {
    command_name           check_postgres_connection
    command_line           /usr/local/nagios/libexec/check_postgres_connection --dbservice=$ARG1$
}

define command {
    command_name           check_postgres_database_size
    command_line           /usr/local/nagios/libexec/check_postgres_database_size --dbservice=$ARG1$ --critical='$ARG2$'
}

define command {
    command_name           check_postgres_locks
    command_line           /usr/local/nagios/libexec/check_postgres_locks --dbservice=$ARG1$
}

define command {
    command_name           check_postgres_backends
    command_line           /usr/local/nagios/libexec/check_postgres_backends --dbservice=$ARG1$
}

Сохраните и закройте файл.

В этом файле вы определяете четыре команды Nagios, которые вызывают различные части подключаемого модуляcheck_postgres (проверка подключения, получение количества блокировок и подключений, а также размер всей базы данных). Все они принимают аргумент, который передается в параметр--dbservice, и указывают, к какой из баз данных, определенных вpg_service.conf, подключиться.

Командаcheck_postgres_database_size принимает второй аргумент, который передается параметру--critical, который указывает точку, в которой хранилище базы данных заполняется. Допустимые значения включают1 KB для килобайта,1 MB для мегабайта и так далее, вплоть до эксабайт (EB). Число без единицы емкости считается выраженным в байтах.

Теперь, когда необходимые команды определены, вы определите хост (по сути, базу данных) и его службы мониторинга в файле с именемservices.cfg. Создайте его, используя ваш любимый редактор:

sudo nano /usr/local/nagios/etc/objects/postgresql/services.cfg

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

/usr/local/nagios/etc/objects/postgresql/services.cfg

define host {
      use                    linux-server
      host_name              postgres
      check_command          check_postgres_connection!managed-db
}

define service {
      use                    generic-service
      host_name              postgres
      service_description    PostgreSQL Connection
      check_command          check_postgres_connection!managed-db
      notification_options   w,u,c,r,f,s
}

define service {
      use                    generic-service
      host_name              postgres
      service_description    PostgreSQL Database Size
      check_command          check_postgres_database_size!managed-db!db_max_storage_size
      notification_options   w,u,c,r,f,s
}

define service {
      use                    generic-service
      host_name              postgres
      service_description    PostgreSQL Locks
      check_command          check_postgres_locks!managed-db
      notification_options   w,u,c,r,f,s
}

define service {
      use                    generic-service
      host_name              postgres
      service_description    PostgreSQL Backends
      check_command          check_postgres_backends!managed-db
      notification_options   w,u,c,r,f,s
}

Сначала вы определяете хост, чтобы Nagios знал, к какому объекту относятся сервисы. Затем вы создаете четыре службы, которые вызывают только что определенные вами команды. Каждый из них передаетmanaged-db в качестве аргумента, детализируя, чтоmanaged-db, которые вы определили на шаге 2, должны контролироваться.

Что касается параметров уведомления, каждая служба указывает, что уведомления должны отправляться, когда состояние службы становитсяWARNING,UNKNOWN,CRITICAL,OK (когда оно восстанавливается после простоя), когда служба запускаетсяflapping или когда начинается или заканчивается запланированный простой. Без явного указания этой опции никакие уведомления вообще не будут отправляться (доступным контактам), кроме случаев, когда они запускаются вручную.

Сохраните и закройте файл.

Затем вам нужно явно указать Nagios для чтения файлов конфигурации из этого нового каталога, отредактировав общий файл конфигурации Nagios. Откройте его для редактирования, выполнив следующую команду:

sudo nano /usr/local/nagios/etc/nagios.cfg

Найдите эту выделенную строку в файле:

/usr/local/nagios/etc/nagios.cfg

...
# directive as shown below:

cfg_dir=/usr/local/nagios/etc/servers
#cfg_dir=/usr/local/nagios/etc/printers
...

Над ним добавьте следующую выделенную строку:

/usr/local/nagios/etc/nagios.cfg

...
cfg_dir=/usr/local/nagios/etc/objects/postgresql
cfg_dir=/usr/local/nagios/etc/servers
...

Сохраните и закройте файл. Эта строка указывает Nagios загрузить все файлы конфигурации из каталога/usr/local/nagios/etc/objects/postgresql, в котором находятся ваши файлы конфигурации.

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

sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

Конец вывода будет выглядеть примерно так:

OutputTotal Warnings: 0
Total Errors:   0

Things look okay - No serious problems were detected during the pre-flight check

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

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

sudo systemctl restart nagios

Теперь вы можете перейти к Nagios в вашем браузере. Как только он загрузится, нажмите на опциюServices в левом меню. Вы увидите хостpostgres и список служб, а также их текущие статусы:

PostgreSQL Monitoring Services - Pending

Все они скоро станут зелеными и покажут статусOK. Вы увидите вывод команды в столбцеStatus Information. Вы можете нажать на название сервиса и посмотреть подробную информацию о его статусе и доступности.

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

[[step-4 -—- configuring-slack-alerting]] == Шаг 4. Настройка оповещений Slack

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

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

Затем перейдите кNagios app в каталоге приложений Slack и нажмитеAdd Configuration. Вы увидите страницу для добавления Nagios Integration.

Slack - Add Nagios Integration

Нажмите наAdd Nagios Integration. Когда страница загрузится, прокрутите вниз и запишите токен, потому что он понадобится вам в дальнейшем.

Slack - Integration Token

Теперь вы установите и настроите плагин Slack (написанный на Perl) для Nagios на вашем сервере. Сначала установите необходимые предварительные требования Perl, выполнив следующую команду:

sudo apt install libwww-perl libcrypt-ssleay-perl -y

Затем загрузите плагин в каталог плагинов Nagios:

sudo curl https://raw.githubusercontent.com/tinyspeck/services-examples/master/nagios.pl -o slack.pl

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

sudo chmod +x slack.pl

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

sudo nano slack.pl

Найдите следующие строки в файле:

/usr/local/nagios/libexec/slack.pl

...
my $opt_domain = "foo.slack.com"; # Your team's domain
my $opt_token = "your_token"; # The token from your Nagios services page
...

Заменитеfoo.slack.com доменом своей рабочей области иyour_token своим токеном интеграции приложения Nagios, затем сохраните и закройте файл. Теперь сценарий сможет отправлять правильные запросы в Slack, который вы сейчас протестируете, выполнив следующую команду:

./slack.pl -field slack_channel=#your_channel_name -field HOSTALIAS="Test Host" -field HOSTSTATE="UP" -field HOSTOUTPUT="Host is UP" -field NOTIFICATIONTYPE="RECOVERY"

Заменитеyour_channel_name названием канала, на котором вы хотите получать уведомления о статусе. Скрипт выведет информацию о HTTP-запросе, который он сделал в Slack, и, если все прошло правильно, последняя строка вывода будетok. Если вы получили сообщение об ошибке, дважды проверьте, существует ли указанный вами свободный канал в рабочей области.

Теперь вы можете перейти в рабочее пространство Slack и выбрать указанный вами канал. Вы увидите тестовое сообщение от Nagios.

Slack - Nagios Test Message

Это подтверждает, что вы правильно настроили скрипт Slack. Теперь вы перешли к настройке Nagios для оповещения вас через Slack с помощью этого скрипта.

Вам нужно создать контакт для Slack и две команды, которые будут отправлять ему сообщения. Вы сохраните эту конфигурацию в файле с именемslack.cfg в той же папке, что и предыдущие файлы конфигурации. Создайте его для редактирования, выполнив следующую команду:

sudo nano /usr/local/nagios/etc/objects/postgresql/slack.cfg

Добавьте следующие строки:

/usr/local/nagios/etc/objects/postgresql/slack.cfg

define contact {
      contact_name                             slack
      alias                                    Slack
      service_notification_period              24x7
      host_notification_period                 24x7
      service_notification_options             w,u,c,f,s,r
      host_notification_options                d,u,r,f,s
      service_notification_commands            notify-service-by-slack
      host_notification_commands               notify-host-by-slack
}

define command {
      command_name     notify-service-by-slack
      command_line     /usr/local/nagios/libexec/slack.pl -field slack_channel=#service_alerts_channel
}

define command {
      command_name     notify-host-by-slack
      command_line     /usr/local/nagios/libexec/slack.pl -field slack_channel=#host_alerts_channel
}

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

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

Когда вы закончите редактирование, сохраните и закройте файл.

Чтобы включить оповещение через только что определенный вами контактslack, вам необходимо добавить его в группу контактовadmin, определенную в конфигурационном файлеcontacts.cfg, расположенном в/usr/local/nagios/etc/objects/. . Откройте его для редактирования, выполнив следующую команду:

sudo nano /usr/local/nagios/etc/objects/contacts.cfg

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

/usr/local/nagios/etc/objects/contacts.cfg

define contactgroup {

    contactgroup_name       admins
    alias                   Nagios Administrators
    members                 nagiosadmin
}

Добавьтеslack в список участников, например:

/usr/local/nagios/etc/objects/contacts.cfg

define contactgroup {

    contactgroup_name       admins
    alias                   Nagios Administrators
    members                 nagiosadmin,slack
}

Сохраните и закройте файл.

По умолчанию при запуске сценариев Nagios не делает информацию о хосте и сервисе доступной через переменные среды, что требуется сценарию Slack для отправки значимых сообщений. Чтобы исправить это, вам нужно установить параметрenable_environment_macros вnagios.cfg на1. Откройте его для редактирования, выполнив следующую команду:

sudo nano /usr/local/nagios/etc/nagios.cfg

Найдите строку, которая выглядит так:

/usr/local/nagios/etc/nagios.cfg

enable_environment_macros=0

Измените значение на1, например:

/usr/local/nagios/etc/nagios.cfg

enable_environment_macros=1

Сохраните и закройте файл.

Проверьте правильность конфигурации Nagios, выполнив следующую команду:

sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

Конец вывода будет выглядеть так:

OutputTotal Warnings: 0
Total Errors:   0

Things look okay - No serious problems were detected during the pre-flight check

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

sudo systemctl restart nagios

Чтобы проверить интеграцию Slack, вы отправите пользовательское уведомление через веб-интерфейс. Обновите страницу статуса NagiosServices в своем браузере. Нажмите на службуPostgreSQL Backends и нажмите наSend custom service notification справа, когда страница загрузится.

Nagios - Custom Service Notification

Введите комментарий по вашему выбору и нажмитеCommit, а затем нажмитеDone. Вы немедленно получите новое сообщение в Slack.

Slack - Status Alert From Nagios

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

Заключение

Теперь у вас есть Nagios Core, сконфигурированный для наблюдения за вашей управляемой базой данных PostgreSQL и отправки отчетов о любых изменениях состояния и событиях в Slack, так что вы всегда будете в курсе того, что происходит с вашей базой данных. Это позволит вам быстро реагировать в случае чрезвычайной ситуации, потому что вы будете получать информацию о состоянии в режиме реального времени.

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

Для получения дополнительной информации о том, что вы можете делать с управляемой базой данных PostgreSQL, посетитеproduct docs.

Related