Облачное хранилище

Мониторинг баз данных: PostgreSQL Exporter

взято с https://mcs.mail.ru/docs/

Конфигурация оборудования

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

  • Prometheus 2.13 на ОС Ubuntu 18.04 LTS x86_64.
  • Grafana 6.4.2 на ОС Ubuntu 18.04 LTS x86_64.
  • PostgreSQL 10 на ОС Ubuntu 18.04 LTS x86_64.

Внимание

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

 

Схема работы

Для мониторинга параметров PostreSQL и сбора метрик в Prometheus используется экспортер, который опрашивает сервер PostgreSQL и передает данные серверу Prometheus. Данные можно визуализировать в Grafana с помощью Dashboard.

 

Установка postgres_exporter

  1. Выполните логин на сервере PostgreSQL с правами суперпользователя.
  2. Укажите актуальную версию экспортера:
export VERSION="<версия>"

Примечание

Актуальную версию postgres_exporter можно найти и скачать тут.

  1. Скачайте архив postgres_exporter и распакуйте его в папку /tmp:
wget https://github.com/wrouesnel/postgres_exporter/releases/download/v$VERSION/postgres_exporter_v$VERSION_linux-amd64.tar.gz -O - | tar -xzv -C /tmp
  1. Скопируйте содержимое распакованного архива в папку /usr/local/bin:
cp /tmp/postgres_exporter_v$VERSION_linux-amd64/postgres_exporter /usr/local/bin
  1. Удалите содержимое распакованного архива из папки /tmp:
rm -rf /tmp/postgres_exporter_v$VERSION_linux-amd64
  1. Измените владельца postgres_exporter на postgres:
chown -R postgres:postgres /usr/local/bin/postgres_exporter
  1. Создайте сценарий запуска systemd сервиса postgres_exporter. Для этого создайте файл /etc/systemd/system/postgres_exporter.service со следующим содержимым:
[Unit]
Description=Prometheus PostgreSQL Exporter
After=network.target

[Service]
Type=simple
Restart=always
User=postgres
Group=postgres
Environment=DATA_SOURCE_NAME="user=postgres host=/var/run/postgresql/ sslmode=disable"
ExecStart=/usr/local/bin/postgres_exporter
[Install]
WantedBy=multi-user.target

Примечание

Параметр Environment описывает передаваемые параметры доступа к серверу PostgreSQL. Если вы используете нестандартную инсталляцию PostgreSQL либо сервер и exporter расположены на разных нодах, настройте этот параметр.

  1. Запустите postgres_exporter:
systemctl daemon-reload
systemctl start postgres_exporter.service
systemctl enable postgres_exporter.service
Created symlink /etc/systemd/system/multi-user.target.wants/postgres_exporter.service → /etc/systemd/system/postgres_exporter.service.
  1. Убедитесь, что сервис запустился:
systemctl status postgres_exporter.service 
● postgres_exporter.service - Prometheus PostgreSQL Exporter
   Loaded: loaded (/etc/systemd/system/postgres_exporter.service; disabled; vendor preset: enabled)
   Active: active (running) since Mon 2019-10-07 09:01:26 MSK; 6min ago
 Main PID: 4144 (postgres_export)
    Tasks: 4 (limit: 2359)
   Memory: 4.4M
   CGroup: /system.slice/postgres_exporter.service
           └─4144 /usr/local/bin/postgres_exporter

Oct 07 09:01:26 postgresql systemd[1]: Started Prometheus PostgreSQL Exporter.
Oct 07 09:01:26 postgresql postgres_exporter[4144]: time="2019-10-07T09:01:26+03:00" level=info msg="Established new database connection to \"/var/run/postgresql/:5432\"." source="postgres_exporter.go:777"
Oct 07 09:01:26 postgresql postgres_exporter[4144]: time="2019-10-07T09:01:26+03:00" level=info msg="Semantic Version Changed on \"/var/run/postgresql/:5432\": 0.0.0 -> 11.5.0" source="postgres_exporter.go:1229
Oct 07 09:01:26 postgresql postgres_exporter[4144]: time="2019-10-07T09:01:26+03:00" level=info msg="Starting Server: :9187" source="postgres_exporter.go:1437"

Внимание

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

 

Настройка Prometheus для получения данных postgres_exporter

  1. На ноде Prometheus выполните логин.
  2. В файле prometheus.yml для работы с postgres_exporter:
  • В scrape_configs добавьте следующую секцию:
scrape_configs:
  - job_name: postgresql
    static_configs:
      - targets: ['10.0.0.4:9187']
        labels:
          alias: postgres

Примечание: если Prometheus запускается как контейнер изменения надо вносить в отдельный файл yml и указывать его при запуске контейнера, например docker run -d -p 9090:9090 -v .../prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

  • В секции targets впишите IP-адрес сервера postgres_exporter.
  1. Перезапустите сервис Prometheus:
systemctl reload prometheus.service

 

Настройка Grafana

Для визуализации полученных данных установите соответствующий Dashboard (например, Dashboard 1 или Dashboard 2 ).

После установки и настройки получения данных с сервера Prometheus отобразится примерно следующее при использовании Dashboard 1:

И примерно следующее при использовании Dashboard 2:

 

Создание тестовой нагрузки

Чтобы посмотреть, как изменятся графики при нагрузке на сервер PostgreSQL, воспользуйтесь утилитой pgbench, которая обычно входит в состав дистрибутива PostgreSQL (примеры использования см. тут и тут) .

Для этого:

  1. На сервере PostgreSQL запустите утилиту pgbench от имени пользователя postgres и создайте тестовое окружение:
postgres@postgresql:~pgbench -i -s 100
dropping old tables...
creating tables...
generating data...
100000 of 10000000 tuples (1%) done (elapsed 0.29 s, remaining 28.50 s)
200000 of 10000000 tuples (2%) done (elapsed 0.77 s, remaining 37.91 s)
300000 of 10000000 tuples (3%) done (elapsed 1.13 s, remaining 36.45 s)
...
10000000 of 10000000 tuples (100%) done (elapsed 44.51 s, remaining 0.00 s)
vacuuming...
creating primary keys...
done.


  1. Запустите тест:
latency average = 1146.629 ms
latency stddev = 788.623 ms
tps = 43.459191 (including connections establishing)
tps = 43.460132 (excluding connections establishing)postgres@postgresql:~pgbench -c 50 -j 2 -P 60 -T 600
starting vacuum...end.
progress: 60.0 s, 66.9 tps, lat 738.050 ms stddev 486.979
progress: 120.0 s, 51.2 tps, lat 967.935 ms stddev 543.852
progress: 180.0 s, 45.5 tps, lat 1110.148 ms stddev 694.265
progress: 240.0 s, 36.4 tps, lat 1367.563 ms stddev 880.951
progress: 300.0 s, 31.3 tps, lat 1556.174 ms stddev 958.462
progress: 360.0 s, 40.6 tps, lat 1254.119 ms stddev 865.300
progress: 420.0 s, 33.7 tps, lat 1500.918 ms stddev 816.979
progress: 480.0 s, 47.4 tps, lat 1057.629 ms stddev 789.382
progress: 540.0 s, 49.4 tps, lat 1009.890 ms stddev 703.514
progress: 600.0 s, 33.2 tps, lat 1500.623 ms stddev 847.839
transaction type: <builtin: TPC-B (sort of)>
scaling factor: 100
query mode: simple
number of clients: 50
number of threads: 2
duration: 600 s
number of transactions actually processed: 26183

В результате тестовой нагрузки графики в Grafana изменяться:

 

Удаление postgres_exporter

Чтобы удалить postgres_exporter:

  1. Удалите Dashboard из Grafana.
  2. Из конфигурационного файла prometheus удалите секцию – job_name: postgresql.
  3. На сервере с postgres_exporter выполните команды:
root@postgresql:~# systemctl stop postgres_exporter.service 
root@postgresql:~# systemctl disable postgres_exporter.service 
Removed /etc/systemd/system/multi-user.target.wants/postgres_exporter.service.
root@postgresql:~# rm /etc/systemd/system/postgres_exporter.service
root@postgresql:~# systemctl daemon-reload
root@postgresql:~# rm -f /usr/local/bin/postgres_exporter