Prometheus + DeepSeek:自动生成巡检脚本与告警规则配置实战


Prometheus + DeepSeek:自动生成巡检脚本与告警规则配置实战

引言:自动化运维的新范式

在现代 IT 基础设施日益复杂化的背景下,监控与告警已成为保障系统稳定、高效运行的核心环节。Prometheus 作为云原生时代领先的开源监控解决方案,以其强大的数据模型、灵活的查询语言(PromQL)和高效的时序数据库,在监控领域占据了重要地位。然而,随着监控对象(主机、容器、中间件、微服务等)数量和复杂性的激增,传统的手动配置巡检脚本和告警规则方式变得愈发低效且容易出错。如何实现监控配置的自动化、智能化,成为提升运维效率的关键挑战。

DeepSeek 作为先进的人工智能大模型,在自然语言处理、代码生成、逻辑推理方面展现出卓越的能力。将 DeepSeek 与 Prometheus 相结合,可以利用 AI 的理解力和创造力,自动化生成针对特定场景的巡检脚本和告警规则配置,大幅提升运维工作的效率和准确性。

本文将深入探讨 Prometheus 与 DeepSeek 的整合实战,详细介绍如何利用 DeepSeek 的智能能力,自动生成用于 Prometheus 的巡检脚本(如 Exporter 配置检查、指标采集验证等)和告警规则配置文件(.rules 文件)。通过具体案例和代码示例,展示这一组合如何为运维工作带来革命性的效率提升。


第一部分:基础环境搭建与概念回顾

1.1 Prometheus 核心组件与工作流程

Prometheus 的架构主要包括以下几个核心组件:

  1. Prometheus Server: 核心服务,负责抓取(Scrape)和存储(Store)时间序列数据,提供查询(Query)接口和告警(Alerting)评估。
  2. Exporter: 暴露被监控对象(如 Node Exporter 暴露主机指标,MySQL Exporter 暴露数据库指标)的 HTTP 接口,供 Prometheus Server 抓取。
  3. Pushgateway: 允许短生命周期的任务(如批处理作业)将指标推送(Push)到此处,Prometheus 再从中抓取。
  4. Alertmanager: 处理 Prometheus Server 发出的告警(Alerts),进行去重、分组、静默,并通过邮件、Slack、Webhook 等方式通知。
  5. Service Discovery: 自动发现监控目标,支持 Kubernetes、Consul、DNS 等多种方式。

其基本工作流程如下:

  1. 配置:定义要抓取的监控目标(scrape_configs)和告警规则(alerting.rules)。
  2. 抓取:Server 定期(根据scrape_interval)向配置的目标(通常是 Exporter)发起 HTTP GET 请求获取指标数据。
  3. 存储:将获取的指标数据(键值对形式,包含时间戳)存储在本地时序数据库中。
  4. 查询:用户或 Dashboard 通过 PromQL 查询接口获取数据。
  5. 告警:Server 定期评估告警规则。如果规则条件(PromQL 表达式)满足,则生成一个告警实例并发送给 Alertmanager。
  6. 通知:Alertmanager 处理告警实例并发送通知。

1.2 DeepSeek 简介与适用场景

DeepSeek 是基于 Transformer 架构的大型语言模型,经过海量文本和代码数据的训练。其核心能力包括:

  • 自然语言理解与生成:理解用户需求描述,生成流畅、准确的文本。
  • 代码生成:根据自然语言描述或上下文,生成多种编程语言的代码片段(如 Python, YAML, Shell 等)。
  • 逻辑推理:分析复杂场景,推导出合理的解决方案。
  • 知识整合:结合领域知识(如 Prometheus 监控原理、Linux 系统知识)进行创作。

在 Prometheus 运维场景下,DeepSeek 可应用于:

  • 自动生成 Exporter 安装与配置脚本
  • 自动生成 Prometheus Server 的prometheus.yml配置片段(如scrape_configs)。
  • 自动生成告警规则文件(*.rules.yml,基于自然语言描述的告警条件。
  • 自动生成巡检脚本,用于验证 Exporter 状态、指标采集是否正常、告警规则是否生效等。
  • 生成监控报告,解读关键指标趋势。
  • 辅助故障排查,根据异常指标提供可能的原因分析。

1.3 环境准备

1.3.1 Prometheus 环境搭建 (以 Linux 为例)
  1. 下载与安装
    wget https://github.com/prometheus/prometheus/releases/download/v2.47.0/prometheus-2.47.0.linux-amd64.tar.gz tar xvfz prometheus-*.tar.gz cd prometheus-*/
  2. 配置prometheus.yml(初始配置):
    global: scrape_interval: 15s evaluation_interval: 15s alerting: alertmanagers: - static_configs: - targets: # - alertmanager:9093 rule_files: # - "first_rules.yml" # - "second_rules.yml" scrape_configs: - job_name: "prometheus" static_configs: - targets: ["localhost:9090"]
  3. 启动 Prometheus
    ./prometheus --config.file=prometheus.yml
  4. 验证:访问http://<server_ip>:9090,应能看到 Prometheus Web UI。
1.3.2 DeepSeek 环境准备

DeepSeek 可以通过其提供的 API 接口进行访问。你需要:

  1. 注册并获取 API Key (访问 https://www.deepseek.com)。
  2. 安装必要的 Python 库(如requests)用于调用 API:
    pip install requests
  3. 编写一个简单的 Python 脚本用于与 DeepSeek API 交互:
    import requests def ask_deepseek(prompt, model="deepseek-chat", api_key="YOUR_API_KEY"): url = "https://api.deepseek.com/v1/chat/completions" headers = { "Authorization": f"Bearer {api_key}", "Content-Type": "application/json" } data = { "model": model, "messages": [{"role": "user", "content": prompt}] } response = requests.post(url, headers=headers, json=data) response.raise_for_status() return response.json()["choices"][0]["message"]["content"] # 示例调用 if __name__ == "__main__": user_query = "请帮我生成一个用于监控 Linux 主机 CPU 使用率的 Prometheus 告警规则。" response = ask_deepseek(user_query) print(response)
    YOUR_API_KEY替换为你的实际 API Key。
1.3.3 安装 Node Exporter (示例 Exporter)

在需要监控的 Linux 主机上:

wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz tar xvfz node_exporter-*.tar.gz cd node_exporter-*/ ./node_exporter &

prometheus.ymlscrape_configs中添加新 job:

scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] - job_name: 'node-exporter' # 新增 static_configs: - targets: ['<node_exporter_host_ip>:9100'] # 替换为实际 IP

重启 Prometheus 使其生效。


第二部分:DeepSeek 自动生成 Prometheus 告警规则

告警是监控系统的核心价值所在。手动编写复杂的 PromQL 表达式定义告警条件,既考验对业务的理解,也考验对 PromQL 的掌握程度。DeepSeek 可以理解自然语言描述的告警需求,自动生成准确、规范的告警规则配置。

2.1 告警规则文件结构

Prometheus 的告警规则通常定义在单独的 YAML 文件中(如node_alerts.rules.yml),并通过rule_files配置加载。一个典型的告警规则组包含:

groups: - name: node-alerts # 规则组名称 rules: - alert: HighNodeCPU # 告警名称 expr: (1 - avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance)) * 100 > 80 # PromQL 表达式 for: 5m # 持续时间 labels: severity: warning # 自定义标签 annotations: summary: "High CPU usage on {{ $labels.instance }}" # 告警摘要 description: "{{ $labels.instance }} CPU usage is above 80% for 5 minutes." # 告警详情
  • groups: 包含多个规则组。
  • name: 规则组标识符。
  • rules: 组内具体的告警规则列表。
  • alert: 告警名称(唯一标识)。
  • expr: 触发告警的 PromQL 条件表达式。结果为true时触发。
  • for: 表达式持续满足多长时间才触发告警(避免瞬时抖动)。
  • labels: 附加到告警上的标签(如severity,team),用于 Alertmanager 分组和路由。
  • annotations: 提供告警的详细描述信息,支持模板变量(如{{ $labels.instance }})。

2.2 使用 DeepSeek 生成告警规则

2.2.1 基础告警生成

用户需求描述示例

请为 Prometheus 生成一个告警规则,当某台 Linux 主机的内存使用率超过 90% 并持续 3 分钟时,触发一个严重级别(severity: critical)的告警。告警摘要应包含主机实例名,描述应说明具体使用率。

DeepSeek 交互 Prompt

prompt = """ 你是一个 Prometheus 告警配置专家。请根据以下要求生成一个完整的 Prometheus 告警规则 YAML 配置片段: * 告警名称 (alert): HighNodeMemory * 触发条件: Linux 主机内存使用率 > 90% * 持续时间 (for): 3分钟 * 严重级别标签 (labels.severity): critical * 告警摘要 (annotations.summary): 应包含变量 {{ $labels.instance }} * 告警详情 (annotations.description): 应说明具体使用率,使用变量 {{ $value }} 表示计算出的百分比 请使用标准的 Prometheus 告警规则 YAML 格式输出,不要包含任何解释性文字。 """ response = ask_deepseek(prompt) print(response)

DeepSeek 可能生成的输出

groups: - name: node-memory-alerts rules: - alert: HighNodeMemory expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 90 for: 3m labels: severity: critical annotations: summary: "High Memory Usage on {{ $labels.instance }}" description: "Memory usage on {{ $labels.instance }} is at {{ $value }}% for 3 minutes."

关键点解释

  • expr: 使用了 Node Exporter 的node_memory_MemAvailable_bytes(可用内存) 和node_memory_MemTotal_bytes(总内存) 指标来计算使用率。公式为: $$ \text{Memory Usage} = \left(1 - \frac{\text{MemAvailable}}{\text{MemTotal}}\right) \times 100 $$ 该表达式计算出的值大于 90 时满足条件。
  • for: 3m: 条件需持续 3 分钟才触发告警。
  • annotations: 使用了模板变量{{ $labels.instance }}获取主机实例名,{{ $value }}获取expr计算出的当前值(即内存使用率百分比)。
2.2.2 进阶告警生成:复杂条件与聚合

用户需求描述示例

请生成一个告警规则,用于监控 Kubernetes 集群中所有 Namespace 的 Pod 重启情况。如果某个 Namespace 在过去 10 分钟内,重启的 Pod 总数超过 20 次,则触发一个 warning 级别的告警。告警摘要应包含 Namespace 名称。

DeepSeek 交互 Prompt

prompt = """ 作为 Prometheus 告警专家,请根据需求生成告警规则 YAML: * 告警名称: FrequentPodRestarts * 触发条件: 按 Namespace 统计,过去10分钟内 Pod 重启次数总和 > 20。使用指标 `kube_pod_container_status_restarts_total`。 * 持续时间 (for): 2分钟 (短暂持续即可) * 标签: severity: warning * 摘要: "Frequent Pod Restarts in namespace {{ $labels.namespace }}" * 详情: "Namespace {{ $labels.namespace }} has {{ $value }} pod restarts in the last 10 minutes." 注意:指标 `kube_pod_container_status_restarts_total` 是一个 Counter,表示容器重启次数。每个重启事件会使该 Counter 增加。 """ response = ask_deepseek(prompt) print(response)

DeepSeek 可能生成的输出

groups: - name: k8s-pod-restart-alerts rules: - alert: FrequentPodRestarts expr: sum by (namespace) (increase(kube_pod_container_status_restarts_total[10m])) > 20 for: 2m labels: severity: warning annotations: summary: "Frequent Pod Restarts in namespace {{ $labels.namespace }}" description: "Namespace {{ $labels.namespace }} has {{ $value }} pod restarts in the last 10 minutes."

关键点解释

  • expr: 使用了increase()函数计算 Counter 指标kube_pod_container_status_restarts_total在 10 分钟时间窗口[10m]内的增长量(即重启次数)。
  • sum by (namespace): 按namespace标签进行分组求和,得到每个 Namespace 的总重启次数。
  • 表达式结果大于 20 时满足条件。
  • for: 2m: 考虑到重启事件可能集中发生,设置较短的持续时间。
2.2.3 生成告警规则文件与加载

将 DeepSeek 生成的 YAML 内容保存为文件,例如/etc/prometheus/rules/node_alerts.rules.yml。修改prometheus.yml加载该规则文件:

rule_files: - "rules/node_alerts.rules.yml" # - "rules/k8s_alerts.rules.yml" # 如果生成了 k8s 的

重启 Prometheus Server 或发送 SIGHUP 信号 (kill -HUP <pid>) 使其重新加载配置。在 Prometheus Web UI 的 "Alerts" 页面可以看到新定义的告警及其状态。


第三部分:DeepSeek 自动生成 Prometheus 巡检脚本

除了告警,定期的系统巡检也是保障健康的必要手段。巡检脚本用于主动检查 Prometheus 自身及其监控对象的健康状态,如 Exporter 是否在线、指标是否正常采集、配置是否生效等。DeepSeek 可以生成用于执行这些检查的 Shell 或 Python 脚本。

3.1 巡检场景与目标

常见的巡检目标包括:

  1. Exporter 可用性:检查 Exporter 进程是否运行,端口是否开放。
  2. 指标采集状态:检查 Prometheus 是否成功抓取到目标(up指标)。
  3. 告警规则状态:检查告警规则是否加载成功,是否处于激活状态。
  4. Prometheus 自身健康:检查 Prometheus Server 进程、存储、查询性能等。
  5. 配置有效性:模拟测试prometheus.yml或规则文件是否有语法错误。

3.2 使用 DeepSeek 生成巡检脚本

3.2.1 生成 Exporter 状态检查脚本

用户需求描述示例

请生成一个 Shell 脚本,用于检查指定主机上 Node Exporter 是否正在运行。脚本接受一个参数:目标主机 IP。如果 Exporter 进程 (名为node_exporter) 存在且监听端口 9100,则输出 "OK: Node Exporter is running on [IP]"。否则输出 "ERROR: Node Exporter is NOT running on [IP]"。同时尝试通过curl访问http://[IP]:9100/metrics来验证指标端点是否可访问。

DeepSeek 交互 Prompt

prompt = """ 你是一个 Linux 运维专家。请编写一个 Bash Shell 脚本,实现以下功能: 功能: 检查远程 Linux 主机上 Node Exporter 的运行状态。 输入: 脚本接受一个命令行参数:$1,表示目标主机的 IP 地址。 检查步骤: 1. 使用 SSH 连接到目标主机(假设已配置免密登录)。 2. 检查名为 'node_exporter' 的进程是否存在。 3. 检查端口 9100 是否被监听。 4. 尝试从本地(运行脚本的机器)使用 `curl` 访问 `http://$1:9100/metrics`,检查是否能成功获取指标数据(HTTP 状态码 200)。 输出: * 如果以上检查都通过:打印 "OK: Node Exporter is running on $1" * 如果任何一项检查失败:打印 "ERROR: Node Exporter is NOT running on $1" 并退出(exit 1) 请确保脚本具有健壮性,处理可能的 SSH 失败或 `curl` 失败情况。输出只包含结果信息。 """ response = ask_deepseek(prompt) print(response)

DeepSeek 可能生成的输出

#!/bin/bash # 检查是否提供了参数 if [ $# -ne 1 ]; then echo "Usage: $0 <target_host_ip>" exit 1 fi TARGET_IP=$1 # 检查进程是否存在 if ! ssh "$TARGET_IP" "pgrep -x node_exporter" &> /dev/null; then echo "ERROR: Node Exporter is NOT running on $TARGET_IP (Process not found)" exit 1 fi # 检查端口监听 (假设 netstat 或 ss 可用) if ! ssh "$TARGET_IP" "netstat -tuln | grep ':9100'" &> /dev/null; then echo "ERROR: Node Exporter is NOT running on $TARGET_IP (Port 9100 not listening)" exit 1 fi # 检查指标端点可访问性 CURL_OUTPUT=$(curl -s -o /dev/null -w "%{http_code}" "http://$TARGET_IP:9100/metrics") if [ "$CURL_OUTPUT" != "200" ]; then echo "ERROR: Node Exporter is NOT running on $TARGET_IP (Metrics endpoint returned HTTP $CURL_OUTPUT)" exit 1 fi echo "OK: Node Exporter is running on $TARGET_IP" exit 0

关键点解释

  • 脚本接受一个参数$1作为目标 IP。
  • 使用ssh远程执行命令检查进程 (pgrep) 和端口 (netstat)。假设 SSH 免密登录已配置。
  • 使用curl检查指标端点/metrics的 HTTP 状态码。
  • 任何一步失败都会输出错误信息并退出(非零状态码)。
  • 全部通过则输出成功信息。
3.2.2 生成 Prometheus 抓取目标状态检查脚本

用户需求描述示例

请生成一个 Python 脚本,使用 Prometheus API 检查指定job_name的所有抓取目标(target)的up状态。脚本接受两个参数:Prometheus Server 地址(如http://localhost:9090)和job_name。对于该 Job 下的每个 target,查询其up指标的最新值(1 表示健康,0 表示失败)。输出一个列表,显示每个 target 的实例地址(instance标签)和状态(UP/DOWN)。

DeepSeek 交互 Prompt

prompt = """ 你是一个 Python 开发工程师,熟悉 Prometheus API。请编写一个 Python 脚本: 功能: 通过 Prometheus API 查询指定 `job_name` 的所有抓取目标的状态 (`up` 指标)。 输入参数 (命令行参数): 1. Prometheus Server 的地址 (如 'http://localhost:9090') 2. `job_name` (如 'node-exporter') 步骤: 1. 使用 `requests` 库调用 Prometheus API 的 `/api/v1/query` 端点。 2. 构造 PromQL 查询:`up{job="$job_name"}`。注意替换变量。 3. 解析 API 返回的 JSON 响应。 4. 遍历结果列表,对于每个结果: - 获取 `metric` 中的 `instance` 标签值。 - 获取 `value` 数组中的最新值(通常是第二个元素,一个浮点数:1.0 表示 UP, 0.0 表示 DOWN)。 5. 格式化输出:对于每个 instance,打印 "INSTANCE: [instance_address] STATUS: [UP/DOWN]"。 错误处理: * 处理可能的 API 请求失败(如连接错误)。 * 处理 API 返回错误(检查响应中的 `status` 字段)。 * 如果没有找到匹配的 target,输出提示信息。 依赖: 需要安装 `requests` 库。 请确保代码结构清晰,有必要的注释。 """ response = ask_deepseek(prompt) print(response)

DeepSeek 可能生成的输出

#!/usr/bin/env python3 import sys import requests import json def main(): if len(sys.argv) != 3: print("Usage: python check_target_status.py <prometheus_url> <job_name>") sys.exit(1) prom_url = sys.argv[1] job_name = sys.argv[2] # 构造 PromQL 查询 promql = f'up{{job="{job_name}"}}' api_endpoint = f"{prom_url}/api/v1/query" params = {'query': promql} try: response = requests.get(api_endpoint, params=params) response.raise_for_status() # 检查 HTTP 错误 data = response.json() except requests.exceptions.RequestException as e: print(f"ERROR: Failed to query Prometheus API: {e}") sys.exit(2) except json.JSONDecodeError: print("ERROR: Invalid JSON response from Prometheus") sys.exit(3) # 检查 Prometheus API 返回状态 if data.get('status') != 'success': print(f"ERROR: Prometheus API returned error: {data.get('error', 'Unknown error')}") sys.exit(4) result_data = data.get('data', {}).get('result', []) if not result_data: print(f"No targets found for job: {job_name}") sys.exit(0) print(f"Status for targets in job '{job_name}':") for result in result_data: metric = result.get('metric', {}) instance = metric.get('instance', 'unknown') # 获取最新值 (value 是一个 [timestamp, value] 列表) value_pair = result.get('value', []) if not value_pair or len(value_pair) < 2: status_str = "UNKNOWN (Invalid Value)" else: status_val = value_pair[1] status_str = "UP" if float(status_val) == 1.0 else "DOWN" print(f"INSTANCE: {instance} STATUS: {status_str}") if __name__ == "__main__": main()

关键点解释

  • 脚本接受两个参数:Prometheus URL 和 job_name。
  • 使用requests库调用 Prometheus 的/api/v1/queryAPI。
  • 构造 PromQLup{job="job_name"}查询指定 job 下所有 target 的状态。
  • 解析返回的 JSON:
    • 检查顶层status是否为'success'
    • data.result中获取结果列表。
  • 遍历每个结果:
    • metric对象获取instance标签。
    • value数组中获取第二个元素(指标值)。1.0为 UP,0.0为 DOWN。
  • 格式化输出每个 instance 的状态。
  • 包含基本的错误处理(参数检查、API 请求错误、JSON 解析错误、API 返回错误、无结果情况)。
3.2.3 生成告警规则加载检查脚本

用户需求描述示例

请生成一个 Shell 脚本,用于检查 Prometheus 是否成功加载了指定的告警规则文件。脚本接受两个参数:Prometheus Server 地址和规则文件名(不含路径,如node_alerts.rules.yml)。通过调用 Prometheus API 的/api/v1/rules端点,检查该文件名是否存在于返回的规则组列表中。如果存在且状态为 OK,则输出 "SUCCESS: Rule file [filename] is loaded"。如果不存在或状态错误,则输出 "ERROR: Rule file [filename] is not loaded or has errors"。

DeepSeek 交互 Prompt

prompt = """ 你是一个 DevOps 工程师。编写一个 Bash Shell 脚本: 功能: 通过 Prometheus API 检查指定的告警规则文件是否已成功加载且无错误。 输入参数: 1. Prometheus Server 地址 (e.g., http://localhost:9090) 2. 规则文件名 (e.g., node_alerts.rules.yml) - 注意:Prometheus API 返回的是带路径的完整文件名,但通常我们配置的规则文件位于 `rules/` 目录下,所以 API 返回的 name 类似于 `rules/node_alerts.rules.yml`。脚本应能处理这种前缀。 步骤: 1. 调用 Prometheus API: `$prom_url/api/v1/rules` 2. 解析返回的 JSON 数据,找到 `groups` 下的规则组。 3. 检查每个规则组的 `file` 字段(它包含规则文件的路径)。 4. 判断传入的 `规则文件名` 是否出现在 `file` 字段的值中(使用字符串包含判断即可,例如 `file` 的值是 `/path/to/rules/node_alerts.rules.yml`,我们传入 `node_alerts.rules.yml`,只要文件名匹配就算找到)。 5. 对于匹配到的规则组,检查其 `health` 和 `lastError` 字段: - `health` 应为 "ok" - `lastError` 应为空字符串 6. 输出: - 如果找到文件且健康状态 OK:输出 "SUCCESS: Rule file [filename] is loaded" - 如果找到文件但有错误 (`health` != "ok" 或 `lastError` 非空):输出 "ERROR: Rule file [filename] has errors: [lastError]" - 如果未找到文件:输出 "ERROR: Rule file [filename] is not loaded" 依赖: 需要 `jq` 工具来解析 JSON。如果系统没有 `jq`,脚本应提示安装。 请确保脚本健壮,处理可能的 API 访问失败。 """ response = ask_deepseek(prompt) print(response)

DeepSeek 可能生成的输出

#!/bin/bash # 检查参数 if [ $# -ne 2 ]; then echo "Usage: $0 <prometheus_url> <rule_filename>" exit 1 fi PROM_URL="$1" RULE_FILENAME="$2" API_ENDPOINT="${PROM_URL}/api/v1/rules" # 检查 jq if ! command -v jq &> /dev/null; then echo "ERROR: 'jq' command is required but not installed. Please install jq." exit 2 fi # 调用 API response=$(curl -s "$API_ENDPOINT") if [ $? -ne 0 ]; then echo "ERROR: Failed to query Prometheus API at $API_ENDPOINT" exit 3 fi # 检查 API 状态 status=$(echo "$response" | jq -r '.status') if [ "$status" != "success" ]; then error=$(echo "$response" | jq -r '.error') echo "ERROR: Prometheus API returned error: $error" exit 4 fi # 查找规则文件 found=false has_errors=false error_message="" # 遍历规则组 groups=$(echo "$response" | jq -c '.data.groups[]') while IFS= read -r group; do file=$(echo "$group" | jq -r '.file') health=$(echo "$group" | jq -r '.health') last_error=$(echo "$group" | jq -r '.lastError') # 检查文件名是否包含用户输入的 RULE_FILENAME if [[ "$file" == *"$RULE_FILENAME"* ]]; then found=true if [ "$health" != "ok" ] || [ -n "$last_error" ]; then has_errors=true error_message="$last_error" fi fi done <<< "$groups" # 输出结果 if [ "$found" = false ]; then echo "ERROR: Rule file $RULE_FILENAME is not loaded" exit 5 elif [ "$has_errors" = true ]; then echo "ERROR: Rule file $RULE_FILENAME has errors: $error_message" exit 6 else echo "SUCCESS: Rule file $RULE_FILENAME is loaded" exit 0 fi

关键点解释

  • 脚本接受两个参数:Prometheus URL 和规则文件名(如node_alerts.rules.yml)。
  • 使用curl调用/api/v1/rulesAPI 获取当前加载的规则信息。
  • 使用jq解析返回的 JSON 数据:
    • 检查顶层status
    • 遍历data.groups[]数组。
    • 对于每个 group,提取file(规则文件路径),health(健康状况),lastError(错误信息)。
  • 判断传入的RULE_FILENAME是否是file路径的一部分(*"$RULE_FILENAME"*)。
  • 如果找到文件:
    • 检查health是否为"ok"lastError为空。
    • 根据健康状况输出成功或错误信息(包含错误详情)。
  • 如果未找到文件,输出未加载错误。
  • 依赖jq进行 JSON 处理,并检查其是否存在。

第四部分:实战案例 - 自动化 K8s 集群监控配置

本节结合一个具体的 Kubernetes 集群监控场景,展示如何综合运用 DeepSeek 自动生成 Prometheus 配置、告警规则和巡检脚本。

4.1 场景描述

  • 环境:一个多节点的 Kubernetes 集群(假设使用 kubeadm 部署)。
  • 需求
    1. 监控所有 Node 的系统指标(CPU, 内存, 磁盘, 网络)。
    2. 监控 Kubernetes 组件状态(API Server, Scheduler, Controller Manager, etcd, CoreDNS)。
    3. 监控 Pod 和容器的资源使用情况(CPU, 内存)。
    4. 监控 Deployment 的副本状态、Pod 重启次数。
    5. 配置相应的告警规则(如 Node NotReady, Pod 重启频繁, 容器 OOM 风险)。
    6. 生成定期巡检脚本,检查所有 Exporter 状态和关键告警规则是否生效。

4.2 使用 DeepSeek 生成配置与脚本

4.2.1 生成 Prometheus 抓取配置 (prometheus.yml)

用户需求描述

请为监控 Kubernetes 集群生成一个prometheus.ymlscrape_configs片段。要求包括:

  • 使用kubernetes_sd_configs自动发现 Node、Pod、Service、Endpoint 等目标。
  • 配置抓取 kubelet 指标(通常是https://<node_ip>:10250/metrics,但需要跳过 TLS 验证或使用证书)。
  • 配置抓取 Kubernetes 组件(kube-apiserver, kube-controller-manager, kube-scheduler)。它们通常以 Pod 运行,可通过 Service 发现。
  • 配置抓取 CoreDNS 指标(通过其 Service 发现)。
  • 配置抓取 etcd 指标(假设 etcd 运行在非 2379 端口,且需要证书认证)。 请根据最佳实践生成配置,并添加必要的注释。

DeepSeek Prompt 与生成过程(略,生成包含多个job_namescrape_configs,配置自动发现、relabeling、TLS 设置等)

4.2.2 生成告警规则 (k8s_alerts.rules.yml)

用户需求描述

请生成一组针对 Kubernetes 集群的告警规则,包含以下内容:

  1. KubeNodeNotReady: 节点状态为 NotReady 超过 5 分钟。
  2. KubeDeploymentReplicasMismatch: Deployment 的ready_replicas不等于replicas超过 10 分钟。
  3. KubePodFrequentRestart: 单个 Pod 在过去 1 小时内重启次数超过 5 次 (使用kube_pod_container_status_restarts_total)。
  4. KubeContainerOOMKillingRisk: 容器内存使用量接近其 Limit (使用率 > 85%) 超过 5 分钟。
  5. KubeAPIHighLatency: API Server 请求延迟的 99 分位数(apiserver_request_duration_seconds)超过 1 秒。 请生成完整的 YAML 规则文件内容,包含合理的for持续时间、severity标签和annotations

DeepSeek Prompt 与生成过程(略,生成包含多个alert的规则组)

4.2.3 生成综合巡检脚本

用户需求描述

请生成一个名为k8s_monitoring_healthcheck.sh的 Shell 脚本,用于检查 Kubernetes 集群监控的健康状况。脚本执行以下检查:

  1. 检查 Prometheus Server 进程是否运行。
  2. 检查 Node Exporter 是否在每个 Worker Node 上运行(需要遍历节点列表)。
  3. 使用kubectl检查 kube-state-metrics Deployment 是否可用(副本数 > 0)。
  4. 调用 Prometheus API 检查关键告警规则文件(如k8s_alerts.rules.yml)是否加载成功且无错误。
  5. 调用 Prometheus API 检查关键抓取 Job(如kubernetes-nodes,kubernetes-pods)的up状态,列出所有 DOWN 的 target。 脚本应输出汇总报告,清晰标明每项检查的结果(OK/ERROR)和详细信息。

DeepSeek Prompt 与生成过程(略,生成包含多个检查步骤、使用kubectlcurljq的复杂脚本)

4.3 部署与验证

  1. 部署配置
    • 将生成的prometheus.yml放入 Prometheus Server 配置目录。
    • 将生成的k8s_alerts.rules.yml放入rules/目录,并在prometheus.yml中引用。
    • 确保所有必要的 Exporter(Node Exporter, kube-state-metrics 等)已部署在集群内或节点上。
    • 部署 Alertmanager 并配置通知渠道(邮件、Slack 等)。
  2. 部署巡检脚本:将生成的k8s_monitoring_healthcheck.sh脚本放在运维跳板机或定期任务服务器上。
  3. 启动/重启服务:启动/重启 Prometheus Server 和 Alertmanager。
  4. 验证
    • 访问 Prometheus Web UI -> Status -> Targets:查看所有抓取目标是否 UP。
    • 访问 Prometheus Web UI -> Status -> Rules:查看告警规则是否加载,状态是否绿色 (OK)。
    • 访问 Prometheus Web UI -> Alerts:查看告警是否处于非激活状态(或根据条件触发)。
    • 手动运行k8s_monitoring_healthcheck.sh脚本,观察输出是否全部为 OK。
    • 模拟故障(如停掉一个 Node Exporter),观察告警是否触发,脚本是否能检测到错误。

第五部分:最佳实践、优化与未来展望

5.1 最佳实践

  • 清晰的 Prompt 工程:向 DeepSeek 描述需求时,尽量具体、清晰、结构化。指定输入、输出格式、约束条件、依赖关系等。
  • 模块化生成:不要试图让 DeepSeek 一次性生成一个巨大复杂的脚本或配置文件。将其分解为独立的模块(如单独的告警规则、单独的巡检步骤),分别生成后再组装。这更容易控制质量和调试。
  • 代码审查与测试始终将 DeepSeek 生成的代码或配置视为初稿。必须进行人工审查、测试和必要的调整。AI 可能遗漏边界条件或特定环境细节。
  • 版本控制:将 DeepSeek 生成的配置文件和脚本纳入 Git 等版本控制系统管理,方便追踪变更和回滚。
  • 结合 CI/CD:可以将 DeepSeek 集成到 CI/CD 流程中。例如,当监控需求文档更新后,自动触发 DeepSeek 生成新的规则或脚本草稿,经人工审核后自动部署。
  • 安全考虑
    • 避免在 Prompt 或生成的脚本中硬编码敏感信息(密码、API Key)。使用环境变量或配置管理工具。
    • 限制 DeepSeek 生成脚本的权限(如避免直接生成rm -rf /)。
    • 仔细审查涉及 SSH、API 调用、sudo 等操作的脚本。

5.2 优化方向

  • 上下文学习:在连续的对话中,DeepSeek 可以学习之前的配置风格和约定(如特定的标签命名规则severity: team-sre)。在后续的 Prompt 中提醒它参考之前的输出。
  • 模板化:对于高度重复的结构(如大量类似的告警规则),可以先让 DeepSeek 生成一个模板,然后通过脚本或手动方式填充具体细节。
  • 错误注入测试:生成巡检脚本后,可以进一步要求 DeepSeek 生成用于测试该脚本的"错误场景"(如模拟 Exporter 进程挂掉),验证脚本是否能正确捕获错误。
  • 生成文档:让 DeepSeek 为生成的告警规则或巡检脚本自动编写说明文档,解释其工作原理和检查逻辑。

5.3 未来展望

DeepSeek 与 Prometheus 的结合代表了 AI 赋能运维(AIOps)的一个重要方向。未来可期的发展包括:

  • 更智能的根因分析:DeepSeek 不仅能生成告警规则,还能在告警触发后,根据关联指标自动分析并提供可能的原因报告。
  • 预测性监控:结合历史数据,DeepSeek 可生成预测未来资源瓶颈(如磁盘将满、CPU 过载)的告警规则或巡检建议。
  • 自然语言查询:用户可以直接用自然语言查询监控数据(如“过去一周哪个 Namespace 的 Pod 重启最多?”),DeepSeek 将其翻译成 PromQL 并执行。
  • 配置优化建议:DeepSeek 分析现有的 Prometheus 配置和抓取指标,提出优化建议(如调整scrape_interval、合并类似规则、识别未使用的指标)。
  • 闭环自动化:在检测到问题后,DeepSeek 不仅能告警,还能生成(或在安全约束下执行)修复脚本的草稿(如重启失败服务、清理磁盘空间)。

结语

Prometheus 提供了强大的监控数据采集、存储和告警能力,而 DeepSeek 则赋予了运维工作前所未有的智能化和自动化潜力。通过本文的实战演示,我们看到了如何利用 DeepSeek 的自然语言理解和代码生成能力,自动化完成 Prometheus 告警规则配置和系统巡检脚本的编写工作,将运维人员从繁琐、易错的手动配置中解放出来,使其能够更专注于高价值的架构优化和问题解决。

需要注意的是,AI 生成的输出仍需人工把关和测试。但随着 AI 模型的不断进步和我们对 Prompt 工程理解的加深,DeepSeek 与 Prometheus 的融合必将为 IT 运维领域带来更高效、更智能的未来。开始尝试将 DeepSeek 融入你的 Prometheus 运维工作流,迈出智能化运维的第一步吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1192076.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QtScrcpy多设备管理:从单屏到批量控制的效率革命

QtScrcpy多设备管理&#xff1a;从单屏到批量控制的效率革命 【免费下载链接】QtScrcpy Android实时投屏软件&#xff0c;此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/QtScrcpy …

YOLOv9社区资源汇总:GitHub星标项目与文档参考推荐

YOLOv9社区资源汇总&#xff1a;GitHub星标项目与文档参考推荐 1. 镜像环境说明 本镜像基于 YOLOv9 官方代码库构建&#xff0c;预装了完整的深度学习开发环境&#xff0c;集成了训练、推理及评估所需的所有依赖&#xff0c;开箱即用。无论是新手入门还是开发者快速验证模型效…

3分钟掌握SmartKG:用Excel构建智能知识图谱的终极指南

3分钟掌握SmartKG&#xff1a;用Excel构建智能知识图谱的终极指南 【免费下载链接】SmartKG This project accepts excel files as input which contains the description of a Knowledge Graph (Vertexes and Edges) and convert it into an in-memory Graph Store. This proj…

Kubernetes 与 DeepSeek:高效 Pod 部署配置与资源调度优化指南

摘要&#xff1a; 随着大语言模型&#xff08;Large Language Model, LLM&#xff09;在自然语言处理、内容生成、代码辅助等领域的广泛应用&#xff0c;如何高效、稳定、经济地在生产环境中部署和管理这些模型成为关键挑战。Kubernetes&#xff08;K8s&#xff09;作为领先的容…

关于浔川 AI 翻译历史版本及现版本的合集

关于浔川 AI 翻译历史版本及现版本的合集浔川 AI 翻译作为聚焦跨语言沟通的智能工具&#xff0c;其版本迭代始终围绕 “准确性、便捷性、场景化” 三大核心目标&#xff0c;从基础翻译功能逐步升级为多场景、全语种、高适配的综合解决方案。本文将系统梳理其历史版本亮点与现版…

Label Studio:重新定义数据标注的智能解决方案

Label Studio&#xff1a;重新定义数据标注的智能解决方案 【免费下载链接】label-studio 项目地址: https://gitcode.com/gh_mirrors/lab/label-studio 你是否曾经为海量数据标注工作感到头疼&#xff1f;面对复杂的标注需求&#xff0c;传统的标注工具往往难以胜任。…

告别繁琐配置!用YOLOv13官版镜像快速搭建检测系统

告别繁琐配置&#xff01;用YOLOv13官版镜像快速搭建检测系统 你是否还在为部署一个目标检测环境而耗费半天时间&#xff1f;git clone 卡在 10%&#xff0c;pip install 报错不断&#xff0c;CUDA 版本不匹配&#xff0c;PyTorch 安装失败……这些“环境地狱”问题&#xff0…

如何评估unet处理时间?性能基准测试方法论

如何评估UNet人像卡通化处理时间&#xff1f;性能基准测试方法论 1. 为什么需要科学评估UNet处理时间&#xff1f; 你有没有遇到过这样的情况&#xff1a;明明点下“开始转换”&#xff0c;却盯着进度条等了十几秒&#xff0c;心里直犯嘀咕——这到底算快还是慢&#xff1f;是…

Sharp-dumpkey技术解析:微信数据库密钥获取实战手册

Sharp-dumpkey技术解析&#xff1a;微信数据库密钥获取实战手册 【免费下载链接】Sharp-dumpkey 基于C#实现的获取微信数据库密钥的小工具 项目地址: https://gitcode.com/gh_mirrors/sh/Sharp-dumpkey &#x1f3af; 工具概述与核心价值 Sharp-dumpkey是一款基于C#开发…

G-Helper:华硕笔记本终极控制神器完整使用指南

G-Helper&#xff1a;华硕笔记本终极控制神器完整使用指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地址: http…

知名的助餐服务养老院2026年怎么联系?最新推荐

行业背景与市场趋势随着我国老龄化进程加速,养老服务业正迎来前所未有的发展机遇。根据国家统计局数据,截至2023年底,我国60岁及以上人口已达2.8亿,占总人口的19.8%。预计到2026年,这一比例将突破20%,正式进入中…

从理论到实践:Qwen2.5-7B LoRA微调落地完整路径

从理论到实践&#xff1a;Qwen2.5-7B LoRA微调落地完整路径 在大模型时代&#xff0c;如何让一个通用语言模型真正“属于”你&#xff1f;答案就是微调。而LoRA&#xff08;Low-Rank Adaptation&#xff09;技术的出现&#xff0c;极大降低了微调门槛——无需动辄多卡A100&…

Qwen3Guard-Gen模型切换技巧:0.6B/4B/8B版本对比教程

Qwen3Guard-Gen模型切换技巧&#xff1a;0.6B/4B/8B版本对比教程 你是否在部署安全审核系统时&#xff0c;纠结该选哪个规模的模型&#xff1f;太小怕不准&#xff0c;太大又跑不动。今天我们就来实测阿里开源的 Qwen3Guard-Gen 系列——它一口气提供了 0.6B、4B 和 8B 三个参…

ChampR英雄联盟必备神器:3分钟掌握高端玩家出装符文攻略

ChampR英雄联盟必备神器&#xff1a;3分钟掌握高端玩家出装符文攻略 【免费下载链接】champ-r &#x1f436; Yet another League of Legends helper 项目地址: https://gitcode.com/gh_mirrors/ch/champ-r 还在为英雄联盟的出装搭配头疼吗&#xff1f;每次选完英雄都要…

鸿蒙系统 IO 性能优化实战:从应用卡顿到 OTA 升级的完整解决方案

摘要 在鸿蒙&#xff08;HarmonyOS / OpenHarmony&#xff09;应用和系统开发中&#xff0c;IO 操作几乎无处不在&#xff0c;比如文件读写、配置加载、日志输出、数据库访问以及 OTA 升级等。很多性能问题表面上看是应用卡顿、启动慢、耗电高&#xff0c;实际上根源都指向 IO …

稳定性胜过精度!HeyGem设计理念值得点赞

稳定性胜过精度&#xff01;HeyGem设计理念值得点赞 在AI技术飞速发展的今天&#xff0c;我们常常被各种“SOTA”、“高精度”、“前沿架构”的宣传所吸引。但真正将AI推向实际应用的&#xff0c;往往不是那些参数量惊人的模型&#xff0c;而是稳定、易用、可维护的系统设计。…

LeetDown降级神器:让A6/A7设备重回经典iOS版本的终极方案

LeetDown降级神器&#xff1a;让A6/A7设备重回经典iOS版本的终极方案 【免费下载链接】LeetDown a GUI macOS Downgrade Tool for A6 and A7 iDevices 项目地址: https://gitcode.com/gh_mirrors/le/LeetDown 还在为老旧iOS设备无法降级而烦恼吗&#xff1f;&#x1f62…

鸿蒙 UI 为什么会卡?GPU 渲染性能实战分析与优化

摘要 随着鸿蒙系统在手机、平板、穿戴设备以及多终端场景中的应用越来越多&#xff0c;UI 流畅度已经成为用户最直观、最容易感知的问题之一。 在实际开发中&#xff0c;很多页面逻辑并不复杂&#xff0c;但依然会出现掉帧、滑动卡顿、动画不顺畅等情况&#xff0c;问题往往不在…

原神帧率解锁终极方案:从卡顿到丝滑的性能提升秘籍

原神帧率解锁终极方案&#xff1a;从卡顿到丝滑的性能提升秘籍 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 你是否曾经在原神中转动视角时感受到明显的画面拖影&#xff1f;是否觉得高…

QuickRecorder完全掌握:macOS专业级录屏高效指南

QuickRecorder完全掌握&#xff1a;macOS专业级录屏高效指南 【免费下载链接】QuickRecorder A lightweight screen recorder based on ScreenCapture Kit for macOS / 基于 ScreenCapture Kit 的轻量化多功能 macOS 录屏工具 项目地址: https://gitcode.com/GitHub_Trending…