Подсчитайте количество запущенных процессов с 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).