Отказано в доступе при попытке использовать плагин input.exec
Я написал скрипт на 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"
...
Сценарий принадлежит и выполняется телеграфом:
$ 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 ответ
С первой попытки вы запускаете telegraf как ваш собственный пользователь, у которого нет прав. Попробуй с systemctl start telegraf
,