如何通过Telegraf监控目录的大小

Tw *_*ert 3 du telegraf

我们需要监视目录的大小(例如InfluxDB的数据目录)以在Grafana中设置警报.如上所述:如何配置telegraf将文件夹大小发送到InfluxDB,没有内置的插件.

我们不介意使用inputs.execTelegraf 的部分.目录不是很大(低文件数+ dircount),所以深度扫描(如使用du)对我们来说很好.

我们需要监控的目录之一是/var/lib/influxdb/data.

什么是一个简单的脚本来执行,有什么警告?

JGC*_*JGC 9

如果您需要监视多个目录,我更新了Tw Bert的答案并将其扩展为允许您在一个命令行中将它们全部传递。这使您不必[[input.exec]]在 telegraf.conf 文件中添加多个条目。

创建/etc/telegraf/scripts/disk-usage.sh包含以下内容的文件:

#!/bin/bash

echo "["
du -ks "$@" | awk '{if (NR!=1) {printf ",\n"};printf "  { \"directory_size_kilobytes\": "$1", \"path\": \""$2"\" }";}'
echo
echo "]"
Run Code Online (Sandbox Code Playgroud)

我想监视两个目录:/mnt/user/appdata/influxdb/mnt/user/appdata/grafana. 我可以做这样的事情:

# Get disk usage for multiple directories
[[inputs.exec]]
  commands = [ "/etc/telegraf/scripts/disk-usage.sh /mnt/user/appdata/influxdb /mnt/user/appdata/grafana" ]
  timeout = "5s"
  name_override = "du"
  name_suffix = ""
  data_format = "json"
  tag_keys = [ "path" ]
Run Code Online (Sandbox Code Playgroud)

更新配置后,您可以使用以下方法进行测试:

telegraf --debug --config /etc/telegraf/telegraf.conf --input-filter exec --test
Run Code Online (Sandbox Code Playgroud)

这应该向您展示 Telegraf 将推动什么涌入:

bash-4.3# telegraf --debug --config /etc/telegraf/telegraf.conf --input-filter exec --test
> du,host=SomeHost,path=/mnt/user/appdata/influxdb directory_size_kilobytes=80928 1536297559000000000
> du,host=SomeHost,path=/mnt/user/appdata/grafana directory_size_kilobytes=596 1536297559000000000
Run Code Online (Sandbox Code Playgroud)


val*_*zka 6

可以使用filecount插件来实现

[[inputs.filecount]]
directories = ["/var/lib/influxdb/engine/data"]
Run Code Online (Sandbox Code Playgroud)

输出:

> filecount,directory=/var/lib/influxdb/engine/data,host=psg count=424i,size_bytes=387980393i 1652195855000000000
Run Code Online (Sandbox Code Playgroud)


Tw *_*ert 5

您可以metrics-exec_du.sh使用以下内容创建一个简单的bash脚本(chmod 755):

#!/usr/bin/env bash
du -bs "${1}" | awk '{print "[ { \"bytes\": "$1", \"dudir\": \""$2"\" } ]";}'
Run Code Online (Sandbox Code Playgroud)

并通过将以下内容放入Telegraf配置文件中来激活它:

[[inputs.exec]] commands = [ "YOUR_PATH/metrics-exec_du.sh /var/lib/influxdb/data" ] timeout = "5s" name_override = "du" name_suffix = "" data_format = "json" tag_keys = [ "dudir" ]

注意事项:

  1. du命令可能会对您的服务器造成压力,因此请小心使
  2. 用户telegraf必须能够扫描目录.有几个选项,但由于InfluxDB的目录掩码有点未指定(参见:https://github.com/influxdata/influxdb/issues/5171#issuecomment-306419800),我们应用了一个相当粗略的解决方法(示例适用于Ubuntu 16.04.2 LTS):
    • influxdb组添加到用户telegraf:sudo usermod --groups influxdb --append telegraf
    • 将以下内容放在crontab中,例如每10分钟运行一次: 10 * * * * chmod -R g+rX /var/lib/influxdb/data > /var/log/influxdb/chmodfix.log 2>&1

结果,在Grafana中配置(数据源:InfluxDB): Grafana dirsize监测

干杯,TW