EnhanceIO Telegraf`filestat`插件 - 超级GLOB模式不起作用 - 使telegraf以递归方式查找所有文件

时间:2017-01-27 20:41:58

标签: wavefront telegraf telegraf-inputs-plugin telegraf-plugins wavefront-telegraf

Telegraf v1.0.1 git:master 26acdc9231efde105510fe5df3da7519bc4f42f7

Telegraf服务成功运行sudo service telegraf status显示telegraf is running [OK]

我使用基于Wavefront的SaaS监控解决方案来显示Telegraf数据或设置各种其他内容(警报,仪表板)..它可以工作。

概述: 当您安装Telegraf时,它会在 /etc/telegraf/telegraf.conf 中创建其主配置文件,用户可以将其他配置放在 /etc/telegraf/telegraf.d 下/*.conf(files)。

我有 /etc/telegraf/telegraf.d/extra-inputs-plugins.conf ,在这个文件中,我有以下内容(如你所见,它使用{ {3}})以及以下配置:

## Telegraf filestat plugin
[[inputs.filestat]]
  files = ["/var/run/*/*.pid","/var/run/*.pid"]

在某些数据库服务器上,我安装了EnhanceIO(有关详细信息,请查看此处:filestat inputs plugin

安装EnhanceIO后,您将获得如下文件夹结构:

ubuntu@MyTestCluster-1a-db2-i-0cf6u98b136b211ba:~$ find /proc/enhanceio
/proc/enhanceio
/proc/enhanceio/data_cache
/proc/enhanceio/data_cache/config
/proc/enhanceio/data_cache/io_hist
/proc/enhanceio/data_cache/errors
/proc/enhanceio/data_cache/stats
/proc/enhanceio/version

要配置Telegraf的 filestat 插件以捕获/查找/proc/enhanceio/data_cache/config文件,我可以在我的配置中添加或/proc/enhanceio/data_cache/*(但这样做,该解决方案不具备可扩展性,即如果我希望telegraf选择 / proc 文件夹下的所有文件,该怎么办。

插件文档/评论部分说:

  ## These accept standard unix glob matching rules, but with the addition of
  ## ** as a "super asterisk".

所以,我尝试了以下配置来查找每个文件(递归地):

[[inputs.filestat]]
  files = ["/var/run/*/*.pid","/var/run/*.pid","/proc/*"]

上面运行时产生了以下输出:$ telegraf --config-directory=/etc/telegraf -test|grep filestat|grep -v '/var/run/'|grep enhance(实际上/ proc / enhanceio是一个文件夹)。

> filestat,host=MyTestCluster-1a-db2-i-0cf6u98b136b211ba,file=/proc/enhanceio exists=1i,size_bytes=0i 1485548956000000000

然后,我尝试使用**方法,但我得到没什么

[[inputs.filestat]]
  files = ["/var/run/*/*.pid","/var/run/*.pid","/proc/**"]

$ telegraf --config-directory=/etc/telegraf -test|grep filestat|grep -v '/var/run/'|grep enhance
2017/01/27 20:31:38 I! Using config file: /etc/telegraf/telegraf.conf
$

我尝试过,几乎所有 glob 模式(例如:/proc/enhanceio/*/*/proc/enhanceio/*/**/proc/enhanceio/**/*/proc/enhanceio/**/**)但它只是没有&#39 ; t捕获/ proc / enhanceio树下的任何文件。

为什么当我尝试上述模式时,filestat插件的SUPER GLOB模式根本不起作用?

如何让filestat插件捕获/ proc树下的所有文件?

PS :我知道如果我想在该目录下捕获/proc/enhanceio/data_cache/*文件(仅在该级别),则config将有效。

1 个答案:

答案 0 :(得分:1)

根据Cameron Sparr对此的评论和测试,她无法通过以下示例重现上述情况,但我在帖子中提到的示例也是有效的,因为没有捕获超级水滴模式。

根据她的评论,似乎是:/proc is a very special "filesystem" that is actually a "file" mapping to particular kernel parameters and metrics. Glob and path matching may not work in this area as you might expect.

% ls -R /tmp/test
/tmp/test:
enhance/  foo.log

/tmp/test/enhance:
bar.log  nested/

/tmp/test/enhance/nested:
foo.file
then with this config:

[[inputs.filestat]]
  files = ["/tmp/test/**.log", "/tmp/test/**.file"]
  ## If true, read the entire file and calculate an md5 checksum.
  md5 = false
I was able to find all files

% telegraf --config ~/gd/ws/telegraf.conf --input-filter filestat --output-filter discard --test
* Plugin: inputs.filestat, Collection 1
> filestat,file=/tmp/test/enhance/bar.log,host=tyrion size_bytes=4i,exists=1i 1485988684000000000
> filestat,file=/tmp/test/foo.log,host=tyrion size_bytes=0i,exists=1i 1485988684000000000
> filestat,file=/tmp/test/enhance/nested/foo.file,host=tyrion exists=1i,size_bytes=0i 1485988684000000000