为什么要自动化服务器添加
当你监控 5 台 MariaDB / MySQL 服务器时,手动将它们添加到 PmaControl 是没问题的。但当达到 50 或 200 台时,就不再可行了。
PmaControl 的 REST API 使你能够将此流程工业化:一个脚本、一条 CI/CD 流水线或一个编排工具(Ansible、Terraform)可以通过单个 HTTP 请求创建一台受监控的服务器。
前提条件
- PmaControl 中一个活跃的 Web 服务账户(安装期间通过
config.json创建) - 你的 PmaControl 实例 URL
- 目标客户端和环境必须已存在(如需要,请先通过 API 创建)
主要端点
POST /fr/api/config/servers
Content-Type: application/json
通过 configuration/webservice.config.php 中配置的 Web 服务账户进行认证。
添加服务器的请求体
{
"id_client": 1,
"id_environment": 1,
"name": "prod-db-01",
"display_name": "Production DB 01",
"ip": "10.68.68.100",
"hostname": "prod-db-01.internal",
"login": "pmacontrol",
"passwd": "SecurePassword123",
"database": "information_schema",
"port": 3306,
"is_ssl": 0,
"ssh_port": 22,
"ssh_login": "pmacontrol",
"is_sudo": 1,
"is_root": 0,
"is_monitored": 1,
"is_proxy": 0,
"is_vip": 0
}
关键字段
| 字段 | 描述 |
|---|---|
id_client |
客户端(组织)标识符 |
id_environment |
环境标识符(生产、预发布等) |
ip |
MySQL 服务器访问 IP 地址 |
port |
MySQL 端口(默认 3306) |
login / passwd |
用于数据采集的 MySQL 凭据 |
is_monitored |
1 = 启用监控,0 = 禁用 |
is_proxy |
1 表示 ProxySQL/MaxScale(连接测试方式不同) |
is_vip |
1 表示 VIP/DNS 条目(不直接连接,跟踪重定向) |
先创建依赖项
在添加服务器之前,客户端和环境必须已存在。
创建客户端
curl -s -X POST http://pmacontrol.local/fr/api/config/clients \
-H "Content-Type: application/json" \
-d '{"name": "68Koncept", "description": "Production infrastructure"}'
创建环境
curl -s -X POST http://pmacontrol.local/fr/api/config/environments \
-H "Content-Type: application/json" \
-d '{"name": "Production", "description": "Live servers"}'
添加 SSH 密钥
curl -s -X POST http://pmacontrol.local/fr/api/config/ssh-keys \
-H "Content-Type: application/json" \
-d '{"name": "deploy-key", "private_key": "-----BEGIN RSA PRIVATE KEY-----\n..."}'
批量添加脚本
#!/bin/bash
PMAC="http://pmacontrol.local"
CLIENT_ID=1
ENV_ID=1
SERVERS=(
"prod-db-01:10.68.68.100:3306"
"prod-db-02:10.68.68.101:3306"
"prod-db-03:10.68.68.102:3306"
"prod-proxy-01:10.68.68.200:6033"
)
for entry in "${SERVERS[@]}"; do
IFS=: read -r name ip port <<< "$entry"
is_proxy=0
[[ "$name" == *proxy* ]] && is_proxy=1
curl -s -X POST "$PMAC/fr/api/config/servers" \
-H "Content-Type: application/json" \
-d "{
\"id_client\": $CLIENT_ID,
\"id_environment\": $ENV_ID,
\"name\": \"$name\",
\"display_name\": \"$name\",
\"ip\": \"$ip\",
\"port\": $port,
\"login\": \"pmacontrol\",
\"passwd\": \"PmacMonitor2026\",
\"database\": \"information_schema\",
\"is_monitored\": 1,
\"is_proxy\": $is_proxy,
\"ssh_port\": 22,
\"ssh_login\": \"pmacontrol\"
}"
echo " → $name 已添加"
done
列出现有服务器
curl -s http://pmacontrol.local/fr/api/config/servers | jq '.[] | {id, name, ip, is_monitored}'
更新服务器
PUT /fr/api/config/servers/{id}
curl -s -X PUT http://pmacontrol.local/fr/api/config/servers/5 \
-H "Content-Type: application/json" \
-d '{"is_monitored": 0}'
删除服务器
删除是软删除(is_deleted = 1)。服务器从界面上消失,但保留在数据库中:
curl -s -X DELETE http://pmacontrol.local/fr/api/config/servers/5
使用标签组织服务器
标签让你可以对服务器进行分类(数据中心、角色、版本):
curl -s -X POST http://pmacontrol.local/fr/api/config/tags \
-H "Content-Type: application/json" \
-d '{"name": "dc-paris", "description": "Paris datacenter"}'
添加后的验证
添加后,如果 is_monitored = 1,PmaControl 会自动开始采集。在界面中检查:
- 服务器出现在
Server > Main中 - Dot3 拓扑在下一个周期更新
- 首批指标在 60 秒内到达
OpenAPI 规范
PmaControl 暴露其完整的 OpenAPI 规范:
GET /fr/api/openApi
可与 Swagger UI 配合使用,或用于自动生成 SDK 客户端。
总结
PmaControl 的 REST API 将服务器添加从手动任务转变为可脚本化、可重复的操作。结合 Ansible 或 Terraform,它为 MariaDB / MySQL 监控实现了基础设施即代码的方法。
评论 (0)
暂无评论。
发表评论