菜单
Enterprise Open source

从 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 的要求
  • 仅适用于插件、报告和播放列表:命令行工具 curljq

将 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 资源(例如仪表盘)功能和显示的组成部分。

  1. 要检索 Grafana OSS/Enterprise 实例中安装的插件,请向 /api/plugins 端点发出 HTTP GET 请求。使用以下 Shell 命令

    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 文件中。
  2. 要在 Grafana Cloud 实例中导入插件,请执行以下命令。此命令构建一个 HTTP POST 请求,目标是 https://grafana.org.cn/api/instances/<stack_slug>/plugins

    shell
    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 请求的响应,以便您确认或了解发生的任何问题。

迁移已作为代码供给的资源

如果您已经使用 TerraformAnsibleGrafana 的 HTTP API 等工具向 Grafana 供给资源,只需将目标重定向到新的 Grafana Cloud 实例,替换 Grafana URL 和凭证即可。

使用 Grizzly 迁移仪表盘、文件夹、数据源、库面板和告警规则

Grizzly 是一个命令行工具,可以简化处理 Grafana 资源。使用它来迁移您 Grafana 实例中的大部分内容。请按照以下步骤在终端中安装 Grizzly。如果您需要更改操作系统或架构,请参阅 Grizzly 的 发布版本,并根据您的需求使用相应的二进制文件。

shell
# 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

首先,在您的计算机上创建一个新文件夹并导航到该文件夹,以便整理您的工作。

shell
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 您将使用哪些实例,请使用以下命令

shell
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 命令获取要迁移的资源

shell
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 上下文,并使用以下命令将资源应用到配置的实例

shell
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)

  1. 要导出您的报告,您需要调用 Grafana OSS/Enterprise 实例的 api/reports 端点。下面的 Shell 命令通过使用 curl 向端点发送请求来完成此操作,然后将检索到的报告配置存储在名为 reports.json 的文件中。

    shell
    curl ${GRAFANA_ONPREM_INSTANCE_URL}/api/reports -H "Authorization: Bearer $GRAFANA_SOURCE_TOKEN" > reports.json
  2. 要将保存在 reports.json 文件中的配置数据上传到新的 Grafana Cloud 实例,请运行以下命令。该命令将获取本地文件 reports.json 并将其内容推送到您的 Grafana Cloud 实例的 api/reports 端点。

    shell
    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

播放列表

  1. 要从 Grafana OSS/Enterprise 实例中检索播放列表,请向 /api/playlists 端点发出 HTTP GET 请求。使用以下 Shell 命令

    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 的目录中
  2. 要导入播放列表,请执行以下命令。此命令构建一个 HTTP POST 请求,目标是您的 Grafana Cloud 实例的 /api/playlists 端点。

    shell
    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 支持工程师进行自定义。

支持团队可以通过以下方式进行自定义

请注意,Grafana Cloud 不支持以下自定义配置

如果您在 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:现成的集成,使监控基础设施和应用程序更加简单。