如何在 DigitalOcean 上收集托管数据库即服务 (DBaaS) 的可抓取指标

0 股票
0
0
0
0

介绍

在本教程中,您将学习如何使用部署在 DigitalOcean 应用平台上的 Web 应用程序收集 DigitalOcean 上管理的 PostgreSQL 数据库的聚合指标。.

在本演示中,您将使用一个示例 Node.js 应用程序,并将其连接到您将在本教程中创建的托管 DigitalOcean PostgreSQL 数据库。.

在本教程结束时,您将拥有一个 Prometheus 仪表板,它可以抓取并显示连接到 App Platform Web 应用程序的托管 PostgreSQL 数据库中的指标。.

先决条件

开始之前,请确保您已具备以下先决条件:

  • DigitalOcean 账户。.
  • 部署在应用平台上的Node.js示例应用程序。.
  • Postgres数据库已部署并连接到应用平台应用程序。.
  • 个人访问令牌,具有读/写 (rw) 权限。您可以按照此教程创建个人访问令牌。.

步骤 1 – 设置托管 PostgreSQL 数据库

我们先来创建一个PostgreSQL数据库。.

前往 DigitalOcean 云控制面板中的“数据库”部分。.

点击“创建数据库集群”,然后选择 PostgreSQL。您需要选择数据中心区域和 VPC 网络,如下图所示:

接下来,选择 PostgreSQL 作为数据库,并选择数据库的其他设置。.

配置数据库设置,按照屏幕上的说明操作,然后单击“创建数据库集群”。.

创建 PostgreSQL 管理的数据库集群后,您可以在以下选项卡中查看其概览、见解、报告以及设置:

步骤 2 – 在应用程序平台上部署 Node.js Web 应用程序实例

您可以按照步骤部署示例 Node.js 应用,或者使用此 GitHub 存储库在应用平台上创建示例 Node.js 应用。.

如果您使用后一种方法,则需要将此 GitHub 仓库 fork 到您的 GitHub 帐户,以便在云端存储副本。单击 GitHub 仓库上的“Fork”按钮,然后按照屏幕上的说明进行操作。.

现在登录 DigitalOcean 云门户,然后导航至“创建应用”->“应用平台”。.

然后,在«其他:选择示例应用程序»下,从“示例应用程序”下拉菜单中选择 Node.js 示例应用程序,然后单击“下一步”。.

按照屏幕上的说明设置应用程序资源、常规配置和环境变量,然后单击“下一步”。完成后,检查常规应用程序配置。完成后,单击“创建资源”。创建应用程序后,需要一些时间才能将其部署到应用程序平台。.

应用程序部署和构建完成后,您可以在浏览器中查看应用程序概览并访问已部署的应用程序。.

步骤 3 – 将 PostgreSQL 数据库连接到应用平台

在此步骤中,您将本教程步骤 1 中创建的托管 PostgreSQL 数据库连接到步骤 2 中创建的 Node.js 应用程序示例。.

转到已部署的应用平台应用,单击已部署应用仪表板上的«创建»按钮,然后单击“创建/附加数据库”:

然后,选择«先前创建的 DigitalOcean 数据库»,选择最近部署的 PostgreSQL 托管数据库集群,然后单击底部的«附加数据库»按钮。.

您可以在数据库概览部分验证应用平台应用是否已成功添加为可信来源。.

步骤 4 – 从 /metrics 端点获取可抓取的指标

您可以通过 /metrics 端点以编程方式查看数据库集群的指标。此端点包含的指标数量是控制面板“洞察”选项卡中可访问指标数量的二十倍以上。.

您可以使用 curl 命令访问指标端点,或者使用 Postman 在 Prometheus 等监控系统中可视化这些指标。.

首先,请前往 DigitalOcean 控制面板的 API 部分,创建一个新的个人访问令牌,然后点击“生成完全访问权限令牌”。请记下此访问令牌,因为您将在后续步骤中使用它。.

在本示例中,您将使用 Postman 执行所有 HTTP 请求。或者,您也可以从应用平台实例运行 curl 命令来获取 API 请求的响应。.

获取主机名和端口。

首先,您需要通过向 https://api.digitalocean.com/v2/databases/{UUID} 发送 GET 请求来检索集群指标的主机名。.

从您的应用平台实例运行以下 curl 命令。为此,请转到控制台部分:

使用以下命令获取主机名和数据库凭据

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 替换为您托管的 PostgreSQL 数据库的 UUID 和您的个人访问密码。.

此命令应输出受管 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 地址添加为数据库受信任源设置中的受信任源,则可以在 Postman 中运行上述 HTTP GET 请求。.

只需添加 URL https://api.digitalocean.com/v2/databases/{UUID},并将授权选项卡下的个人访问代码替换为选择为 bearer token 的验证类型即可。.

获取聚类指标验证

接下来,您需要集群指标凭据。您可以使用管理员令牌或写入令牌向 https://api.digitalocean.com/v2/databases/metrics/credentials 发送 GET 请求来获取这些凭据。.

在 App Platform 示例应用程序中使用以下 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 访问端点,请向 https://$HOST:9273/metrics 发送 GET 请求,并将主机名、用户名和密码变量替换为您在前面步骤中找到的凭据:

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 数据库收集可抓取指标的信息。.

结果

本教程将教您如何使用部署在 DigitalOcean 应用平台上的 Node.js Web 应用程序和 Prometheus,设置并从 DigitalOcean 托管的 PostgreSQL 数据库中抓取指标。通过启用可抓取指标,您可以轻松监控数据库的性能和运行状况,确保最佳性能并进行深入的故障排除,从而解决任何问题。.

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

您可能也喜欢