Мониторинг приложения Dashboards TN (далее – приложение) реализован с использованием Prometheus.
Для работы с метриками используется клиентская библиотека Go.
Возможно настроить передачу собранных метрик мониторинга в Grafana стандартным способом интеграции Prometheus и Grafana - см. документацию к соответствующим продуктам.
О работе приложения собираются следующие метрики.
  | 
Для получения метрик необходимо предварительно собирать их на хосте с развернутым приложением, после чего передавать на удаленный экземпляр Prometheus.
Для предварительного сбора метрик необходимо использовать Prometheus в режиме agent.
Далее в разделе рассмотрим настройку Prometheus для сбора метрик из приложения, развернутого с использованием Docker и с использованием пакетов, а также настройку удаленного экземпляра Prometheus для получения метрик.
Для сбора метрик приложения, развернутого с использованием 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, запустите его с параметрами:
/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.