You need to enable JavaScript to run this app.
导航

存量标准版实例数据迁移说明

最近更新时间2023.05.05 16:10:33

首次发布时间2023.04.27 10:52:08

背景

托管 Prometheus 服务正式计费之前,为您提供的免费标准版实例 vmp.standard.30d 将在正式计费之后对自定义指标和云服务基础指标进行收费。

为了满足您对云基础指标的免费使用需求,托管 Prometheus 服务新推出 vmp.standard.15d 规格实例,并为您继续提供云服务基础指标的免费策略。如果您的存量实例(vmp.standard.30d)需要继续享受此免费策略,需要将旧的 vmp.standard.30d 规格实例的数据迁移到新推出的 vmp.standard.15d 规格实例中。本文为您介绍如何完成不同规格实例间的数据迁移。

说明

不同实例规格的计费详情,请参考 计费概述

迁移方案

方案概述

本文提供两种迁移方案,每种方案有不同的成本和影响,您可以根据实际情况选择。

迁移方案方案说明方案影响

直接迁移

直接将采集器的写入地址从旧工作区切换到新工作区。

  • 旧工作区的数据无法迁移到新工作区,这会短暂影响部分查询结果,如:rate(container_cpu_usage_seconds_total[5m])
  • 若您使用的是 VKE 集群,且使用 prometheus-agent v1.0.6 及以下版本,则您需要卸载重装 prometheus-agent 组件,以切换到新工作区,所以将损失卸载重装期间的全部指标数据。

说明

旧工作区写入流量停止,且 Recording Rules 不产生新结果后,如无任何数据写入,旧工作区实例将不产生费用。

双写迁移

在迁移阶段,同时往新旧两个工作区写入一样的指标数据(数据双写),过程通常需要至少持续两个规格最小的存储天数。迁移阶段结束后,删除旧工作区的写入配置,数据仅写入新的工作区。

迁移阶段通常需要至少持续新旧两个规格最小的存储天数,期间会产生额外的成本,具体如下:

  • 计费成本:迁移阶段需要同时使用新旧工作区,都会进行计费。
  • 采集器资源用量成本:迁移阶段需要同时写入新旧工作区,导致采集器资源需求上涨,涨幅通常不超过原有用量的 50%。对于实际增长量,您可以根据监控做出调整。
  • 若您使用的是 VKE 集群,且使用 prometheus-agent v1.0.6 及以下版本,则:
    • 迁移期间的 APIServer,ETCD 等托管组件的指标无法迁移到新工作区。
    • 迁移阶段结束后,您需要卸载重装 prometheus-agent 组件,以切换到新工作区,所以将损失卸载重装期间的全部指标数据。
  • 人力成本:相比直接迁移方案,步骤更繁杂。

迁移流程

说明

本文介绍的迁移方案,只涉及采集方案或采集器。不同的采集方案会有不同的流程:

  1. 使用脚本安装的 VM Agent 采集器。
  2. 使用脚本安装的 VMP Agent 采集器。
  3. VKE prometheus-agent v1.0.6 及以下的采集器。

如果您使用自定义的采集器进行数据采集,也可以参照本文的迁移思路进行处理。

标准版实例迁移方案示意图,如下图所示。
alt

前提条件

  • 在本地环境中,使用 kubectl 连接至对应集群。
  • 已创建待迁移的新工作区,并获取如下信息,您需要在下面的步骤中,将对应的变量替换为实际的值。
配置项说明
$namespace采集器的命名空间。
$agent_name采集器的名称。
$remote_write_url新工作区 Remote Write URL。
$basic_auth_username新工作区 Basic Auth 认证用户名。
$basic_auth\password新工作区 Basic Auth 认证密码。
$ak新工作区 AK。
$sk新工作区 SK。
$region地域。

直接迁移方案

步骤一 迁移告警规则

将旧工作区的所有告警规则,迁移到新工作区下。步骤如下:

  1. 登录 VMP 服务控制台
  2. 单击左侧导航栏的 告警中心 > 告警规则。在告警规则列表中,选择需要编辑的告警规则,在 操作 列中,单击 编辑,即可编辑当前的告警规则。
  3. 工作区 下拉菜单中,选择新的工作区。将该告警规则由旧工作区切换为新的工作区。
    alt
  4. 单击 确定,完成告警规则迁移。

说明

迁移告警规则后,该规则下的旧的告警事件状态将被置为 人工解除 状态。

步骤二 迁移 Recording Rules

将旧工作区的所有 Recording Rules,迁移到新工作区下。步骤如下:

  1. 登录 VMP 服务控制台
  2. 单击左侧导航栏的 工作区,在工作区列表中选择新创建的工作区,单击 工作区名称,进入工作区配置界面。
  3. 在左侧导航栏中选择 Recording Rule 管理。
  4. 单击 新建规则文件,根据旧工作区的配置,完成新工作区的 Recording Rule 配置。
  5. 单击 确定,完成配置。

步骤三 采集器切换新工作区

使用脚本安装的 VM Agent 采集器

  1. 在本地环境中,执行以下命令,编辑认证信息。
bash -c 'kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
  name: vmagent-basic-auth-new
  namespace: $namespace
  labels:
    app: vmagent
stringData:
  username: $basic_auth_username
  password: $basic_auth_password
EOF'
  1. 执行以下命令,打开采集器配置文件。
kubectl -n $namespace edit vmagent vmagent
  1. 在采集器的配置文件中,找到 spec 下面的 remoteWrite 配置,将旧工作区配置修改成新工作区配置。
remoteWrite:
  - url: $remote_write_url
    basicAuth:
      username:
        name: vmagent-basic-auth-new
        key: username
      password:
        name: vmagent-basic-auth-new
        key: password

使用脚本安装的 VMP Agent 采集器

  1. 在本地环境中,执行以下命令,判断安装脚本的版本。
bash -c 'if [ "$(kubectl -n $namespace get secrets $agent_name)" ]; then echo "v2"; else echo "v1"; fi'
  1. 编辑采集器的配置文件。
    • 若版本为 v1,则遵循以下配置方式。
      1. 执行以下命令,编辑采集器的配置项。
      kubectl -n $namespace edit configmaps $agent_name
      
      1. 在采集器配置文件中,找到 prometheus.yml 下面的 remote_write 配置,将旧工作区配置修改成新工作区配置。
      remote_write:
        - url: $remote_write_url
          basic_auth:
            username: $basic_auth_username
            password: $basic_auth_password
          # 若认证方式为 AKSK,需将 basic_auth 替换成如下的 volc
          #volc: 
          #  region: $region
          #  access_key: $ak
          #  secret_key: $sk
      
    • 若版本为 v2,则遵循以下配置方式。
      1. 执行以下名称,编辑采集器的配置项。
      kubectl -n $namespace edit configmaps $agent_name
      
      1. 在采集器配置文件中,找到 remote_write_url 的编辑位置,找到 prometheus.yml 下面的 remote_write 配置,将旧工作区配置修改成新工作区配置。
      remote_write:
        - url: $remote_write_url
      
      1. 编辑采集器的保密字典。
      kubectl -n $namespace edit secret $agent_name
      
      1. 在采集器的保密字典中,编辑采集器的认证信息。
      stringData:
        remote_write.0.basic_auth.username: $basic_auth_username
        remote_write.0.basic_auth.password: $basic_auth_password
        # 若认证方式为 AKSK,需将上述两行替换成如下三行
        #remote_write.0.volc.access_key: $ak 
        #remote_write.0.volc.secret_key: $sk
        #remote_write.0.volc.region: $region
      
  2. 配置完成后,重启采集器 Pod,加载新配置。

VKE prometheus-agent v1.0.6 及以下的采集器

  1. 卸载 prometheus-agent 组件。
  2. 使用新工作区信息,重新安装 prometheus-agent 组件。

双写迁移方案

步骤一 迁移告警规则

将旧工作区的所有告警规则,迁移到新工作区下。步骤如下:

  1. 登录 VMP 服务控制台
  2. 单击左侧导航栏的 告警中心 > 告警规则。在告警规则列表中,选择需要编辑的告警规则,在 操作 列中,单击 编辑,即可编辑当前的告警规则。
  3. 工作区 下拉菜单中,选择新的工作区。将该告警规则由旧工作区切换为新的工作区。
    alt
  4. 单击 确定,完成告警规则迁移。

说明

迁移告警规则后,该规则下的旧的告警事件状态将被置为 人工解除 状态。

步骤二 迁移 Recording Rules

将旧工作区的所有 Recording Rules,迁移到新工作区下。步骤如下:

  1. 登录 VMP 服务控制台
  2. 单击左侧导航栏的 工作区,在工作区列表中选择新创建的工作区,单击 工作区名称,进入工作区配置界面。
  3. 在左侧导航栏中选择 Recording Rule 管理。
  4. 单击 新建规则文件,根据旧工作区的配置,完成新工作区的 Recording Rule 配置。
  5. 单击 确定,完成配置。

步骤三 配置采集器数据双写

使用脚本安装的 VM Agent 采集器

  1. 在本地环境中,执行以下命令,编辑认证信息。
bash -c 'kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
  name: vmagent-basic-auth-new
  namespace: $namespace
  labels:
    app: vmagent
stringData:
  username: $basic_auth_username
  password: $basic_auth_password
EOF'
  1. 执行以下命令,打开采集器配置文件。
kubectl -n $namespace edit vmagent vmagent
  1. 在采集器的配置文件中,找到 spec 下的 remoteWrite 配置,添加新工作区的 remote write 配置。
remoteWrite:
  - url: $remote_write_url # 添加新工作区的相关配置
    basicAuth:
      username:
        name: vmagent-basic-auth-new
        key: username
      password:
        name: vmagent-basic-auth-new
        key: password
  - url: http://xxx... # 此处为旧工作区的相关配置
    basicAuth:
      username:
        name: vmagent-basic-auth
        key: username
      password:
        name: vmagent-basic-auth
        key: password

使用脚本安装的 VMP Agent 采集器

  1. 在本地环境中,执行以下命令,判断安装脚本的版本。
bash -c 'if [ "$(kubectl -n $namespace get secrets $agent_name)" ]; then echo "v2"; else echo "v1"; fi'
  1. 编辑采集器的配置文件。
    • 若版本为 v1,则遵循以下配置方式。
      1. 执行以下命令,编辑采集器的配置项。
      kubectl -n $namespace edit configmaps $agent_name
      
      1. 在采集器配置文件中,找到 prometheus.yml 下的 remote_write 配置,添加新工作区的 remote write 配置。
      remote_write:
        - url: $remote_write_url # 填写新工作区的相关信息
          basic_auth:
            username: $basic_auth_username
            password: $basic_auth_password
          # 若认证方式为 AKSK,需将 basic_auth 替换成如下的 volc
          #volc: 
          #  region: $region
          #  access_key: $ak
          #  secret_key: $sk
        - url: http://xxx.... # 此处为旧工作区的相关信息
          volc:
            region: $region
            access_key: $ak
            secret_key: $sk
      
    • 若版本为 v2,则遵循以下配置方式。
      1. 执行以下名称,编辑采集器的配置项。
      kubectl -n $namespace edit configmaps $agent_name
      
      1. 在采集器配置文件中,找到 remote_write_url 的编辑位置,找到 prometheus.yml 下的 remote_write 配置,添加新工作区的 remote_write_url 配置。
      remote_write:
        - url: $remote_write_url # 添加新工作区的 RemoteWrite URL 地址。
        - url: http://xxx.... # 此处为旧工作区的配置,需要按序下移
      
      1. 编辑采集器的保密字典。
      kubectl -n $namespace edit secret $agent_name
      
      1. 在采集器的保密字典中,编辑采集器的认证信息。
      stringData:
        remote_write.0.basic_auth.username: $basic_auth_username
        remote_write.0.basic_auth.password: $basic_auth_password
        # 若认证方式为 AKSK,需将上述两行替换成如下三行
        #remote_write.0.volc.access_key: $ak 
        #remote_write.0.volc.secret_key: $sk
        #remote_write.0.volc.region: $region
        remote_write.1.volc.access_key: ... # 需要将原有配置按序下移,需要修改 remote_write.x
        remote_write.1.volc.secret_key: ...
      
  2. 配置完成后,重启采集器 Pod,加载新配置。

VKE prometheus-agent v1.0.6 及以下的采集器

  1. 在本地环境中,执行以下命令,编辑采集器的配置项。
kubectl -n kube-system edit configmaps prometheus-agent
  1. 在采集器的配置文件中,找到 prometheus.yml 下的 remote_write 配置,添加新工作区的 remote write 配置。
remote_write:
  - url: $remote_write_url # 添加新工作区的相关配置
    basic_auth:
      username: $basic_auth_username
      password: $basic_auth_password
    # 若认证方式为 AKSK,需将 basic_auth 替换成如下的 volc
    #volc: 
    #  region: $region
    #  access_key: $ak
    #  secret_key: $sk
  - url: http://xxx.... # 此处为旧工作区的相关配置
    volc:
      region: $region
      access_key: $ak
      secret_key: $sk
  1. 配置完成后,重启采集器 Pod,加载新配置。

步骤四 迁移完成后,删除采集器旧工作区写入配置

说明

双写持续新旧两个规格工作区的最小存储天数后,即可开始删除采集器旧工作区写入配置。

使用脚本安装的 VM Agent 采集器

  1. 在本地环境中,执行以下命令,打开采集器配置文件。
kubectl -n $namespace edit vmagent vmagent
  1. 在采集器的配置文件中,找到 spec 下的 remoteWrite 配置,删除旧工作区的配置。
remoteWrite:
  - url:  $remote_write_url
      basicAuth:
        username:
            name: vmagent-basic-auth-new
            key: username
        password:
            name: vmagent-basic-auth-new
            key: password
  - url: http://xxx... # 删除旧工作区配置
    basicAuth:
      username:
        name: vmagent-basic-auth
        key: username
      password:
        name: vmagent-basic-auth
        key: password

使用脚本安装的 VMP Agent 采集器

  1. 在本地环境中,执行以下命令,判断安装脚本的版本。
bash -c 'if [ "$(kubectl -n $namespace get secrets $agent_name)" ]; then echo "v2"; else echo "v1"; fi'
  1. 编辑采集器的配置文件。
    • 若版本为 v1,则遵循以下配置方式。
      1. 执行以下命令,编辑采集器的配置项。
      kubectl -n $namespace edit configmaps $agent_name
      
      1. 在采集器配置文件中,找到 prometheus.yml 下的 remote_write 配置,删除旧工作区配置。
      remote_write:
        - url:  $remote_write_url
          basic_auth:
            username:  $basic_auth_username
            password:  $basic_auth_password
            # 若认证方式为 AKSK,需将 basic_auth 替换成如下的 volc
          #volc:  
          #  region: $region
          #  access_key: $ak
          #  secret_key: $sk
        - url: http://.... # 删除旧工作区的配置
          volc:
            region: $region
            access_key: $ak
            secret_key: $sk
      
    • 若版本为 v2,则遵循以下配置方式。
      1. 执行以下名称,编辑采集器的配置项。
      kubectl -n $namespace edit configmaps $agent_name
      
      1. 在采集器配置文件中,找到 remote_write_url 的编辑位置,找到 prometheus.yml 下的 remote_write 配置,删除旧工作区的配置。
      - url:  $remote_write_url
        - url: http://.... # 删除旧工作区的配置
      
      1. 编辑采集器的保密字典。
      kubectl -n $namespace edit secret $agent_name
      
      1. 在采集器的保密字典中,删除旧工作区的认证信息。
      stringData:
          remote_write.0.basic_auth.username:  $basic_auth_username
          remote_write.0.basic_auth.password:  $basic_auth_password
        # 若认证方式为 AKSK,需将上述两行替换成如下三行
        #remote_write.0.volc.access_key: $ak
        #remote_write.0.volc.secret_key: $sk
        #remote_write.0.volc.region: $region
        remote_write.1.volc.access_key: ... # 需要将原有配置按序提前,需要修改 remote_write.x
        remote_write.1.volc.secret_key: ...
      
  2. 配置完成后,重启采集器 Pod,加载新配置。

VKE prometheus-agent v1.0.6 及以下的采集器

  1. 卸载 prometheus-agent 组件。
  2. 使用新工作区信息,重新安装 prometheus-agent 组件。

后续任务

(可选)删除旧工作区

迁移完成后,您可以根据需求,删除旧工作区。具体操作,请参见 管理工作区

警告

删除旧工作区后,您的历史数据将会被完全清除,无法恢复,请谨慎操作!