Общие сведения


Мониторинг приложения Dashboards TN (далее – приложение) реализован с использованием Prometheus.

Для работы с метриками используется клиентская библиотека Go.

О работе приложения собираются следующие метрики.

  1. go_gc_duration_seconds – минимальное, 25%, 50%, 75%, максимальное времена остановки GC.
  2. go_gc_duration_seconds_count
  3. go_gc_duration_seconds_sum
  4. go_goroutines количество запущенных GO-рутин.
  5. go_info версия GO.
  6. go_memstats_alloc_bytes – количество байт, аллоцированных в куче. Значение этой метрики равно go_memstats_heap_alloc_bytes. Эта метрика включает в себя все объекты, которые на данный момент не очищены GC.
  7. go_memstats_alloc_bytes_total – общее количество памяти, аллоцированное в куче (не уменьшается после прогонов GC).
  8. go_memstats_buck_hash_sys_bytes память, выделенная для хэш-таблиц профилирования.
  9. go_memstats_frees_total – количество объектов, очищенных из кучи. Разность go_memstats_mallocs_total – go_memstats_frees_total покажет количество объектов, аллоцированных на куче в текущий момент времени.
  10. go_memstats_gc_sys_bytes – память, выделенная для метаданных GC.
  11. go_memstats_heap_alloc_bytes – количество байт, аллоцированных в куче. Значение этой метрики равно go_memstats_alloc_bytes.
  12. go_memstats_heap_idle_bytes – количество байт кучи в состоянии idle. Разность go_memstats_heap_idle_bytes – go_memstats_heap_released_bytes показывает, сколько памяти может быть освобождено в ОС, но остается в runtime для аллокаций в дальнейшем без резервирования новой памяти у ОС.
  13. go_memstats_heap_inuse_bytes – количество байт кучи в состоянии in_use.
  14. go_memstats_heap_objects – количество объектов, аллоцированных в куче в текущий момент.
  15. go_memstats_heap_released_bytes – количество байт кучи, возвращенных в ОС.
  16. go_memstats_heap_sys_bytes – память, выделенная для кучи операционной системой. Включает в себя виртуальное адресное пространство, которое было зарезервировано, но не использовано, и виртуальное адресное пространство, которое было возвращено в ОС после использования. Метрика оценивает максимальный размер кучи.
  17. go_memstats_last_gc_time_seconds – количество времени, прошедшего с последнего цикла GC.
  18. go_memstats_lookups_total – количество разыменований указателя.
  19. go_memstats_mallocs_total – количество объектов, аллоцированных в куче.
  20. go_memstats_mcache_inuse_bytes – память, занимаемая структурами mcache.
  21. go_memstats_mcache_sys_bytes – память, выделенная ОС для структур mcache.
  22. go_memstats_mspan_inuse_bytes – память, занимаемая структурами mspan.
  23. go_memstats_mspan_sys_bytes – память, выделенная ОС для структур mspan.
  24. go_memstats_next_gc_bytes – количество памяти, которое будет выделено к следующему циклу GC.
  25. go_memstats_other_sys_bytes
  26. go_memstats_stack_inuse_bytes – количество байт в стеке в состоянии in_use.
  27. go_memstats_stack_sys_bytes – количество памяти стека, полученной у ОС.
  28. go_memstats_sys_bytes – общее количество памяти, запрошенное приложением у операционной системы. Является суммой метрик go_memstats_lookups_total, go_memstats_mallocs_total, go_memstats_frees_total.
  29. go_threads – количество созданных тредов ОС.
  30. http_request_duration_seconds_bucket – время выполнения запросов в секундах.
  31. http_request_duration_seconds_count
  32. http_request_duration_seconds_sum
  33. http_request_size_bytes_count
  34. http_request_size_bytes_sum
  35. http_requests_total количество запросов.
  36. http_response_size_bytes_count
  37. http_response_size_bytes_sum
  38. process_cpu_seconds_total – общее время в секундах, когда ОС выполняла процесс. Равно (utime + stime) / Hz (см. http://man7.org/linux/man-pages/man7/time.7.html). Hz – количество тактов в секунду.
  39. process_max_fds – лимит открытия файловых дескрипторов со стороны ОС (Soft limit).
  40. process_open_fds – количество открытых файловых дескрипторов. Включает в себя файлы, сокеты, терминалы и т. д.
  41. process_resident_memory_bytes – память, потребляемая процессом в байтах. Не включает swapped out память.
  42. process_start_time_seconds – количество секунд с момента запуска процесса.
  43. process_virtual_memory_bytes – равно значению vsize – виртуальная память, выделенная на процесс. Включает в себя RAM и swap.
  44. process_virtual_memory_max_bytes
  45. promhttp_metric_handler_errors_total
  46. scrape_duration_seconds
  47. scrape_samples_post_metric_relabeling
  48. scrape_samples_scraped
  49. scrape_series_added
  50. up
  51. ws_num_of_connections

Получение метрик


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

Для предварительного сбора метрик необходимо использовать Prometheus в режиме agent.

Далее в разделе рассмотрим настройку Prometheus для сбора метрик из приложения, развернутого с использованием Docker и с использованием пакетов, а также настройку удаленного экземпляра Prometheus для получения метрик.

Сбор метрик для Docker-установки


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

1. Добавьте файл конфигурации Prometheus:

mkdir /srv/platform/prometheus && \
cat << EOF > /srv/platform/prometheus/prometheus.yml
global:
  scrape_interval: 5s
  evaluation_interval: 5s


scrape_configs:
  - job_name: "metrics.platform"
    metrics_path: /metrics_v2
    http_sd_configs:
      - url: http://discovery:9610/prometheus_targets


remote_write:
  - url: "http://хост:порт/api/v1/write"
    send_exemplars: true
EOF

где хост:порт – адрес и порт удаленного экземпляра Prometheus.

2. Добавьте файл конфигурации docker-compose.yml для сервиса Prometheus:

cat << EOF > /srv/platform/prometheus/docker-compose.yml
version: "3.8"

services:
  prometheus-agent:
    restart: always
    image: prom/prometheus:v2.46.0
    networks:
      - сеть
    ports:
      - 9091:9090
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    command: [ "--config.file=/etc/prometheus/prometheus.yml",
               "--storage.agent.path=data-agent/",
               "--web.console.libraries=/usr/share/prometheus/console_libraries",
               "--web.console.templates=/usr/share/prometheus/consoles",
               "--enable-feature=agent" ]


networks:
  - сеть:
    name: сеть
    external: true
EOF

где сеть – сеть Docker, в которой находятся контейнеры приложения. Имя сети можно получить, выполнив команду:

cat /srv/platform/docker-compose.yml | grep -A 1 -m 1 "networks:"


3. Запустите Prometheus:

cd /srv/platform/prometheus && docker compose up -d --remove-orphans || docker-compose up -d --remove-orphans

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


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

1. Скачайте архив Prometheus с официального сайта разработчика и распакуйте его (для примера использована ссылка на актуальную на момент написания версию дистрибутива Prometheus для Linux):

mkdir /etc/prometheus && \
wget https://github.com/prometheus/prometheus/releases/download/v2.48.0-rc.0/prometheus-2.48.0-rc.0.linux-amd64.tar.gz && \
tar -xzvf prometheus-2.48.0-rc.0.linux-amd64.tar.gz -C /etc/prometheus/ --strip-components 1


2. Добавьте файл конфигурации Prometheus:

cat << EOF > /etc/prometheus/prometheus.yml
global:
  scrape_interval: 5s
  evaluation_interval: 5s


scrape_configs:
  - job_name: "metrics.platform"
    metrics_path: /metrics_v2
    http_sd_configs:
      - url: http://localhost:9610/prometheus_targets


remote_write:
  - url: "http://хост:порт/api/v1/write"
    send_exemplars: true
EOF

где хост:порт – адрес и порт удаленного экземпляра Prometheus.

3. Запустите Prometheus с параметрами:

cd /etc/prometheus && ./prometheus --storage.agent.path=data-agent --enable-feature=agent

Настройка удаленного экземпляра Prometheus


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

Чтобы получать собранные метрики приложения на удаленном экземпляре Prometheus, запустите его с параметрами:

/bin/prometheus --web.enable-remote-write-receiver

или используйте эти параметры в файле конфигурации docker-compose.yml для удаленного экземпляра Prometheus:

mkdir /srv/prometheus && \
cat << EOF > /srv/prometheus/docker-compose.yml
version: "3.8"

services:
  prometheus:
    restart: always
    image: prom/prometheus:v2.46.0
    networks:
      - "prometheus"
    ports:
      - 9090:9090
    volumes:
      - /srv/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
    command: [ "--config.file=/etc/prometheus/prometheus.yml",
               "--storage.tsdb.path=/prometheus",
               "--web.console.libraries=/usr/share/prometheus/console_libraries",
               "--web.console.templates=/usr/share/prometheus/consoles",
               "--web.enable-remote-write-receiver" ]


networks:
  prometheus:
EOF

Для обоих вариантов используйте стандартную конфигурацию prometheus.yml.

  • Нет меток