0

使用:电报 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>值来查找机器上运行的所有进程;- 或使用,pid_file = /var/run/jenkins/jenkins.pid(注意:如果您对正在运行服务的用户具有读取权限telegraf)在 Java/其他包装器后面运行的进程;如果您提供pid_file = /var/run/jenkins/jenkins.pid并且 Jenkins 在用户下运行jenkins并且/var/run/jenkins文件夹对 pid 文件本身没有至少“r-x访问 + 读取”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_nameasjenkinsnexusetc。

PSchmod -R 775_or_755 /var/run在每台主机上都做可能不可行。

如果我确实在 /var/ran/jenkins 文件夹中授予 755 权限并将 644 授予 jenkins.pid 文件,则权限错误将消失。在此之后,我尝试使用 metric:procstat.service.process.cpu.usage针对进程jenkins(即process_name="jenkins"),但它没有找到jenkins它的价值。我错过了什么吗?

4

1 回答 1

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.
于 2017-02-22T07:13:34.253 回答