首页 文章

Telegraf - inputs.procstat pgrep插件问题

提问于
浏览
1

Telegraf v1.0.1

启用 [[inputs.procstat]] 插件后,我无法再看到 telegraf[._] (树)指标 .

Telegraf已成功安装 . 进程正在运行 . 我几乎使用输入插件和输出插件的常规设置 .

这就是我得到的:

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]]插件在使用 pattern = 方法时使用 pgrep -f <exe_value_pattern> 作为逻辑,如果使用 exe = 方法则使用 pgrep <executable> .

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

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

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

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

1 回答

  • 1

    好 . 似乎这是一个OPEN错误 .

    带有 [[inputs.procstat]] 插件条目的Telegraf在一个文件中赢得了't barf if there' s only one 插件 .

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

    To fix the errors, this is what I did:

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

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

    现在,你也可以给 exe = "." (最简单)或类似 exe = ".*" 但实际上那些不容易找出实际上是谁试图在系统上运行的所有进程上执行grep .

    NOTE: .* (将查找计算机上运行的每个进程),因此请使用它,直到我们得到适当的修复程序 .

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

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

    我仍然找不到,为什么在启用 [[inputs.procstat]] 输入后"telegraf.x.x"指标不可用 . 这是由于一个单独的文件?我不确定 . 但是,我可以看到 procstat.x.x 度量标准树,但现在看不到 telegraf.x.x 度量标准树 .

    或更好,

    One can also use:

    [[inputs.procstat]]
      pattern = "."
      prefix = "pgrep_serviceprocess"
    

    以上将做: pgrep -f "." 其中pattern是 . (以捕获所有在进程上运行的每个进程/ cmd / service) .

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

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

    以上将执行: pgrep -u "jenkins" 其中user是 jenkins (用于捕获计算机上运行的每个进程/ cmd / service的所有内容) .

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

相关问题