首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Telegraf - inputs.procstat pgrep插件问题

Telegraf - inputs.procstat pgrep插件问题
EN

Stack Overflow用户
提问于 2017-01-07 07:14:36
回答 1查看 3.8K关注 0票数 1

Telegraf v1.0.1

在启用[inputs.procstat]插件之后,我再也不能看到telegraf._ (树)度量了。

Telegraf安装成功。进程正在运行。我基本上是使用正常的设置输入插件和输出插件。

这就是我得到的:

代码语言:javascript
复制
ubuntu@jenkins:/tmp/giga_aks_testing/ansible$ grep -C 2 jenkins /etc/telegraf/telegraf.d/telegraf-custom-host-services-processes.conf; echo ; ps -eAf|grep jenkins; echo; pgrep -f jenkins; echo; cat -n /var/log/telegraf/telegraf.log; echo date; echo; ps -eAf|grep telegraf; echo ; sudo service telegraf status

[[inputs.procstat]]
  exe = "jenkins"
  prefix = "pgrep_serviceprocess"


root      2875  3685  0  2016 pts/3    00:00:00 sudo su jenkins
root      2876  2875  0  2016 pts/3    00:00:00 su jenkins
jenkins   2877  2876  0  2016 pts/3    00:00:00 bash
jenkins  11645     1  0  2016 ?        00:00:01 /usr/bin/daemon --name=jenkins --inherit --env=JENKINS_HOME=/var/lib/jenkins --output=/var/log/jenkins/jenkins.log --pidfile=/var/run/jenkins/jenkins.pid -- /usr/bin/java -Djava.awt.headless=true -jar /usr/share/jenkins/jenkins.war --webroot=/var/cache/jenkins/war --httpPort=8080
jenkins  11647 11645  0  2016 ?        05:33:22 /usr/bin/java -Djava.awt.headless=true -jar /usr/share/jenkins/jenkins.war --webroot=/var/cache/jenkins/war --httpPort=8080
ubuntu   21973 26885  0 06:57 pts/0    00:00:00 grep --color=auto jenkins

2875
2876
11645
11647

     1  2017-01-07T06:54:00Z E! Error: procstat getting process, exe: [jenkins] pidfile: [] pattern: [] user: [] Failed to execute /usr/bin/pgrep. Error: 'exit status 1' 
     2  2017-01-07T06:55:00Z E! Error: procstat getting process, exe: [jenkins] pidfile: [] pattern: [] user: [] Failed to execute /usr/bin/pgrep. Error: 'exit status 1' 
     3  2017-01-07T06:56:00Z E! Error: procstat getting process, exe: [jenkins] pidfile: [] pattern: [] user: [] Failed to execute /usr/bin/pgrep. Error: 'exit status 1' 
     4  2017-01-07T06:57:00Z E! Error: procstat getting process, exe: [jenkins] pidfile: [] pattern: [] user: [] Failed to execute /usr/bin/pgrep. Error: 'exit status 1' 
date

telegraf 19336     1  0 05:45 pts/0    00:00:04 /usr/bin/telegraf -pidfile /var/run/telegraf/telegraf.pid -config /etc/telegraf/telegraf.conf -config-directory /etc/telegraftelegraf.d
ubuntu   21977 26885  0 06:57 pts/0    00:00:00 grep --color=auto telegraf

telegraf Process is running [ OK ]
ubuntu@jenkins:/tmp/giga_aks_testing/ansible$ 

为什么,当jenkins进程运行并且pgrep -f jenkins返回有效的结果时,日志文件显示了一个错误。

PS: [inputs.procstat]插件使用pgrep -f <exe_value_pattern>作为逻辑,如果使用pattern =方法,则使用pgrep <executable> (如果使用exe =方法)。

完整的/etc/telegraf/telegraf.d/telegraf-custom-host-services-processes.conf文件是:

代码语言:javascript
复制
[[inputs.procstat]]
  exe = "jenkins"
  prefix = "pgrep_serviceprocess"

[[inputs.procstat]]
  exe = "telegraf"
  prefix = "pgrep_serviceprocess"

[[inputs.procstat]]
  exe = "sshd"
  prefix = "pgrep_serviceprocess"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-07 08:36:47

好的。看来这是个打开的漏洞。

如果在一个文件中只有一个[inputs.procstat]插件,那么具有插件条目的Telegraf就不会失效。

如果您指定多个条目,即使这些exe = <executables_processes>正在运行,Telegraf也会开始将这些错误吐出(PS:它不会停止Telegraf服务的工作)。

来修复错误,这就是我所做的:

代码语言:javascript
复制
[[inputs.procstat]]
  exe = "telegraf|.*"
  prefix = "pgrep_serviceprocess"

现在,由于pgrep用于Telegraf的[inputs.procstat]插件,它将在操作系统级别( pgrep "telegraf|.*" )执行此操作。

现在,您还可以只给出exe = "." (最简单的)或类似于exe = ".*",但实际上,要找出谁在系统上运行的所有进程上执行grep并不容易。

注意: .* (将发现机器上运行的每个进程),所以请使用它,直到得到适当的修复。

相关源代码Github文件:https://github.com/influxdata/telegraf/blob/master/plugins/inputs/procstat/procstat.go

相关问题:https://github.com/influxdata/telegraf/issues/586

我仍然找不到为什么在我启用[[inputs.procstat]]输入之后“telgraf.x.x”指标是不可用的。是因为一个单独的文件吗?我没有把握。但是,我可以看到procstat.x.x度量树,但是现在看不到telegraf.x.x度量树。

或者更好

One也可以使用:

代码语言:javascript
复制
[[inputs.procstat]]
  pattern = "."
  prefix = "pgrep_serviceprocess"

上面的内容是:pgrep -f ".",其中模式是. (捕获所有东西,也就是在机器上运行的每个进程/cmd/服务)。

或者(但以下不是可伸缩的解决方案,因为您必须知道是哪个用户)。在某些框中,Jenkins可能使用的是jenkins以外的用户)。

代码语言:javascript
复制
[[inputs.procstat]]
  user = "jenkins"
  prefix = "pgrep_serviceprocess"

上面的内容是:pgrep -u "jenkins",其中的用户是jenkins (捕获所有东西,也就是在机器上运行的每个进程/cmd/服务)。

要检查jenkins是否正在运行,或者是否正在运行增强器,您也可以使用[[inputs.exec]]插件。我只使用:[[inputs.filestat]]插件,当我为这两种工具查找pid文件时,它起了作用。https://github.com/influxdata/telegraf/tree/master/plugins/inputs/filestat

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41518892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档