我正在尝试使用logstash 2.3.3 websocket输入工作。
Logstash:https://download.elastic.co/logstash/logstash/logstash-2.3.3.tar.gz
Logstash的Websocket输入插件:https://www.elastic.co/guide/en/logstash/current/plugins-inputs-websocket.html
Websocket服务器:https://github.com/joewalnes/websocketd/releases/download/v0.2.11/websocketd-0.2.11-linux_amd64.zip
Websocket客户端:Chrome插件“简单Web客户端客户端”
我知道去年提交的一个bug logstash 1.5.0和websocket输入插件。 https://github.com/logstash-plugins/logstash-input-websocket/issues/3我也收到了同样的错误信息,虽然我不能再复制它们了。以下是我目前的程序和结果。我希望bug已被修复,我找不到正确的配置。
首先我安装了插件并确认它已列为已安装。
/app/bin/logstash-plugin list | grep "websocket"
接下来,我检查了logstash是否正在使用以下配置
input {
stdin { }
}
output {
file {
path => "/app/logstash-2.3.3/logstash-log.txt"
}
}
Logstash工作。
/app/logstash-2.3.3/bin/logstash agent --config /app/logstash-2.3.3/logstash.conf
Hello World
文件logstash-log.txt包含:
{"message":"Hello World","@version":"1","@timestamp":"2016-07-05T20:04:14.850Z","host":"server-name.domain.com"}
接下来我打开了端口9300
我写了一个简单的bash脚本来返回一些数字
#!/bin/bash
case $1 in
-t|--to)
COUNTTO=$2
shift
;;
esac
shift
printf 'Count to %i\n' $COUNTTO
for COUNT in $(seq 1 $COUNTTO); do
echo $COUNT
sleep 0.1
done
我启动了websocketd指向我的bash脚本
/app/websocketd --port=9300 /app/count.sh --to 7
我在Chrome中打开了Simple Web Socket Client并连接了
ws://server-name.domain.com:9300
成功!它返回了以下内容。
Count to 7
1
2
3
4
5
6
7
此时我知道websocketd正常工作并且logstash正常工作。现在是麻烦开始的时候。
Logstash websocket输入配置文件
input {
websocket {
codec => "plain"
url => "ws://127.0.0.1:9300/"
}
}
output {
file {
path => "/app/logstash-2.3.3/logstash-log.txt"
}
}
运行configtest
/app/logstash-2.3.3/bin/logstash agent --config /app/logstash-2.3.3/logstash.conf --configtest
接收“配置正常”
启动websocketd
/app/websocketd --port=9300 /app/logstash-2.3.3/bin/logstash agent --config /app/logstash-2.3.3/logstash.conf
回到Simple Web Socket Client,我连接到ws://server-name.domain.com:9300。我看到一条消息弹出,我开始了一个会话。
Tue, 05 Jul 2016 20:07:13 -0400 | ACCESS | session | url:'http://server-name.domain.com:9300/' id:'1467732248361139010' remote:'192.168.0.1' command:'/app/logstash-2.3.3/bin/logstash' origin:'chrome-extension://pfdhoblngbopfeibdeiidpjgfnlcodoo' | CONNECT
我尝试发送“你好世界”。服务器上没有任何明显的事情发生。大约15秒后,我在控制台窗口中看到一条断开连接的消息。永远不会创建logstash-log.txt。
有什么想法尝试?谢谢!
更新1:
我尝试将以下内容放在名为“launch_logstash.sh”的bash脚本中:
#!/bin/bash
exec /app/logstash-2.3.3/bin/logstash agent --config /app/logstash-2.3.3/logstash.conf
然后我开始像websocketd一样:
/app/websocketd --port=9300 /app/logstash-2.3.3/bin/launch_logstash.sh
相同的结果;没有成功。
答案 0 :(得分:0)
在更仔细地阅读websocketd文档后,它会将套接字上收到的数据发送到程序的stdin。我试图在我的logstash配置中监听套接字,但数据实际上是转到该应用程序的标准输入。我将配置更改为:
input {
stdin { }
}
output {
file {
path => "/app/logstash-2.3.3/logstash-log.txt"
}
}
然后像这样启动websocketd:
/app/websocketd --port=9300 /app/logstash-2.3.3/bin/logstash agent --config /app/logstash-2.3.3/logstash.conf
简而言之,在logstash-websocket-input实现其服务器选项之前,如果使用websocketd作为Web服务器,则stdin {}和stdout {}是输入和输出。