使用 Telegraf 计算 运行 进程的数量
Count the number of running process with Telegraf
我正在使用 telegraf、influxdb 和 grafana 为分布式应用程序制作监控系统。我要做的第一件事是计算机器上 java 进程 运行 的数量。
但是当我发出请求时,进程的数量几乎是随机的(总是在 1 到 8 之间,而不是总是有 8 个)。
我认为我的 telegraf 配置有误,但我看不到哪里..我尝试更改 interval
但没有什么不同:似乎 influxdb 没有所有数据。
我是 运行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
我的telegraf.conf:
[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"
我的要求:
回复:
使用模式匹配,如果匹配多个pid,则生成多个具有相同标签和时间戳的数据点。当这些点被发送到 influxdb 时,只存储最后一个点。
您的配置可能发生的情况示例:
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,但大多数时候您不会。
要区分标签在其他方面相同的进程,请使用 pid_tag = true
:
[[inputs.procstat]]
user = "root"
pattern = "java"
pid_tag = true
但是,如果您只想计算进程数(而不关心统计数据),只需使用 exec 插件和 pgrep -c -f java
等自定义命令。这将比具有多个时间序列更优化(pid_tag 你最终每个 pid 一个)。
如果你只是想统计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
,使用不带选项 -f
的 pgrep -c java
因为它是 "full" 并且还计算命令 pgrep
(而且你有几乎相同的问题就像你使用 procstat 一样)。
找到解决方案here
我正在使用 telegraf、influxdb 和 grafana 为分布式应用程序制作监控系统。我要做的第一件事是计算机器上 java 进程 运行 的数量。
但是当我发出请求时,进程的数量几乎是随机的(总是在 1 到 8 之间,而不是总是有 8 个)。
我认为我的 telegraf 配置有误,但我看不到哪里..我尝试更改 interval
但没有什么不同:似乎 influxdb 没有所有数据。
我是 运行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
我的telegraf.conf:
[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"
我的要求:
回复:
使用模式匹配,如果匹配多个pid,则生成多个具有相同标签和时间戳的数据点。当这些点被发送到 influxdb 时,只存储最后一个点。
您的配置可能发生的情况示例:
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,但大多数时候您不会。
要区分标签在其他方面相同的进程,请使用 pid_tag = true
:
[[inputs.procstat]]
user = "root"
pattern = "java"
pid_tag = true
但是,如果您只想计算进程数(而不关心统计数据),只需使用 exec 插件和 pgrep -c -f java
等自定义命令。这将比具有多个时间序列更优化(pid_tag 你最终每个 pid 一个)。
如果你只是想统计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
,使用不带选项 -f
的 pgrep -c java
因为它是 "full" 并且还计算命令 pgrep
(而且你有几乎相同的问题就像你使用 procstat 一样)。
找到解决方案here