
点击蓝字关注我们
EDB Postgres Enterprise Manager (PEM)是针对PostgreSQL和EPAS的全面监控和管理解决方案。基于流行的pgAdmin 4构建,提供pgAdmin的所有管理功能,以及针对关键任务和大型Postgres资产的全天候监控、警报和整体管理工具。
PEM 是一个综合的数据库设计和管理系统。PEM旨在满足新手和经验丰富的Postgres用户的需求,提供强大的图形界面,简化数据库对象的创建、维护和使用。
同时,EDB PEM企业管理器还提供了丰富的REST API功能。通过REST API功能提供有效的数据读写功能,这样可以无需登录PEM UI图形界面即可访问各种功能。而且可以通过REST API无缝与您现在的管理监控平台集成或整合。
一、概述
本文我们通过示例来验证和测试利用PEM REST API来进行数据库管理的功能。前提是已经安装和配置好PEM企业管理服务器。
1.1 访问Swagger编辑器
首先,通过PEM API的URL来访问REST API文档,本例PEM主机的IP地址为192.168.31.201,端口为默认端口:8443。
https://192.168.31.201:8443/pem/api/ 显示如下界面:

目前PEM的REST API最新版本是v11。
1.2 访问端点:
基于令牌的身份验证
安全性是重中之重,PEM通过基于令牌的身份验证机制来访问其REST API来确保安全。这种身份验证方法不仅可以保护连接的交互,还可以简化 API 探索,无需 UI 登录。
二、分步操作
下面我们详细了解在 PEM 中使用 REST API 的步骤:
2.1 令牌生成
首先要生成用于身份验证的令牌。为此,按照以下操作步骤:
通过命令行curl发出POST请求到 ‘https://192.168.31.201:8443/pem/api/token’,附带头参数及请求内容。
Headers:‘accept:application/json’,‘Content-Type:application/json’
Request body:‘{"username":"pemuser","password":"xyz"}'
从响应中的“X-Subject-Token”字段中检索并获得令牌。
[nuser@pem1 ~]$ curl -k -iX POST "https://192.168.31.201:8443/pem/api/token/" \-H "accept: application/json" -H "Content-type: application/json" \-d "{\"username\":\"postgres\",\"password\":\"postgres\"}"
返回结果
HTTP/1.1 201 CREATEDDate: Mon, 12 Aug 2024 08:49:32 GMTServer: ApacheContent-Length: 396X-Subject-Token: 932d9b1c-10e6-4285-b607-9b520f1ba8a2Vary: Accept-EncodingX-Frame-Options: SAMEORIGINContent-Security-Policy: default-src ws: https: data: blob: 'unsafe-inline' 'unsafe-eval';Strict-Transport-Security: max-age=31536000; includeSubDomainsX-Content-Type-Options: nosniffX-XSS-Protection: 1; mode=blockContent-Type: application/json{"issuedAt": "2024-08-12 08:49:32.894498+00:00", "expiresAt": "2024-08-12 09:09:32.894498+00:00", "schema_version": 202405091, "backend_schema_version": 202405091, "version_long": 906001, "version": "9.6.0 (schema: 202405091)", "supported_api_versions": ["v8_api", "v9_api", "v10_api", "v11_api"], "deprecated_api_versions": ["v1_api", "v2_api", "v3_api", "v4_api", "v5_api", "v6_api", "v7_api"]}
其中X-Subject-Token就是我们所需要的令牌。932d9b1c-10e6-4285-b607-9b520f1ba8a2
更简单的方法,可以直接在web浏览器界面swagger下执行,在主页面中,往下滚动就看到操作界面。

在POST行直接点击,就出现输入界面,点击【try it out】,就可以在用户名/密码里输入PEM用户名和密码,其它默认,点击【execute】

出现命令行一样的内容:

返回结果。(每次访问都会产生不同的随机Token用于进一步操作)

2.2 访问各Endpoint
利用上面获得的X-subject-Token,我们就可以访问PEM内的各种信息并进行管理。我们使用最新的v11 API操作。
在主页面点击“v11”,可以看到有上百个可以访问的“对象”,以实现对PEM的操作和管理。

我们随便选择一个对象,如server,可以看到对server对像可以GET、POST二种操作实现查询、更新操作。有些对像可以查询、更新和删除。这里我们点选GET选项。
输入前面获得的token,点选【Execute】就可以返回所有被管理的Postgres Server的基本信息。如id、name、host、port、status等。

注意:Token是的时间有效性的,一旦失效了可以从第一步操作重新获取新的token。
同样地,我们也可以通过curl命令获得相同的返回结果。
2.3 通过python脚本调用API
PEM REST API可以通过python脚本来调用,查询和管理相应信息。
示例一个python脚本test1.py,内容如下:
import requests# Suppress SSL warningsrequests.packages.urllib3.disable_warnings()# Step 1: Token Generationdef generate_token(username, password):url = "https://192.168.31.201:8443/pem/api/token/"headers = {"accept": "application/json","Content-Type": "application/json"}data = {"username": username,"password": password}response = requests.post(url, headers=headers, json=data, verify=False)# Extracting the token from the responsetoken = response.headers.get("X-Subject-Token")return token# Main Executionif __name__ == "__main__":# Taking user input through command lineusername = input("Enter PEM User Username: ")# You can also use getpass for hidden inputpassword = input("Enter PEM User Password: ")token = generate_token(username, password)if token:print("Generated Token:", token)else:print("Failed to generate token.")
执行脚本:
$python3 test1.py
[nuser@elastic-host python-client-sample]$ python3 test1.pyEnter PEM User Username: postgresEnter PEM User Password: postgresGenerated Token: 200baceb-3636-49ce-ba4b-f004cdfe96f7
也可以正确返回token。
2.4 使用ssl处理https请求
上面的curl操作对HTTPS请求采用基于令牌的身份验证,并使用--insecure(或-k) 标志禁用 SSL 验证。然而,在许多情况下,SSL 验证至关重要。我们可以通过证书方式访问https。
PEM安装时自动生成自签名证书,server证书默认安装在/usr/edb/pem/resources/server-pem.crt,我们把server-pem.crt 拷贝到客户端,从而可以https方式访问PEM https地址,获取各种如上所述相同的管理信息。
curl -iX POST "https://epm1.test.cxm:8443/pem/api/token/" \-H "accept: application/json"\-H "Content-type: application/json" \-d "{\"username\":\"postgres\",\"password\":\"postgres\"}" --cacert server-pem.crtHTTP/1.1 201 CREATEDDate: Mon, 12 Aug 2024 18:09:28 GMTServer: ApacheContent-Length: 396X-Subject-Token: 58938422-4282-455e-813c-ab726065147eVary: Accept-EncodingX-Frame-Options: SAMEORIGINContent-Security-Policy: default-src ws: https: data: blob: 'unsafe-inline' 'unsafe-eval';Strict-Transport-Security: max-age=31536000; includeSubDomainsX-Content-Type-Options: nosniffX-XSS-Protection: 1; mode=blockContent-Type: application/json{"issuedAt": "2024-08-12 18:09:28.668627+00:00", "expiresAt": "2024-08-12 18:29:28.668627+00:00", "schema_version": 202405091, "backend_schema_version": 202405091, "version_long": 906001, "version": "9.6.0 (schema: 202405091)", "supported_api_versions": ["v8_api", "v9_api", "v10_api", "v11_api"], "deprecated_api_versions": ["v1_api", "v2_api", "v3_api", "v4_api", "v5_api", "v6_api", "v7_api"]}
同样可以获得Token。
也可以生成客户证书及私钥来访问https。
curl -iX POST "https://epm1.test.cxm:8443/pem/api/token/" \-H "accept: application/json" -H "Content-type: application/json"\-d "{\"username\":\"postgres\",\"password\":\"postgres\"}" \--cacert server-pem.crt --cert client.cert --key client.key
同样获得Token。
希望这些方面对利用Postgres Enterprise Manager中的 REST API简化数据库管理有所帮助!更多的详细信息可以在EDB的文档和发行说明中了解有关PEM特性和功能的更多信息。

发现“分享”和“赞”了吗,戳我看看吧




