Telegraf - проблема с плагином input.procstat для pgrep

Telegraf v1.0.1

Я больше не могу видеть метрику телеграфа [._] (дерева) после того, как я включил плагин [[input.procstat]].

Телеграф успешно установлен. Процесс запущен. Я в значительной степени использую обычные настройки для плагинов входов и плагинов вывода.

Вот что я получил:

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: [[input.procstat]] плагин использует pgrep -f <exe_value_pattern> это логика, если pattern = метод используется, и pgrep <executable> если exe = метод используется.

Полный файл /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 ответ

Решение

ХОРОШО. Похоже, это открытая ошибка.

Telegraf с записью плагина [[input.procstat]] не прекратит работу, если в одном файле только один плагин.

Если указать несколько записей, даже если те exe = <executables_processes> запущены, Telegraf начнет выплевывать эти ошибки (PS: это не остановит работу службы Telegraf, хотя).

Чтобы исправить ошибки, вот что я сделал:

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

Теперь, поскольку pgrep используется для плагина Telegraf [[input.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

Я все еще не мог найти, почему метрики "telegraf.xx" не доступны после того, как я включил [[inputs.procstat]] вход. Это из-за отдельного файла? Я не уверен. Но я вижу procstat.x.x метрическое дерево, но telegraf.x.x Метрическое дерево сейчас не видно.

Или лучше,

Можно также использовать:

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

Выше будет делать: pgrep -f "." где шаблон . (чтобы поймать все или все процессы / cmd / службы, работающие на машине).

ИЛИ (но следующее не является масштабируемым решением, так как вы должны знать, для какого пользователя. В некоторых окнах Jenkins может работать с пользователем, отличным от jenkins).

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

Выше будет делать: pgrep -u "jenkins" где пользователь jenkins (чтобы поймать все или все процессы / cmd / службы, работающие на машине).

Чтобы проверить, jenkins работает или нет, или если Enhanceio работает или нет, вы можете использовать [[inputs.exec]] плагин также. Я просто использовал: [[inputs.filestat]] плагин, и он работал, когда я искал файл pid для обоих инструментов. https://github.com/influxdata/telegraf/tree/master/plugins/inputs/filestat

Другие вопросы по тегам