2015-11-10 144 views
3

我使用rsyslog來監視我的系統日誌並將它們發送到Logstash + Kibana。從rsyslog發送JSON到Kibana

我的系統日誌消息被記錄爲JSON。他們可以是這個樣子:

{"foo":"bar", "timegenerated": 43843274834} 

rsyslog現在配置這樣:

module(load="omelasticsearch") 

#define a template to print all fields of the message 
template(name="messageToES" type="list" option.json="on") { 
    property(name="msg") 
} 
*.* action(type="omelasticsearch" 
     server="localserverhere" 
     serverport="80" 
     template="messageToES") 

的Kibana是好的,因爲如果我運行一個curl命令它,它接收記錄。如下面的代碼:

curl -XPOST myserver/test/bar -d '{"test": "baz", "timegenerated":1447145221519}' 

當我運行rsyslogs並將其指向一個虛擬服務器上,我可以看到與有效的JSON傳入的請求。但是,當我將它指向我的logstash服務器時,它不會顯示在logstash或kibana中。

有誰知道如何發送syslogs作爲JSON到Kibana/logstash?

+0

你不會「發送」任何東西給kibana,而是把它發送給elasticsearch,讓kibana爲你查詢。 –

+0

檢查你的logstash和elasticsearch日誌。添加stdout {}輸出節到logstash以查看它的想法。打開logstash中的調試(命令行標誌)。 –

回答

0

我從來沒有使用它,但它看起來像你從配置文件中丟失的東西。該文檔有一個非常詳盡的例子:

module(load="omelasticsearch") 
template(name="testTemplate" 
    type="list" 
    option.json="on") { 
     constant(value="{") 
     constant(value="\"timestamp\":\"")  property(name="timereported" dateFormat="rfc3339") 
     constant(value="\",\"message\":\"")  property(name="msg") 
     constant(value="\",\"host\":\"")  property(name="hostname") 
     constant(value="\",\"severity\":\"") property(name="syslogseverity-text") 
     constant(value="\",\"facility\":\"") property(name="syslogfacility-text") 
     constant(value="\",\"syslogtag\":\"") property(name="syslogtag") 
     constant(value="\"}") 
    } 
action(type="omelasticsearch" 
    server="myserver.local" 
    serverport="9200" 
    template="testTemplate" 
    searchIndex="test-index" 
    searchType="test-type" 
    bulkmode="on" 
    queue.type="linkedlist" 
    queue.size="5000" 
    queue.dequeuebatchsize="300" 
    action.resumeretrycount="-1") 

根據你正在嘗試做的,它看起來像你需要在localserverhere插上它顯示myserver.local。它也看起來像你有ES接受端口80的東西,所以你會把80,而不是9200