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. 配置您的阈值。由于我们监控的是可用百分比,我将检查状态设置为“CRIT”,当系统可用内存低于20%时。我将检查状态设置为“WARN”,当系统可用内存介于20%-30%之间时(如果您仔细看,您会看到我将“WARN”状态定义为20.5%-29.5%的内存可用,以便您可以轻松地可视化阈值)。尽管这里没有显示配置,但当系统可用内存超过30%时,我将检查状态设置为“OK”。最后,我可以点击右上角的绿色勾选框来创建我的检查。
        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上留言。