文档文档

Kapacitor HTTP API 参考文档

使用 Kapacitor HTTP API 管理 Kapacitor 任务、模板、录制、收集故障排除数据等。

一般信息

  • Kapacitor 默认提供一个 HTTP API,端口为 9092
  • 下面的每个部分都定义了可用的 API 端点及其输入和输出。
  • 所有请求都使用基础路径 /kapacitor/v1/ 进行版本控制和命名空间划分。
本节内容

HTTP 响应代码

所有请求都可以返回这些响应代码

响应代码含义
2xx请求成功,内容取决于具体请求。
4xx无效请求,请参阅错误信息以了解请求存在的问题。重复请求将继续返回相同的错误。
5xx服务器无法处理该请求,请参阅错误信息了解原因。如果服务器问题已解决,重复请求可能会成功。

错误

所有请求都可以以以下格式返回 JSON,以提供有关失败请求的更多信息。

{ "error" : "error message" }

查询参数 vs JSON 主体

查询参数仅用于 GET 请求。所有其他请求都期望参数以 JSON 主体的形式发送。

/kapacitor/v1/write 端点是此规则的一个例外,因为 Kapacitor 与 InfluxDB 的 /write 端点兼容。

在创建资源时,Kapacitor API 服务器会返回一个 link 对象,其中包含资源的 href。客户端应能够使用先前调用提供的链接,无需进行任何路径操作。

ID

为了让您能够控制 ID,Kapacitor API 允许客户端为各种资源指定 ID。如果您不指定 ID,Kapacitor 将为该资源生成一个随机的 UUID。

所有 ID 都必须匹配以下正则表达式(基本上是数字、Unicode 字母、-._)。

^[-\._\p{L}0-9]+$`

向后兼容性

当前,Kapacitor 处于 1.x 版本,并保证所有新版本都与之前的版本兼容。这直接适用于 API。API 可能会进行更新,但在 1.x 版本中,现有端点不会以向后不兼容的方式进行更改。

技术预览

当 Kapacitor 添加新功能时,它可能会在“技术预览”版本中发布几个小版本,然后再升级为完全支持的 v1 功能。技术预览功能在升级为 v1 功能之前,可能会发生向后不兼容的更改。技术预览允许新功能成熟,同时保持定期发布的计划。技术预览允许新功能成熟,同时保持定期发布的计划。

为了清楚地标明 API 中哪些功能处于技术预览状态,会使用基础路径 /kapacitor/v1preview。如果您希望预览其中一些新功能,请使用路径 /kapacitor/v1preview 而不是 /kapacitor/v1 来发送请求。所有 v1 端点都可以在 v1preview 路径下访问,这样您的客户端就不需要配置多个路径。技术预览端点仅在 v1preview 路径下可用。

使用技术预览意味着您可能需要更新您的客户端以适应预览端点的破坏性更改。

写入数据

Kapacitor 接受通过 HTTP 写入数据,使用 InfluxData 的 行协议数据格式kapacitor/v1/write 端点在本质上与 InfluxDB 的 /write 端点相同。

查询参数用途
db写入的数据库名称。
rp写入的保留策略名称。

Kapacitor 按数据库和保留策略范围划分所有点。因此,您必须为写入指定 rp,以便 Kapacitor 使用正确的保留策略。

示例

将数据写入 Kapacitor。

POST /kapacitor/v1/write?db=DB_NAME&rp=RP_NAME
cpu,host=example.com value=87.6

为保持与等效的 InfluxDB /write 端点的兼容性,/write 端点是 /kapacitor/v1/write 端点的别名。

POST /write?db=DB_NAME&rp=RP_NAME
cpu,host=example.com value=87.6

管理任务

任务代表 Kapacitor 要执行的工作。任务由其 ID、类型、TICKscript 以及允许其访问的数据库保留策略对列表定义。

定义或更新任务

要定义任务,请 POST 到 /kapacitor/v1/tasks 端点。如果任务已存在,则使用 PATCH 方法修改任务的任何属性。

使用以下选项的 JSON 对象定义任务

属性用途
id任务的唯一标识符。如果为空,将选择一个随机 ID。
template-id(可选) 使用模板 ID 而不是指定 TICKscript 和类型。
type任务类型:streambatch
dbrps任务允许访问的数据库保留策略对列表。
script脚本内容。
statusenableddisabled 之一。
vars一组变量,用于覆盖 TICKscript 中定义的任何变量。

使用 PATCH 时,如果任何属性缺失,任务将保持不变。

注意: 补丁任务时,不会对正在运行的任务进行任何更改。必须先禁用然后重新启用任务,更改才能生效。

vars

vars 对象形式如下

{
    "field_name" : {
        "value": <VALUE>,
        "type": <TYPE>
    },
    "another_field" : {
        "value": <VALUE>,
        "type": <TYPE>
    }
}

以下是有效类型和示例值的表格。

类型示例值描述
booltrue“true” 或 “false”
int42任何整数值
float2.5 或 67任何数值
持续时间“1s” 或 1000000000任何以纳秒为单位解释的整数值或 InfluxQL 持续时间字符串(即 10000000000 是 10s)
string“a string”任何字符串值
regex“^abc.*xyz”任何表示有效 Go 正则表达式的字符串值 https://golang.ac.cn/pkg/regexp/
lambda“"value" > 5”任何有效的 TICKscript lambda 表达式字符串
star""不需要值,star 类型变量表示 TICKscript 中的字面量 *(即 .groupBy(*)
list[{“type”: TYPE, “value”: VALUE}]变量对象的列表。目前列表只能包含字符串或 star 变量。

示例

使用 id 值为 TASK_ID 创建一个新任务。要从模板创建任务,请添加 template-id

POST /kapacitor/v1/tasks
{
    "id" : "TASK_ID",
    "template-id" : "TEMPLATE_ID", 
    "type" : "stream",
    "dbrps": [{"db": "DATABASE_NAME", "rp" : "RP_NAME"}],
    "script": "stream\n    |from()\n        .measurement('cpu')\n",
    "vars" : {
        "var1": {
            "value": 42,
            "type": "float"
        }
    }
}

响应包含任务详情。

{
    "link" : {"rel": "self", "href": "/kapacitor/v1/tasks/TASK_ID"},
    "id" : "TASK_ID",
    "template-id" : "TEMPLATE_ID",
    "type" : "stream",
    "dbrps" : [{"db": "DATABASE_NAME", "rp" : "RP_NAME"}],
    "script" : "stream\n    |from()\n        .measurement('cpu')\n",
    "dot" : "digraph TASK_ID { ... }",
    "vars" : {
        "var1": {
            "value": 42,
            "type": "float"
        }
    },
    "status" : "enabled",
    "executing" : true,
    "error" : "",
    "created": "2006-01-02T15:04:05Z07:00",
    "modified": "2006-01-02T15:04:05Z07:00",
    "stats" : {},
    "template-id": "TASK_ID"
}

仅修改任务的 dbrps

PATCH /kapacitor/v1/tasks/TASK_ID
{
    "dbrps": [{"db": "NEW_DATABASE_NAME", "rp" : "NEW_RP_NAME"}]
}

注意: 设置任何 DBRP 都将覆盖所有已存储的 DBRP。设置任何 Vars 都将覆盖所有已存储的 Vars。

启用现有任务。

PATCH /kapacitor/v1/tasks/TASK_ID
{
    "status" : "enabled",
}

禁用现有任务。

PATCH /kapacitor/v1/tasks/TASK_ID
{
    "status" : "disabled",
}

定义一个新任务,该任务在创建时启用。

POST /kapacitor/v1/tasks
{
    "id" : "TASK_ID",
    "template-id" : "TEMPLATE_ID",
    "type" : "stream",
    "dbrps" : [{"db": "DATABASE_NAME", "rp" : "RP_NAME"}],
    "script" : "stream\n    |from()\n        .measurement('cpu')\n",
    "status" : "enabled"
}

响应包含已创建的任务。

{
    "id" : "TASK_ID",
    "template-id" : "TEMPLATE_ID",
    "link" : {"rel": "self", "href": "/kapacitor/v1/tasks/TASK_ID"}
}

响应

代码含义
200任务已创建,包含任务信息。
404任务不存在

获取任务

要获取有关任务的信息,请向 /kapacitor/v1/tasks/TASK_ID 端点发出 GET 请求。

查询参数默认用途
dot-viewattributeslabelsattributes 之一。Labels 不太易读,但可以正确渲染所有标签中的信息。
script-formatformattedformattedraw 之一。Raw 将返回与定义时完全相同的脚本。Formatted 将首先格式化脚本。
replay-id正在运行的回放的可选 ID。返回的任务信息将处于正在运行的回放的任务上下文中。

除了上面 列出的属性 之外,任务还具有这些只读属性。

属性描述
dot任务 DAG 的 GraphViz DOT 语法格式化表示。GraphViz DOT 语法格式化的任务 DAG 表示。
executing任务当前是否正在执行。
error执行任务时遇到的任何错误。
stats任务统计信息的映射。
created任务首次创建日期
modified任务最后修改日期
last-enabled任务最后一次设置为 enabled 状态的日期

示例

使用默认值获取任务信息。如果任务与模板相关联,则响应中包含模板 ID。

GET /kapacitor/v1/tasks/TASK_ID
{
    "link" : {"rel": "self", "href": "/kapacitor/v1/tasks/TASK_ID"},
    "id" : "TASK_ID",
    "template-id" : "TEMPLATE_ID",
    "type" : "stream",
    "dbrps" : [{"db": "DATABASE_NAME", "rp" : "RP_NAME"}],
    "script" : "stream\n    |from()\n        .measurement('cpu')\n",
    "dot" : "digraph TASK_ID { ... }",
    "status" : "enabled",
    "executing" : true,
    "error" : "",
    "created": "2006-01-02T15:04:05Z07:00",
    "modified": "2006-01-02T15:04:05Z07:00",
    "last-enabled": "2006-01-03T15:04:05Z07:00",
    "stats" : {},
    "template-id": "TASK_ID"
}

仅使用 DOT 内容中的标签获取任务信息,并跳过格式化步骤。

GET /kapacitor/v1/tasks/TASK_ID?dot-view=labels&script-format=raw
{
    "link" : {"rel": "self", "href": "/kapacitor/v1/tasks/TASK_ID"},
    "id" : "TASK_ID",
    "template-id" : "TEMPLATE_ID",
    "type" : "stream",
    "dbrps" : [{"db": "DATABASE_NAME", "rp" : "RP_NAME"}],
    "script" : "stream|from().measurement('cpu')",
    "dot" : "digraph TASK_ID { ... }",
    "status" : "enabled",
    "executing" : true,
    "error" : "",
    "created": "2006-01-02T15:04:05Z07:00",
    "modified": "2006-01-02T15:04:05Z07:00",
    "last-enabled": "2006-01-03T15:04:05Z07:00",
    "stats" : {}
}

响应

代码含义
200成功
404任务不存在

删除任务

要删除任务,请向 /kapacitor/v1/tasks/TASK_ID 端点发出 DELETE 请求。

DELETE /kapacitor/v1/tasks/TASK_ID

响应

代码含义
204成功

注意: 删除不存在的任务不是错误,将返回 204 成功。

列出任务

要获取有关多个任务的信息,请向 /kapacitor/v1/tasks 端点发出 GET 请求。

查询参数默认用途
pattern根据模式过滤结果。使用标准的 shell glob 匹配,有关更多详细信息,请参见 此处
字段 (fields)要返回的字段列表。如果为空,则返回所有字段。idlink 字段始终返回。
dot-viewattributeslabelsattributes 之一。Labels 不太易读,但可以正确渲染所有标签中的信息。
script-formatformattedformattedraw 之一。Raw 将返回与定义时完全相同的脚本。Formatted 将首先格式化脚本。
offset0分页遍历任务的偏移量。
limit100要返回的最大任务数。

示例

获取所有任务列表详情。

GET /kapacitor/v1/tasks
{
    "tasks" : [
        {
            "link" : {"rel":"self", "href":"/kapacitor/v1/tasks/TASK_ID"},
            "id" : "TASK_ID",
            "type" : "stream",
            "dbrps" : [{"db": "DATABASE_NAME", "rp" : "RP_NAME"}],
            "script" : "stream|from().measurement('cpu')",
            "dot" : "digraph TASK_ID { ... }",
            "status" : "enabled",
            "executing" : true,
            "error" : "",
            "stats" : {},
            "template-id" : "TEMPLATE_ID"
        },
        {
            "link" : {"rel":"self", "href":"/kapacitor/v1/tasks/ANOTHER_TASK_ID"},
            "id" : "ANOTHER_TASK_ID",
            "type" : "stream",
            "dbrps" : [{"db": "DATABASE_NAME", "rp" : "RP_NAME"}],
            "script" : "stream|from().measurement('cpu')",
            "dot" : "digraph ANOTHER_TASK_ID{ ... }",
            "status" : "disabled",
            "executing" : true,
            "error" : "",
            "stats" : {},
            "template-id" : "TEMPLATE_ID"
        }
    ]
}

可选地,您可以指定一个 glob pattern 来仅列出匹配的任务。

GET /kapacitor/v1/tasks?pattern=TASK*
{
    "tasks" : [
        {
            "link" : {"rel":"self", "href":"/kapacitor/v1/tasks/TASK_ID"},
            "id" : "TASK_ID",
            "type" : "stream",
            "dbrps" : [{"db": "DATABASE_NAME", "rp" : "RP_NAME"}],
            "script" : "stream|from().measurement('cpu')",
            "dot" : "digraph TASK_ID { ... }",
            "status" : "enabled",
            "executing" : true,
            "error" : "",
            "stats" : {},
            "template-id" : "TEMPLATE_ID"
        }
    ]
}

获取所有任务,但只获取状态、执行中和错误字段。

GET /kapacitor/v1/tasks?fields=status&fields=executing&fields=error
{
    "tasks" : [
        {
            "link" : {"rel":"self", "href":"/kapacitor/v1/tasks/TASK_ID"},
            "id" : "TASK_ID",
            "status" : "enabled",
            "executing" : true,
            "error" : "",
        },
        {
            "link" : {"rel":"self", "href":"/kapacitor/v1/tasks/ANOTHER_TASK_ID"},
            "id" : "ANOTHER_TASK_ID",
            "status" : "disabled",
            "executing" : true,
            "error" : "",
        }
    ]
}

响应

代码含义
200成功

注意:如果模式不匹配任何任务,将返回一个空列表,并显示 200 成功。

自定义任务 HTTP 端点

在 TICKscript 中,可以通过 HTTPOut 节点通过 HTTP 公开近期数据的缓存。数据可在路径 /kapacitor/v1/tasks/TASK_ID/ENDPOINT_NAME 访问。

示例

对于 TICKscript

stream
    |from()
        .measurement('cpu')
    |window()
        .period(60s)
        .every(60s)
    |httpOut('mycustom_endpoint')
GET /kapacitor/v1/tasks/TASK_ID/mycustom_endpoint
{
    "series": [
        {
            "name": "cpu",
            "columns": [
                "time",
                "value"
            ],
            "values": [
                [
                    "2015-01-29T21:55:43.702900257Z",
                    55
                ],
                [
                    "2015-01-29T21:56:43.702900257Z",
                    42
                ],
            ]
        }
    ]
}

输出与查询 InfluxDB 的数据相同。

管理模板

您还可以定义任务模板。任务模板由模板 TICKscript 和任务类型定义。

定义模板

要定义模板,请 POST 到 /kapacitor/v1/templates 端点。如果模板已存在,则使用 PATCH 方法修改模板的任何属性。

使用以下选项的 JSON 对象定义模板

属性用途
id模板的唯一标识符。如果为空,将选择一个随机 ID。
type模板类型:streambatch
script脚本内容。

使用 PATCH 时,如果任何选项缺失,它将保持不变。

更新模板

更新现有模板时,所有关联任务都将使用新的模板定义重新加载。如果发生错误,任何已更新为新定义的任务都将恢复为旧定义。这确保了模板的所有关联任务一起成功或失败。

因此,您将无法更新模板,如果它引入了 TICKscript 的破坏性更改,您有两种选择:

  1. 创建一个新模板并将每个任务重新分配给新模板,根据需要更新任务变量。
  2. 如果破坏性更改是向前兼容的(即添加了新的必需变量),请先更新每个任务以包含所需的变量,然后待所有任务准备就绪后再更新模板。

示例

创建 ID 为 TEMPLATE_ID 的新模板。

POST /kapacitor/v1/templates
{
    "id" : "TEMPLATE_ID",
    "type" : "stream",
    "script": "stream\n    |from()\n        .measurement('cpu')\n"
}

响应包含模板 idlink

{
    "link" : {"rel": "self", "href": "/kapacitor/v1/templates/TASK_ID"},
    "id" : "TASK_ID",
    "type" : "stream",
    "script" : "stream\n    |from()\n        .measurement('cpu')\n",
    "dot" : "digraph TASK_ID { ... }",
    "error" : "",
    "created": "2006-01-02T15:04:05Z07:00",
    "modified": "2006-01-02T15:04:05Z07:00",
}

仅修改模板的脚本。

PATCH /kapacitor/v1/templates/TEMPLATE_ID
{
    "script": "stream|from().measurement('mem')"
}

响应

代码含义
200模板已创建,包含模板信息。
404模板不存在

获取模板

要获取有关模板的信息,请向 /kapacitor/v1/templates/TEMPLATE_ID 端点发出 GET 请求。

查询参数默认用途
script-formatformattedformattedraw 之一。Raw 将返回与定义时完全相同的脚本。Formatted 将首先格式化脚本。

除了上面 列出的属性 之外,模板还具有这些只读属性。

属性描述
varsTICKscript 中的命名变量集合,包含它们的类型、默认值和描述。
dot模板 DAG 的 GraphViz DOT 语法格式化表示。注意:labels 与 attributes 无关,因为模板永远不会执行。
error读取模板时遇到的任何错误。
created模板首次创建日期
modified模板最后修改日期

示例

使用默认值获取模板信息。

GET /kapacitor/v1/templates/TEMPLATE_ID
{
    "link" : {"rel": "self", "href": "/kapacitor/v1/templates/TEMPLATE_ID"},
    "id" : "TASK_ID",
    "type" : "stream",
    "script" : "var x = 5\nstream\n    |from()\n        .measurement('cpu')\n",
    "vars": {"x":{"value": 5, "type":"int", "description": "threshold value"}},
    "dot" : "digraph TASK_ID { ... }",
    "error" : "",
    "created": "2006-01-02T15:04:05Z07:00",
    "modified": "2006-01-02T15:04:05Z07:00",
}

响应

代码含义
200成功
404模板不存在

删除模板

要删除模板,请向 /kapacitor/v1/templates/TEMPLATE_ID 端点发出 DELETE 请求。

注意:删除模板会将所有关联的任务变成孤儿。孤儿任务的当前状态将保持不变,但无法启用它们。

DELETE /kapacitor/v1/templates/TEMPLATE_ID

响应

代码含义
204成功

注意:删除不存在的模板不是错误,将返回 204 成功。

列出模板

要获取有关多个模板的信息,请向 /kapacitor/v1/templates 端点发出 GET 请求。

查询参数默认用途
pattern根据模式过滤结果。使用标准的 shell glob 匹配,有关更多详细信息,请参见 此处
字段 (fields)要返回的字段列表。如果为空,则返回所有字段。idlink 字段始终返回。
script-formatformattedformattedraw 之一。Raw 将返回与定义时完全相同的脚本。Formatted 将首先格式化脚本。
offset0分页遍历模板的偏移量。
limit100要返回的最大模板数。

示例

获取所有模板。

GET /kapacitor/v1/templates
{
    "templates" : [
        {
            "link" : {"rel":"self", "href":"/kapacitor/v1/templates/TEMPLATE_ID"},
            "id" : "TEMPLATE_ID",
            "type" : "stream",
            "script" : "stream|from().measurement('cpu')",
            "dot" : "digraph TEMPLATE_ID { ... }",
            "error" : ""
        },
        {
            "link" : {"rel":"self", "href":"/kapacitor/v1/templates/ANOTHER_TEMPLATE_ID"},
            "id" : "ANOTHER_TEMPLATE_ID",
            "type" : "stream",
            "script" : "stream|from().measurement('cpu')",
            "dot" : "digraph ANOTHER_TEMPLATE_ID{ ... }",
            "error" : ""
        }
    ]
}

可选地,指定一个 glob pattern 来仅列出匹配的模板。

GET /kapacitor/v1/template?pattern=TEMPLATE*
{
    "templates" : [
        {
            "link" : {"rel":"self", "href":"/kapacitor/v1/templates/TEMPLATE_ID"},
            "id" : "TEMPLATE_ID",
            "type" : "stream",
            "script" : "stream|from().measurement('cpu')",
            "dot" : "digraph TEMPLATE_ID { ... }",
            "error" : ""
        }
    ]
}

获取所有模板,但只获取 scripterror 字段。

GET /kapacitor/v1/templates?fields=status&fields=executing&fields=error
{
    "templates" : [
        {
            "link" : {"rel":"self", "href":"/kapacitor/v1/templates/TEMPLATE_ID"},
            "id" : "TEMPLATE_ID",
            "script" : "stream|from().measurement('cpu')",
            "error" : ""
        },
        {
            "link" : {"rel":"self", "href":"/kapacitor/v1/templates/ANOTHER_TEMPLATE_ID"},
            "id" : "ANOTHER_TEMPLATE_ID",
            "script" : "stream|from().measurement('cpu')",
            "error" : ""
        }
    ]
}

响应

代码含义
200成功

注意:如果模式不匹配任何模板,将返回一个空列表,并显示 200 成功。

管理录制

Kapacitor 可以保存数据的录制,并针对指定任务回放它们。

创建录制

Kapacitor 有三种录制数据的方法:要创建录制,请 POST 到 /kapacitor/v1/recordings/METHOD 端点。

方法描述
stream录制传入的数据流。
批次录制批处理任务中查询的结果。
查询录制显式查询的结果。

请求在录制开始后立即返回,而不等待其完成。返回一个录制 ID 以便之后识别录制。

Stream
参数用途
id录制的唯一标识符。如果为空,将选择一个随机 ID。
task任务 ID,用于仅为任务的 DBRP 录制数据。
stop录制流数据直到停止日期。
Batch
参数用途
id录制的唯一标识符。如果为空,将选择一个随机 ID。
task任务 ID,录制任务中定义的查询结果。
start将录制数据的最早日期。RFC3339Nano 格式。
stop将录制数据的最新日期。如果未指定,则使用当前时间。RFC3339Nano 格式数据。
查询
参数用途
id录制的唯一标识符。如果为空,将选择一个随机 ID。
type录制类型,streambatch
查询要执行的查询。
集群已配置的 InfluxDB 集群的名称。如果为空,则使用默认集群。

注意:录制本身被归类为流式录制或批处理录制,并且只能回放到类型相对应的任务上。因此,当您录制原始查询的结果时,必须指定您希望创建的录制类型。

示例

使用 stream 方法创建录制

POST /kapacitor/v1/recordings/stream
{
    "task" : "TASK_ID",
    "stop" : "2006-01-02T15:04:05Z07:00"
}

使用指定开始时间的 batch 方法创建录制。

POST /kapacitor/v1/recordings/batch
{
    "task" : "TASK_ID",
    "start" : "2006-01-02T15:04:05Z07:00"
}

使用指定 stream 类型的 query 方法创建录制。

POST /kapacitor/v1/recordings/query
{
    "query" : "SELECT mean(usage_idle) FROM cpu WHERE time > now() - 1h GROUP BY time(10m)",
    "type" : "stream"
}

使用指定 batch 类型的 query 方法创建录制。

POST /kapacitor/v1/recordings/query
{
    "query" : "SELECT mean(usage_idle) FROM cpu WHERE time > now() - 1h GROUP BY time(10m)",
    "type" : "batch"
}

使用自定义 ID 创建录制。

POST /kapacitor/v1/recordings/query
{
    "id" : "MY_RECORDING_ID",
    "query" : "SELECT mean(usage_idle) FROM cpu WHERE time > now() - 1h GROUP BY time(10m)",
    "type" : "batch"
}

响应

所有录制都分配有一个 ID,该 ID 以此格式和链接返回。

{
    "link" : {"rel": "self", "href": "/kapacitor/v1/recordings/e24db07d-1646-4bb3-a445-828f5049bea0"},
    "id" : "e24db07d-1646-4bb3-a445-828f5049bea0",
    "type" : "stream",
    "size" : 0,
    "date" : "2006-01-02T15:04:05Z07:00",
    "error" : "",
    "status" : "running",
    "progress" : 0
}
代码含义
201成功,录制已开始。

等待录制完成

为了确定录制何时完成,您必须向返回的链接发出 GET 请求,通常类似 /kapacitor/v1/recordings/RECORDING_ID

录制具有除了上面列出的属性之外的只读属性。

属性描述
size录制在磁盘上的大小(以字节为单位)。
date录制完成日期。
error创建录制时遇到的任何错误。
statusrecordingfinished 之一。
progress介于 0 和 1 之间的数字,表示录制的近似进度。

示例

GET /kapacitor/v1/recordings/e24db07d-1646-4bb3-a445-828f5049bea0
{
    "link" : {"rel": "self", "href": "/kapacitor/v1/recordings/e24db07d-1646-4bb3-a445-828f5049bea0"},
    "id" : "e24db07d-1646-4bb3-a445-828f5049bea0",
    "type" : "stream",
    "size" : 1980353,
    "date" : "2006-01-02T15:04:05Z07:00",
    "error" : "",
    "status" : "running",
    "progress" : 0.75
}

录制完成后。

GET /kapacitor/v1/recordings/e24db07d-1646-4bb3-a445-828f5049bea0
{
    "link" : {"rel": "self", "href": "/kapacitor/v1/recordings/e24db07d-1646-4bb3-a445-828f5049bea0"},
    "id" : "e24db07d-1646-4bb3-a445-828f5049bea0",
    "type" : "stream",
    "size" : 1980353,
    "date" : "2006-01-02T15:04:05Z07:00",
    "error" : "",
    "status" : "finished",
    "progress" : 1
}

或录制失败时。

GET /kapacitor/v1/recordings/e24db07d-1646-4bb3-a445-828f5049bea0
{
    "link" : {"rel": "self", "href": "/kapacitor/v1/recordings/e24db07d-1646-4bb3-a445-828f5049bea0"},
    "id" : "e24db07d-1646-4bb3-a445-828f5049bea0",
    "type" : "stream",
    "size" : 1980353,
    "date" : "2006-01-02T15:04:05Z07:00",
    "error" : "error message explaining failure",
    "status" : "failed",
    "progress" : 1
}

响应

代码含义
200成功,录制不再运行。
202成功,录制存在但未完成。
404不存在该录制。

删除录制

要删除录制,请向 /kapacitor/v1/recordings/RECORDING_ID 端点发出 DELETE 请求。

DELETE /kapacitor/v1/recordings/RECORDING_ID

响应

代码含义
204成功

注意:删除不存在的录制不是错误,将返回 204 成功。

列出录制

要列出所有录制,请向 /kapacitor/v1/recordings 端点发出 GET 请求。录制按日期排序。

查询参数默认用途
pattern根据模式过滤结果。使用标准的 shell glob 匹配,有关更多详细信息,请参见 此处
字段 (fields)要返回的字段列表。如果为空,则返回所有字段。idlink 字段始终返回。
offset0分页遍历任务的偏移量。
limit100要返回的最大任务数。

示例

GET /kapacitor/v1/recordings
{
    "recordings" : [
        {
            "link" : {"rel": "self", "href": "/kapacitor/v1/recordings/e24db07d-1646-4bb3-a445-828f5049bea0"},
            "id" : "e24db07d-1646-4bb3-a445-828f5049bea0",
            "type" : "stream",
            "size" : 1980353,
            "date" : "2006-01-02T15:04:05Z07:00",
            "error" : "",
            "status" : "finished",
            "progress" : 1
        },
        {
            "link" : {"rel": "self", "href": "/kapacitor/v1/recordings/8a4c06c6-30fb-42f4-ac4a-808aa31278f6"},
            "id" : "8a4c06c6-30fb-42f4-ac4a-808aa31278f6",
            "type" : "batch",
            "size" : 216819562,
            "date" : "2006-01-02T15:04:05Z07:00",
            "error" : "",
            "status" : "finished",
            "progress" : 1
        }
    ]
}

响应

代码含义
200成功

管理回放

回放录制

要回放录制,请 POST 到 /kapacitor/v1/replays/

参数默认用途
idrandom回放的唯一标识符。如果为空,则选择一个随机 ID。
task任务 ID。
recording录制 ID。
recording-timefalse如果为 true,则使用录制中的时间;否则,根据当前时间调整时间。
clockfastfastreal 之一。如果为 real,则等待真实时间流逝以对应录制中的时间。如果为 fast,则无延迟地回放数据。例如,如果 clock 是 real,则持续 5 分钟的流录制需要 5 分钟才能回放。

示例

使用默认参数回放录制。

POST /kapacitor/v1/replays/
{
    "task" : "TASK_ID",
    "recording" : "RECORDING_ID"
}

以实时模式回放录制并保留录制时间。

POST /kapacitor/v1/replays/
{
    "task" : "TASK_ID",
    "recording" : "RECORDING_ID",
    "clock" : "real",
    "recording-time" : true,
}

使用自定义 ID 回放录制。

POST /kapacitor/v1/replays/
{
    "id" : "MY_REPLAY_ID",
    "task" : "TASK_ID",
    "recording" : "RECORDING_ID"
}

响应

请求在回放开始后立即返回,并提供回放 ID 和链接。

{
    "link" : {"rel": "self", "href": "/kapacitor/v1/replays/ad95677b-096b-40c8-82a8-912706f41d4c"},
    "id" : "ad95677b-096b-40c8-82a8-912706f41d4c",
    "task" : "TASK_ID",
    "recording" : "RECORDING_ID",
    "clock" : "fast",
    "recording-time" : false,
    "status" : "running",
    "progress" : 0,
    "error" : "",
    "stats": {},
}
代码含义
201成功,回放已开始。

不录制直接回放数据

也可以直接回放数据而不先录制。这是通过发出一个类似于 batchquery 录制的请求来完成的,但不是存储数据,而是立即针对任务进行回放。使用 stream 录制来立即针对任务回放等同于启用任务,因此不被支持。

方法描述
批次回放批处理任务中查询的结果。
查询回放显式查询的结果。
Batch
参数默认用途
idrandom回放的唯一标识符。如果为空,则选择一个随机 ID。
task任务 ID,针对任务回放任务中定义的查询结果。
start将要回放数据的最早日期。RFC3339Nano 格式。
stopnow将要回放数据的最新日期。如果未指定,则使用当前时间。RFC3339Nano 格式数据。
recording-timefalse如果为 true,则使用录制中的时间;否则,根据当前时间调整时间。
clockfastfastreal 之一。如果为 real,则等待真实时间流逝以对应录制中的时间。如果为 fast,则无延迟地回放数据。例如,如果 clock 是 real,则持续 5 分钟的流录制需要 5 分钟才能回放。
查询
参数默认用途
idrandom回放的唯一标识符。如果为空,则选择一个随机 ID。
task任务 ID,针对任务回放查询结果。
查询要执行的查询。
集群已配置的 InfluxDB 集群的名称。如果为空,则使用默认集群。
recording-timefalse如果为 true,则使用录制中的时间;否则,根据当前时间调整时间。
clockfastfastreal 之一。如果为 real,则等待真实时间流逝以对应录制中的时间。如果为 fast,则无延迟地回放数据。例如,如果 clock 是 real,则持续 5 分钟的流录制需要 5 分钟才能回放。

示例

使用指定开始时间的 batch 方法执行回放。

POST /kapacitor/v1/replays/batch
{
    "task" : "TASK_ID",
    "start" : "2006-01-02T15:04:05Z07:00"
}

回放查询结果到任务。

POST /kapacitor/v1/replays/query
{
    "task" : "TASK_ID",
    "query" : "SELECT mean(usage_idle) FROM cpu WHERE time > now() - 1h GROUP BY time(10m)",
}

使用自定义 ID 创建回放。

POST /kapacitor/v1/replays/query
{
    "id" : "MY_REPLAY_ID",
    "task" : "TASK_ID",
    "query" : "SELECT mean(usage_idle) FROM cpu WHERE time > now() - 1h GROUP BY time(10m)",
}

响应

所有回放都分配有一个 ID,该 ID 以此格式和链接返回。

{
    "link" : {"rel": "self", "href": "/kapacitor/v1/replays/e24db07d-1646-4bb3-a445-828f5049bea0"},
    "id" : "e24db07d-1646-4bb3-a445-828f5049bea0",
    "task" : "TASK_ID",
    "recording" : "",
    "clock" : "fast",
    "recording-time" : false,
    "status" : "running",
    "progress" : 0.57,
    "error" : "",
    "stats": {}
}

注意:对于以这种方式创建的回放,recording ID 将为空,因为没有使用或创建录制。

代码含义
201成功,回放已开始。

等待回放

与录制一样,您可以通过向 /kapacitor/v1/replays/REPLAY_ID 端点发出 GET 请求来获取回放的状态。

除了上面 列出的属性 之外,回放还具有这些只读属性。

属性描述
statusreplayingfinished 之一。
progress介于 0 和 1 之间的数字,表示回放的近似进度。
error执行回放时发生的任何错误。

示例

获取回放的状态。

GET /kapacitor/v1/replays/ad95677b-096b-40c8-82a8-912706f41d4c
{
    "link" : {"rel": "self", "href": "/kapacitor/v1/replays/ad95677b-096b-40c8-82a8-912706f41d4c"},
    "id" : "ad95677b-096b-40c8-82a8-912706f41d4c",
    "task" : "TASK_ID",
    "recording" : "RECORDING_ID",
    "clock" : "fast",
    "recording-time" : false,
    "status" : "running",
    "progress" : 0.57,
    "error" : "",
    "stats": {}
}

回放完成后。

GET /kapacitor/v1/replays/ad95677b-096b-40c8-82a8-912706f41d4c
{
    "link" : {"rel": "self", "href": "/kapacitor/v1/replays/ad95677b-096b-40c8-82a8-912706f41d4c"},
    "id" : "ad95677b-096b-40c8-82a8-912706f41d4c",
    "task" : "TASK_ID",
    "recording" : "RECORDING_ID",
    "clock" : "fast",
    "recording-time" : false,
    "status" : "finished",
    "progress" : 1,
    "error" : "",
    "stats": {
        "task-stats": {
            "throughput": 0
        },
        "node-stats": {
            "alert2": {
                "alerts_triggered": 5,
                "avg_exec_time_ns": 1267486,
                "collected": 8,
                "crits_triggered": 2,
                "emitted": 0,
                "errors": 0,
                "infos_triggered": 0,
                "oks_triggered": 1,
                "warns_triggered": 2,
                "working_cardinality": 1
            },
            "from1": {
                "avg_exec_time_ns": 0,
                "collected": 8,
                "emitted": 8,
                "errors": 0,
                "working_cardinality": 0
            },
            "stream0": {
                "avg_exec_time_ns": 0,
                "collected": 8,
                "emitted": 8,
                "errors": 0,
                "working_cardinality": 0
            }
        }
    }
}

如果回放已完成,stats 字段将包含有关回放的统计信息。

或回放失败时。

GET /kapacitor/v1/replays/ad95677b-096b-40c8-82a8-912706f41d4c
{
    "link" : {"rel": "self", "href": "/kapacitor/v1/replays/ad95677b-096b-40c8-82a8-912706f41d4c"},
    "id" : "ad95677b-096b-40c8-82a8-912706f41d4c",
    "task" : "TASK_ID",
    "recording" : "RECORDING_ID",
    "clock" : "fast",
    "recording-time" : false,
    "status" : "failed",
    "progress" : 1,
    "error" : "error message explaining failure",
    "stats": {}
}

响应

代码含义
200成功,回放不再运行。
202成功,回放存在但未完成。
404不存在该回放。

删除回放

要删除回放,请向 /kapacitor/v1/replays/REPLAY_ID 端点发出 DELETE 请求。

DELETE /kapacitor/v1/replays/REPLAY_ID

响应

代码含义
204成功

注意:删除不存在的回放不是错误,将返回 204 成功。

列出回放

您可以通过向 /kapacitor/v1/replays 发出 GET 请求来列出给定录制的回放。

查询参数默认用途
pattern根据模式过滤结果。使用标准的 shell glob 匹配,有关更多详细信息,请参见 此处
字段 (fields)要返回的字段列表。如果为空,则返回所有字段。idlink 字段始终返回。
offset0分页遍历任务的偏移量。
limit100要返回的最大任务数。

示例

GET /kapacitor/v1/replays
{
    "replays": [
        {
            "link" : {"rel": "self", "href": "/kapacitor/v1/replays/ad95677b-096b-40c8-82a8-912706f41d4c"},
            "id" : "ad95677b-096b-40c8-82a8-912706f41d4c",
            "task" : "TASK_ID",
            "recording" : "RECORDING_ID",
            "clock" : "fast",
            "recording-time" : false,
            "status" : "finished",
            "progress" : 1,
            "error" : ""
        },
        {
            "link" : {"rel": "self", "href": "/kapacitor/v1/replays/be33f0a1-0272-4019-8662-c730706dac7d"},
            "id" : "be33f0a1-0272-4019-8662-c730706dac7d",
            "task" : "TASK_ID",
            "recording" : "RECORDING_ID",
            "clock" : "fast",
            "recording-time" : false,
            "status" : "finished",
            "progress" : 1,
            "error" : ""
        }
    ]
}

管理告警

Kapacitor 可以生成和处理告警。API 允许您查看任何告警的当前状态,并为告警配置各种处理程序。

Topics

告警被分组到主题中。告警处理程序会在主题上“监听”任何新事件。您可以在 TICKscript 中指定告警主题,或者会自动生成一个。

创建和删除主题

当主题在 TICKscript 或处理程序中被引用时,它们会被动态创建。要删除主题,请向 /kapacitor/v1/alerts/topics/<topic id> 发出 DELETE 请求。这将删除该主题所有已知的事件和状态。

注意:由于主题是动态创建的,因此在删除主题后,如果为该主题创建了新事件,主题可能会再次出现。

示例

DELETE /kapacitor/v1/alerts/topics/system

列出主题

要查询可用主题列表,请向 /kapacitor/v1/alerts/topics 发出 GET 请求。

查询参数默认用途
min-levelOK仅返回等于或高于 min-level 的主题。有效值包括 OK、INFO、WARNING、CRITICAL。
pattern*根据模式过滤结果。使用对主题 ID 的标准 shell glob 匹配,有关更多详细信息,请参见 此处

示例

获取所有主题。

GET /kapacitor/v1/alerts/topics
{
    "link": {"rel":"self","href":"/kapacitor/v1/alerts/topics"},
    "topics": [
        {
            "link": {"rel":"self","href":"/kapacitor/v/alerts/topics/system"},
            "events-link" : {"rel":"events","href":"/kapacitor/v1/alerts/topics/system/events"},
            "handlers-link": {"rel":"handlers","href":"/kapacitor/v1/alerts/topics/system/handlers"},
            "id": "system",
            "level":"CRITICAL"
        },
        {
            "link": {"rel":"self","href":"/kapacitor/v1/alerts/topics/app"},
            "events-link" : {"rel":"events","href":"/kapacitor/v1/alerts/topics/app/events"},
            "handlers-link": {"rel":"handlers","href":"/kapacitor/v1/alerts/topics/app/handlers"},
            "id": "app",
            "level":"OK"
        }
    ]
}

获取所有 WARNING 或 CRITICAL 状态的主题。

GET /kapacitor/v1/alerts/topics?min-level=WARNING
{
    "link": {"rel":"self","href":"/kapacitor/v1/alerts/topics"},
    "topics": [
        {
            "link": {"rel":"self","href":"/kapacitor/v1/alerts/topics/system"},
            "events-link" : {"rel":"events","href":"/kapacitor/v1/alerts/topics/system/events"},
            "handlers-link": {"rel":"handlers","href":"/kapacitor/v1/alerts/topics/system/handlers"},
            "id": "system",
            "level":"CRITICAL"
        }
    ]
}

主题状态

要查询主题的状态,请向 /kapacitor/v1/alerts/topics/<topic id> 发出 GET 请求。

示例

GET /kapacitor/v1/alerts/topics/system
{
    "link": {"rel":"self","href":"/kapacitor/v1/alerts/topics/system"},
    "id": "system",
    "level":"CRITICAL"
    "events-link" : {"rel":"events","href":"/kapacitor/v1/alerts/topics/system/events"},
    "handlers-link": {"rel":"handlers","href":"/kapacitor/v1/alerts/topics/system/handlers"},
}

列出主题事件

要查询主题内的所有事件,请向 /kapacitor/v1/alerts/topics/<topic id>/events 发出 GET 请求。

查询参数默认用途
min-levelOK仅返回等于或高于 min-level 的事件。有效值包括 OK、INFO、WARNING、CRITICAL。

示例

GET /kapacitor/v1/alerts/topics/system/events
{
    "link": {"rel":"self","href":"/kapacitor/v1/alerts/topics/system/events"},
    "topic": "system",
    "events": [
        {
            "link":{"rel":"self","href":"/kapacitor/v1/alerts/topics/system/events/cpu"},
            "id": "cpu",
            "state": {
                "level": "WARNING",
                "message": "cpu is WARNING",
                "time": "2016-12-01T00:00:00Z",
                "duration": "5m"
            }
        },
        {
            "link":{"rel":"self","href":"/kapacitor/v1/alerts/topics/system/events/mem"},
            "id": "mem",
            "state": {
                "level": "CRITICAL",
                "message": "mem is CRITICAL",
                "time": "2016-12-01T00:10:00Z",
                "duration": "1m"
            }
        }
    ]
}

主题事件

您可以通过向 /kapacitor/v1/alerts/topics/<topic id>/events/<event id> 发出 GET 请求来查询主题内的特定事件。

示例

GET /kapacitor/v1/alerts/topics/system/events/cpu
{
    "link":{"rel":"self","href":"/kapacitor/v1/alerts/topics/system/events/cpu"},
    "id": "cpu",
    "state": {
        "level": "WARNING",
        "message": "cpu is WARNING",
        "time": "2016-12-01T00:00:00Z",
        "duration": "5m"
    }
}

列出主题处理程序

处理程序在主题内创建。您可以通过向 /kapacitor/v1/alerts/topics/<topic id>/handlers 发出 GET 请求来获取配置的主题处理程序列表。

查询参数默认用途
pattern*根据模式过滤结果。使用对服务名称的标准 shell glob 匹配,有关更多详细信息,请参见 此处

注意:匿名处理程序(由 TICKscript 自动创建)不会在其关联的匿名主题下列出,因为它们不是通过 API 配置的。

示例

获取 system 主题的处理程序。

GET /kapacitor/v1/alerts/topics/system/handlers
{
    "link":{"rel":"self","href":"/kapacitor/v1/alerts/topics/system/handlers"},
    "topic": "system",
    "handlers": [
        {
            "link":{"rel":"self","href":"/kapacitor/v1/alerts/topics/system/handlers/slack"},
            "id":"slack",
            "kind":"slack",
            "options":{
              "channel":"#alerts"
            },
        },
        {
            "link":{"rel":"self","href":"/kapacitor/v1/alerts/topics/system/handlers/smtp"},
            "id":"smtp",
            "kind":"smtp"
        }
    ]
}

这个 main:alert_cpu:alert5 主题代表一个由任务自动生成的主题,该任务在 TICKscript 中明确定义了处理程序。匿名处理程序无法通过 API 列出或修改。

GET /kapacitor/v1/alerts/topics/main:alert_cpu:alert5/handlers
{
    "link":{"rel":"self","href":"/kapacitor/v1/alerts/topics/system/handlers"},
    "topic": "main:alert_cpu:alert5",
    "handlers": null
}

获取主题处理程序

要查询特定处理程序的信息,请向 /kapacitor/v1/alerts/topics/<topic id>/handlers/<handler id> 发出 GET 请求。

示例

GET /kapacitor/v1/alerts/topics/system/handlers/slack
{
  "link": {
    "rel": "self",
      "href": "/kapacitor/v1/alerts/topics/system/handlers/slack"
  },
  "id": "slack",
  "kind": "slack",
  "options": {
    "channel": "#alerts"
  },
  "match": ""
}

创建主题处理程序

要创建新处理程序,请向 /kapacitor/v1/alerts/topics/system/handlers 发出 POST 请求。

POST /kapacitor/v1/alerts/topics/system/handlers
{
  "id":"slack",
  "kind":"slack",
  "options": {
    "channel":"#alerts"
  }
}
{
  "link": {
    "rel": "self",
      "href": "/kapacitor/v1/alerts/topics/system/handlers/slack"
  },
  "id": "slack",
  "kind": "slack",
  "options": {
    "channel": "#alerts"
  },
  "match": ""
}

更新主题处理程序

要更新现有处理程序,您可以向 /kapacitor/v1/alerts/topics/system/handlers/<handler id> 发出 PUT 或 PATCH 请求。

使用 PUT 将替换整个处理程序,使用 PATCH 可以修改处理程序的特定部分。

PATCH 将 JSON patch 对象应用于现有处理程序,有关更多详细信息,请参见 rfc6902

示例

使用 PATCH 方法更新处理程序的主题和操作。

PATCH /kapacitor/v1/alerts/topics/system/handlers/slack
[
    {"op":"replace", "path":"/topics", "value":["system", "test"]},
    {"op":"replace", "path":"/options/channel", "value":"#testing_alerts"}
]
{
  "link": {
    "rel": "self",
      "href": "/kapacitor/v1/alerts/topics/system/handlers/slack"
  },
  "id": "slack",
  "kind": "slack",
  "options": {
    "channel": "#testing_alerts"
  },
  "match": ""
}

使用 PUT 方法替换整个处理程序。

PUT /kapacitor/v1/alerts/topics/system/handlers/slack
{
  "id": "slack",
  "kind":"slack",
  "options": {
    "channel":"#testing_alerts"
  }
}
{
  "link": {
    "rel": "self",
      "href": "/kapacitor/v1/alerts/topics/system/handlers/slack"
  },
  "id": "slack",
  "kind": "slack",
  "options": {
    "channel": "#testing_alerts"
  },
  "match": ""
}

删除主题处理程序

要删除现有处理程序,请向 /kapacitor/v1/alerts/topics/system/handlers/<handler id> 发出 DELETE 请求。

DELETE /kapacitor/v1/alerts/topics/system/handlers/<handler id>

覆盖 Kapacitor 配置

您可以通过 API 为配置的某些部分设置配置覆盖。通过 API 设置的覆盖始终优先于配置文件中可能存在的任何设置。可覆盖的节包括 InfluxDB 集群和告警处理程序节。

API 的目的是允许动态配置敏感凭证,而无需重新启动 Kapacitor 进程。因此,建议使用配置文件或 API 来管理这些配置节,但不要同时使用。这有助于消除关于给定配置选项来源的任何混淆。

启用和禁用配置覆盖

默认情况下,启用覆盖配置的功能。如果您不想启用此功能,可以通过 config-override 配置节禁用它。

[config-override]
  enabled = false

如果禁用了 config-override 服务,则相关 API 端点将返回 403 forbidden 错误。

从不良配置中恢复

如果您以某种方式创建了导致 Kapacitor 崩溃或无法正常工作的配置,您可以在启动时通过顶层配置选项 skip-config-overrides 来禁用应用覆盖。

# This configuration option is only a safe guard and should not be needed in practice.
skip-config-overrides = true

这样您仍然可以访问 API 来修复任何不希望的配置,而无需在启动时应用该配置。

注意:最简单和最安全的方法可能是将此选项设置为环境变量 KAPACITOR_SKIP_CONFIG_OVERRIDES=true,因为它 intended 临时使用。这样您就不必修改磁盘上的配置文件,也不会意外地将其保留在那里造成以后出现问题。

概述

配置 API 端点的路径如下:

/kapacitor/v1/config/<section name>/[<element name>]

示例

/kapacitor/v1/config/smtp/
/kapacitor/v1/config/influxdb/localhost
/kapacitor/v1/config/influxdb/remote

可选的 element name 路径元素对应于条目列表中的特定项。

例如,上述路径对应以下配置节:

[smtp]
    # SMTP configuration here

[[influxdb]]
    name = "localhost"
    # InfluxDB configuration here for the "localhost" cluster

[[influxdb]]
    name = "remote"
    # InfluxDB configuration here for the "remote" cluster

检索当前配置

要检索当前配置,请执行对所需路径的 GET 请求。返回的配置将是配置文件和已存储的覆盖值合并后的值。返回的内容将是配置对象的 JSON 编码版本。

所有敏感信息都不会在请求主体中返回。取而代之的是,将有一个布尔值指示该值是空还是非空。每个元素都会返回一个已屏蔽选项的列表。

示例

检索所有可以被覆盖的配置节。

GET /kapacitor/v1/config
{
    "link" : {"rel": "self", "href": "/kapacitor/v1/config"},
    "sections": {
        "influxdb": {
            "link" : {"rel": "self", "href": "/kapacitor/v1/config/influxdb"},
            "elements": [
                {
                    "link" : {"rel": "self", "href": "/kapacitor/v1/config/influxdb/localhost"},
                    "options": {
                        "name": "localhost",
                        "urls": ["https://:8086"],
                        "default": true,
                        "username": "",
                        "password": false
                    },
                    "redacted" : [
                        "password"
                    ]
                },
                {
                    "link" : {"rel": "self", "href": "/kapacitor/v1/config/influxdb/remote"},
                    "options": {
                        "name": "remote",
                        "urls": ["http://influxdb.example.com:8086"],
                        "default": false,
                        "username": "jim",
                        "password": true
                    },
                    "redacted" : [
                        "password"
                    ]
                }
            ]
        },
        "smtp": {
            "link" : {"rel": "self", "href": "/kapacitor/v1/config/smtp"},
            "elements": [{
                "link" : {"rel": "self", "href": "/kapacitor/v1/config/smtp/"},
                "options": {
                    "enabled": true,
                    "host": "smtp.example.com",
                    "port": 587,
                    "username": "bob",
                    "password": true,
                    "no-verify": false,
                    "global": false,
                    "to": [ "oncall@example.com"],
                    "from": "kapacitor@example.com",
                    "idle-timeout": "30s"
                },
                "redacted" : [
                    "password"
                ]
            }]
        }
    }
}

仅检索 SMTP 节。

GET /kapacitor/v1/config/smtp
{
    "link" : {"rel": "self", "href": "/kapacitor/v1/config/smtp"},
    "elements": [{
        "link" : {"rel": "self", "href": "/kapacitor/v1/config/smtp/"},
        "options": {
            "enabled": true,
            "host": "smtp.example.com",
            "port": 587,
            "username": "bob",
            "password": true,
            "no-verify": false,
            "global": false,
            "to": ["oncall@example.com"],
            "from": "kapacitor@example.com",
            "idle-timeout": "30s"
        },
        "redacted" : [
            "password"
        ]
    }]
}

检索 SMTP 节中的单个元素。

GET /kapacitor/v1/config/smtp/
{
    "link" : {"rel": "self", "href": "/kapacitor/v1/config/smtp/"},
    "options": {
        "enabled": true,
        "host": "smtp.example.com",
        "port": 587,
        "username": "bob",
        "password": true,
        "no-verify": false,
        "global": false,
        "to": ["oncall@example.com"],
        "from": "kapacitor@example.com",
        "idle-timeout": "30s"
    },
    "redacted" : [
        "password"
    ]
}

注意:非列表节可以被视为具有空字符串作为其元素名称。

仅检索 InfluxDB 节。

GET /kapacitor/v1/config/influxdb
{
    "link" : {"rel": "self", "href": "/kapacitor/v1/config/influxdb"},
    "elements" : [
        {
            "link" : {"rel": "self", "href": "/kapacitor/v1/config/influxdb/localhost"},
            "options": {
               "name": "localhost",
               "urls": ["https://:8086"],
               "default": true,
               "username": "",
               "password": false
            },
            "redacted" : [
                "password"
            ]
        },
        {
            "link" : {"rel": "self", "href": "/kapacitor/v1/config/influxdb/remote"},
            "options": {
                "name": "remote",
                "urls": ["http://influxdb.example.com:8086"],
                "default": false,
                "username": "jim",
                "password": true
            },
            "redacted" : [
                "password"
            ]
        }
    ]
}

仅检索 InfluxDB 节的 remote 元素。

GET /kapacitor/v1/config/influxdb/remote
{
    "link" : {"rel": "self", "href": "/kapacitor/v1/config/influxdb/remote"},
    "options": {
        "name": "remote",
        "urls": ["http://influxdb.example.com:8086"],
        "default": false,
        "username": "jim",
        "password": true
    },
    "redacted" : [
        "password"
    ]
}

注意:不返回密码值,但 true 值表示已设置非空密码。

响应

代码含义
200成功
403配置覆盖服务未启用

覆盖配置值

要覆盖配置中的值,请向所需路径发出 POST 请求。请求应包含一个描述要修改内容的 JSON 对象。

使用以下顶层操作:

Key描述
set在配置覆盖中设置值。
delete从配置覆盖中删除值。
add向列表配置节添加新元素。
remove从列表配置节中删除先前添加的元素。

请求中未指定的配置选项将保持不变。

示例

禁用 SMTP 告警处理程序

POST /kapacitor/v1/config/smtp/
{
    "set":{
        "enabled": false
    }
}

删除 SMTP 告警处理程序的覆盖

POST /kapacitor/v1/config/smtp/
{
    "delete":[
        "enabled"
    ]
}

操作可以合并在一个请求中。启用 SMTP 处理程序,设置其主机并删除端口覆盖。

POST /kapacitor/v1/config/smtp/
{
    "set":{
        "enabled": true,
        "host": "smtp.example.com"
    },
    "delete":[
        "port"
    ]
}

添加新的 InfluxDB 集群

POST /kapacitor/v1/config/influxdb
{
    "add":{
        "name": "example",
        "urls": ["https://influxdb.example.com:8086"],
        "default": true,
        "disable-subscriptions": true
    }
}

删除现有的 InfluxDB 集群覆盖

POST /kapacitor/v1/config/influxdb
{
    "remove":[
        "example"
    ]
}

注意:只能删除覆盖项,这意味着配置文件中存在的 InfluxDB 集群无法删除。

修改现有的 InfluxDB 集群

POST /kapacitor/v1/config/influxdb/remote
{
    "set":{
        "disable-subscriptions": false,
    },
    "delete": [
        "default"
    ]
}

响应

代码含义
200成功
403配置覆盖服务未启用
404指定的配置节/选项不存在

管理存储

Kapacitor 暴露了一些可以在底层存储上执行的操作。

警告:所有存储操作都直接操作底层存储数据库。在执行任何这些操作之前,请务必备份数据库。

备份存储

/kapacitor/v1/storage/backup 发出 GET 请求将返回 Kapacitor 数据库的转储。要从备份恢复,请将 kapacitor.db 文件替换为备份请求的内容。

# Create a backup.
curl https://:9092/kapacitor/v1/storage/backup > kapacitor.db
# Restore a backup.
# The destination path is dependent on your configuration.
cp kapacitor.db ~/.kapacitor/kapacitor.db

Stores

Kapacitor 的底层存储系统组织成不同的存储(stores)。可以对每个单独的存储执行各种操作。

警告:所有存储操作都直接操作底层存储数据库。在执行任何这些操作之前,请务必备份数据库。

可用操作

Action描述
rebuild重建存储中的所有索引,此操作可能非常耗时。

要执行操作,请 POST 到 /kapacitor/v1/storage/stores/<name of store>

示例

POST /kapacitor/v1/storage/stores/tasks
{
    "action" : "rebuild"
}

响应

代码含义
204成功
400未知操作
404指定的存储不存在

用户

Kapacitor 暴露了管理用户的操作。

列出所有用户

要列出用户,请使用 GET 请求方法和 /kapacitor/v1/users 端点。

示例

curl GET "https://:9092/kapacitor/v1/users"

创建用户

要创建用户,请使用 POST 请求方法和 /kapacitor/v1/users 端点。

将用户定义为具有以下属性的 JSON 对象

属性描述
nameUsername
passwordPassword
type用户类型(normaladmin,*参见 User*)
permissions有效的用户权限字符串列表(noneapiconfig_apiwrite_pointsall

请参阅 Kapacitor 用户类型和权限

示例

curl --XPOST 'https://:9092/kapacitor/v1/users' \
  --data '{
    "name": "stan",
    "password": "pass",
    "type":"normal",
    "permissions": ["config_api"]
}'

更新用户

要更新用户,请使用 PATCH 请求方法和 /kapacitor/v1/users/<name> 端点。

将修改后的用户定义为具有以下属性的 JSON 对象

属性用途
passwordPassword
type用户类型(normaladmin,*参见 User*)
permissions有效的用户权限字符串列表(noneapiconfig_apiwrite_pointsall

示例

curl -XPATCH "https://:9092/kapacitor/v1/users/bob" -d '{ "password": "pass", "type":"admin", "permissions":["all"] }'

删除用户

要删除用户,请使用 DELETE 请求方法和 /kapacitor/v1/users/<name> 端点。

示例

curl -XDELETE "https://:9092/kapacitor/v1/users/steve"

管理 Flux 任务

Kapacitor 暴露了管理 Flux 任务的操作。有关更多信息,请参阅 使用 Flux 任务

创建 Flux 任务

使用以下请求方法和端点创建新的 Kapacitor Flux 任务。

POST /kapacitor/v1/api/v2/tasks

在请求中提供以下信息(* 必填

Headers

  • * Content-type: application/json

请求主体

具有以下模式的 JSON 对象

  • * flux: Flux 任务代码
  • status: Flux 任务状态(activeinactive,默认为 active
  • description: Flux 任务描述
curl --request POST 'https://:9092/kapacitor/v1/api/v2/tasks' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "flux": "option task = {name: \"CPU Total 1 Hour New\", every: 1h}\n\nhost = \"https://:8086\"\ntoken = \"\"\n\nfrom(bucket: \"db/rp\", host:host, token:token)\n\t|> range(start: -1h)\n\t|> filter(fn: (r) =>\n\t\t(r._measurement == \"cpu\"))\n\t|> filter(fn: (r) =>\n\t\t(r._field == \"usage_system\"))\n\t|> filter(fn: (r) =>\n\t\t(r.cpu == \"cpu-total\"))\n\t|> aggregateWindow(every: 1h, fn: max)\n\t|> to(bucket: \"cpu_usage_user_total_1h\", host:host, token:token)",
    "status": "active",
    "description": "Downsample CPU data every hour"
}'

列出 Flux 任务

使用以下请求方法和端点列出 Kapacitor Flux 任务。

GET /kapacitor/v1/api/v2/tasks

在请求中提供以下信息(* 必填

Headers

  • * Content-type: application/json

查询参数

  • after: 列出特定任务 ID 之后的任务
  • limit: 限制返回的任务数量(默认为 500)
  • name: 按名称过滤任务
  • status: 按状态过滤任务 (activeinactive)

示例

列出所有 Flux 任务
curl --GET 'https://:9092/kapacitor/v1/api/v2/tasks' \
  --header 'Content-Type: application/json'
列出少量 Flux 任务
curl --GET 'https://:9092/kapacitor/v1/api/v2/tasks' \
  --header 'Content-Type: application/json' \
  --data-urlencode "limit=1"
按名称列出特定 Flux 任务
curl --GET 'https://:9092/kapacitor/v1/api/v2/tasks' \
  --header 'Content-Type: application/json' \
  --data-urlencode "name=example-flux-task-name"
列出特定任务 ID 之后的 Flux 任务
curl --GET 'https://:9092/kapacitor/v1/api/v2/tasks' \
  --header 'Content-Type: application/json' \
  --data-urlencode "after=000x00xX0xXXx00"
仅列出活动的 Flux 任务
curl --GET 'https://:9092/kapacitor/v1/api/v2/tasks' \
  --header 'Content-Type: application/json' \
  --data-urlencode "status=active"

更新 Flux 任务

使用以下请求方法和端点来更新 Kapacitor Flux 任务。

PATCH /kapacitor/v1/api/v2/tasks/{taskID}

在请求中提供以下信息(* 必填

Headers

  • * Content-type: application/json

路径参数

  • * taskID: 要更新的任务 ID

请求主体

具有以下模式的 JSON 对象

  • cron: 覆盖 cron Flux 任务选项
  • description: 新任务描述
  • every: 覆盖 every Flux 任务选项
  • flux: 新 Flux 任务代码
  • name: 覆盖 name Flux 任务选项
  • offset: 覆盖 offset Flux 任务选项
  • status: 新 Flux 任务状态 (activeinactive)
示例

以下示例使用了任务 ID 000x00xX0xXXx00

更新 Flux 任务代码
curl --request PATCH 'https://:9092/kapacitor/v1/api/v2/tasks/000x00xX0xXXx00' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "flux": "option task = {name: \"Updated task name\", every: 1h}\n\nhost = \"https://:8086\"\ntoken = \"\"\n\nfrom(bucket: \"db/rp\", host:host, token:token)\n\t|> range(start: -1h)\n\t|> filter(fn: (r) =>\n\t\t(r._measurement == \"cpu\"))\n\t|> filter(fn: (r) =>\n\t\t(r._field == \"usage_system\"))\n\t|> filter(fn: (r) =>\n\t\t(r.cpu == \"cpu-total\"))\n\t|> aggregateWindow(every: 1h, fn: max)\n\t|> to(bucket: \"cpu_usage_user_total_1h\", host:host, token:token)"
}'
启用或禁用 Flux 任务
curl --request PATCH 'https://:9092/kapacitor/v1/api/v2/tasks/000x00xX0xXXx00' \
  --header 'Content-Type: application/json' \
  --data-raw '{"status": "inactive"}'
覆盖 Flux 任务选项
curl --request PATCH 'https://:9092/kapacitor/v1/api/v2/tasks/000x00xX0xXXx00' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "every": "1d",
    "name": "New task name",
    "offset": "15m"
}'

删除 Flux 任务

使用以下请求方法和端点来删除 Kapacitor Flux 任务。

DELETE /kapacitor/v1/api/v2/tasks/{taskID}

在请求中提供以下信息(* 必填

路径参数

  • * taskID: 要删除的任务 ID
# Delete task ID 000x00xX0xXXx00
curl --request DELETE 'https://:9092/kapacitor/v1/api/v2/tasks/000x00xX0xXXx00'

列出 Kapacitor Flux 任务运行

使用以下请求方法和端点来列出 Kapacitor Flux 任务运行。

GET /kapacitor/v1/api/v2/tasks/{taskID}/runs

在请求中提供以下信息(* 必填

Headers

  • * Content-type: application/json

路径参数

  • * taskID: 任务 ID

查询参数

  • after: 列出特定运行 ID 之后的任务运行
  • afterTime: 返回在此时间之后发生的任务运行 (RFC3339 时间戳)
  • beforeTime: 返回在此时间之前发生的任务运行 (RFC3339 时间戳)
  • limit: 限制返回的任务运行数量 (默认为 100)
示例

以下示例使用了任务 ID 000x00xX0xXXx00

列出 Flux 任务的所有运行
curl --GET 'https://:9092/kapacitor/v1/api/v2/tasks/000x00xX0xXXx00/runs' \
  --header 'Content-Type: application/json'
列出 Flux 任务的少量运行
curl --GET 'https://:9092/kapacitor/v1/api/v2/tasks/000x00xX0xXXx00/runs' \
  --header 'Content-Type: application/json' \
  --data-urlencode "limit=10"
列出特定运行 ID 之后的 Flux 任务运行
curl --GET 'https://:9092/kapacitor/v1/api/v2/tasks/000x00xX0xXXx00/runs' \
  --header 'Content-Type: application/json' \
  --data-urlencode "after=XXX0xx0xX00Xx0X"
列出在某个时间范围内的 Flux 任务运行
curl --GET 'https://:9092/kapacitor/v1/api/v2/tasks/000x00xX0xXXx00/runs' \
  --header 'Content-Type: application/json' \
  --data-urlencode 'afterTime=2021-01-01T00:00:00Z' \
  --data-urlencode 'beforeTime=2021-01-31T00:00:00Z'

重试 Kapacitor Flux 任务运行

使用以下请求方法和端点来重试 Kapacitor Flux 任务运行。

POST /kapacitor/v1/api/v2/tasks/{taskID}/runs/{runID}/retry

在请求中提供以下信息(* 必填

路径参数

  • * taskID: 任务 ID
  • * runID: 要重试的运行 ID
# Retry run ID XXX0xx0xX00Xx0X for task ID 000x00xX0xXXx00
curl --request POST \
  'https://:9092/kapacitor/v1/api/v2/tasks/000x00xX0xXXx00/runs/XXX0xx0xX00Xx0X'

显示任务的所有运行日志

使用以下请求方法和端点来显示 Kapacitor Flux 任务日志。

GET /kapacitor/v1/api/v2/tasks/{taskID}/log

在请求中提供以下信息(* 必填

路径参数

  • * taskID: 任务 ID
# Get logs for task ID 000x00xX0xXXx00
curl --request GET \
  'https://:9092/kapacitor/v1/api/v2/tasks/000x00xX0xXXx00/logs'

显示特定 Flux 任务运行的日志

使用以下请求方法和端点来显示特定 Kapacitor Flux 任务运行的日志。

GET /kapacitor/v1//api/v2/tasks/{taskID}/runs/{runID}/logs

在请求中提供以下信息(* 必填

路径参数

# Get logs for task ID 000x00xX0xXXx00, run ID XXX0xx0xX00Xx0X
curl --request GET \
  'https://:9092/kapacitor/v1/api/v2/tasks/000x00xX0xXXx00/runs/XXX0xx0xX00Xx0X/logs'

日志记录

日志 API 正在 技术预览下发布。Kapacitor 允许用户使用 HTTP 分块传输编码远程检索 Kapacitor 日志。日志可以通过与日志条目对应的键值对进行查询。这些键值对被指定为查询参数。

日志 API 将以两种格式返回日志

要以 JSON 格式接收日志,请指定 Content-Type: application/json。如果 Kapacitor 收到除 application/json 以外的任何内容类型,日志将以 logfmt 格式返回。

返回给客户端的每个块将包含一条完整的日志,后跟一个 \n

示例

日志(JSON 格式)

GET /kapacitor/v1preview/logs?task=mytask
Content-Type: application/json

返回以下内容

{"ts":"2017-11-08T17:40:47.183-05:00","lvl":"info","msg":"created log session","service":"sessions","id":"7021fb9d-467e-482f-870c-d811aa9e74b7","content-type":"application/json","tags":"nil"}
{"ts":"2017-11-08T17:40:47.183-05:00","lvl":"info","msg":"created log session","service":"sessions","id":"7021fb9d-467e-482f-870c-d811aa9e74b7","content-type":"application/json","tags":"nil"}
{"ts":"2017-11-08T17:40:47.183-05:00","lvl":"info","msg":"created log session","service":"sessions","id":"7021fb9d-467e-482f-870c-d811aa9e74b7","content-type":"application/json","tags":"nil"}

日志(logfmt 格式)

GET /kapacitor/v1preview/logs?task=mytask

返回以下内容

ts=2017-11-08T17:42:47.014-05:00 lvl=info msg="created log session" service=sessions id=ce4d7819-1e38-4bf4-ba54-78b0a8769b7e content-type=
ts=2017-11-08T17:42:47.014-05:00 lvl=info msg="created log session" service=sessions id=ce4d7819-1e38-4bf4-ba54-78b0a8769b7e content-type=
ts=2017-11-08T17:42:47.014-05:00 lvl=info msg="created log session" service=sessions id=ce4d7819-1e38-4bf4-ba54-78b0a8769b7e content-type=

测试服务

Kapacitor 利用各种服务集成。以下 API 端点为用户提供运行简单测试的方法,以确保服务配置正确。

列出可测试的服务

可在 /kapacitor/v1/service-tests 端点找到可测试服务的列表

查询参数默认用途
pattern*根据模式过滤结果。使用对服务名称的标准 shell glob 匹配,有关更多详细信息,请参见 此处

示例

GET /kapacitor/v1/service-tests
{
    "link": {"rel":"self", "href": "/kapacitor/v1/service-tests"},
    "services" : [
        {
            "link": {"rel":"self", "href": "/kapacitor/v1/service-tests/influxdb"},
            "name": "influxdb",
            "options": {
                "cluster": ""
            }
        },
        {
            "link": {"rel":"self", "href": "/kapacitor/v1/service-tests/slack"},
            "name": "slack",
            "options": {
                "message": "test slack message",
                "channel": "#alerts",
                "level": "CRITICAL"
            }
        },
        {
            "link": {"rel":"self", "href": "/kapacitor/v1/service-tests/smtp"},
            "name": "smtp",
            "options": {
                "to": ["user@example.com"],
                "subject": "test subject",
                "body": "test body"
            }
        }
    ]
}

响应

代码含义
200成功

测试服务

要测试一项服务,请向 /kapacitor/v1/service-tests/<service name> 端点发出 POST 请求。POST 主体的内容取决于测试中的服务。要确定可用选项,请向同一端点发出 GET 请求。返回的选项也是默认选项。

示例

要查看 Slack 服务的可用和默认选项,请运行以下请求。

GET /kapacitor/v1/service-tests/slack
{
    "link": {"rel":"self", "href": "/kapacitor/v1/service-tests/slack"},
    "name": "slack"
    "options": {
        "message": "test slack message",
        "channel": "#alerts",
        "level": "CRITICAL"
    }
}

使用自定义选项测试 Slack 服务集成

POST /kapacitor/v1/service-tests/slack
{
    "message": "my custom test message",
    "channel": "@user",
    "level": "OK"
}

成功的响应如下所示

{
    "success": true,
    "message": ""
}

失败的响应如下所示

{
    "success": false,
    "message": "could not connect to slack"
}

响应

代码含义
200成功,即使被测试的服务失败,也会返回 200,表示测试已正确完成。

杂项

Ping

您可以通过“ping”Kapacitor 服务器来验证连接是否成功。ping 请求不执行任何操作,但会响应 204。

注意:Kapacitor 服务器版本在所有请求的 X-Kapacitor-Version HTTP 标头中返回。Ping 请求很有用,如果您只需要验证您正在通信的服务器版本。

示例

GET /kapacitor/v1/ping

响应

| Code | Meaning |
| ---- | ------- |
| 204  | Success |

重新加载 sideload

通过向 kapacitor/v1/sideload/reload 发送一个空的 POST 请求,可以触发所有 sideload 源的重新加载。

示例

POST /kapacitor/v1/sideload/reload

响应

| Code | Meaning |
| ---- | ------- |
| 204  | Success |

/debug/vars HTTP 端点

Kapacitor 通过 /debug/vars 端点公开其运行时的统计信息和信息,可以使用以下 cURL 命令访问该端点

curl https://:9092/kapacitor/v1/debug/vars

服务器统计信息和信息以 JSON 格式显示。

注意:您可以使用 Telegraf Kapacitor 输入插件 从指定的 Kapacitor 实例收集指标(使用 /debug/vars 端点)。有关测量和字段列表,请参阅插件 README。

/debug/pprof HTTP 端点

Kapacitor 支持 Go 的 net/http/pprof 端点,这对于故障排除很有用。pprof 包以 pprof 可视化工具期望的格式提供运行时分析数据。

curl https://:9092/kapacitor/v1/debug/pprof/

/debug/pprof/ 端点会生成一个 HTML 页面,其中包含内置 Go 配置文件的列表以及每个文件的超链接。

配置文件描述
block导致同步原语阻塞的堆栈跟踪。
goroutine所有当前 goroutine 的堆栈跟踪。
heap堆分配的堆栈跟踪采样。
mutex竞争的互斥锁持有者的堆栈跟踪。
threadcreate导致创建新的 OS 线程的堆栈跟踪。

要访问上面列出的 /debug/pprof/ 配置文件的其中一个,请使用以下 cURL 请求,将 <profile> 替换为配置文件的名称。生成的配置文件会输出到文件中,该文件在 <path/to/output-file> 中指定。

curl -o <path/to/output-file> https://:9092/kapacitor/v1/debug/pprof/<profile>

在下面的示例中,cURL 命令会将生成的堆配置文件输出到 <path/to/output-file> 中指定的​​文件

curl -o <path/to/output-file> http://9092/kapacitor/v1/debug/pprof/heap

您还可以使用 Go pprof 交互式工具 来访问 Kapacitor /debug/pprof/ 配置文件。例如,要使用此工具查看 Kapacitor 实例的堆配置文件,您将使用类似以下的命令

go tool pprof https://:9092/kapacitor/v1/debug/pprof/heap

有关 Go /net/http/pprof 包以及交互式 pprof 分析和可视化工具的更多信息,请参阅

路由

显示 API 的可用路由

GET /kapacitor/v1/:routes

此页面是否有帮助?

感谢您的反馈!


InfluxDB 3.8 新特性

InfluxDB 3.8 和 InfluxDB 3 Explorer 1.6 的主要增强功能。

查看博客文章

InfluxDB 3.8 现已适用于 Core 和 Enterprise 版本,同时发布了 InfluxDB 3 Explorer UI 的 1.6 版本。本次发布着重于操作成熟度,以及如何更轻松地部署、管理和可靠地运行 InfluxDB。

更多信息,请查看

InfluxDB Docker 的 latest 标签将指向 InfluxDB 3 Core

在 **2026 年 2 月 3 日**,InfluxDB Docker 镜像的 latest 标签将指向 InfluxDB 3 Core。为避免意外升级,请在您的 Docker 部署中使用特定的版本标签。

如果使用 Docker 来安装和运行 InfluxDB,latest 标签将指向 InfluxDB 3 Core。为避免意外升级,请在您的 Docker 部署中使用特定的版本标签。例如,如果使用 Docker 运行 InfluxDB v2,请将 latest 版本标签替换为 Docker pull 命令中的特定版本标签 — 例如

docker pull influxdb:2