从 Grafana OSS/Enterprise 手动迁移到 Grafana Cloud
本迁移指南旨在帮助 Grafana OSS/Enterprise 用户手动无缝迁移到 Grafana Cloud。
注意
目前尚无从自行管理数据库向 Grafana Cloud 导入现有数据的标准方法。
提示
您可以使用 Grafana Cloud Migration Assistant(Grafana v12 中普遍可用)来自动将您的资源迁移到 Grafana Cloud。
规划并执行手动迁移
如果您需要迁移 Grafana Cloud Migration Assistant 不支持的资源,可以按照本指南手动迁移。除了以下文档中的技术迁移外,将团队从 Grafana OSS/Enterprise 手动迁移到 Grafana Cloud 还需要一些协调和沟通。
如果您是现有的 Grafana OSS/Enterprise 客户,请联系 Grafana Labs 的客户团队,规划过渡期、安排许可证,并了解 Grafana Cloud 订阅与 Grafana OSS/Enterprise 相比的费用。客户团队还可以提供具体指导,并在需要时安排专业服务来协助您进行迁移。
请访问 Grafana Labs Trust Center 评估 Grafana Cloud 的安全和合规策略。
您可以在迁移整个组织之前,选择在 Grafana Cloud 中测试一段时间。为此,请在 Cloud 中设置一个“测试”堆栈,并先将资源迁移到那里。如果您使用 Grafana Alerting,请确保设置不同的联系点,以免告警重复触发。
当您决定迁移时,预留一天的切换时间,在此期间用户不应创建新的仪表盘或告警。迁移所有新创建的资源,在 Cloud 中打开生产环境的 Alerting 联系点和通知策略,并在 Grafana OSS/Enterprise 中关闭它们,然后通知您的用户。您还可以选择将 Grafana OSS/Enterprise 的 URL 重定向到您的 Grafana Cloud URL。
组件 | 迁移工作量 | 备注 |
---|---|---|
文件夹 | 低 | |
仪表盘 | 低 | 数据源引用可能需要重命名 |
告警 | 中 | 基于数据源的告警可能需要调整 |
插件 | 中 | 取决于插件的功能集 |
数据源 | 高 | 如果数据源引用任何密钥,您需要重新提供 |
开始之前
确保您具备以下条件
- 一个 Grafana Cloud Stack 以及一台 Linux 机器(或可工作的 WSL2 安装)来运行本指南中的代码片段。
- 对 Grafana Cloud 堆栈的管理员权限。要检查您的访问级别,请访问
https://grafana.org.cn/orgs/<your-org-name>/members
- 对现有 Grafana OSS/Enterprise 实例的管理员权限。要检查您的访问级别,请访问
https://<grafana-onprem-url>/admin/users
- 访问用于连接到数据源的凭证。例如,API 密钥或用户名和密码。由于此信息已加密,无法从一个实例复制到另一个实例。
- 如果您的某些数据源只能从您的网络内部访问,请参阅 Private Data Source Connect 的要求
- 仅适用于插件、报告和播放列表:命令行工具 curl 和 jq
将 Grafana OSS/Enterprise 升级到最新版本
Grafana Cloud 堆栈通常运行最新版本的 Grafana。为了避免迁移过程中出现问题,请按照我们的指南 此处 升级 Grafana。
迁移 Grafana 资源
在本指南中,“资源”一词指您在 Grafana 中创建的对象,如仪表盘、文件夹、告警、数据源和权限。
迁移过程通过从旧的 Grafana 实例中拉取现有资源(如仪表盘和文件夹),必要时进行修改,然后将它们推送到新的 Grafana Cloud 实例来完成。
在本迁移指南中提供的代码片段中,您需要将特定的占位符替换为您的实际凭证和实例 URL。在执行脚本之前进行以下替换
$GRAFANA_SOURCE_TOKEN
替换为您 Grafana OSS/Enterprise 实例的访问令牌。$GRAFANA_DEST_TOKEN
替换为您 Grafana Cloud 实例的访问令牌。$GRAFANA_ONPREM_INSTANCE_URL
替换为您 Grafana OSS/Enterprise 实例的 URL。例如:https://grafana.mydomain.com
$GRAFANA_CLOUD_INSTANCE_URL
替换为您 Grafana Cloud 实例的 URL。例如:https://myorganization.grafana.net
迁移 Grafana 插件
迁移插件是从 Grafana OSS/Enterprise 过渡到 Grafana Cloud 的第一步,因为插件是影响其他 Grafana 资源(例如仪表盘)功能和显示的组成部分。
要检索 Grafana OSS/Enterprise 实例中安装的插件,请向
/api/plugins
端点发出 HTTP GET 请求。使用以下 Shell 命令response=$(curl -s -H "Accept: application/json" -H "Authorization: Bearer $GRAFANA_SOURCE_TOKEN" "${GRAFANA_ONPREM_INSTANCE_URL}/api/plugins") plugins=$(echo $response | jq '[.[] | select(.signatureType == "community" or (.signatureType != "internal" and .signatureType != "")) | {name: .id, version: .info.version}]') echo "$plugins" > plugins.json
上述命令将向该端点执行 HTTP 请求并完成以下几项任务
- 它向您的 Grafana OSS/Enterprise 实例的
/api/plugins
端点发出 GET 请求,以检索已安装插件列表。 - 它过滤列表以仅包含社区插件和由外部方签名的插件。
- 它提取插件 ID 和版本,然后将其存储在
plugins.json
文件中。
- 它向您的 Grafana OSS/Enterprise 实例的
要在 Grafana Cloud 实例中导入插件,请执行以下命令。此命令构建一个 HTTP POST 请求,目标是
https://grafana.org.cn/api/instances/<stack_slug>/plugins
CLOUD_INSTANCE=$GRAFANA_CLOUD_INSTANCE_URL stack_slug="${CLOUD_INSTANCE#*//}" stack_slug="${stack_slug%%.*}" jq -c '.[]' plugins.json | while IFS= read -r plugin; do name=$(echo "$plugin" | jq -r '.name') version=$(echo "$plugin" | jq -r '.version') echo "Adding plugin $name with version $version to stack $stack_slug" response=$(curl -s -X POST "https://grafana.org.cn/api/instances/$stack_slug/plugins" \ -H "Authorization: Bearer <GRAFANA_CLOUD_ACCESS_TOKEN>" \ -H "Content-Type: application/json" \ -d "{\"plugin\": \"$name\", \"version\": \"$version\"}") echo "POST response for plugin $name version $version: $response" done
将
<GRAFANA_CLOUD_ACCESS_TOKEN>
替换为您的 Grafana Cloud Access Policy Token。要创建一个新令牌,请参阅 Grafana Cloud 访问策略文档此脚本遍历
plugins.json
文件中列出的每个插件- 它为每个插件构建一个 POST 请求,将其添加到指定的 Grafana Cloud 实例。
- 它报告每个 POST 请求的响应,以便您确认或了解发生的任何问题。
迁移已作为代码供给的资源
如果您已经使用 Terraform、Ansible 或 Grafana 的 HTTP API 等工具向 Grafana 供给资源,只需将目标重定向到新的 Grafana Cloud 实例,替换 Grafana URL 和凭证即可。
使用 Grizzly 迁移仪表盘、文件夹、数据源、库面板和告警规则
Grizzly 是一个命令行工具,可以简化处理 Grafana 资源。使用它来迁移您 Grafana 实例中的大部分内容。请按照以下步骤在终端中安装 Grizzly。如果您需要更改操作系统或架构,请参阅 Grizzly 的 发布版本,并根据您的需求使用相应的二进制文件。
# download the binary (adapt os and arch as needed)
$ curl -fSL -o "/usr/local/bin/grr" "https://github.com/grafana/grizzly/releases/download/v0.3.1/grr-linux-amd64"
# make it executable
$ chmod a+x "/usr/local/bin/grr"
# have fun :)
$ grr --help
首先,在您的计算机上创建一个新文件夹并导航到该文件夹,以便整理您的工作。
mkdir grafana-migration
cd grafana-migration
为了让 Grizzly 访问您的 Grafana OSS/Enterprise 实例和 Grafana Cloud 实例,您需要在这两个实例上创建一个服务账户和一个相应的访问令牌。您可以使用这些令牌来验证拉取和推送资源的请求。请按照以下步骤在您的 Grafana OSS/Enterprise 实例上操作
- 在 Grafana OSS/Enterprise 实例中导航到 Administration -> Users and access -> Service Accounts 页面。
- 点击 Add Service Account
- 为服务账户指定一个描述性名称,例如“grizzly-migration”,并应用 Admin 角色。
- 创建账户后,点击 Add Service Account Token
- 输入令牌名称
- 选择 Set expiration date 并输入令牌过期日期
- 点击 Generate Token,并将此令牌保存在密码管理器或其他安全位置。
按照上述步骤为您的 Grafana OSS/Enterprise 实例完成 Grafana Cloud 实例的服务账户创建和令牌生成过程。这确保了 Grizzly 具有两个平台所需的访问令牌。
接下来,要告诉 grizzly 您将使用哪些实例,请使用以下命令
grr config create-context grafana-onprem
grr config use-context grafana-onprem
grr config set output-format json
grr config set grafana.url $GRAFANA_ENT_INSTANCE_URL
grr config set grafana.token $GRAFANA_SOURCE_TOKEN
grr config create-context grafana-cloud
grr config use-context grafana-cloud
grr config set output-format json
grr config set grafana.url $GRAFANA_CLOUD_INSTANCE_URL
grr config set grafana.token $GRAFANA_DEST_TOKEN
之后,您将设置两个上下文;一个用于本地 Grafana OSS/Enterprise 安装,一个用于 Grafana Cloud。grr config use-context
命令允许您在使用 Grizzly 时在两个实例之间切换。
导出现有资源
切换到 grafana-onprem
上下文,使用 pull 命令获取要迁移的资源
grr config use-context grafana-onprem
grr pull . \
-t 'Dashboard/*' \
-t 'Datasource/*' \
-t 'DashboardFolder/*' \
-t 'LibraryElement/*' \
-t 'AlertRuleGroup/*' \
-t 'AlertContactPoint/*' \
-t 'AlertNotificationPolicy/*'
这将从 Grafana 中获取指定的资源,并将其存储在当前目录中。
将资源推送到您的 Grafana Cloud 堆栈
一切就绪后,切换到 Grafana Cloud 上下文,并使用以下命令将资源应用到配置的实例
grr config use-context grafana-cloud
grr apply . -t 'DashboardFolder/*'
grr apply . -t 'LibraryElement/*'
grr apply . -t 'Datasource/*'
grr apply . -t 'Dashboard/*'
grr apply . -t 'AlertRuleGroup/*'
grr apply . -t 'AlertContactPoint/*'
grr apply . -t 'AlertNotificationPolicy/*'
填写数据源凭证
迁移数据源后,您必须填写它们的凭证,例如令牌、用户名或密码。出于安全原因,Grizzly 无法从现有 Grafana 实例读取加密的数据源凭证。
要填写缺失的身份验证信息,请前往新 Grafana Cloud 实例中的 Connections -> Datasources 页面,并验证所有数据源的凭证是否已设置。您可以跳过以 grafanacloud
开头的数据源 - 这些数据源由 Grafana Cloud 直接管理,并提供对 Grafana Cloud 数据库的访问。
如果您的某个数据源只能从内部网络访问,请参阅 Private Data Source Connect 文档。
配置完数据源后,所有仪表盘应与之前一样可用。
(可选)配置 Private Data Source Connect (PDC)
此步骤仅适用于您使用 Grafana OSS/Enterprise 访问网络安全的数据源。
某些数据源(如 Prometheus 或 SQL 数据库)位于 Grafana Cloud 无法访问的私有网络上或防火墙规则后。如果您的 Grafana OSS/Enterprise 实例与数据源托管在同一网络中,您可能会发现 Grafana Cloud 无法连接到 Grafana OSS/Enterprise 可以访问的所有相同数据源。
要从 Grafana Cloud 访问这些数据源,请按照我们的指南 在您的网络中配置 PDC,然后配置适用的 Grafana 数据源以 使用 PDC 连接。请注意,PDC 仅适用于您的网络安全数据源,不适用于通过公共互联网访问的数据源(如 Splunk 或 CloudWatch)。
有关 PDC 工作原理的更多信息,请参阅我们的概览文档。
使用 Grafana 的 HTTP API 迁移报告和播放列表
Grizzly 目前不支持报告和播放列表作为资源,因此您可以使用 Grafana 的 HTTP API 和 curl
命令执行此迁移。
报告 (仅适用于 Grafana Enterprise)
要导出您的报告,您需要调用 Grafana OSS/Enterprise 实例的
api/reports
端点。下面的 Shell 命令通过使用curl
向端点发送请求来完成此操作,然后将检索到的报告配置存储在名为reports.json
的文件中。curl ${GRAFANA_ONPREM_INSTANCE_URL}/api/reports -H "Authorization: Bearer $GRAFANA_SOURCE_TOKEN" > reports.json
要将保存在
reports.json
文件中的配置数据上传到新的 Grafana Cloud 实例,请运行以下命令。该命令将获取本地文件reports.json
并将其内容推送到您的 Grafana Cloud 实例的api/reports
端点。jq -M -r -c '.[]' < reports.json | while read -r json; do curl -XPOST ${GRAFANA_CLOUD_INSTANCE_URL}/api/reports -H"Authorization: Bearer $GRAFANA_DEST_TOKEN" -d"$json" -H 'Content-Type: application/json'; done
播放列表
要从 Grafana OSS/Enterprise 实例中检索播放列表,请向
/api/playlists
端点发出 HTTP GET 请求。使用以下 Shell 命令mkdir playlists curl "${GRAFANA_ONPREM_INSTANCE_URL}/api/playlists" \ -H "Authorization: Bearer $GRAFANA_SOURCE_TOKEN" \ | jq -M -r -c '.[] | .uid' \ | while read -r uid; do \ curl "${GRAFANA_ONPREM_INSTANCE_URL}/api/playlists/$uid" \ -H "Authorization: Bearer $GRAFANA_SOURCE_TOKEN" \ > playlists/$uid.json; \ done
上述命令将向该端点执行 HTTP 请求并完成以下几项任务
- 它获取 Grafana OSS/Enterprise 实例中所有可用播放列表的数组。
- 然后,它遍历每个播放列表以获取完整的详细信息。
- 最后,它将每个播放列表的规范作为单独的 JSON 文件存储在名为
playlists
的目录中
要导入播放列表,请执行以下命令。此命令构建一个 HTTP POST 请求,目标是您的 Grafana Cloud 实例的
/api/playlists
端点。for playlist in playlists/*; do curl -XPOST "${GRAFANA_CLOUD_INSTANCE_URL}/api/playlists" \ -H "Authorization: Bearer $GRAFANA_DEST_TOKEN" \ -H "Content-Type: application/json" \ -d $playlist > /dev/null; done
迁移单点登录配置
Grafana Cloud 堆栈支持与 Grafana OSS/Enterprise 相同的所有身份验证和授权选项,但 匿名身份验证 和使用 身份验证代理 除外。但是,单点登录设置无法像仪表盘、告警和其他资源一样导出和导入。
要使用 Grafana 的 UI 或 API 从头开始设置 SAML 身份验证,请按照 这些说明 在 Grafana 中配置 SAML 身份验证。
LDAP 和 OIDC/OAuth2 只能由 Grafana Labs 支持团队在 Grafana Cloud 中配置。请按照 这些说明 向支持团队请求 SSO 配置。
迁移自定义 Grafana 配置
您可能已自定义了 Grafana OSS/Enterprise 实例的配置,例如功能开关、自定义认证或嵌入选项。由于 Grafana 配置存储在 Grafana 运行的环境变量或文件系统中,Grafana Cloud 用户无权访问。但是,您可以提交支持工单,请 Grafana Labs 支持工程师进行自定义。
支持团队可以通过以下方式进行自定义
- 启用功能开关。
- 使用 SAML、LDAP 或 OAuth 实现单点登录和团队同步.
- 为 Grafana Cloud 合同客户启用在其他应用程序中嵌入 Grafana 仪表盘。
- 审计日志 (Usage insights logs and dashboards 在 Grafana Cloud Pro 和 Advanced 版本中默认可用)。
请注意,Grafana Cloud 不支持以下自定义配置
- 匿名用户访问.
- 身份验证代理.
- 第三方数据库加密 以及 Hashicorp Vault 集成。
- 运行自签名插件,如自定义构建的数据源或可视化。有关插件签名的更多信息,请参阅我们的开发者文档。
如果您在 Grafana OSS/Enterprise 中有此处未列出的自定义配置,请联系我们的支持团队,了解他们是否可以帮助您进行设置。
后续步骤
成功迁移 Grafana OSS/Enterprise 的资源和配置后,请考虑以下步骤来增强您的监控体验
- Grafana Cloud 入门:了解 Grafana Cloud 中提供的功能,这些功能在开源版或企业版中不可用。请参阅Grafana Cloud 入门以了解更多信息
- AWS PrivateLink for Grafana Cloud:在 AWS 网络内部安全地将遥测数据从 AWS 虚拟私有云 (VPC) 传输到 Grafana Cloud。了解如何使用 AWS PrivateLink Integration 进行设置。
- Azure PrivateLink for Grafana Cloud:在 Azure 网络内部安全地将遥测数据从 Azure 虚拟网络传输到 Grafana Cloud,避免流量暴露到公共互联网。了解如何使用 AWS PrivateLink Integration 进行设置。
- Grafana Integrations:现成的集成,使监控基础设施和应用程序更加简单。