Подсчитайте количество запущенных процессов с Telegraf

Я использую telegraf, influenxdb и grafana для создания системы мониторинга распределенного приложения. Первое, что я хочу сделать, - это подсчитать количество java-процессов, запущенных на машине.

Но когда я делаю свой запрос, число процессов почти случайное (всегда от 1 до 8 вместо всегда 8).

Я думаю, что в моей конфигурации телеграфа есть ошибка, но я не вижу, где.. Я пытался изменить interval но ничто не отличалось: кажется, что у influenxdb не все данные.

Я использую Centos 7 и Telegraf v1.5.0 (git: release-1.5 a1668bbf)

Весь процесс Java, который я хочу посчитать:

[root@localhost ~]# pgrep -f java
10665
10688
10725
10730
11104
11174
16298
22138

Мой телеграф.конф:

[global_tags]

# Configuration for telegraf agent
[agent]
  interval = "5s"
  round_interval = true
  metric_batch_size = 1000
  metric_buffer_limit = 10000
  collection_jitter = "0s"
  flush_interval = "10s"
  flush_jitter = "0s"
  precision = ""
  debug = true
  quiet = false
  logfile = "/var/log/telegraf/telegraf.log"
  hostname = "my_server"
  omit_hostname = false

Мой input.conf:

# Read metrics about disk usagee
[[inputs.disk]]
  fielddrop = [ "inodes*" ]
  mount_points=["/", "/workspace"]                                                                                                                                                                                                                                  

# File
[[inputs.filestat]]
  files = ["myfile.log"]

# Read the number of running java process
[[inputs.procstat]]
  user = "root"
  pattern = "java"

Мой запрос:

запрос

Ответ:

ответ

2 ответа

Решение

Если вы просто хотите посчитать PID, это хороший способ использовать exec как это:

[[inputs.exec]]
  commands = ["pgrep -c java"] #command to execute
  name_override = "the_name"   #database's name
  data_format = "my_value"     #colunm's name

За commandsиспользовать pgrep -c java без опции -f потому что он "полный", а также считает команду pgrep (и у вас есть почти такая же проблема, как если бы вы использовали procstat).

Решение найдено здесь

При сопоставлении с образцом, если он совпадает с несколькими пидами, создаются несколько точек данных с одинаковыми тегами и отметкой времени. Когда эти точки отправляются в influenxdb, сохраняется только последняя точка.

Пример того, что может произойти с вашей конфигурацией:

00:00 => pid 1
00:05 => pid 2
00:10 => pid 1
00:15 => pid 5
00:20 => pid 7
00:25 => pid 3
00:30 => pid 3
00:35 => pid 4
00:40 => pid 6
00:45 => pid 7
00:50 => pid 6
00:55 => pid 5
Different pids over one minute = 7 (pid 8 was not stored a single time)

Так как это случайно, иногда вы получаете 8 разных пидов за минуту, но в большинстве случаев это не так.


Чтобы различать процессы, чьи теги одинаковы, используйте pid_tag = true:

[[inputs.procstat]]
  user = "root"
  pattern = "java"
  pid_tag = true

Однако, если вы просто хотите посчитать количество процессов (и не заботитесь о статистике), просто используйте плагин exec с пользовательской командой, такой как pgrep -c -f java, Это будет более оптимизировано, чем использование кратных временных рядов (с pid_tag ​​вы получите один на pid).

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