如何为 DigitalOcean 上的托管数据库收集可观测指标

news2024/11/15 17:19:26

DigitalOcean 在 2024 年 5 月开始支持在托管数据库(PostgreSQL、MySQL、Redis和Kafka)中收集可观测指标。我们将在本偏内容中,告诉大家如何使用部署在 DigitalOcean App Platform 上的网络应用程序,为 DigitalOcean 上的 PostgreSQL 托管数据库收集可观测指标。

你将在这次demo中使用一个 Node.js 应用程序示例,并将其连接到你将在本教程中创建的 DigitalOcean PostgreSQL 托管数据库。到本教程结束时,你将拥有一个 Prometheus 仪表板,它可以从连接到 App Platform Web 应用程序的 PostgreSQL 托管数据库中抓取并显示指标。

准备工作

开始之前,请确保具备以下准备工作:

  • 准备一个 DigitalOcean 账户。
  • 部署在 App Platform 上的 Node.js 应用程序示例。
  • 部署并连接到 App Platform 应用程序的 PostgreSQL 数据库。
  • 个人访问Token具有读/写(rw)访问权限。你可以按照此前教程中的“如何创建个人访问Token”为自己创建一个访问Token。

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

首先,我们需要创建一个 PostgreSQL 数据库。

导航至 DigitalOcean 云控制面板中的“数据库”部分。

单击“创建数据库群集”,然后选择 PostgreSQL。你将会选择一个数据中心区域和 VPC 网络,如下图所示:

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

按照屏幕上的说明操作,完成数据库设置后,单击 Create Database cluster。

创建 PostgreSQL 托管数据库群集后,你可以在以下选项卡中查看其概览、见解、日志和设置:

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

你可以按照以下步骤部署 Node.js 示例应用程序,或者使用这个 GitHub 仓库在 App Platform 上创建 Node.js 示例应用程序。

如果你使用后者,则需要将此 GitHub 仓库 Fork 到你的 GitHub 账户,这样你就能在云中存储一份副本。点击 GitHub 仓库中的 Fork 按钮,然后按照屏幕上的说明操作。

现在登录 DigitalOcean 云门户,导航至Create App -> App Platform

接下来,选择“Other: Choose Sample App”,从Sample App 下拉菜单中选择 Node.js 示例应用程序,并单击Next

按照屏幕上的说明设置应用程序的资源、常规配置和环境变量,然后单击Next。完成后,查看应用程序的整体配置并点击Create Resources。应用程序创建完成后,需要一些时间才能部署到应用程序平台上。

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

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

步骤 3 - 将 PostgreSQL 数据库附加到 App Platform 应用程序

在本步骤中,你将把步骤 1 中创建的 PostgreSQL 托管数据库附加到步骤 2 中创建的示例 Node.js 应用程序。

导航到已部署的 App Platform 应用程序,单击已部署应用程序仪表板上的Create按钮,然后单击 “Create/Attach Database”

选择“Previously Created DigitalOcean Database”,然后选择最近部署的 PostgreSQL 托管数据库集群,点击底部的“Attach Database” 按钮。

注意:确保选中 App Platform 应用程序作为受信任资源的复选框。这将创建一个安全的连接,只接受来自应用程序的流量。

你可以在Database Overview部分验证 App Platform 应用程序是否已成功添加为可信源。

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

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

你可以使用 curl 命令或 Postman 来可视化这些指标,并将其集成到像 Prometheus 这样的监控系统中。

首先,前往 DigitalOcean 控制面板上的 API 部分,创建一个Create A New Personal Access Token,然后单击Generate Token with Full Access。请记下这个访问Token,因为在接下来的步骤中会用到它。

在本案例中,你将使用 Postman 执行所有 HTTP 请求,或者也可以在 App Platform 应用程序实例中使用 curl 命令来获取 API 请求的响应。

获取主机名和端口

首先,你需要通过发送 GET 请求来获取群集的度量主机名。发送请求到 https://api.digitalocean.com/v2/databases/{UUID}

在 App Platform 应用程序实例中执行以下 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 和你的个人访问Token。

注意:你可以在 URL 中找到数据库的 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:PASSWORD@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": "PASSWORD",
            "ssl": true
        },
        "private_connection": {
            "protocol": "postgresql",
            "uri": "postgresql://doadmin:PASSWORD@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": "PASSWORD",
            "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": "PASSWORD"
            }
        ],
        "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},然后在授权选项卡下将个人访问Token替换为 Bearer Token 的授权类型。

获取集群的指标凭据

接下来,你需要获取集群的指标凭据。你可以使用管理员或写入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 -X GET -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 App Platform 和 Prometheus 上的 Node.js Web 应用程序,设置并抓取 DigitalOcean 上 PostgreSQL 托管数据库中的指标。通过启用可抓取指标,你可以轻松监控数据库的性能和运行状况,确保最佳运行,并深入故障排除以解决任何问题。

如果还需要咨询更详细的产品信息,或需要技术支持,可直接联系 DigitalOcean 中国区独家战略合作伙伴卓普云。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1950654.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言 | Leetcode C语言题解之第283题移动零

题目&#xff1a; 题解&#xff1a; void swap(int *a, int *b) {int t *a;*a *b, *b t; }void moveZeroes(int *nums, int numsSize) {int left 0, right 0;while (right < numsSize) {if (nums[right]) {swap(nums left, nums right);left;}right;} }

新手必备:iPhone新机官网验机流程详解

目录 一、准备工作 二、外包装检查 三、序列号查询 四、开箱验机 五、开机验机 六、功能检测 七、售后服务验证 八、总结 一、准备工作 检查包裹&#xff1a;确保快递包裹完好无损。准备录像设备&#xff1a;使用另一台设备录制整个验机过程&#xff0c;以防日后发生纠…

C# 贪吃蛇游戏

贪吃蛇游戏可分为手动玩法和自动玩法 冯腾飞/贪吃蛇

海山数据库(He3DB)性能优化方案解析

前端优化是一个永恒的话题&#xff0c;每个前端开发者都希望自己的页面能够快速加载&#xff0c;给用户良好的体验。但往往事与愿违。因此&#xff0c;本文从编码优化、构建优化、部署优化三方面入手进行web页面性能优化。 1. 编码优化 1.1. Css优化 1.1.1. 合理使用css选择…

昇思25天学习打卡营第33天|共赴算力时代

文章目录 一、平台简介二、深度学习模型2.1 处理数据集2.2 模型训练2.3 加载模型 三、共赴算力时代 一、平台简介 昇思大模型平台&#xff0c;就像是AI学习者和开发者的超级基地&#xff0c;这里不仅提供丰富的项目、模型和大模型体验&#xff0c;还有一大堆经典数据集任你挑。…

QSqlQuery增删改查

本文记录使用QSqlQuery实现增删改查的过程。 目录 1. 构建表格数据 声明变量 表格、数据模型、选择模型三板斧设置 列表执行查询 列表的水平表头设置 2. 新增一行 构建一个空行 通过dialog返回的修改行数据&#xff0c;update更新 3. 更新一行 获取到需要更新的行 通…

qt--电子相册

一、项目要求 设计一个电子相册&#xff0c;点击上一张&#xff0c;切换到上一张图片&#xff0c;点击下一张&#xff0c;切换到下一张图片。 要求&#xff1a;图片的展示可以循环&#xff08;QList<QString>&#xff09; 要求&#xff1a;界面美观 二、项目代码 本质是通…

力扣141环形链表问题|快慢指针算法详细推理,判断链表是否有环|龟兔赛跑算法

做题链接 目录 前言&#xff1a; 一、算法推导&#xff1a; 1.假设有环并且一定会相遇&#xff0c;那么一定是在环内相遇&#xff0c;且是快指针追上慢指针。 2.有环就一定会相遇吗&#xff1f;快指针是每次跳两步&#xff0c;有没有可能把慢指针跳过去&#xff1f; 3.那一定…

ffmpeg更改视频的帧率

note 视频帧率调整 帧率(fps-frame per second) 例如&#xff1a;原来帧率为30&#xff0c;调整后为1 现象&#xff1a;原来是每秒有30张图像&#xff0c;调整后每秒1张图像&#xff0c;看着图像很慢 实现&#xff1a;在每秒的时间区间里&#xff0c;取一张图像…

数据库 第五次作业

1.触发器 建立两个表:goods(商品表)、orders(订单表)并 在商品表中导入商品记录 建立触发器&#xff0c;订单表中增加订单数量后&#xff0c;商品表商品数量同步减少对应的商品订单出数量,并测试 建立触发器&#xff0c;实现功能:客户取消订单&#xff0c;恢复商品表对应商品的…

Llama 3.1 这一最强模型按时降临!扎克伯格最新的访谈表明:Llama 将会成为 AI 领域中的 Linux 。

&#x1f431; 个人主页&#xff1a;TechCodeAI启航&#xff0c;公众号&#xff1a;TechCodeAI &#x1f64b;‍♂️ 作者简介&#xff1a;2020参加工作&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步&#xff0c;一起加油呀&#xff01; &#x1f4ab; 优质专…

PyQt5 使用系统托盘

Qt5 中 QSystemTrayIcon 类提供了系统托盘的功能 具体功能 初始化 初始化 QSystemTrayIcon 对象, 需要传递一个父控件作为初始参数 import sys from PyQt5.QtWidgets import QApplication, QSystemTrayIcon, QWidgetapp QApplication(sys.argv) window QWidget() tray Q…

barrier failt to connect to server: timeout

win10做server&#xff0c;mac做client&#xff0c;一直运行失败&#xff0c;观察日志发现timeout。 最后发现是win10的防火墙入站规则里的Barrier Listener里设置的端口&#xff0c;和Barrier中设置的端口不一致。 因为局域网内有其他同事也用这个&#xff0c;所以修改了端口…

API资源对象CRD、认识Operator-理论知识和认识Operator-初次上手(2024-07-17)

一、API资源对象CRD Kubernetes 自定义资源定义&#xff08;Custom Resource Definition&#xff0c;简称 CRD&#xff09;是一种强大的 Kubernetes API 扩展机制&#xff0c;允许你定义和创建自己的资源类型&#xff0c;以满足您的应用程序或基础设施需求。 CRD 的核心思想是…

原型图设计指南:从基础到精通

用户体验设计师和原型设计的主要功能 PM、网站开发工程师通过展示产品内容、结构和粗略布局来沟通最初产品设想的重要工具&#xff0c;说明用户将如何与产品互动&#xff0c;而不是视觉设计。在大厂中&#xff0c;岗位分工更加细致明确&#xff0c;大部分原型都是产品经理做的&…

Oracle系统表空间的加解密

实验环境 数据库选择的是orclpdb1&#xff0c;当前系统表空间未加密&#xff1a; SQL> show con_nameCON_NAME ------------------------------ ORCLPDB1SQL> select TABLESPACE_NAME, STATUS, ENCRYPTED from dba_tablespaces;TABLESPACE_NAME STATUS …

【Ubuntu】安装 Snipaste 截图软件

Snipaste 下载安装并使用 Snipastefor more information报错解决方案每次启动软件需要输入的命令如下添加开机自启动 下载 下载地址 安装并使用 Snipaste 进入终端输入命令 # 1、进入到 Snipaste-2.8.9-Beta-x86_64.AppImage 所在目录&#xff08;根据自己的下载目录而定&…

uniapp安卓plus原生选择系统文件

uniapp安卓plus原生选择系统文件 效果&#xff1a; 组件代码&#xff1a; <template xlang"wxml" minapp"mpvue"><view></view> </template> <script>export default {name: file-manager,props: {},data() {return {is…

qt--做一个拷贝文件器

一、项目要求 使用线程完善文件拷贝器的操作 主窗口不能假死主窗口进度条必须能动改写文件大小的单位&#xff08;自适应&#xff09; 1TB1024GB 1GB1024MB 1MB1024KB 1KB1024字节 二、所需技术 1.QFileDialog 文件对话框 QFileDialog也继承了QDialog类&#xff0c;直接使用静态…

Hi-Fix 介绍

一、HIFIX 定义与功能 HIFIX是连接安装在自动检测装置&#xff08;Tester&#xff09;本体内的功能卡(Resource board)和承载被测设备(Device)探针卡&#xff08;Probe card&#xff09;的媒介&#xff0c;将来自检测装置的大量测试信号统一发送到被测设备(Device)。 HiFIX 能…