PmaControl logo PmaControl
  • 首页
  • PmaControl
    • AI智能代理 13个本地代理
    • 定价方案 Community、Cloud、On-Premise、Premium
    • 文档 指南、API、架构
    • 客户 28+企业
    • 常见问题 25个问题 / 7个类别
    数据库
    • MariaDB 30 篇文章
    • MySQL 10 篇文章
    • Galera Cluster 6 篇文章
    • MaxScale 3 篇文章
    • ProxySQL 2 篇文章
    • Amazon Aurora MySQL 0 篇文章
    • Azure Database 0 篇文章
    • ClickHouse 0 篇文章
    • GCP CloudSQL 0 篇文章
    • Percona Server 0 篇文章
    • SingleStore 0 篇文章
    • TiDB 0 篇文章
    • Vitess 0 篇文章
    解决方案
    • 全天候支持 MariaDB & MySQL紧急支持
    • Observabilité SQL 监控、告警、拓扑
    • Haute disponibilité 复制、故障转移、Galera
    • Disaster Recovery 备份、恢复、RPO/RTO
    • Sécurité & conformité 审计、GDPR、SOC2
    • Migration & upgrade 零停机、pt-osc、gh-ost
  • 定价方案
  • 资源
    • 文档 技术指南与API
    • 常见问题 25个常见问题
    • 客户评价 客户反馈与案例
    • 博客 文章与洞察
    • 路线图 即将推出的功能
    专业领域
    • Observabilité SQL 监控、告警、Dot3拓扑
    • Haute disponibilité 复制、故障转移、Galera
    • Sécurité & conformité 审计、GDPR、SOC2、ISO 27001
    • Disaster Recovery 备份、恢复、RPO/RTO
    • Performance & optimisation Digests、EXPLAIN、调优
    • Migration & upgrade 零停机、pt-osc
    快速链接
    • GitHub Wiki 26页 — 安装、引擎、插件
    • 源代码 GitHub官方仓库
    • 全天候支持 MariaDB & MySQL紧急支持
    • 预约演示 30分钟 — 真实架构
  • 全天候支持
  • 预约演示
预约演示
🇫🇷 FR Français 🇬🇧 EN English 🇵🇱 PL Polski 🇷🇺 RU Русский 🇨🇳 ZH 中文
← 返回博客

通过 Web 服务自动向 PmaControl 添加 MariaDB / MySQL 服务器

发布于 2026年4月13日 作者 Aurélien LEQUOY
pmacontrol rest-api automation devops webservice
分享 X LinkedIn Facebook Email PDF
通过 Web 服务自动向 PmaControl 添加 MariaDB / MySQL 服务器

为什么要自动化服务器添加

当你监控 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 会自动开始采集。在界面中检查:

  1. 服务器出现在 Server > Main 中
  2. Dot3 拓扑在下一个周期更新
  3. 首批指标在 60 秒内到达

OpenAPI 规范

PmaControl 暴露其完整的 OpenAPI 规范:

GET /fr/api/openApi

可与 Swagger UI 配合使用,或用于自动生成 SDK 客户端。

总结

PmaControl 的 REST API 将服务器添加从手动任务转变为可脚本化、可重复的操作。结合 Ansible 或 Terraform,它为 MariaDB / MySQL 监控实现了基础设施即代码的方法。

分享 X LinkedIn Facebook Email PDF
← 返回博客

评论 (0)

暂无评论。

发表评论

PmaControl
+33 6 63 28 27 47 contact@pmacontrol.com
法律声明 GitHub 联系我们
不要等到故障发生才了解您的架构。 © 2014-2026 PmaControl — 68Koncept