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

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: 15sevaluation_interval: 15sscrape_configs:- job_name: 'dbaas_cluster_metrics_svc_discovery'scheme: httpstls_config:ca_file: /path/to/ca.crtdns_sd_configs:- names:- $TARGET_ADDRESStype: 'A'port: 9273refresh_interval: 15smetrics_path: '/metrics'basic_auth:username: $BASIC_AUTH_USERNAMEpassword: $BASIC_AUTH_PASSWORD

请替换 $TARGET_ADDRESS、$BASIC_AUTH_USERNAME 和 $BASIC_AUTH_PASSWORD 为你在前面步骤中获得的主机名、用户名和密码。

然后,将以下连接脚本复制到名为 up.sh 的文件中。此脚本运行 envsubst 并使用上一步中的配置启动 Prometheus 容器。

#!/bin/bash
envsubst < prometheus.yml > /tmp/dbaas-prometheus.ymldocker 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.mzph.cn/diannao/50193.shtml

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

相关文章

数据恢复教程:如何从硬盘、SD存储卡、数码相机中恢复误删除数据。

您正在摆弄 Android 设备。突然&#xff0c;您意外删除了一张或多张图片。不用担心&#xff0c;您总能找到一款价格实惠的数据恢复应用。这款先进的软件可帮助 Android 用户从硬盘、安全数字 (SD) 或存储卡以及数码相机中恢复已删除的数据。 Android 上数据被删除的主要原因 在…

【PostgreSQL案例】我要查的表没有在执行计划中

问题&#xff1a;查的表没有在执行计划中 sql&#xff1a; SELECT* FROM(SELECTA.column1 as "column1",--中间省略很多A字段A.column99 as "column99"fromtable_a Aleft join (SELECTlzl_idfromtable_a AAinner join table_b BB ON AA.lzl_key BB.lzl_…

Failed to activate conda environment

问题描述 Pycharm Terminal显示以下错误&#xff0c;导致无法自动激活当前项目的conda环境 Failed : 无法将“Failed”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&#xff0c;请确保路径正确&#xff0c;然后再试一次。 …

多GPU并行处理[任务分配、进程调度、资源管理、负载均衡]

1. 多GPU并行处理设计 设计思路: 实现基于多GPU的并行任务处理&#xff0c;每个GPU运行独立的任务&#xff0c;以加速整体的处理速度。 实现机制: 进程隔离: 利用multiprocessing.Process为每个GPU创建独立的工作进程。 GPU资源限制: 通过设置CUDA_VISIBLE_DEVICES环境变量&…

厚积薄发,详解 IoTeX 2.0 如何推动 DePIN 赛道迈向新台阶

背 景 DePIN 是加密货币行业的一个新兴垂直领域&#xff0c;也是本轮牛市最重要的叙事之一。DePIN 通常通过发行和分配代币来激励参与者&#xff0c;用户可以通过提供资源、维护网络、参与治理等方式获得代币奖励并产生直接的经济收益&#xff0c;从而重新洗牌财富分配方…

【Linux】网络通信基础:应用层协议、HTTP、序列化与会话管理

文章目录 前言1. 应用层自定义协议与序列化1.1 什么是应用层&#xff1f;1.2 再谈 "协议"1.3 序列化 和 反序列化 2. HTTP 协议3. 认识 URL(统一资源定位符)4. urlencode和urldecode5. HTTP 协议请求与响应格式5.1 HTTP 请求5.2 HTTP 响应 6. HTTP 的方法6.1 GET 方法…

50.TFT_LCD液晶屏驱动设计与验证(3)

&#xff08;1&#xff09;数据生成模块Verilog代码&#xff1a; module data_gen(input [9:0] hang ,input [9:0] lie ,input clk_33M ,input reset_n ,output reg [23:0] data ); //定义最大行、列parameter …

Git(分布式版本控制系统)(fourteen day)

一、分布式版本控制系统 1、Git概述 Git是一种分布式版本控制系统&#xff0c;用于跟踪和管理代码的变更&#xff0c;它由Linux、torvalds创建的&#xff0c;最初被设计用于Linux内核的开发。Git允许开发人员跟踪和管理代码的版本&#xff0c;并且可以在不同的开发人员之间进行…

mybatis-plus项目中使用mybatis插件

1. 确保项目添加MyBatis-Plus依赖以及适合的SpringBoot版本。 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>版本号</version> </dependency> 2. 创建mybatis自…

监控Windows文件夹下面的文件(C#和C++实现)

最近在做虚拟打印机时&#xff0c;需要实时监控打印文件的到达&#xff0c;并移动文件到另外的位置。一开始我使用了线程&#xff0c;在线程里去检测新文件的到达。实际上Windows提供了一个文件监控接口函数ReadDIrectoryChangesW。这个函数可以对所有文件操作进行监控。 ReadD…

SAP中生产版本维护

流程概述 本流程为生产版本主数据维护流程,当PBOM、工艺路线主数据维护完成后,方能进行此流程。由于S/4HANA系统中,生产版本被定义为BOM展开的必要条件,因此所有工厂都必须在运行物料需求计划与生产执行等流程前将生产版本维护完成,与此同时,生产版本数据还是财务模块发…

【C语言】数组栈的实现

栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。 压栈&#…

学习大数据DAY24 Shell脚本的书写

目录 shell 的变量 系统变量 特殊变量 运算符 if 选择结构 ---then 独立一行 case 语句 等值判断 上机练习 10 附加题 for 循环 while 循环 乘法表(双层嵌套) 上机练习 11 把附加题代码修改为循环形式 shell 的变量 系统变量 $HOME : 当前登录用户的 " 家…

套接字选项、广播和组播

1. 套接字选项(socket options) 每一个套接字(socket)在不同的协议层次(级别)上面有不同的行为属性(选项) 我们可以设置 / 获取指定的套接字选项 getsockopt&#xff1a;获取套接字的选项 setsockopt&#xff1a;设置套接字的选项 NAMEgetsockopt, setsockopt - get and set op…

python自动化运维 通过paramiko库和time库实现服务器自动化管理

目录 一.前言 二. 代码实现以及解析 2.1导入必要的库 2.2定义服务器信息 2.3创建 SSH 客户端连接函数 2.4执行远程命令函数 2.5获取系统信息函数 2.6重启服务函数 2.7 主函数 三.致谢 一.前言 在数字化时代&#xff0c;IT 基础设施的规模和复杂性不断增长&am…

Hadoop集群安装配置

文章目录 Hadoop部署配置集群配置历史服务器配置日志的聚集分发Hadoop群起集群Hadoop群起脚本 准备工作&#xff1a;需要3台虚拟机&#xff0c;每台虚拟机搭建好JDK并配置环境变量 Hadoop部署 1&#xff09;集群部署规划 注意&#xff1a;NameNode和SecondaryNameNode不要安…

批处理操作系统、分时操作系统、实时操作系统

批处理操作系统&#xff1a; 特点&#xff1a;批处理操作系统主要用于处理一系列作业。作业是把程序、数据连同作业说明书组织起来的任务单位&#xff0c;这些作业被组织成批作业。系统将这些作业按顺序执行&#xff0c;用户在提交作业后通常不需要等待作业完成&#xff0c;而是…

Hadoop NameNode 进入 Safe Mode 的问题分析与解决方案

随着大数据技术的不断发展&#xff0c;Hadoop 已经成为了处理海量数据不可或缺的一部分。然而&#xff0c;在使用 Hadoop 的过程中&#xff0c;我们经常会遇到 NameNode 进入 Safe Mode 的情况&#xff0c;这可能会导致集群暂时无法进行数据写入操作。本文将详细介绍 NameNode …

Java OpenCV 图像处理40 图形图像 图片裁切ROI

Java OpenCV 图像处理40 图形图像 图片裁切 在 OpenCV 中&#xff0c;Rect 类是用来表示矩形的数据结构&#xff0c;通常用于定义图像处理中的感兴趣区域&#xff08;Region of Interest&#xff0c;ROI&#xff09;&#xff0c;或者指定图像中的某个区域的位置和大小。Rect 类…

使用Apache SeaTunnel进行二次开发的实践分享

大家好&#xff0c;我是范佳&#xff0c;是Apache SeaTunnel社区的PMC member。今天给大家分享一些基于Apache SeaTunnel二次开发的内容。 这部分内容主要涉及代码层面的知识&#xff0c;如果大家有什么疑问&#xff0c;欢迎来社区找我交流&#xff01; 引言 大部分数据开发工…