使用: Telegraf v1.0.1
Telegraf procstat插件的文档: https://github.com/influxdata/telegraf/tree/master/plugins/inputs/procstat
我的自定义配置文件:
/etc/telegraf/telegraf.d/my_custom_process_service-telegraf.conf 包含:
[[inputs.procstat]]
exe = "."
prefix = "service_process"
[[inputs.procstat]]
pid_file = "/var/run/jenkins/jenkins.pid"
prefix = "service_process"
以上配置根据语法正常工作。这将为我提供度量标准名称的指标:procstat.service.process.xx.xx
(取决于您是使用_
字符转换.
) - 还是procstat.service_process.x.x
指标。
使用exe = "."
捕获计算机上运行的任何进程(它将执行pgrep "."
操作,并通过提供process_name=<processes>
值来查找计算机上运行的所有进程; -OR using,pid_file = /var/run/jenkins/jenkins.pid
(注意:如果您对运行telegraf
服务的用户具有READ权限,则对于在Java /其他包装器后面运行的进程);如果您提供pid_file = /var/run/jenkins/jenkins.pid
,并且Jenkins是否在用户jenkins
下运行且 / var / run / jenkins 文件夹至少没有“r-x
”访问权限+阅读pid文件本身的“r
”访问权限,然后它将抛出“拒绝权限”的错误。
2017-01-10T18:13:30Z E! Error: procstat getting process, exe: [] pidfile: [/var/run/jenkins/jenkins.pid] pattern: [] user: [] Failed to read pidfile '/var/run/jenkins/jenkins.pid'. Error: 'open /var/run/jenkins/jenkins.pid: permission denied'
问题:
Telegraf是否可以在SUDO
模式下运行(如果可能)?即如果我没有r-x/r
访问权来读取进程的PID文件并假设有很多这样的进程(在Java /某些Wrapper后面运行,那么exe=xxxx
在这种情况下将不起作用),然后我必须使用pid_file = ...
方法,那么我如何让Telegraf使用此pid_file
方法将process_name
设为jenkins
或nexus
等。< / p>
PS :在每台主机上执行chmod -R 775_or_755 /var/run
可能不可行。
如果我在/ var / ran / jenkins文件夹和644到jenkins.pid文件中给予755权限,则权限错误将消失。在此之后,我尝试对流程procstat.service.process.cpu.usage
使用指标jenkins
(即process_name="jenkins"
),但它没有找到jenkins
作为其值。我错过了什么吗?
答案 0 :(得分:1)
在/etc/telegraf/telegraf.d/someFile.conf中添加了以下配置,并使用Ansible's file module
修复了权限问题:http://docs.ansible.com/ansible/file_module.html
## Telegraf filestat plugin
[[inputs.filestat]]
files = ["/var/run/*/*.pid","/var/run/*.pid"]
## To catch all processs. Better than pattern = "."
[[inputs.procstat]]
exe = "."
prefix = "pgrep_serviceprocess"
##For catching processes by a user.
## Telegraf will use: pgrep -u <user>
[[inputs.procstat]]
user = "vagrant"
prefix = "pgrep_serviceprocess"
[[inputs.procstat]]
user = "telegraf"
prefix = "pgrep_serviceprocess"
[[inputs.procstat]]
user = "root"
prefix = "pgrep_serviceprocess"
## Add more users or template it out in Ansible.