Введение
В этом руководстве вы узнаете, как собирать агрегированные метрики для базы данных PostgreSQL, управляемой на платформе DigitalOcean, с помощью веб-приложения, развернутого на платформе DigitalOcean App Platform.
Для этой демонстрации вы будете использовать пример приложения Node.js и подключите его к управляемой базе данных DigitalOcean PostgreSQL, которую вы создадите в этом руководстве.
В конце этого руководства у вас будет панель мониторинга Prometheus, которая собирает и отображает метрики из управляемой базы данных PostgreSQL, подключенной к веб-приложению на платформе приложений.
Предпосылки
Прежде чем начать, убедитесь, что у вас есть следующие необходимые условия:
- Аккаунт DigitalOcean.
- Пример приложения Node.js, развернутого на платформе приложений.
- База данных Postgres развернута и подключена к приложению App Platform.
- Персональный токен доступа, созданный с правами чтения/записи (rw). Вы можете следовать этому руководству по созданию персонального токена доступа, чтобы создать его для себя.
Шаг 1 – Настройка управляемой базы данных PostgreSQL
Начнём с создания базы данных PostgreSQL.
Перейдите в раздел «Базы данных» в панели управления облаком DigitalOcean.
Нажмите “Создать кластер баз данных” и выберите PostgreSQL. Вам необходимо выбрать регион центра обработки данных и сеть VPC, как показано на изображении ниже:
Далее выберите PostgreSQL в качестве базы данных и укажите другие параметры для вашей базы данных.
Настройте параметры базы данных, следуйте инструкциям на экране и нажмите «Создать кластер базы данных».
После создания кластера управляемых баз данных PostgreSQL вы можете просмотреть его общий обзор, аналитику, отчеты, а также настройки на следующих вкладках:
Шаг 2 – Разверните экземпляр веб-приложения Node.js на платформе приложений.
Вы можете выполнить шаги по развертыванию примера приложения Node.js или использовать этот репозиторий GitHub для создания примера приложения Node.js на платформе App Platform.
Если вы используете второй вариант, вам необходимо создать форк этого репозитория GitHub в своей учетной записи GitHub, чтобы сохранить его копию в облаке. Нажмите кнопку «Fork» в репозитории GitHub и следуйте инструкциям на экране.
Теперь войдите в облачный портал DigitalOcean и перейдите в раздел «Создать приложение» -> «Платформа приложения».
Затем в разделе «Другое: выберите пример приложения» выберите пример приложения Node.js из выпадающего меню «Пример приложения» и нажмите «Далее».
Следуйте инструкциям на экране, чтобы настроить ресурсы приложения, общую конфигурацию и переменные среды, затем нажмите «Далее». После завершения проверьте общую конфигурацию приложения. Затем нажмите «Создать ресурсы». После создания приложения потребуется некоторое время для его развертывания на платформе приложений.
После развертывания и сборки приложения вы можете просмотреть его обзор и открыть развернутое приложение в своем браузере.
Шаг 3 – Подключите базу данных PostgreSQL к платформе приложений.
На этом шаге вы подключаете управляемую базу данных PostgreSQL, созданную на шаге 1 этого руководства, к примеру приложения Node.js, созданному на шаге 2.
Перейдите в приложение, развернутое на платформе, нажмите кнопку «Создать» на панели управления развернутого приложения и нажмите «Создать/Присоединить базу данных»:
Затем выберите «Ранее созданная база данных DigitalOcean», выберите недавно развернутый кластер управляемых баз данных PostgreSQL и нажмите кнопку «Прикрепить базу данных» внизу.
В разделе «Обзор базы данных» вы можете убедиться, что приложение App Platform успешно добавлено в качестве доверенного источника.
Шаг 4 – Получение метрик для сбора данных из конечной точки /metrics
Вы можете программно просматривать метрики для вашего кластера баз данных через конечную точку /metrics. Эта конечная точка содержит более чем в двадцать раз больше метрик, чем те, к которым вы можете получить доступ на вкладке «Аналитика» в панели управления.
Вы можете получить доступ к конечной точке метрик с помощью команды curl или использовать Postman для визуализации этих метрик в системе мониторинга, такой как Prometheus.
Для начала перейдите в раздел API в панели управления DigitalOcean, создайте новый персональный токен доступа и нажмите «Сгенерировать токен с полным доступом». Запишите полученный токен доступа, так как он понадобится вам на следующих шагах.
В этом примере вы будете использовать Postman для выполнения всех HTTP-запросов. Или вы можете запускать команды curl из вашего экземпляра App Platform, чтобы получать ответы на запросы API.
Получите имя хоста и порт.
Сначала вам нужно получить имя хоста метрик вашего кластера, отправив GET-запрос по адресу https://api.digitalocean.com/v2/databases/{UUID}.
Выполните следующую команду curl из вашего экземпляра App Platform. Для этого перейдите в раздел консоли:
Для получения имени хоста и учетных данных базы данных используйте следующую команду.
apps@sample-nodejs-775ff7ff6f-db5gk:~$ curl --silent -XGET --location 'https://api.digitalocean.com/v2/databases/{UUID}' --header 'Content-Type: application/json' --header "Authorization: Bearer $RO_DIGITALOCEAN_TOKEN"Пожалуйста, замените {UUID} и $RO_DIGITALOCEAN_TOKEN на UUID вашей управляемой базы данных PostgreSQL и ваш личный пароль доступа.
Эта команда должна вывести подробную информацию об управляемом кластере баз данных PostgreSQL:
Output
"database": {
"id": "192a6077-d103-4e72-bd2c-e370fd6b5608",
"name": "db-postgresql-nyc3-66505",
"engine": "pg",
"version": "16",
"semantic_version": "16.3",
"connection": {
"protocol": "postgresql",
"uri": "postgresql://doadmin:AVNS_uVoGq5jCPdaxW3hghhV@db-postgresql-nyc3-66505-do-user-13729304-0.c.db.ondigitalocean.com:25060/defaultdb?sslmode=require",
"database": "defaultdb",
"host": "db-postgresql-nyc3-66505-do-user-13729304-0.c.db.ondigitalocean.com",
"port": 25060,
"user": "doadmin",
"password": "AVNS_uVoGq5jCPdaxW3hghhV",
"ssl": true
},
"private_connection": {
"protocol": "postgresql",
"uri": "postgresql://doadmin:AVNS_uVoGq5jCPdaxW3hghhV@private-db-postgresql-nyc3-66505-do-user-13729304-0.c.db.ondigitalocean.com:25060/defaultdb?sslmode=require",
"database": "defaultdb",
"host": "private-db-postgresql-nyc3-66505-do-user-13729304-0.c.db.ondigitalocean.com",
"port": 25060,
"user": "doadmin",
"password": "AVNS_uVoGq5jCPdaxW3hghhV",
"ssl": true
},
"metrics_endpoints": [
{
"host": "db-postgresql-nyc3-66505-do-user-13729304-0.c.db.ondigitalocean.com",
"port": 9273
}
],
"users": [
{
"name": "doadmin",
"role": "primary",
"password": "XXXXXXXXXXX"
}
],
"db_names": [
"defaultdb"
],
"num_nodes": 1,
"region": "nyc3",
"status": "online",
"created_at": "2024-06-10T21:04:32Z",
"maintenance_window": {
"day": "monday",
"hour": "00:07:46",
"pending": false
},
"size": "db-s-1vcpu-1gb",
"tags": [
"testtestnn"
],
"private_network_uuid": "xxxxxxxxxx",
"project_id": "xxxxxxxxxxx",
"read_only": false,
"version_end_of_life": "2028-11-09T00:00:00Z",
"version_end_of_availability": "2028-05-09T00:00:00Z",
"storage_size_mib": 10240
}
}В приведенном выше выводе обратите внимание на пару хост/порт. В нашем случае хост — db-postgresql-nyc3-66505-do-user-13729304-0.c.db.ondigitalocean.com, а порт — 9273.
Кроме того, если вы установили Postman на свой компьютер и добавили IP-адрес своего компьютера в качестве доверенного источника в настройках доверенных источников базы данных, вы можете выполнить указанный выше HTTP GET-запрос в Postman.
Просто добавьте URL-адрес https://api.digitalocean.com/v2/databases/{UUID} и замените свой персональный код доступа на вкладке авторизации типом проверки, выбранным в качестве токена носителя.
Получить проверку метрик кластера
Далее вам понадобятся учетные данные для доступа к метрикам кластера. Вы можете получить их, отправив GET-запрос на https://api.digitalocean.com/v2/databases/metrics/credentials с использованием токена администратора или токена записи.
Воспользуйтесь следующей командой curl из примера приложения на платформе приложений:
apps@sample-nodejs-775ff7ff6f-db5gk:~$ curl --silent -XGET --location 'https://api.digitalocean.com/v2/databases/metrics/credentials' --header 'Content-Type: application/json' --header "Authorization: Bearer xxxxxxxxxxxxxxxxx"Это должно предоставить вам учетные данные для доступа к метрикам кластера, включая имя пользователя и пароль.
Output{
"credentials": {
"basic_auth_username": "prom2prh",
"basic_auth_password": "xxxxxxxxxxxxx"
}
}Перейдите по адресу /metrics
Для доступа к конечной точке с помощью cURL отправьте GET-запрос по адресу https://$HOST:9273/metrics и замените переменные hostname, username и password учетными данными, полученными на предыдущих шагах:
apps@sample-nodejs-775ff7ff6f-db5gk:~$ curl -XGET -k -u $USERNAME:$PASSWORD https://$HOST:9273/metricsЭто должно предоставить вам много метаданных, подобных следующим:
Output...
1",project="do-user-13729304-0",service="db-postgresql-nyc3-66505",service_type="pg"} 0.7
# HELP system_n_cpus Telegraf collected metric
# TYPE system_n_cpus gauge
system_n_cpus{cloud="custom-digitalocean-do-nyc3",host="db-postgresql-nyc3-66505-1",project="do-user-13729304-0",service="db-postgresql-nyc3-66505",service_type="pg"} 1
# HELP system_n_unique_users Telegraf collected metric
# TYPE system_n_unique_users gauge
system_n_unique_users{cloud="custom-digitalocean-do-nyc3",host="db-postgresql-nyc3-66505-1",project="do-user-13729304-0",service="db-postgresql-nyc3-66505",service_type="pg"} 0
# HELP system_n_users Telegraf collected metric
# TYPE system_n_users gauge
system_n_users{cloud="custom-digitalocean-do-nyc3",host="db-postgresql-nyc3-66505-1",project="do-user-13729304-0",service="db-postgresql-nyc3-66505",service_type="pg"} 0
# HELP system_uptime Telegraf collected metric
# TYPE system_uptime counter
system_uptime{cloud="custom-digitalocean-do-nyc3",host="db-postgresql-nyc3-66505-1",project="do-user-13729304-0",service="db-postgresql-nyc3-66505",service_type="pg"} 640073
...Шаг 5 – Визуализация метрик с помощью Prometheus
Для доступа к конечной точке с помощью Prometheus скопируйте следующую конфигурацию в файл prometheus.yml, заменив имя хоста, имя пользователя, пароль и путь к сертификату CA. Это настроит Prometheus на использование всех необходимых учетных данных для доступа к конечной точке:
# prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'dbaas_cluster_metrics_svc_discovery'
scheme: https
tls_config:
ca_file: /path/to/ca.crt
dns_sd_configs:
- names:
- $TARGET_ADDRESS
type: 'A'
port: 9273
refresh_interval: 15s
metrics_path: '/metrics'
basic_auth:
username: $BASIC_AUTH_USERNAME
password: $BASIC_AUTH_PASSWORDПожалуйста, замените $TARGET_ADDRESS, $BASIC_AUTH_USERNAME и $BASIC_AUTH_PASSWORD на имя хоста, имя пользователя и пароль, полученные на предыдущих шагах.
Затем скопируйте следующий скрипт подключения в файл с именем up.sh. Этот скрипт запустит envsubst и создаст контейнер Prometheus с конфигурацией, полученной на предыдущем шаге.
#!/bin/bash
envsubst < prometheus.yml > /tmp/dbaas-prometheus.yml
docker run -p 9090:9090 \
-v /tmp/dbaas-prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheusПерейдите в браузере по адресу http://localhost:9090/targets, чтобы убедиться, что несколько хостов работают.
Затем перейдите по адресу http://localhost:9090/graph, чтобы запросить метрики базы данных из Prometheus.
Для получения более подробной информации см. документацию Prometheus DNS SD и документацию по настройке TLS.
Чтобы изучить и понять каждый из показателей, вы можете ознакомиться с официальным документом PostgreSQL по статистике мониторинга.
Вы также можете узнать больше о том, как собирать метрики для управляемой базы данных PostgreSQL.
Результат
В этом руководстве вы узнаете, как настроить и собирать метрики из управляемой базы данных PostgreSQL на DigitalOcean с помощью веб-приложения Node.js, развернутого на платформе DigitalOcean, и Prometheus. Включив сбор метрик, вы сможете легко отслеживать производительность и состояние ваших баз данных, обеспечивая оптимальную производительность и детальную диагностику для устранения любых проблем.


























