如何使用 telegraf 监控 systemd 服务?

Sha*_*uan 3 monitoring grafana telegraf

我创建了一个在我们的系统中运行的 systemd 服务,我想使用已安装在实例上的 telegraf 代理来监视它。代理当前正在监视基本的基础设施,我需要向新服务添加监视。

我找不到任何关于如何做到这一点的示例,这很奇怪,我希望 telegraf 有某种用于基本功能的插件。

我的服务正在运行一个不公开任何端口的 python 脚本,因此我可以进行正常的 HTTP 运行状况检查。

任何帮助将不胜感激。

Sha*_*uan 6

于是我发现确实有一个监控系统服务的插件,名字叫systemd_timings

这是我已经实现的配置:

# Gather systemd units state
[[inputs.systemd_units]]
  ## Set timeout for systemctl execution
   timeout = "1s"

  # Filter for a specific unit type, default is "service", other possible
  # values are "socket", "target", "device", "mount", "automount", "swap",
  # "timer", "path", "slice" and "scope ":
  unittype = "service"

  # Filter for a specific pattern, default is "" (i.e. all), other possible
  # values are valid pattern for systemctl, e.g. "a*" for all units with
  # names starting with "a"
  pattern = ""
  ## pattern = "telegraf* influxdb*"
  ## pattern = "a*"
Run Code Online (Sandbox Code Playgroud)

在 influxDB 中获取指标后,这是我用来提取所需数据的查询:

from(bucket: "veeva")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_field"] == "active_code")
  |> filter(fn: (r) => r["_measurement"] == "systemd_units")
  |> filter(fn: (r) => r["active"] == "active")
  |> filter(fn: (r) => r["host"] == "10.192.21.66")
  |> filter(fn: (r) => r["name"] == "myservice.service")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> yield(name: "mean")
  [1]: 
Run Code Online (Sandbox Code Playgroud)

这就是它在 Grafana 中的样子:

在此输入图像描述 https://docs.influxdata.com/telegraf/v1.22/plugins/#systemd_timings