
Grafana 是一个开源的分析和监控平台,以其强大的数据可视化能力而闻名。无论您的数据存储在何处,Grafana 都能将其转换为精美的图表和仪表板。 Grafana 的核心优势在于其灵活性和开放性,支持多种数据源,包括 Prometheus、InfluxDB、MySQL、Elasticsearch 等,让用户能够打破数据孤岛,统一查看和分析来自不同系统的监控指标。
Grafana 的设计哲学是"数据首先",它不关心数据来自何处,只关心如何以最直观的方式呈现数据。这种理念使得 Grafana 成为现代云原生监控体系中的可视化层标准选择。从简单的系统监控到复杂的业务指标分析,Grafana 都能提供出色的可视化解决方案。
Grafana 提供了一系列强大功能,使其在监控领域脱颖而出:
在现代监控体系中,Grafana 通常作为可视化层,与数据收集层(如 Telegraf、Node Exporter)和存储层(如 Prometheus、InfluxDB)共同构成完整的监控解决方案:
典型监控栈组成:
这种分层架构使得每个组件可以专注于自己的核心功能,Grafana 则扮演着最终用户界面的角色,将底层复杂的监控数据转化为易于理解的视觉信息,帮助运维人员、开发人员和管理者快速掌握系统状态。
在部署 Grafana 之前,需要确保 Ubuntu Server 满足以下最低系统要求:
硬件要求:
软件要求:
对于生产环境,建议使用专用虚拟机或物理服务器,并配置定期备份策略,特别是对 Grafana 的配置文件和应用数据。
在安装 Grafana 之前,需要对 Ubuntu Server 进行基本的初始化配置:
更新系统包:
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common创建专用用户(可选但推荐):
sudo useradd -r -s /bin/false grafana配置防火墙规则:
sudo ufw allow 3000/tcp # Grafana 默认端口
sudo ufw allow 22/tcp # SSH 访问
sudo ufw enable优化系统参数:
对于高负载场景,可能需要调整系统参数,编辑 /etc/sysctl.conf:
# 增加网络缓冲区大小
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
# 增加文件描述符限制
fs.file-max = 100000执行 sudo sysctl -p 使配置生效。
如果选择使用 Docker 部署 Grafana,需要先在 Ubuntu Server 上安装 Docker 环境:
安装 Docker:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install -y docker-ce配置 Docker 守护进程:
sudo systemctl enable docker
sudo systemctl start docker将用户添加到 docker 组(避免每次使用 sudo):
sudo usermod -aG docker $USER
# 重新登录使更改生效安装 Docker Compose(可选,用于复杂部署):
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose完成以上步骤后,Ubuntu Server 环境就已经准备就绪,可以选择适合的方式安装 Grafana 了。
在 Ubuntu Server 上安装 Grafana 有多种方法,每种方法都有其适用场景:
安装方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
Docker 部署 | 隔离性好,部署简单,版本管理灵活 | 需要额外的容器管理 | 开发、测试和生产环境 |
APT 包安装 | 与系统集成度高,管理方便 | 版本可能较旧 | 生产环境,偏好系统服务管理 |
二进制包安装 | 灵活,不依赖包管理器 | 需要手动配置服务 | 特殊需求环境 |
源码编译 | 可定制性最强 | 复杂,耗时 | 定制化开发 |
对于大多数场景,Docker 部署和APT 包安装是推荐的方式,下面将详细介绍这两种方法。
Docker 部署提供了最佳的环境一致性和隔离性,以下是详细的部署步骤:
拉取官方镜像:
docker pull grafana/grafana:latest创建持久化数据目录:
sudo mkdir -p /docker/grafana/{data,config,logs}
sudo chmod -R 777 /docker/grafana/data # 确保容器有写入权限运行 Grafana 容器:
docker run -d \
--name=grafana \
--restart=always \
-p 3000:3000 \
-v /docker/grafana/data:/var/lib/grafana \
-v /docker/grafana/config:/etc/grafana \
-v /docker/grafana/logs:/var/log/grafana \
-e "GF_SECURITY_ADMIN_PASSWORD=mysecurepassword" \
grafana/grafana:latest关键参数说明:
--restart=always:容器异常退出时自动重启-v 参数:将容器内数据目录映射到宿主机,实现数据持久化-e 参数:设置环境变量,这里配置了管理员密码使用 Docker Compose 部署(推荐):
创建 docker-compose.yml 文件:
version: '3.8'
services:
grafana:
image: grafana/grafana:latest
container_name: grafana
restart: unless-stopped
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=mysecurepassword
- GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource
volumes:
- /docker/grafana/data:/var/lib/grafana
- /docker/grafana/config:/etc/grafana
- /docker/grafana/logs:/var/log/grafana
networks:
- grafana-net
networks:
grafana-net:
driver: bridge启动服务:
docker-compose up -d对于偏好原生系统集成的用户,可以使用 APT 包管理安装 Grafana:
添加 Grafana APT 仓库:
sudo apt-get install -y software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list安装 Grafana:
sudo apt-get update
sudo apt-get install grafana配置系统服务:
sudo systemctl enable grafana-server
sudo systemctl start grafana-server
sudo systemctl status grafana-server # 验证服务状态验证安装:
访问 http://your-server-ip:3000,使用默认凭证(admin/admin)登录,系统会提示立即修改密码。
安装完成后,需要进行重要的安全配置和基本设置:
修改默认密码:
首次登录后,立即修改 admin 用户的默认密码,这是最基本的安全措施。
配置 Grafana.ini:
主要配置文件通常位于 /etc/grafana/grafana.ini(APT 安装)或容器内的 /etc/grafana/grafana.ini,关键配置项包括:
[server]
# 配置访问域名或 IP
domain = your-domain.com
# 强制使用 HTTPS(生产环境推荐)
protocol = https
# 修改 HTTP 端口(可选)
http_port = 3000
[database]
# 配置外部数据库(默认使用内嵌 SQLite)
type = postgres
host = localhost:5432
name = grafana
user = grafana
password = yourpassword
[security]
# 加强安全设置
disable_gravatar = false
allow_embedding = false
[smtp]
# 配置邮件服务器(用于告警通知)
enabled = true
host = smtp.your-company.com:587
user = your-username
password = your-password配置数据备份:
Grafana 的重要数据包括:
grafana.ini/var/lib/grafana/plugins(APT)或容器映射目录设置定期备份策略:
# 备份配置和数据
tar -czf grafana-backup-$(date +%Y%m%d).tar.gz /etc/grafana/grafana.ini /var/lib/grafana完成以上步骤后,Grafana 就已经基本安装配置完成,可以开始连接数据源和创建仪表板了。
Prometheus 是 Grafana 最常用的数据源之一,专门用于存储时间序列数据。以下是详细的配置步骤:
添加 Prometheus 数据源:
配置连接参数:
http://localhost:9090高级配置:
在 "Auth" 部分,如果需要认证可配置:
示例配置验证:
保存后点击 "Save & Test",Grafana 会测试连接并显示结果。绿色成功提示表示配置正确。
配置多个 Prometheus 实例:
在大规模环境中,可能需要连接多个 Prometheus 实例:
InfluxDB 是专为时间序列数据设计的数据库,与 Grafana 结合良好:
添加 InfluxDB 数据源:
配置连接参数:
http://localhost:8086InfluxQL 与 Flux 查询语言:
配置 Telegraf 数据采集:
Telegraf 是 InfluxDB 的官方数据采集器,配置示例:
# /etc/telegraf/telegraf.conf
[[outputs.influxdb]]
urls = ["http://localhost:8086"]
database = "telegraf"
username = "telegraf"
password = "telegraf"
[[inputs.cpu]]
percpu = true
totalcpu = true
collect_cpu_time = false
[[inputs.disk]]
ignore_fs = ["tmpfs", "devtmpfs", "devfs"]Grafana 支持多种数据源,满足不同场景需求:
MySQL/PostgreSQL 数据源:
Elasticsearch 数据源:
Cloud Monitoring 数据源:
Loki 数据源:
权限控制:
性能优化:
监控数据源健康:
通过合理配置和管理数据源,可以为 Grafana 仪表板提供稳定可靠的数据基础,确保监控系统的准确性和实时性。
创建有效的仪表板是 Grafana 的核心用途,以下是详细的创建流程:
创建新仪表板:
配置数据查询:
node_cpu_seconds_total{mode="idle"}选择可视化类型:
Grafana 提供多种可视化选项:
面板配置示例:
创建一个显示 CPU 使用率的面板:
100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)保存仪表板:
掌握高级可视化技巧可以创建更加专业和有用的仪表板:
使用模板变量:
模板变量让仪表板变得交互式,用户可以动态切换显示内容:
示例:创建主机选择变量:
# 变量配置
Name: host
Type: Query
Data source: Prometheus
Query: label_values(node_cpu_seconds_total, instance)在查询中使用变量:node_cpu_seconds_total{instance="$host"}
面板链接与钻取:
重复面板功能:
使用 "Repeat" 功能基于变量值自动创建相似面板:
示例:为每个主机重复 CPU 使用率面板:
$host良好的设计提高仪表板的可读性和实用性:
视觉层次设计:
颜色与样式:
响应式布局:
注释与文档:
Grafana 社区提供了丰富的预建仪表板模板,可以快速部署常用监控视图:
Node Exporter Full(ID:1860):
Import 仪表板模板:
创建自定义模板:
对于企业特定需求,可以创建自定义模板:
通过合理设计和创建仪表板,可以将原始监控数据转化为有意义的业务洞察,帮助团队快速发现和解决问题。
Grafana 的告警系统允许用户基于仪表板数据设置监控规则,在指标异常时自动通知相关人员,是现代监控体系中的重要组成部分。
告警系统架构:
告警状态:
告警评估流程:
通过面板创建告警:
配置告警条件:
# CPU 使用率告警示例
Rule name: High CPU Usage
Evaluate every: 1m
For: 5m
Conditions:
- Query: A
- Reduce: max()
- Condition: IS ABOVE 80多条件告警:
对于复杂场景,可以配置多个条件:
# 高 CPU 且高内存使用率
Condition 1:
- Query A: CPU usage > 80%
Condition 2:
- Query B: Memory usage > 90%
Operator: AND无数据处理:
配置当数据缺失时的处理策略:
Grafana 支持多种通知渠道,确保团队能够及时收到告警:
电子邮件通知:
Contact point type: Email
Addresses: team@company.com
Subject: [{{ .Status }}] {{ .GroupLabels.alertname }}Slack 通知:
Contact point type: Slack
Webhook URL: https://hooks.slack.com/services/...
Message: 自定义告警消息模板Webhook 通知:
Contact point type: Webhook
URL: https://api.chatops.com/alert
HTTP Method: POST其他通知渠道:
合理的告警分级:
避免告警疲劳:
告警路由策略:
根据告警严重性路由到不同团队:
Notification policy tree:
- Match: severity=critical
Contact point: on-call-primary
Group wait: 30s
- Match: severity=warning
Contact point: team-channel
Group wait: 5m
- Default:
Contact point: fallback告警模板定制:
创建有意义的告警消息模板:
{{ define "custom.message" }}
Alert: {{ .GroupLabels.alertname }}
Instance: {{ .GroupLabels.instance }}
Summary: {{ .Annotations.summary }}
Description: {{ .Annotations.description }}
{{ end }}告警复盘与优化:
通过合理配置和管理告警,可以将被动救火转化为主动预防,提高系统稳定性和团队响应效率。
Grafana 的插件系统极大地扩展了其核心功能,允许用户自定义数据源、可视化面板和应用功能。了解插件架构有助于充分利用 Grafana 的扩展能力。
插件类型:
插件管理界面:
通过 Grafana 的 "Plugins" 菜单可以:
插件目录结构:
/var/lib/grafana/plugins/
├── plugin1/
│ ├── README.md
│ ├── plugin.json
│ └── dist/
├── plugin2/
└── ...数据源插件:
面板插件:
应用插件:
命令行安装(Docker 环境):
# 安装特定插件
docker exec -it grafana grafana-cli plugins install <plugin-id>
# 安装指定版本
docker exec -it grafana grafana-cli plugins install <plugin-id> <version>
# 列出已安装插件
docker exec -it grafana grafana-cli plugins lsDocker 启动时安装:
在 docker-compose.yml 中预配置插件:
environment:
- GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource手动安装:
对于不在官方仓库的插件,可以手动安装:
# 将插件文件复制到插件目录
sudo cp -r custom-plugin /var/lib/grafana/plugins/
# 重启 Grafana 服务
sudo systemctl restart grafana-server插件配置:
部分插件需要额外配置,在 "Data Sources" 或 "Plugins" 页面完成:
对于特殊需求,可以开发自定义插件:
开发环境搭建:
# 安装 Grafana Toolkit
npm install -g @grafana/toolkit
# 创建新插件
npx @grafana/toolkit plugin:create my-plugin
cd my-plugin
# 开发模式运行
npm run dev插件结构:
// 简单面板插件示例
export class MyPanel extends PureComponent<Props> {
render() {
const { data, width, height } = this.props;
return (
<div style={{ width, height }}>
{/* 自定义渲染逻辑 */}
</div>
);
}
}插件发布:
安全考虑:
维护最佳实践:
通过合理利用插件系统,可以极大扩展 Grafana 的功能边界,满足各种特殊监控需求和集成场景。
确保 Grafana 实例本身的健康运行是监控系统可靠性的基础。需要建立完善的自监控体系。
关键监控指标:
/api/health 端点内置指标端点:
Grafana 暴露 Prometheus 格式的指标:
# 访问指标端点
curl http://localhost:3000/metrics
# 示例指标
grafana_active_users 24
grafana_dashboard_views_total 1560
grafana_api_request_duration_seconds_bucket{handler="/api/dashboards/uid",le="0.5"} 134健康检查配置(Docker 环境):
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3000/api/health"]
interval: 30s
timeout: 10s
retries: 3仪表板自监控:
创建专门的 Grafana 监控仪表板:
grafana_* 指标监控自身状态随着数据量和用户数的增长,性能优化变得至关重要:
查询优化:
缓存策略:
# grafana.ini 缓存配置
[database]
# 查询结果缓存
cache_mode = private
[dataproxy]
# 数据代理缓存
logging = true
timeout = 30
keep_alive_seconds = 300
[alerting]
# 告警查询缓存
evaluation_timeout_seconds = 30资源限制:
[server]
# 并发连接限制
max_concurrent_connections = 100
[auth]
# 登录速率限制
login_maximum_inactive_lifetime_days = 7
login_maximum_lifetime_days = 30数据库优化:
对于生产环境,建议使用外部数据库:
[database]
type = postgres
host = localhost:5432
name = grafana
user = grafana
password = xxx
max_idle_conn = 10
max_open_conn = 100
conn_max_lifetime = 14400建立可靠的备份策略防止数据丢失:
关键数据分类:
自动化备份脚本:
#!/bin/bash
# grafana-backup.sh
BACKUP_DIR="/backup/grafana"
DATE=$(date +%Y%m%d)
# 备份配置文件
tar -czf $BACKUP_DIR/grafana-config-$DATE.tar.gz /etc/grafana/
# 备份数据目录(SQLite)
tar -czf $BACKUP_DIR/grafana-data-$DATE.tar.gz /var/lib/grafana/
# 备份插件(可选)
tar -czf $BACKUP_DIR/grafana-plugins-$DATE.tar.gz /var/lib/grafana/plugins/
# 保留最近 30 天备份
find $BACKUP_DIR -name "*.tar.gz" -mtime +30 -delete仪表板自动导出:
使用 Grafana API 自动化导出仪表板:
#!/bin/bash
# dashboard-backup.sh
API_KEY="your-api-key"
GRAFANA_URL="http://localhost:3000"
BACKUP_DIR="/backup/dashboards"
# 获取所有仪表板
DASHBOARDS=$(curl -s -H "Authorization: Bearer $API_KEY" \
"$GRAFANA_URL/api/search?type=dash-db" | jq -r '.[] | .uid')
# 导出每个仪表板
for UID in $DASHBOARDS; do
curl -s -H "Authorization: Bearer $API_KEY" \
"$GRAFANA_URL/api/dashboards/uid/$UID" | jq . > \
"$BACKUP_DIR/dashboard-$UID-$(date +%Y%m%d).json"
done恢复流程:
对于关键业务场景,需要部署高可用架构:
高可用架构设计:
+-----------------+
| Load Balancer |
+-------+---------+
|
+--------------+--------------+
| |
+----------+----------+ +----------+----------+
| Grafana Server A | | Grafana Server B |
| +------------------+| | +------------------+|
| | Shared Database || | | Shared Database ||
| +------------------+| | +------------------+|
+---------------------+ +---------------------+共享数据库配置:
[database]
type = postgres
host = ha-postgresql.local
name = grafana
user = grafana
password = xxx
ssl_mode = verify-full会话存储配置:
[session]
provider = redis
provider_config = addr=redis-server:6379,password=xxx,db=0水平扩展考虑:
通过完善的运维实践和性能优化,可以确保 Grafana 监控平台的稳定性、可靠性和可扩展性,为业务监控提供坚实基础。
Grafana 提供灵活的认证机制,支持多种身份验证方式,确保只有授权用户能够访问监控数据。
基本认证配置:
在 grafana.ini 中配置认证基本设置:
[auth]
# 禁止用户自动注册
disable_signout_menu = false
# 登录令牌生命周期
login_maximum_inactive_lifetime_days = 7
login_maximum_lifetime_days = 30
# API 密钥过期时间
api_key_max_seconds_to_live = -1LDAP/Active Directory 集成:
对于企业环境,推荐集成现有目录服务:
[auth.ldap]
enabled = true
config_file = /etc/grafana/ldap.toml
sync_ttl = 60
# LDAP 服务器配置
[[servers]]
host = "ldap.company.com"
port = 636
use_ssl = true
bind_dn = "cn=admin,dc=company,dc=com"
bind_password = "password"
# 用户搜索配置
search_filter = "(cn=%s)"
search_base_dns = ["dc=company,dc=com"]OAuth 集成:
支持多种 OAuth 提供商,如 GitHub、Google、GitLab:
[auth.github]
enabled = true
client_id = your_client_id
client_secret = your_client_secret
scopes = user:email,read:org
allowed_organizations = company-org
team_ids = 123,456SAML 配置:
对于需要单点登录的企业:
[auth.saml]
enabled = true
certificate_path = /etc/grafana/saml.crt
private_key_path = /etc/grafana/saml.key
idp_metadata_url = https://sso.company.com/federationmetadata/2007-06/federationmetadata.xmlGrafana 提供细粒度的权限控制系统,确保用户只能访问授权的资源。
用户角色体系:
组织与多租户:
Grafana 支持多组织模式,适合服务提供商或大型企业:
# 创建新组织
grafana-cli admin create-organization "TenantA"
# 添加用户到组织
grafana-cli admin users set-org --role Editor username "TenantA"数据源权限控制:
为数据源设置细粒度权限:
文件夹与仪表板权限:
API 密钥管理:
为自动化工具创建专用 API 密钥:
# 创建只读 API 密钥
curl -X POST -H "Content-Type: application/json" \
-d '{"name":"monitoring-script","role":"Viewer"}' \
http://admin:password@localhost:3000/api/auth/keys保护 Grafana 网络访问是安全的重要环节:
HTTPS 强制配置:
[server]
protocol = https
http_port = 3000
domain = grafana.company.com
cert_file = /etc/grafana/ssl/grafana.crt
cert_key = /etc/grafana/ssl/grafana.key
# 强制 HTTPS 重定向
enforce_domain = true
root_url = https://grafana.company.com安全头部配置:
[security]
# 安全相关 HTTP 头部
strict_transport_security = true
strict_transport_security_max_age_seconds = 31536000
strict_transport_security_preload = true
strict_transport_security_subdomains = true
x_content_type_options = true
x_xss_protection = true网络访问控制:
审计日志:
启用详细日志记录安全事件:
[log]
mode = file
level = info
filters = security:debug
[audit]
enabled = true
logs = /var/log/grafana/audit.log敏感数据保护:
合规性配置:
[security]
# GDPR 和相关合规支持
disable_gravatar = true
cookie_samesite = lax
allow_embedding = false
[users]
# 用户数据管理
allow_sign_up = false
auto_assign_org = false
auto_assign_org_role = Viewer定期安全评估:
通过全面的安全配置和权限管理,可以确保 Grafana 平台在提供强大监控能力的同时,满足企业安全标准和合规要求。
在云原生环境中,Grafana 与 Prometheus 等技术栈共同构成完整的监控解决方案。
Kubernetes 集群监控:
部署架构:
+-------------------+ +-----------------+ +---------------+
| Kubernetes Cluster|--->| Prometheus Stack|--->| Grafana |
+-------------------+ +-----------------+ +---------------+
| | |
+------------+ +-------------+ +-----------+
| Node | | Various | | Alerting |
| Exporters | | Exporters | | & Display|
+------------+ +-------------+ +-----------+关键组件:
配置示例:
# prometheus.yml
global:
scrape_interval: 30s
scrape_timeout: 30s
scrape_configs:
- job_name: 'kubernetes-nodes'
kubernetes_sd_configs:
- role: node
relabel_configs:
- source_labels: [__address__]
regex: '(.*):10250'
replacement: '${1}:9100'
target_label: __address__
action: replace微服务监控:
对于大型企业,需要建立统一监控门户,整合多个数据源和团队需求。
多团队协作模式:
+-----------------+
| Central Grafana |
+-------+---------+
|
+-----------------------+-----------------------+
| | |
+--------------+ +--------------+ +--------------+
| DevOps Team | | Dev Team | | Ops Team |
+--------------+ +--------------+ +--------------+
| - K8s监控 | | - 应用性能 | | - 基础设施 |
| - CI/CD流水线| | - 业务指标 | | - 网络监控 |
+--------------+ +--------------+ +--------------+数据源整合策略:
企业级功能:
Grafana 不仅限于基础设施监控,还可以用于业务指标监控和应用性能管理。
关键业务指标:
应用性能监控:
集成 APM 工具数据:
自定义业务仪表板:
-- 业务指标查询示例(MySQL)
SELECT
DATE(created_at) as date,
COUNT(*) as orders,
SUM(total_amount) as revenue
FROM orders
WHERE created_at >= NOW() - INTERVAL 7 DAY
GROUP BY DATE(created_at)
ORDER BY date DESC利用 Grafana 的机器学习功能实现预测性监控和异常检测。
Grafana ML 功能:
配置异常检测:
# 机器学习任务配置
apiVersion: 1
machine_learning:
- name: "CPU Usage Anomaly Detection"
metric: "cpu_usage_percent"
datasource: "prometheus"
interval: "5m"
sensitivity: 0.8自定义检测规则:
对于特定业务场景,可以定义定制化检测规则:
# 伪代码:业务异常检测
def detect_business_anomaly():
current_orders = get_current_order_count()
predicted_orders = get_predicted_order_count()
deviation = (current_orders - predicted_orders) / predicted_orders
if abs(deviation) > 0.3: # 30% 偏差
trigger_alert("业务量异常波动")AIOps 集成:
通过在不同场景中合理应用 Grafana,可以构建出既满足技术监控需求,又支持业务决策的全面监控体系。
Grafana 作为现代化的监控可视化平台,与 Ubuntu Server 的结合为企业提供了强大而灵活的监控解决方案。从基础安装到高级应用,从技术监控到业务洞察,Grafana 都能够发挥重要作用。
核心价值总结:
成功要素:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。