文档文档

Kapacitor HTTP API 参考文档

使用 Kapacitor HTTP API 管理 Kapacitor 任务、模板、记录、收集问题排查数据等。

通用信息

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

HTTP 响应代码

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

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

错误

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

{ "error" : "error message" }

查询参数与 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 接受使用 InfluxData 的 Line Protocol 数据格式 通过 HTTP 写入数据。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一组 vars,用于覆盖 TICKscript 中定义的任何 vars。

使用 PATCH 时,如果缺少任何属性,则任务将保持未修改状态。

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

Vars

vars 对象具有以下形式

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

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

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

示例

创建 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 之一。标签的可读性较差,但可以正确渲染标签中包含的所有信息。
script-formatformattedformattedraw 之一。Raw 将返回与定义方式相同的脚本。Formatted 将首先格式化脚本。
replay-id正在运行的回放的可选 ID。返回的任务信息将在正在运行的回放的任务上下文中。

除了 上面 列出的属性外,任务还具有以下只读属性。

属性描述
dotGraphViz 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 之一。标签的可读性较差,但可以正确渲染标签中包含的所有信息。
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 节点公开最近数据的缓存。数据可在路径 /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. 创建一个新模板,并将每个任务重新分配给新模板,并根据需要更新任务 vars。
  2. 如果重大更改是向前兼容的(即添加了新的必需 var),请首先使用所需的 vars 更新每个任务,然后在所有任务都准备就绪后更新模板。

示例

创建 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 将首先格式化脚本。

除了 上面 列出的属性外,模板还具有以下只读属性。

属性描述
vars来自 TICKscript 的命名 vars 集合,其中包含其类型、默认值和描述。
dotGraphViz DOT 语法格式的模板 DAG 表示。注意:标签与属性无关紧要,因为模板永远不会执行。
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 记录数据的方法:要创建记录,请向 /kapacitor/v1/recordings/METHOD 端点发出 POST 请求。

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

请求在记录开始后返回,并且不等待其完成。返回记录 ID 以便稍后标识记录。

Stream
参数用途
id记录的唯一标识符。如果为空,将选择一个随机标识符。
task任务的 ID,用于仅记录任务的 DBRP 的数据。
stop记录流数据直到停止日期。
Batch
参数用途
id记录的唯一标识符。如果为空,将选择一个随机标识符。
task任务的 ID,记录任务中定义的查询结果。
start将要记录数据的最早日期。RFC3339Nano 格式。
stop将要记录数据的最新日期。如果未指定,则使用当前时间。RFC3339Nano 格式数据。
Query
参数用途
id记录的唯一标识符。如果为空,将选择一个随机标识符。
type记录类型,streambatch
query要执行的查询。
cluster配置的 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"
}

使用 query 方法创建记录,并指定 stream 类型。

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

使用 query 方法创建记录,并指定 batch 类型。

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成功

管理回放

重放记录

要重放记录,请向 /kapacitor/v1/replays/ 发出 POST 请求

参数默认用途
idrandom重放的唯一标识符。如果为空,将选择一个随机 ID。
task任务的 ID。
recording记录的 ID。
recording-timefalse如果为 true,则使用记录中的时间,否则相对于当前时间调整时间。
clockfastfastreal 之一。如果为 real,则等待与记录中的时间对应的实际时间过去。如果为 fast,则无延迟地重放数据。例如,如果时钟为 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重放批处理任务中查询的结果。
query重放显式查询的结果。
Batch
参数默认用途
idrandom重放的唯一标识符。如果为空,将选择一个随机标识符。
task任务的 ID,针对任务重放任务中定义的查询结果。
start将要重放数据的最早日期。RFC3339Nano 格式。
stopnow将要重放数据的最新日期。如果未指定,则使用当前时间。RFC3339Nano 格式数据。
recording-timefalse如果为 true,则使用记录中的时间,否则相对于当前时间调整时间。
clockfastfastreal 之一。如果为 real,则等待与记录中的时间对应的实际时间过去。如果为 fast,则无延迟地重放数据。例如,如果时钟为 real,则持续时间为 5 分钟的流记录将需要 5 分钟才能重放。
Query
参数默认用途
idrandom重放的唯一标识符。如果为空,将选择一个随机标识符。
task任务的 ID,针对任务重放查询结果。
query要执行的查询。
cluster配置的 InfluxDB 集群的名称。如果为空,则使用默认集群。
recording-timefalse如果为 true,则使用记录中的时间,否则相对于当前时间调整时间。
clockfastfastreal 之一。如果为 real,则等待与记录中的时间对应的实际时间过去。如果为 fast,则无延迟地重放数据。例如,如果时钟为 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 允许您查看任何警报的当前状态,并配置各种警报处理程序。

主题

警报分组到主题中。警报处理程序“侦听”主题上的任何新事件。您可以在 TICKscript 中指定警报主题,也可以为您生成一个主题。

创建和删除主题

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

注意:由于主题是动态创建的,因此如果为主题创建了新事件,则在删除主题后,主题可能会重新返回。

示例

DELETE /kapacitor/v1/alerts/topics/system

列出主题

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

查询参数默认用途
min-levelOK仅返回大于或等于最小级别的级别的主题。有效值包括 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仅返回大于或等于最小级别的级别的事件。有效值包括 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 补丁对象应用于现有处理程序,有关更多详细信息,请参阅 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 可能是最简单和最安全的方法,因为它旨在是临时的。这样,您不必修改磁盘上的配置文件,也不必意外地将其保留在原处而导致以后的问题。

概览

配置 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": ["http://localhost: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": ["http://localhost: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 对象。

使用以下顶层操作

描述
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 http://localhost: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 的底层存储系统组织成不同的存储。可以对每个单独的存储执行各种操作。

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

可用操作

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

要执行操作,请向 /kapacitor/v1/storage/stores/<name of store> 发出 POST 请求

示例

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

响应

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

用户

Kapacitor 公开了管理用户的操作。

列出所有用户

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

示例

curl GET "http://localhost:9092/kapacitor/v1/users"

创建用户

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

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

属性描述
name用户名
password密码
type用户类型(normaladmin请参阅 用户
permissions有效用户权限字符串列表(noneapiconfig_apiwrite_pointsall

请参阅 Kapacitor 用户类型和权限

示例

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

更新用户

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

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

属性用途
password密码
type用户类型(normaladmin请参阅 用户
permissions有效用户权限字符串列表(noneapiconfig_apiwrite_pointsall

示例

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

删除用户

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

示例

curl -XDELETE "http://localhost:9092/kapacitor/v1/users/steve"

管理 Flux 任务

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

创建 Flux 任务

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

POST /kapacitor/v1/api/v2/tasks

在您的请求中提供以下内容 (* 必需)

标头

  • * Content-type: application/json

请求正文

具有以下架构的 JSON 对象

  • * flux: Flux 任务代码
  • status: Flux 任务状态(activeinactive,默认为 active
  • description: Flux 任务描述
curl --request POST 'http://localhost: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 = \"http://localhost: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

在您的请求中提供以下内容 (* 必需)

标头

  • * Content-type: application/json

查询参数

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

示例

列出所有 Flux 任务
curl --GET 'http://localhost:9092/kapacitor/v1/api/v2/tasks' \
  --header 'Content-Type: application/json'
列出有限数量的 Flux 任务
curl --GET 'http://localhost:9092/kapacitor/v1/api/v2/tasks' \
  --header 'Content-Type: application/json' \
  --data-urlencode "limit=1"
按名称列出特定的 Flux 任务
curl --GET 'http://localhost:9092/kapacitor/v1/api/v2/tasks' \
  --header 'Content-Type: application/json' \
  --data-urlencode "name=example-flux-task-name"
列出特定任务 ID 之后的 Flux 任务
curl --GET 'http://localhost:9092/kapacitor/v1/api/v2/tasks' \
  --header 'Content-Type: application/json' \
  --data-urlencode "after=000x00xX0xXXx00"
仅列出活动的 Flux 任务
curl --GET 'http://localhost: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}

在您的请求中提供以下内容 (* 必需)

标头

  • * 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 'http://localhost: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 = \"http://localhost: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 'http://localhost:9092/kapacitor/v1/api/v2/tasks/000x00xX0xXXx00' \
  --header 'Content-Type: application/json' \
  --data-raw '{"status": "inactive"}'
覆盖 Flux 任务选项
curl --request PATCH 'http://localhost: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 'http://localhost:9092/kapacitor/v1/api/v2/tasks/000x00xX0xXXx00'

列出 Kapacitor Flux 任务运行

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

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

在您的请求中提供以下内容 (* 必需)

标头

  • * Content-type: application/json

路径参数

  • * taskID: 任务 ID

查询参数

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

以下示例使用任务 ID 000x00xX0xXXx00

列出 Flux 任务的所有运行
curl --GET 'http://localhost:9092/kapacitor/v1/api/v2/tasks/000x00xX0xXXx00/runs' \
  --header 'Content-Type: application/json'
列出有限数量的 Flux 任务运行
curl --GET 'http://localhost:9092/kapacitor/v1/api/v2/tasks/000x00xX0xXXx00/runs' \
  --header 'Content-Type: application/json' \
  --data-urlencode "limit=10"
列出特定运行 ID 之后的 Flux 任务运行
curl --GET 'http://localhost:9092/kapacitor/v1/api/v2/tasks/000x00xX0xXXx00/runs' \
  --header 'Content-Type: application/json' \
  --data-urlencode "after=XXX0xx0xX00Xx0X"
列出在时间范围内发生的 Flux 任务运行
curl --GET 'http://localhost: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 \
  'http://localhost: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 \
  'http://localhost: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 \
  'http://localhost: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 发出 HTTP POST 请求(正文为空)来触发重新加载所有 sideload 源。

示例

POST /kapacitor/v1/sideload/reload

响应

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

/debug/vars HTTP 端点

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

curl http://localhost:9092/kapacitor/v1/debug/vars

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

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

/debug/pprof HTTP 端点

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

curl http://localhost:9092/kapacitor/v1/debug/pprof/

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

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

要访问上面列出的 /debug/pprof/ 分析文件之一,请使用以下 cURL 请求,将 <profile> 替换为分析文件的名称。生成的分析文件输出到为 <path/to/output-file> 指定的文件。

curl -o <path/to/output-file> http://localhost: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 http://localhost:9092/kapacitor/v1/debug/pprof/heap

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

路由

显示 API 的可用路由

GET /kapacitor/v1/:routes

此页是否对您有帮助?

感谢您的反馈!


Flux 的未来

Flux 即将进入维护模式。您可以继续像现在这样使用它,而无需对代码进行任何更改。

阅读更多

InfluxDB 3 开源版本现已发布公开 Alpha 版

InfluxDB 3 开源版本现已可用于 Alpha 测试,根据 MIT 或 Apache 2 许可获得许可。

我们正在发布两个作为 Alpha 版本一部分的产品。

InfluxDB 3 Core 是我们新的开源产品。它是用于时间序列和事件数据的最新数据引擎。InfluxDB 3 Enterprise 是一个商业版本,它建立在 Core 的基础上,增加了历史查询功能、读取副本、高可用性、可扩展性和细粒度的安全性。

有关如何入门的更多信息,请查看