Отказано в доступе при попытке использовать плагин input.exec - PullRequest
1 голос
/ 29 марта 2019

Я написал скрипт на python, который распечатывает метрики, чтобы я мог добавить их в приток.Скрипт работает как мой локальный пользователь.Он также работает как telegraf пользователь.

Однако сценарий завершается неудачно, когда он запускается как часть telegraf:

$ /usr/bin/telegraf -config /etc/telegraf/telegraf.conf -config-directory /etc/telegraf/telegraf.d --test
2019-03-29T19:21:48Z I! Starting Telegraf 1.10.1
2019-03-29T19:21:48Z E! [inputs.exec]: Error in plugin: exec: fork/exec /usr/lib/telegraf/custom-plugins/polltest.py: permission denied for command '/usr/lib/telegraf/custom-plugins/polltest.py'
...

Однако, если я запускаю его как пользователь telegraf, онработает должным образом:

$ sudo -u telegraf /usr/lib/telegraf/custom-plugins/polltest.py
ups,hostname=ups1 battery.charge=100
ups,hostname=ups1 battery.runtime=2622
ups,hostname=ups1 battery.type="PbAC"
...

Сценарий принадлежит и исполняется telegraf:

$ ls -la /usr/lib/telegraf/custom-plugins/
total 12
drwxr-xr-x 2 root     root     4096 Mar 29 14:15 ./
drwxr-xr-x 4 root     root     4096 Mar 29 14:06 ../
-rwxr--r-- 1 telegraf telegraf  906 Mar 29 14:15 polltest.py*

Мой файл telegraf.conf указывает на соответствующее местоположение:

[[inputs.exec]]
  commands = [
     "/usr/lib/telegraf/custom-plugins/polltest.py"
  ]
  timeout = "5s"
  data_format = "influx"

Наконец, сам скрипт, если он довольно простой:

#!/usr/bin/python3

import subprocess

p1 = subprocess.Popen(["/bin/upsc", "tripplite"], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, encoding="utf8")

for result in p1.stdout:
      key, value = result.split(":")
      measurement = "ups"
      tags = "hostname=ups1"
      value = value.strip()
      # Check if our value is a number. If it's not, surround it in quotes. 
      # Don't actually use the float() value, as some numbers are returns as 
      # valid integers
      try:
              _ = float(value)
              field = f'{key}={value}'
      except ValueError:
              field = f'{key}="{value}"'
      influx_line_protocol = f"{measurement},{tags} {field}"
      print(influx_line_protocol)

Что мне нужно изменить, чтобы этот скрипт выполнялся телеграфом без ошибки разрешений?

1 Ответ

0 голосов
/ 31 марта 2019

В первой попытке вы запускаете telegraf как собственный пользователь, у которого нет прав.Попробуйте с systemctl start telegraf.

...