tencent cloud

容器服务

动态与公告
产品动态
公告
产品发布记录
产品简介
产品概述
产品优势
产品架构
应用场景
产品功能
基本概念
原生 Kubernetes 名词对照
容器服务高危操作
地域和可用区
开源组件
购买指南
购买指引
购买 TKE 标准集群
购买原生节点
购买超级节点
快速入门
新手指引
快速创建一个标准集群
入门示例
容器应用部署 Check List
集群配置
标准集群概述
集群管理
网络管理
存储管理
节点管理
GPU 资源管理
远程终端
应用配置
工作负载管理
服务和配置管理
组件和应用管理
弹性伸缩
容器登录方式
可观测配置
运维可观测性
成本洞察和优化
调度配置
调度组件概述
资源利用率优化调度
业务优先级保障调度
Qos 感知调度
安全和稳定性
容器服务安全组设置
身份验证和授权
应用安全
多集群管理
计划升级
备份中心
云原生服务指南
云原生 etcd
Prometheus 监控服务
TKE Serverless 集群指南
TKE 注册集群指南
实践教程
集群
Serverless 集群
调度
安全
服务部署
网络
发布
日志
监控
运维
Terraform
DevOps
弹性伸缩
容器化
微服务
成本管理
混合云
AI
故障处理
节点磁盘爆满排障处理
节点高负载排障处理
节点内存碎片化排障处理
集群 DNS 解析异常排障处理
集群 Kube-Proxy 异常排障处理
集群 API Server 网络无法访问排障处理
Service&Ingress 网络无法访问排障处理
Service&Ingress 常见报错和处理
Nginx Ingress 偶现 Connection Refused
CLB Ingress 创建报错排障处理
Pod 网络无法访问排查处理
Pod 状态异常与处理措施
授权腾讯云售后运维排障
CLB 回环问题
API 文档
History
Introduction
API Category
Making API Requests
Elastic Cluster APIs
Resource Reserved Coupon APIs
Cluster APIs
Third-party Node APIs
Relevant APIs for Addon
Network APIs
Node APIs
Node Pool APIs
TKE Edge Cluster APIs
Cloud Native Monitoring APIs
Scaling group APIs
Super Node APIs
Other APIs
Data Types
Error Codes
TKE API 2022-05-01
常见问题
TKE 标准集群
TKE Serverless 集群
运维类
隐患处理
服务类
镜像仓库类
远程终端类
事件类
资源管理类
服务协议
TKE Service Level Agreement
TKE Serverless Service Level Agreement
联系我们
词汇表
文档容器服务实践教程监控自建 Prometheus 迁移到云原生监控

自建 Prometheus 迁移到云原生监控

PDF
聚焦模式
字号
最后更新时间: 2024-12-13 20:30:26

操作场景

腾讯云容器服务 云原生监控 兼容 Prometheus 与 Grafana 的 API,同时也兼容主流 prometheus-operator 的 CRD 用法,为云原生监控提供了极大的灵活性与扩展性,结合 Prometheus 开源生态工具可以解锁更多高级用法。 本文将介绍如何通过辅助脚本和迁移工具,快速将自建 Prometheus 迁移到云原生监控。

前提条件

已在自建 Prometheus 集群的一个节点上安装 Kubectl 并配置好 Kubeconfig,保证通过 Kubectl 能够管理集群。

操作步骤

迁移动态采集配置

自建 Prometheus 若使用 prometheus-operator,通常需要通过 ServiceMonitor 和 PodMonitor 这类 CRD 资源来动态添加采集配置,云原生监控同样支持该用法。若只将自建 Prometheus 集群的 prometheus-operator 迁移到云原生监控,并未迁移集群,则无需迁移动态配置,只需使用云原生监控关联自建集群,自建 Prometheus 创建的 ServiceMonitor 和 PodMonitor 资源即可自动在云原生监控中生效。
如需跨集群迁移,可以将自建 Prometheus 的 CRD 资源导出,并选择性的在被关联的云原生监控的集群中重新应用。以下为您介绍如何在自建 Prometheus 集群中批量导出 ServiceMonitor 和 PodMonitor。
1. 创建脚本 prom-backup.sh,脚本内容如下:
_ns_list=$(kubectl get ns | awk '{print $1}' | grep -v NAME)
count=0
declare -a types=("servicemonitors.monitoring.coreos.com" "podmonitors.monitoring.coreos.com")
for _ns in ${_ns_list}; do
## loop for types
for _type in "${types[@]}"; do
echo "Backup type [namespace: ${_ns}, type: ${_type}]."
_item_list=$(kubectl -n ${_ns} get ${_type} | grep -v NAME | awk '{print $1}' )
## loop for items
for _item in ${_item_list}; do
_file_name=./${_ns}_${_type}_${_item}.yaml
echo "Backup kubernetes config yaml [namespace: ${_ns}, type: ${_type}, item: ${_item}] to file: ${_file_name}"
kubectl -n ${_ns} get ${_type} ${_item} -o yaml > ${_file_name}
count=$[count + 1]
echo "Backup No.${count} file done."
done;
done;
done;
2. 执行以下命令,运行 prom-backup.sh 脚本:
bash prom-backup.sh
3. prom-backup.sh 脚本会将每个 ServiceMonitor 与 PodMonitor 资源导出成单独的 YAML 文件。可执行 ls 命令查看输出的文件列表,示例如下:
$ ls
kube-system_servicemonitors.monitoring.coreos.com_kube-state-metrics.yaml
kube-system_servicemonitors.monitoring.coreos.com_node-exporter.yaml
monitoring_servicemonitors.monitoring.coreos.com_coredns.yaml
monitoring_servicemonitors.monitoring.coreos.com_grafana.yaml
monitoring_servicemonitors.monitoring.coreos.com_kube-apiserver.yaml
monitoring_servicemonitors.monitoring.coreos.com_kube-controller-manager.yaml
monitoring_servicemonitors.monitoring.coreos.com_kube-scheduler.yaml
monitoring_servicemonitors.monitoring.coreos.com_kube-state-metrics.yaml
monitoring_servicemonitors.monitoring.coreos.com_kubelet.yaml
monitoring_servicemonitors.monitoring.coreos.com_node-exporter.yaml
4. 您可以自行筛选和修改,将 YAML 文件重新应用到被关联的云原生监控的集群中(请勿应用已经存在或功能相同的采集规则),云原生监控会自动感知这部分动态采集规则并进行采集。
说明:
若后续需增加 ServiceMonitor 或 PodMonitor,可以通过 TKE 控制台进行可视化添加,也可脱离控制台直接用 YAML 创建,用法与 Prometheus 社区的 CRD 完全兼容。

迁移静态采集配置

若自建 Prometheus 系统直接使用 Prometheus 原生配置文件,只需在 TKE 控制台进行简单的几步操作,即可将其转换为云原生监控的 RawJob,使其兼容 Prometheus 原生配置文件的 scrape_configs 配置项。
2. 在左侧菜单栏中单击 云原生监控进入云原生监控页面。
3. 单击需要配置的云原生监控 ID/名称,进入基本信息页面。
4. 选择关联集群页签,在对应的集群右侧操作列项下单击数据采集配置


5. 选择RawJob>新增,打开添加 RawJobs 窗口。将原生 Prometheus 配置文件中的 Job 配置复制粘贴到此配置窗口中。


6. 可以将所有需要导入的 Job 数组都粘贴到云原生监控,单击确定后会自动拆分成多个 RawJob,名称为每个 Job 的 job_name 字段。

迁移全局配置

云原生监控提供 Prometheus CRD 资源,可以通过修改该资源来修改全局配置。
1. 执行以下命令,获取 Prometheus 相关信息。
$ kubectl get ns
prom-fnc7bvu9 Active 13m
$ kubectl -n prom-fnc7bvu9 get prometheus
NAME VERSION REPLICAS AGE
tke-cls-hha93bp9 11m
$ kubectl -n prom-fnc7bvu9 edit prometheus tke-cls-hha93bp9
2. 执行以下命令,修改 Prometheus 相关配置。
$ kubectl -n prom-fnc7bvu9 edit prometheus tke-cls-hha93bp9
在弹出的编辑页面,您可修改以下参数:
scrapeInterval:采集抓取间隔时长(默认为15s)。
externalLabels:可为所有时序数据增加默认的 label 标识。

迁移聚合配置

Prometheus 的聚合配置,无论是原始 Recording rules 静态配置或是 PrometheusRule 动态配置,每条规则的格式都相同。
2. 在左侧菜单栏中单击 云原生监控进入云原生监控页面。
3. 单击需要配置的云原生监控 ID/名称,进入基本信息页面。
4. 选择聚合规则>新建聚合规则,打开新建聚合规则窗口。使用 PrometheusRule 格式将每条规则粘贴到 groups 数组中。如下图所示:


说明:
若自建 Prometheus 本身使用 PrometheusRule 定义的聚合规则,仍建议将其按照上述步骤进行迁移。若直接使用 YAML 方式在集群中创建 PrometheusRule 资源,云原生监控暂时无法将其显示到控制台。

迁移告警配置

本文提供以下自建 Prometheus 告警原始配置 YAML 文件为例,介绍如何将其转换为云原生监控类似的监控配置。
- alert: NodeNotReady
expr: kube_node_status_condition{condition="Ready",status="true"} == 0
for: 5m
labels:
severity: critical
annotations:
description: 节点 {{ $labels.node }} 长时间不可用 (集群id {{ $labels.cluster }})
2. 在左侧菜单栏中单击 云原生监控进入云原生监控页面。
3. 单击需要配置的云原生监控 ID/名称,进入基本信息页面。
4. 选择 告警配置>新建告警策略,配置告警策略:

主要参数信息如下:
PromQL:等同于 原始配置 的 expr 字段,为告警的核心配置,用于指示告警触发条件的 PromQL 表达式。
Labels:等同于 原始配置 的 labels 字段,为告警添加额外的 label。
告警内容:表示推送的告警内容,通常使用模板,可插入变量。建议带上集群 ID,可使用变量 {{ $labels.cluster }} 表示集群 ID。
持续时间:等同于 原始配置 的 for 字段,表示达到告警条件多久之后还未恢复就推送告警。本文示例配置为5分钟。
收敛时间:等同于 AlertManager 的 repeat_interval 配置,表示某个告警推送之后多久之后还未恢复就再次推送,即相同告警的推送间隔时长。本文示例配置为1小时。
说明:
上述告警配置示例表示节点状态变为 NotReady 之后,5分钟内未恢复即推送告警,如果长时间未恢复,则间隔1小时再次推送告警。
5. 配置告警渠道,目前支持腾讯云与 WebHook 两类:
腾讯云告警渠道
WebHook 告警渠道
腾讯云告警渠道集成短信、邮件、微信、电话告警方式,可根据自身需求勾选:


如要配置其他告警渠道,例如钉钉、Zoom 等,可自行部署相关的 WebHook 后端,并在云原生监控指定 WebHook 的 URL:



迁移 Grafana 面板

自建 Prometheus 通常配置了许多自定义的 Grafana 监控面板,如需迁移到其他平台,在面板数量较多的情况下,依次导出再导入方式效率太低。借助 grafana-backup 工具可以实现 Grafana 面板的批量导出和导入,您可以参考以下批量导出导入面板步骤进行快速迁移。
1. 执行以下命令安装 grafana-backup。示例如下:
pip3 install grafana-backup
说明:
推荐使用 Python3,使用 Python2 可能存在兼容性问题。
2. 创建 API Keys。
2.1 分别打开自建 Grafana 与云原生监控 Grafana 的配置面板,选择API Keys>New API Key,如下图所示:


2.2 在 Add API Key 窗口中,创建一个 Role 为 Admin 的 APIKey,如下图所示:


3. 为需要导出的面板准备备份配置文件。
3.1 执行以下命令,获取自建 Grafana 的访问地址。示例如下:
$ kubectl -n monitoring get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
grafana ClusterIP 172.21.254.127 <none> 3000/TCP 25h
说明:
上述 Grafana 集群内访问地址以 http://172.21.254.127:3000 为例。
3.2 执行以下命令,生成 grafana-backup 配置文件(写入 Grafana 地址与 APIKey)。示例如下:
export TOKEN=<TOKEN>
cat > ~/.grafana-backup.json <<EOF
{
"general": {
"debug": true,
"backup_dir": "_OUTPUT_"
},
"grafana": {
"url": "http://172.21.254.127:3000",
"token": "${TOKEN}"
}
}
EOF
说明:
<TOKEN> 需要替换为自建 Grafana 的 APIKey,url 地址需替换为实际环境地址。
4. 执行以下命令,导出所有面板。示例如下:
grafana-backup save
面板将以一个压缩文件的形式保存在 _OUTPUT_ 目录下,您可以执行以下命令查看该目录下存在的文件。示例如下:
$ tree _OUTPUT_
_OUTPUT_
└── 202012151049.tar.gz

0 directories, 1 file
5. 执行以下命令,准备还原配置文件。示例如下:
export TOKEN=<TOKEN>
cat > ~/.grafana-backup.json <<EOF
{
"general": {
"debug": true,
"backup_dir": "_OUTPUT_"
},
"grafana": {
"url": "http://prom-xxxxxx-grafana.ccs.tencent-cloud.com",
"token": "${TOKEN}"
}
}
EOF
说明:
将 <TOKEN> 替换为云原生监控 Grafana 的 APIKey,url 替换为云原生监控 Grafana 的访问地址(通常用外网访问地址,需开启)。
6. 执行以下命令,将导出的面板一键导入到云原生监控 Grafana。示例如下:
grafana-backup restore _OUTPUT_/202012151049.tar.gz
7. 在 Grafana 配置面板选择 Dashboard settings>Variables>New, 新建 cluster 字段。建议为所有面板都加上 cluster 的过滤字段,云原生监控支持多集群,将会给每个集群的数据打上 cluster 标签,用集群 ID 来区分不同集群。如下图所示:


说明:
label_values 中填入当前面板任意涉及到的一个指标名(示例中为 node_uname_info)。
8. 修改所有面板中的 PromQL 查询语句,加入 cluster=~"$cluster" 过滤条件。如下图所示:



与现有系统集成

云原生监控支持接入自建 Grafana 和 AlertManager 系统:
接入自建 Grafana
接入自建 AlertManager
云原生监控提供 Prometheus 的 API,如需使用自建的 Grafana 来展示监控,可以将云原生监控的数据作为一个 Prometheus 数据源添加到自建 Grafana,Prometheus API 的地址可在 TKE 控制台云原生监控基本信息中查到。
2. 在左侧菜单栏中单击 云原生监控进入云原生监控页面。
3. 单击需要配置的云原生监控 ID/名称,进入基本信息页面,获取 Prometheus API 地址。


说明:
确保自建的 Grafana 与云原生监控在同一私有网络 VPC 下或两者网络已打通。
4. 在 Grafana 中添加 Prometheus API 地址作为 Prometheus 数据源。如下图所示:


如需实现更复杂的告警需求,或期望使用自建的 AlertManager 来进行统一告警,可以选择让云原生监控的告警接入自建 AlertManager,您只需在 创建监控实例 时,在高级设置中填入自建 AlertManager 的地址,如下图所示:




帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈