我正在尝试使用过滤器ruby插件使用Logstash执行bash脚本。
我的bash代码:
#!/bin/bash
name=$1 log_file="/tmp/test.json"
if [[ -n "$name" ]]; then
echo "$1=$( date +%s )" >> ${log_file} else
echo "argument error" fi
我的Logstash配置:
input {
file{
path => "/var/log/nginx/access.log"
start_position => "beginning"
codec => "json"
type => "json"
sincedb_write_interval => "1"
discover_interval => "1"
}
}
filter {
if [host] {
ruby { code => '
require "open3"
host = event.get("host")
cmd = "/bin/bash /etc/logstash/conf.d/bash_scripts/execute.sh #{host}"
stdin, stdout, stderr = Open3.popen3(cmd) '
}
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "bash_execute"
}
}
没有错误,文件中的事件就消失了,bash脚本没有被触发。我真的不关心任何事件确认之类的事情,仅想执行可以接受Logstash事件的外部参数的任意bash脚本。
有人可以协助吗?