You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法通过Python连接Grafana API:证书问题求助及配置指引

修复Grafana API创建Silence的Python脚本证书问题

一、处理证书错误的两种方案

1. 安全合规方案:获取并配置Grafana服务器证书

你可以通过两种方式获取证书:

  • 浏览器导出:打开Grafana网页,点击地址栏的锁图标 → 「证书」→ 「详细信息」→ 「复制到文件」,选择Base64编码的X.509格式保存为.pem文件。
  • 命令行抓取:用openssl工具直接获取证书,执行以下命令(替换成你的Grafana地址和端口):
    openssl s_client -connect your-grafana-domain:port < /dev/null | openssl x509 -outform PEM > grafana_cert.pem
    

2. 临时测试方案:跳过证书验证(生产环境禁用)

如果只是测试脚本,可临时关闭SSL验证(存在安全风险,仅用于调试):
在requests.post请求中添加verify=False参数,同时关闭相关警告:

import requests
from urllib3.exceptions import InsecureRequestWarning

# 关闭不安全请求警告
requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning)

# 发起请求时跳过证书验证
response = requests.post(
    "https://your-grafana-url/api/v1/silences",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    json=request_body,
    verify=False
)

二、脚本中配置证书验证

拿到证书文件后,在requests请求里指定verify参数为证书文件路径即可,同时结合Excel数据生成请求体的完整示例如下:

import requests
import pandas as pd

# 基础配置
GRAFANA_API_KEY = "your-api-key-here"
GRAFANA_CERT_PATH = "./grafana_cert.pem"
GRAFANA_URL = "https://your-grafana-url/api/v1/silences"

# 读取Excel表格数据
df = pd.read_excel("your-main-excel.xlsx")

for index, row in df.iterrows():
    # 转换时间为Grafana要求的Unix时间戳(秒级)
    start_time = int(pd.to_datetime(row["Change Start Time"]).timestamp())
    end_time = int(pd.to_datetime(row["Change End Time"]).timestamp())
    
    # 处理Labels列(假设列内容为"key1=value1,key2=value2"格式)
    labels_str = row["Labels"]
    matchers = []
    for pair in labels_str.split(","):
        k, v = pair.strip().split("=")
        matchers.append({"name": k, "value": v, "isRegex": False})
    
    # 构建silence请求体
    request_body = {
        "matchers": matchers,
        "startsAt": start_time,
        "endsAt": end_time,
        "createdBy": "script-user",
        "comment": "Maintenance silence generated by Excel script"
    }
    
    # 带证书验证的POST请求
    response = requests.post(
        GRAFANA_URL,
        headers={"Authorization": f"Bearer {GRAFANA_API_KEY}"},
        json=request_body,
        verify=GRAFANA_CERT_PATH
    )
    
    # 检查请求结果
    if response.status_code == 201:
        print(f"Row {index}: Silence created successfully")
    else:
        print(f"Row {index}: Failed - {response.status_code} | {response.text}")

三、常见注意事项

  • 确保你的API Key拥有Alerting:Silences:Create权限,否则会返回403权限错误。
  • 时间转换必须是秒级Unix时间戳,不要用毫秒级,否则silence时间会异常。
  • 如果Grafana使用的是公共CA签发的证书,也可以直接指定系统默认的CA证书路径,比如Linux的"/etc/ssl/certs/ca-certificates.crt",Windows的"C:\\Windows\\System32\\certificates\\root\\ca.pem"。

内容的提问来源于stack exchange,提问作者Yavnica Saini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 12:02:41