Telegraf - inputs.procstat procstat插件 - README.md doc - exe,pid_file,命令行模式用户名

时间:2017-01-10 18:48:54

标签: sudo pid telegraf telegraf-inputs-plugin procstat

使用: 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设为jenkinsnexus等。< / 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作为其值。我错过了什么吗?

1 个答案:

答案 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.