Prometheus и Grafana#

CedrusData Catalog автоматически экспортирует метрики в формате OpenMetrics по адресу /metrics. Источником метрик являются объекты JMX.

Вы можете настроить Prometheus на чтение данных метрик. После этого вы можете подключить к Prometheus систему мониторинга и визуализации, например, Grafana.

Настройка#

Экспорт метрик включен по умолчанию, дополнительная конфигурация не требуется. Метрики доступны по адресу /metrics.

По умолчанию каталог экспортирует метрики только собственных JMX объектов, и не экспортирует метрики системных JMX объектов Java-машины. Вы можете включить экспорт систем JMX объектов JVM с помощью параметра конфигурации openmetrics.jmx-object-names. Например, следующая конфигурации включает экспорт метрик системных JMX объектов java.lang:type=Memory и java.lang:type=Threading, которые могут быть использованы для мониторинга потребления памяти и системных потоков:

openmetrics.jmx-object-names=java.lang:type=Memory|java.lang:type=Threading

Для отключения экспорта метрик задайте следующий параметр конфигурации:

openmetrics.enabled=false

Безопасность#

Экспорт метрик в формате OpenMetrics включен по умолчанию, дополнительная конфигурация не требуется. Метрики доступны по адресу /metrics.

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

  • Basic авторизацию с именем пользователя и паролем, разделенными двоеточием, в кодировке Base64

  • Bearer авторизацию с постоянным или временным.

Для получения метрик необходима привилегия management.read.

Пример экспорта метрик в Prometheus и Grafana#

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

  1. Убедитесь, что у вас установлен Docker Server, и команда docker не требует sudo

  2. Создайте сеть Docker, в которой будут работать контейнеры:

    docker network create example-network
    
  3. Запустите контейнер CedrusData Catalog. Обратите внимание, что мы задаем явный пароль администратора, чтобы в дальнейшем использовать его при подключении к каталогу из Prometheus:

    docker run -d \
        --name example-catalog \
        --network=example-network \
        -p 9080:9080 \
        -e CATALOG_ADMIN_PASSWORD=password \
        cr.yandex/crpjtvqf29mpabhmrf1s/cedrusdata-catalog:458-1
    

    Убедитесь, что метрики каталога доступны:

    curl localhost:9080/metrics -H "Authorization: Basic cm9vdDpwYXNzd29yZA=="
    
  4. Создайте файл конфигурации Prometheus prometheus.yml, в котором задан сетевой адрес каталога:

    global:
      scrape_interval: 15s
      evaluation_interval: 15s
    
    scrape_configs:
      - job_name: "catalog"
        static_configs:
          - targets: ["example-catalog:9080"]
        basic_auth:
          username: 'root'
          password: 'password'
    
  5. Запустите контейнер Prometheus:

    docker run -d \
        --name example-prometheus \
        --network=example-network \
        -p 9090:9090 \ 
        -v $PWD/prometheus.yml:/etc/prometheus/prometheus.yml \
        prom/prometheus
    

    Откройте страницу статуса Prometheus http://localhost:9090/targets, и периодически обновляйте ее, пока не появится запись http://example-catalog:9080/metrics со статусом «Up».

  6. Запустите Grafana:

    docker run -d \
        --name=example-grafana \
        --network example-network \
        -p 3000:3000 \
        grafana/grafana
    

    Зайдите в web-интерфейс Grafana по адресу http://localhost:3000. Используйте имя пользователя admin и пароль admin для аутентификации в Grafana.

  7. В web-интерфейсе Grafana пройдите «Connection» -> «Data Sources» и создайте новый Data Source типа Prometheus. Укажите адрес http://example-prometheus:9090. Нажмите «Save & test». Выберите «Dashboards» и создайте новый Dashboard на основе ранее созданного Data Source «prometheus». Продолжите работу с различными метриками каталога.

  8. (при необходимости) Остановите контейнеры и удалите ненужные ресурсы:

    docker rm -f example-grafana
    docker rm -f example-prometheus
    docker rm -f example-catalog
    docker network rm example-network
    rm prometheus.yml