Permission denied when attempting to use input.exec plugin

I have written a python script that prints out metrics so that I can add them to an influxdb. The script works as my local user. It also works as the telegraf user.

However, the script fails when it runs as part of 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/ permission denied for command '/usr/lib/telegraf/custom-plugins/'

If I run this as the telegraf user, though, it works as expected:

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

The script is owned and executable by 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*

My telegraf.conf file points to the appropriate location:

  commands = [
  timeout = "5s"
  data_format = "influx"

Finally, the script itself if pretty basic:


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
              _ = float(value)
              field = f'{key}={value}'
      except ValueError:
              field = f'{key}="{value}"'
      influx_line_protocol = f"{measurement},{tags} {field}"

What do I need to change so that this script is executed by telegraf without the permissions error?

Hi , everything looks fine ,
You could try to put the python script ( as a test ) in /tmp to exclude directory permission problems ,
If it is still not working from /tmp then
maybe a stupid question but have you tried without the - - test option ?

Can you post the contents of your telegraf.conf, please?

This may help debugging the cause of your issue