2016-07-05 104 views
1

我想讓logstash 2.3.3 websocket輸入工作。如何配置logstash 2.3.3 websocket

Logstash:https://download.elastic.co/logstash/logstash/logstash-2.3.3.tar.gz

WebSocket的輸入插件Logstash: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客戶端:瀏覽器插件 「簡單的Web客戶端的Socket」

我知道的去年提交的bug logstash 1.5.0和websocket輸入插件。 https://github.com/logstash-plugins/logstash-input-websocket/issues/3我也收到了那些相同的錯誤信息,雖然我不能再現它們。以下是我目前的程序和結果。我希望這個錯誤已經得到修復,我無法找到正確的配置。

首先我安裝了插件並確認它已列爲已安裝。

/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中打開簡單的Web客戶端的Socket連接

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 

接收 「配置OK」

啓動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 

我嘗試發送「hello world」。服務器上沒有任何明顯的情況。大約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

更仔細地閱讀websocketd文檔後,它將套接字上收到的數據發送到程序的stdin。我試圖在logstash配置中聽一個套接字,但數據實際上是要去那個應用的stdin。我改變了我的config來此:

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的輸入實現他們的服務器選項,標準輸入{}和stdout {}是如果使用websocketd作爲Web服務器的輸入和輸出。