TL;DR InfluxDB 技术提示 — 使用任务和检查进行 InfluxDB 监控

导航至

在这篇文章中,我们将学习如何结合使用 任务检查 来使用 InfluxDB 进行监控。

问: InfluxDB 的监控工作流程是什么? 答: 根据文档,监控工作流程 涉及以下步骤

  1. InfluxDB 中的检查查询数据,并根据特定条件使用 _level 分配状态。
  2. InfluxDB 将检查的输出存储在 statuses 测量中的 _monitoring 系统存储桶中。
  3. 通知规则检查 statuses 测量中的数据,并根据通知规则中设置的条件,将消息发送到通知端点
  4. InfluxDB 将通知存储在 notifications 测量中的 _monitoring 系统存储桶中。

问: 我可以使用哪些资源通过 Flux 和 InfluxDB 进行监控? 答:如果您希望使用 InfluxDB 监控您的数据,以下是一些可能对您有用的资源列表

问: 检查 和警报之间有什么区别? 答:检查在 InfluxDB 中查询您的数据并对其应用状态。警报是根据您的通知规则发送到您的通知端点的通知。

问: 如何创建检查答:您可以通过 UI 创建检查。让我们为系统的可用内存百分比创建一个检查。以下是创建检查的步骤。

      1. 导航到 UI 中的“警报”选项卡并创建一个新检查。在此示例中,我们将创建一个阈值检查。但是,您也可以选择创建死信检查influxdb alerts checks 2. 命名您的检查为“可用内存百分比”。使用数据浏览器选择要创建检查的字段。对数据应用聚合函数。在这里,我们每 15 秒监控一次可用内存百分比的最大值。influxdb create check
        创建检查的步骤 1。定义查询并对其应用聚合。
        3. 配置您的阈值。由于我们正在监控可用百分比,因此当我的系统可用内存少于 20% 时,我将检查状态设置为“CRIT”。当我的系统可用内存介于 20%-30% 之间时,我将检查状态设置为“WARN”(如果仔细观察,您会看到我在可用内存介于 20.5% 和 29.5% 之间时定义了“WARN”状态,以便您可以轻松可视化阈值)。虽然此处未显示配置,但我将检查状态设置为“OK”,当我的系统可用内存超过 30% 时。最后,我可以单击右上角的绿色复选标记来创建我的检查。
        1. influxdb-create check mem available
          创建检查的步骤 2。配置检查。“CRIT”(红线)、“WARN”(黄线)和“OK”(绿线)状态已配置为可用内存百分比。
    问: 如何查看检查的输出?_level 列在哪里? 答:导航到 InfluxDB 实例中的默认 _monitoring 存储桶,并按检查 ID 或检查名称进行筛选以查看结果。influxdb view check output
    查看检查的输出
    问: 阈值检查或死信检查目前对我来说没有用。我需要先执行数据转换才能利用它。我该怎么办? 答:您可以创建一个任务来首先转换您的数据,并将输出写入新的存储桶或测量。然后,您可以对转换后的数据创建检查。例如,假设您想要在功率水平超过某个值时发出警报,但您只有电流和电压数据。为了创建功率检查,您首先需要运行任务以从电压和电流计算功率。使用以下步骤创建任务
      1. 导航到“任务”选项卡。influxdb task tab 2. 编写您的任务。包括任务配置选项、数据源和目标。确保在编写任务之前创建了目标存储桶。to()函数不会生成新的存储桶。在此示例中,我们正在创建一个任务以从电流和电压计算功率。现在我们已经创建了这个任务,我们创建一个检查以在功率水平过高或过低时向我们发出警报。
        1. influxdb write task
          一个任务示例,该任务从电流和电压数据计算电路的功率。此任务以 5 分钟的间隔运行。它使用 pivot() 函数来转换数据,以便我们可以对同一测量中的两个字段执行数学运算。map() 函数负责执行数学运算。
    注意:您也可以使用 Telegraf Starlark 处理器插件应用这种类型的数学运算。请查看 这篇博客 以获取相应的示例。但是,您应该使用 Flux 和任务来执行复杂的数据转换。问:我的数据级别不是“CRIT”、“WARN”、“INFO”或“OK”。如何为具有不同状态的数据创建检查? 答:运行任务并使用您自己的自定义状态标记您的数据。这个问题突出了检查状态和数据状态之间的重要区别。 检查状态(“CRIT”、“WARN”、“INFO”或“OK”)用于创建通知规则和警报。在使用您自己的自定义状态标记数据后,将您的自定义状态分配给检查状态,并围绕其创建通知规则。利用通知消息将您的自定义状态与检查状态相关联。例如,假设您正在监控太阳能电池。您想使用充电 (CH) 或放电 (DH) 状态来分配数据。任务中的数据转换应包括 条件逻辑,例如
    from(bucket: "solar")
    |> range(start: -task.every)
    |> filter(fn: ® => r["_measurement"] == "battery")
    |> filter(fn: ® => r["_field"] == "kWh")
    |> derivative(unit: 3s, nonNegative: false, columns: ["_value"], timeColumn: "_time")
    |> map(fn: ® => ({
    r with
    _battery_level:
    if r._value > 0.0 then "CH"
    else "DH"
    }))
    现在,如果您需要在电池放电时发出警报,您可以创建一个检查来过滤数据,当 |> filter(fn: ® => r["_level"] == "DH") 且值小于 0 时。通过创建以下消息将检查状态与您的自定义状态相关联:Check: ${ r._check_name } is:${string(v: r._battery_level)} 此处使用 Flux 字符串插值 是冗余的,因为我们的 _battery_level 已经是字符串。但是,我将其包含在内是为了演示如果您需要如何转换字段类型以在消息中包含该值。重要提示:如果您将此工作流程用于自定义状态,请确保不要使用 _level 标记您的自定义状态列,因为这是为检查状态保留的。问:我需要为我的检查添加 4 个以上的状态。我该怎么办? 答:不幸的是,您不能在一个检查中添加超过 4 个状态。但是,您可以随时创建一个新的检查以包含更多状态。例如,您可以使用信息丰富的名称分隔检查,这些名称根据标签或阈值级别区分状态。再次,我鼓励您利用通知消息来阐明您的警报。注意:如果这种方法感觉很麻烦,并且您对允许为一个检查添加 4 个以上状态的功能增强感兴趣,请在此问题 #19208 上发表评论。