如何为 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 上数据被删除的主要原因 在…

厚积薄发,详解 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;并且可以在不同的开发人员之间进行…

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

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

【C语言】数组栈的实现

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

Hadoop集群安装配置

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

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; 引言 大部分数据开发工…

【微信小程序实战教程】之微信小程序 WXML 语法详解

WXML语法基础 从本章开始&#xff0c;我们就正式进入到了小程序项目开发学习的初级阶段&#xff0c;本章将介绍小程序的界面构成。有过网页开发学习经历的同学都知道&#xff0c;网页开发所使用的技术是HTML、CSS和JS&#xff0c;其中HTML用于描述整个网页的结构&#xff0c;也…

第三十一天 chrome调试工具

打开调试工具 页面空白处右击 检查 或者F12 使用调试工具 ctrl滚轮改变代码大小 左边是html 右边是css css可以直接改动数值左右箭头或者直接输入 查看颜色 ctrl0 复原浏览器大小 点击元素右侧出现样式引入 没有的话 说明类名或者样式引用错误 这里的.new-left是存在的 如果类…

四步实现网站HTTPS访问

随着网络安全的重要性日益凸显&#xff0c;HTTPS&#xff08;超文本传输安全协议&#xff09;已成为现代网站的标准配置。HTTPS协议作为HTTP协议的安全版本&#xff0c;通过SSL协议加密数据传输&#xff0c;不仅能保护用户数据的安全&#xff0c;还能提升搜索引擎排名&#xff…

linux之shell脚本实战

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

docker 构建 mongodb

最近需要在虚拟机上构建搭建mongo的docker容器&#xff0c;搞了半天老有错&#xff0c;归其原因&#xff0c;是因为现在最新的mango镜像的启动方式发生了变化&#xff0c;故此现在好多帖子&#xff0c;就是错的。 ok&#xff0c;话不多说&#xff1a; # 拉取最新镜像&#xf…

华为云依赖引入错误

问题&#xff1a;记录一次项目加在华为云依赖错误&#xff0c;如下&#xff1a; 错误信息&#xff1a;Could not find artifact com.huawei.storage:esdk-obs-java:pom:3.1.2.1 in bintray-qcloud-maven-repo (https://dl.bintray.com/qcloud/maven-repo/) 找到本地仓库&#…

Minos 多主机分布式 docker-compose 集群部署

参考 docker-compose搭建多主机分布式minio - 会bk的鱼 - 博客园 (cnblogs.com) Minio 是个基于 Golang 编写的开源对象存储套件&#xff0c;虽然轻量&#xff0c;却拥有着不错的性能 中文地址&#xff1a;MinIO | 用于AI的S3 & Kubernetes原生对象存储 官网地址&#xf…

系留无人机在技术上有哪些优势或创新点

系留无人机在技术上具有显著的优势和创新点&#xff0c;主要体现在以下几个方面&#xff1a; 1. 长航时飞行作业&#xff1a; - 系留无人机系统由地面通过市电、发电机或电池组供电&#xff0c;并通过系留线缆将电力传输至无人机&#xff0c;实现了不间断供电。 - 这种供电方式…

QT5:嵌入式linux开发板调用键盘

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录​​​​​​​ 前言 一、Buildroot构建QT环境 1.1 构建环境 1.2 检查qtvirtualkeyboard库 二、测试过程 2.1 直接调用qtvirtualkeyboard 1.测试代码 2.测试效果 2.2 运行…

PyCharm2024 专业版激活设置中文

PyCharm2024 专业版激活设置中文 官网下载最新版&#xff1a;https://www.jetbrains.com/zh-cn/pycharm/download 「hack-jet激活idea家族.zip」链接&#xff1a;https://pan.quark.cn/s/4929a884d8fe 激活步骤&#xff1a; 官网下载安装PyCharm &#xff1b;测试使用的202…