如何为 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.xdnf.cn/news/1488229.html

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

相关文章

Git的应用及码云的应用

Git 准备一台主机&#xff0c;安装应用git [rootgit ~]# yum -y install git [rootgit ~]# rpm -ql git 查看版本信息 [rootgit ~]# git [rootgit ~]# mkdir /yy000 创建目录 使用git指令&#xff0c;一定要cd到初始化之后的目录 cd到yy000目录中使用init指令促使初始化 [ro…

uniapp开发精选短视频视频小程序实战笔记20240725,实现顶部轮播图和热门短剧

创建项目 创建项目,叫video_app。 在pages.json里面修改一下标题: 新建search搜索页面和me我的页面。 此时界面预览效果如下: 引入静态资源 主要是static里面的内容,全部复制过来。 配置底部导航栏 pages.json,放到顶层,和全部样式同级: "tabBar&quo…

ChatGPT的原理和成本

ChatGPT就是人机交互的一个底层系统&#xff0c;某种程度上可以类比于操作系统。在这个操作系统上&#xff0c;人与AI之间的交互用的是人的语言&#xff0c;不再是冷冰冰的机器语言&#xff0c;或者高级机器语言&#xff0c;当然&#xff0c;在未来的十来年内&#xff0c;机器语…

Origin多个图层的层叠顺序调整

如果你有多个图层在一个图表中&#xff0c;可以在右上方的对象管理器中调整它们之间的层级关系—— 在对象管理器中处于第一位的图层&#xff0c;是层级最低的图层&#xff0c;即处于图表的最次优先显示&#xff1b;反之&#xff0c;处于最后一位的图层&#xff0c;是层级最高…

LeetCode 热题 HOT 100 (011/100)【宇宙最简单版】

【图论】No. 0200 岛屿数量 【中等】&#x1f449;力扣对应题目指路 希望对你有帮助呀&#xff01;&#xff01;&#x1f49c;&#x1f49c; 如有更好理解的思路&#xff0c;欢迎大家留言补充 ~ 一起加油叭 &#x1f4a6; 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持&#xf…

C语言 | Leetcode C语言题解之第279题完全平方数

题目&#xff1a; 题解&#xff1a; // 判断是否为完全平方数 bool isPerfectSquare(int x) {int y sqrt(x);return y * y x; }// 判断是否能表示为 4^k*(8m7) bool checkAnswer4(int x) {while (x % 4 0) {x / 4;}return x % 8 7; }int numSquares(int n) {if (isPerfect…

本宫欢喜新荣记香港:米其林美学月子餐鉴赏和疗愈月子护理之旅

作为大湾区新晋“顶流”母婴护理中心和待产月子大健康解决方案提供者&#xff0c;已具备16年母婴月子专业护理经验的本宫欢喜&#xff0c;近两年备受国内和亚太备孕、待产妈妈群体和家庭珍爱。今年7月下旬&#xff0c;本宫欢喜大湾区百万影响力KOL妈妈系列体验之旅中&#xff0…

【数据结构】搜索二叉树

二叉搜索树 二叉树的博客 在之前的数据结构的文章中已经基本对二叉树有一定的了解&#xff0c;二叉搜索树也是一种数据结构&#xff0c;下面将对二叉搜索树进行讲解。 二叉搜索树的概念 二叉搜索树又称为二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有下面性…

ICIP-2020-A Non-local Mean Temporal Filter for VideoCompression

在 libvpx、VP8、VP9 和 HEVC 等各种编码器实现中&#xff0c;早就发现在预处理阶段过程中从源视频信号去除噪声对客观压缩效率的提升存在好处。通常使用常规的块匹配运动搜索来构建运动轨迹&#xff0c;并沿着轨迹比较每对像素&#xff0c;根据像素间的差异确定时域滤波器系数…

网络原理_初识

目录 一、局域网LAN 二、广域网WAN 三、网络通信基础 3.1 IP地址 3.2 端口号 3.3 协议 3.4 五元组 3.5 OSI七层模型 3.6 TCP/IP五层模型 3.7 网络设备所在分层 3.8 封装和分用 总结 一、局域网LAN 局域网&#xff0c;即 Local Area Network&#xff0c;Local 即标…

Godot游戏制作 05收集物品

创建新场景&#xff0c;添加Area2D节点&#xff0c;AnimatedSprite2D节点 &#xff0c;CollisionShape2D节点 添加硬币 按F键居中&#xff0c;放大视图。设置动画速度设为10FPS&#xff0c;加载后自动播放&#xff0c;动画循环 碰撞形状设为圆形&#xff0c;修改Area2D节点为Co…

看2024如何利用IT项目管理软件实现项目稳定输出,创造价值

曾经做为一个在大型互联网公司工作了10年的项目实施工作人员来讲&#xff0c;亲眼见证了IT项目管理软件的兴起和发展&#xff0c;也深刻体会到它在提升项目效率和管理水平方面的巨大价值。它就像一把神奇的钥匙&#xff0c;打开了项目管理的新世界&#xff0c;让原本混乱无序的…

docer笔记3

docker笔记3 容器基本命令 容器基本命令 下载镜像 docker pull cento新建容器并启动 docker run [可选参数] image# 参数说明 --name“Name” 容器名字 tomcat01 tomcat02 用来区分容器 -d 后台方式运行 -it 使用交互方式运行&#xff0c;进入容器查…

leetcode3098. 求出所有子序列的能量和

官解 class Solution(object):# 定义常量mod int(1e9 7) # 模数&#xff0c;用于防止结果溢出inf float(inf) # 无穷大&#xff0c;用于初始化时的特殊值def sumOfPowers(self, nums, k):n len(nums) # 数组长度res 0 # 用于存储最终结果# 三维动态规划表&#xff0c;…

七、SpringBoot日志

1. 得到日志对象 import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; //打印日志…

【C语言】数组栈的实现

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

springboot校园跑腿服务系统-计算机毕业设计源码15157

摘要 本文介绍了一种基于Springboot和uniapp的校园跑腿服务系统的设计与实现。该系统旨在为大学校园提供一种方便快捷的跑腿服务&#xff0c;满足学生和教职员工的日常需求。首先&#xff0c;系统采用了Springboot作为后端框架&#xff0c;利用其轻量级、高效的特性&#xff0c…

学习笔记 韩顺平 零基础30天学会Java(2024.7.22)

P407 接口使用细节2 P407 接口课堂练习 对于最后一个的输出&#xff1a;B因为实现了A的接口&#xff0c;所以和继承一样&#xff0c;B可以访问A的变量 P409 接口VS继承 接口对单继承机制&#xff08;是指只能继承一个类&#xff09;进行了补充 也可以理解为&#xff0c;子类通过…

请你谈谈:针对Mybatis引出的Spring事务的探究2:spring事务的失效

Spring事务失效的常见场景主要包括以下几个方面&#xff0c;这些场景通常是由于对Spring事务管理机制的误解或不当使用所导致的&#xff1a; 方法访问级别不当&#xff1a; 如前所述&#xff0c;Spring AOP默认不会拦截非public方法。因此&#xff0c;如果Transactional注解被…

通信原理-实验六:实验测验

实验六 实验测验 一&#xff1a;测验内容和要求 测试需要完成以下几个步骤&#xff1a; 配置好以下网络图&#xff1b;占总分10%&#xff08;缺少一个扣一分&#xff09;根据下面图配置好对应的IP和网关以及路由等相关配置&#xff0c;保证设备之间连通正常&#xff1b;占总…