首页
学习
活动
专区
圈层
工具
发布

Kapacitor如何通过rest api使用模板创建任务?

Kapacitor通过REST API使用模板创建任务涉及以下核心概念和操作流程:

一、基础概念

  1. Kapacitor模板
    • 预定义的任务配置(含TICKscript),支持参数化变量,便于批量创建相似任务。
    • 模板通过define-template命令定义,变量通过vars声明。
  • REST API端点
    • /kapacitor/v1/templates:管理模板
    • /kapacitor/v1/tasks:管理任务(通过模板创建的任务)

二、操作步骤

1. 定义模板(示例TICKscript模板)

代码语言:txt
复制
POST /kapacitor/v1/templates HTTP/1.1
Content-Type: application/json

{
  "id": "cpu_alert_template",
  "type": "stream",
  "script": "var threshold = {{.threshold}}\nstream\n  |from()\n    .measurement('cpu')\n  |alert()\n    .crit(lambda: \"usage_idle\" < threshold)\n    .message('CPU idle is {{.message}}')",
  "vars": {
    "threshold": {
      "value": 80,
      "type": "float"
    },
    "message": {
      "value": "CRITICAL",
      "type": "string"
    }
  }
}

2. 通过模板创建任务

代码语言:txt
复制
POST /kapacitor/v1/tasks HTTP/1.1
Content-Type: application/json

{
  "id": "cpu_alert_task",
  "template-id": "cpu_alert_template",
  "vars": {
    "threshold": {
      "value": 90.0
    },
    "message": {
      "value": "High CPU usage!"
    }
  },
  "dbrps": [{"db": "telegraf", "rp": "autogen"}]
}

三、关键参数说明

| 参数 | 说明 | |----------------|----------------------------------------------------------------------| | template-id | 引用的模板ID | | vars | 覆盖模板中的变量值(需匹配模板定义的变量类型) | | dbrps | 必填,指定数据库和保留策略(Database/Retention Policy) |

四、常见问题及解决

1. 模板变量未定义

  • 现象:API返回invalid template vars错误。
  • 原因:任务请求中的变量名/类型与模板定义不匹配。
  • 解决:检查模板的vars定义,确保任务提交的变量名称和类型一致。

2. 任务未生效

  • 现象:任务创建成功但无告警触发。
  • 原因:可能因数据未匹配(如measurement名称错误)或阈值设置不合理。
  • 解决
    • 确认数据源是否包含cpu measurement。
    • 通过kapacitor show cpu_alert_task检查任务状态和日志。

3. 权限问题

  • 现象:API返回403 Forbidden
  • 原因:未启用API认证或Token错误。
  • 解决:在Kapacitor配置中启用auth-enabled,并在请求头添加Authorization: Bearer <TOKEN>

五、应用场景

  1. 批量告警规则:为不同主机快速创建相同逻辑的CPU告警任务。
  2. 动态阈值调整:通过修改变量值实现阈值动态更新(无需修改TICKscript)。
  3. 多租户隔离:为不同租户使用同一模板生成独立任务。

六、代码示例(Python调用API)

代码语言:txt
复制
import requests

# 定义模板
template_url = "http://localhost:9092/kapacitor/v1/templates"
template_data = {
    "id": "mem_alert_template",
    "type": "batch",
    "script": "var limit = {{.limit}}\nbatch\n  |query('SELECT used_percent FROM mem')\n  |alert()\n    .warn(lambda: \"used_percent\" > limit)",
    "vars": {"limit": {"value": 70, "type": "int"}}
}
requests.post(template_url, json=template_data)

# 创建任务
task_url = "http://localhost:9092/kapacitor/v1/tasks"
task_data = {
    "id": "mem_alert_task1",
    "template-id": "mem_alert_template",
    "vars": {"limit": {"value": 85}},
    "dbrps": [{"db": "telegraf", "rp": "autogen"}]
}
response = requests.post(task_url, json=task_data)
print(response.json())

通过上述流程,可高效利用模板化任务管理Kapacitor的告警或数据处理逻辑。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券