无法通过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
相关产品推荐
相关产品推荐

