9

我们需要监控目录的大小(例如 InfluxDB 的数据目录)以在 Grafana 中设置警报。如此处所述:How to configure telegraf to send a folder-size to influxDB,没有内置插件。

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

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

什么是执行的简单脚本,有什么注意事项?

4

3 回答 3

11

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

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

并通过将以下内容放入 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组添加到用户telegrafsudo 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 监控

干杯,台湾

于 2017-06-06T09:29:56.920 回答
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 "]"

我想监视两个目录:/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" ]

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

telegraf --debug --config /etc/telegraf/telegraf.conf --input-filter exec --test

这应该向您展示 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
于 2018-09-07T05:20:38.853 回答
1

已经提供的解决方案对我来说看起来不错,并且强调了诸如读取权限之类的警告非常好。另一个值得一提的方法是使用 Telegraf 收集数据,如使用 telegraf 在 influxdb 上监控磁盘空间中建议的那样。

[[outputs.influxdb]]
  urls = ["udp://your_host:8089"]
  database = "telegraf_metrics"

  ## Retention policy to write to. Empty string writes to the default rp.
  retention_policy = ""
  ## Write consistency (clusters only), can be: "any", "one", "quorum", "all"
  write_consistency = "any"

  ## Write timeout (for the InfluxDB client), formatted as a string.
  ## If not provided, will default to 5s. 0s means no timeout (not recommended).
  timeout = "5s" 

# Read metrics about disk usage by mount point
[[inputs.disk]]
  ## By default, telegraf gather stats for all mountpoints.
  ## Setting mountpoints will restrict the stats to the specified mountpoints.
  # mount_points = ["/"]

  ## Ignore some mountpoints by filesystem type. For example (dev)tmpfs (usually
  ## present on /run, /var/run, /dev/shm or /dev).
  ignore_fs = ["tmpfs", "devtmpfs"]

注意:超时应慎重考虑。也许每小时读数足以避免因记录而筋疲力尽。

于 2020-11-04T09:32:58.007 回答