Как интегрировать coroot-pg-agent с prometheus

Для мониторинга сервера postgres большинство opensource стеков состоит из grafana и prometheus.

Подключение метрик postgres к prometheus — очень интересная задача, и для этого существуют определенные инструменты/библиотеки.

Такие библиотеки полезны для мониторинга и написания правил оповещения через Prometheus.

  1. postgres_exporter(https://github.com/prometheus-community/postgres_exporter)
  2. coroot-pg-agent(https://github.com/coroot/coroot-pg-agent).

Сегодня мы поговорим о coroot-pg-agent.

coroot-pg-agent может быть запущен с помощью docker, более подробную информацию можно найти здесь.(https://github.com/coroot/coroot-pg-agent).

На официальном сайте postgresql: https://www.postgresql.org/about/news/coroot-pg-agent-an-open-source-postgres-exporter-for-prometheus-2488/.

Теперь, когда мы запускаем coroot-pg-agent с помощью prometheus, есть некоторые моменты, о которых следует помнить.

  1. coroot-pg-agent с помощью docker запускается на порту 80 по умолчанию, мы можем запустить его на пользовательском порту с помощью следующей команды через docker
docker run --name coroot-pg-agent 
--env DSN="postgresql://<USER>:<PASSWORD>@<HOST>:5432/postgres?connect_timeout=1&statement_timeout=30000" 
--env LISTEN="0.0.0.0:<custom_port_for_pg_agent>" 
-p <custom_port_for_pg_agent>:<custom_port_for_pg_agent> 
ghcr.io/coroot/coroot-pg-agent
Войти в полноэкранный режим Выйти из полноэкранного режима

Мы также можем передать scrape-интервал, используя —env PG_SCRAPE_INTERVAL.

После выполнения вышеуказанной команды мы увидим следующий результат, пользовательский_порт_для_pg_agent здесь 3000.

I0823 21:00:58.259629       1 main.go:35] static labels: map[]
I0823 21:00:58.273610       1 main.go:41] listening on: 0.0.0.0:3000
Вход в полноэкранный режим Выход из полноэкранного режима
  1. prometheus.yml для конфигураций prometheus
global:
  scrape_interval: 5m
  scrape_timeout: 3m
  evaluation_interval: 15s

scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: ["localhost:9090"]
  - job_name: coroot-pg-agent
    static_configs:
      - targets: ["<localhost-ip>:<custom_port_for_pg_agent>"]
Вход в полноэкранный режим Выйти из полноэкранного режима

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

Помните, что при редактировании вышеприведенного yml scrape_interval всегда должен быть больше, чем scrape_timeout.

Для запуска prometheus с помощью docker мы можем использовать следующую команду, где мы используем официальный образ от prometheus в docker

docker run 
    -p 9090:9090 
    -v ~/pro/prometheus.yml:/etc/prometheus/prometheus.yml 
    prom/prometheus
Войти в полноэкранный режим Выйти из полноэкранного режима

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

ts=2022-08-23T21:02:26.203Z caller=main.go:495 level=info msg="No time or size retention was set so using the default time retention" duration=15d
ts=2022-08-23T21:02:26.203Z caller=main.go:539 level=info msg="Starting Prometheus Server" mode=server version="(version=2.38.0, branch=HEAD, revision=818d6e60888b2a3ea363aee8a9828c7bafd73699)"
ts=2022-08-23T21:02:26.203Z caller=main.go:544 level=info build_context="(go=go1.18.5, user=root@e6b781f65453, date=20220816-13:29:14)"
ts=2022-08-23T21:02:26.204Z caller=main.go:545 level=info host_details="(Linux 5.10.47-linuxkit #1 SMP PREEMPT Sat Jul 3 21:50:16 UTC 2021 aarch64 87decec12cad (none))"
ts=2022-08-23T21:02:26.204Z caller=main.go:546 level=info fd_limits="(soft=1048576, hard=1048576)"
ts=2022-08-23T21:02:26.204Z caller=main.go:547 level=info vm_limits="(soft=unlimited, hard=unlimited)"
ts=2022-08-23T21:02:26.205Z caller=web.go:553 level=info component=web msg="Start listening for connections" address=0.0.0.0:9090
ts=2022-08-23T21:02:26.205Z caller=main.go:976 level=info msg="Starting TSDB ..."
ts=2022-08-23T21:02:26.206Z caller=tls_config.go:195 level=info component=web msg="TLS is disabled." http2=false
ts=2022-08-23T21:02:26.207Z caller=head.go:495 level=info component=tsdb msg="Replaying on-disk memory mappable chunks if any"
ts=2022-08-23T21:02:26.207Z caller=head.go:538 level=info component=tsdb msg="On-disk memory mappable chunks replay completed" duration=10.125µs
ts=2022-08-23T21:02:26.207Z caller=head.go:544 level=info component=tsdb msg="Replaying WAL, this may take a while"
ts=2022-08-23T21:02:26.207Z caller=head.go:615 level=info component=tsdb msg="WAL segment loaded" segment=0 maxSegment=0
ts=2022-08-23T21:02:26.207Z caller=head.go:621 level=info component=tsdb msg="WAL replay completed" checkpoint_replay_duration=21.416µs wal_replay_duration=117.958µs total_replay_duration=159.167µs
ts=2022-08-23T21:02:26.208Z caller=main.go:997 level=info fs_type=EXT4_SUPER_MAGIC
ts=2022-08-23T21:02:26.208Z caller=main.go:1000 level=info msg="TSDB started"
ts=2022-08-23T21:02:26.208Z caller=main.go:1181 level=info msg="Loading configuration file" filename=/etc/prometheus/prometheus.yml
ts=2022-08-23T21:02:26.210Z caller=main.go:1218 level=info msg="Completed loading of configuration file" filename=/etc/prometheus/prometheus.yml totalDuration=2.047292ms db_storage=750ns remote_storage=1.709µs web_handler=292ns query_engine=583ns scrape=341.75µs scrape_sd=16.708µs notify=542ns notify_sd=792ns rules=1µs tracing=9.625µs
ts=2022-08-23T21:02:26.210Z caller=main.go:961 level=info msg="Server is ready to receive web requests."
ts=2022-08-23T21:02:26.210Z caller=manager.go:941 level=info component="rule manager" msg="Starting rule manager..."
Вход в полноэкранный режим Выйти из полноэкранного режима

Мы можем зайти через браузер по адресу localhost:9090 и увидеть экран следующего вида

Теперь, чтобы увидеть цели, мы можем посетить Targets

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

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

Оцените статью
devanswers.ru
Добавить комментарий