Logstash 參考指南(拼接多個輸入和輸出插件)

將多個輸入和輸出插件拼接在一塊兒

你須要管理的信息一般來自幾個不一樣來源,而且用例能夠爲你的數據要求多個目的地,你的Logstash管道能夠使用多個輸入和輸出插件來處理這些需求。html

在本節中,你將建立一個Logstash管道,該管道接收來自Twitter提要和Filebeat客戶端的輸入,而後將信息發送到一個Elasticsearch集羣,並將信息直接寫入文件。segmentfault

讀取來自Twitter的提要

要添加Twitter提要,請使用twitter輸入插件,要配置插件,須要如下信息:服務器

  • 一個消費者key,它惟一地標識你的Twitter應用程序。
  • 一個消費者secret,做爲你的Twitter應用程序的密碼。
  • 在傳入的提要中搜索一個或多個關鍵字,這個例子顯示了使用「cloud」做爲關鍵字,可是你能夠使用任何你想要的。
  • 一個oauth token,它標識使用這個應用程序的Twitter賬戶。
  • 一個oauth token secret,做爲Twitter帳戶的密碼。

訪問https://dev.twitter.com/apps來創建一個Twitter帳戶,生成你的消費key和secret,以及你的訪問token和secret,若是你不肯定如何生成這些key,請參閱twitter輸入插件的文檔。app

就像前面使用Logstash解析日誌時所作的那樣,建立一個包含配置管道結構的配置文件(稱爲second-pipeline.conf),若是須要,能夠重用前面建立的文件,但請確保在運行Logstash時傳遞正確的配置文件名。負載均衡

將如下幾行添加到second-pipeline.conf文件的input部分,將此處所示的佔位符值替換爲你的值:curl

twitter {
   consumer_key => "enter_your_consumer_key_here"
   consumer_secret => "enter_your_secret_here"
   keywords => ["cloud"]
   oauth_token => "enter_your_access_token_here"
   oauth_token_secret => "enter_your_access_token_secret_here"
}

配置Filebeat將日誌行發送到Logstash

正如你在配置Filebeat以將日誌行發送到Logstash時所瞭解的那樣,Filebeat客戶端是一個輕量級的、資源友好的工具,它能夠從服務器上的文件中收集日誌,並將這些日誌轉發到你的Logstash實例進行處理。iphone

安裝Filebeat後,須要對其進行配置,打開位於Filebeat安裝目錄中的filebeat.yml文件,並使用如下行替換內容,確保paths指向你的系統日誌:elasticsearch

filebeat.prospectors:
- type: log
  paths:
    - /var/log/*.log 
  fields:
    type: syslog 
output.logstash:
  hosts: ["localhost:5044"]
  • paths => Filebeat處理的文件的絕對路徑。
  • fields => 將一個名爲type值爲syslog的字段添加到該事件中。

保存你的更改。ide

爲了簡化配置,你不會像在現實場景中那樣指定TLS/SSL設置。工具

經過在second-pipeline.conf文件的input部分添加如下代碼行,將你的Logstash實例配置爲使用Filebeat輸入插件:

beats {
   port => "5044"
}

將Logstash數據寫入文件

你能夠配置你的Logstash管道,以便使用file輸出插件將數據直接寫入文件。

經過在second-pipeline.conf文件的output部分添加如下行,配置你的Logstash實例以使用文件輸出插件:

file {
   path => "/path/to/target/file"
}

寫入到多個Elasticsearch節點

對多個Elasticsearch節點的寫入能夠減輕給定Elasticsearch節點的資源需求,並在特定節點不可用時爲集羣提供多餘的入口點。

若要將你的Logstash實例配置爲寫入多個Elasticsearch節點,請編輯second-pipeline.conf文件的output部分以供讀取:

output {
    elasticsearch {
        hosts => ["IP Address 1:port1", "IP Address 2:port2", "IP Address 3"]
    }
}

在你的Elasticsearch集羣的hosts行中使用三個非主節點的IP地址,當hosts參數列出多個IP地址時,Logstash使用地址列表的負載均衡請求,還請注意,Elasticsearch的默認端口是9200,能夠在上面的配置中省略。

測試管道

此時,你的second-pipeline.conf文件看起來像這樣:

input {
    twitter {
        consumer_key => "enter_your_consumer_key_here"
        consumer_secret => "enter_your_secret_here"
        keywords => ["cloud"]
        oauth_token => "enter_your_access_token_here"
        oauth_token_secret => "enter_your_access_token_secret_here"
    }
    beats {
        port => "5044"
    }
}
output {
    elasticsearch {
        hosts => ["IP Address 1:port1", "IP Address 2:port2", "IP Address 3"]
    }
    file {
        path => "/path/to/target/file"
    }
}

Logstash使用的數據來自你配置的Twitter提要,接收來自Filebeat的數據,並將此信息索引到Elasticsearch集羣中的三個節點,並將其寫入文件。

在數據源機器上,使用如下命令運行Filebeat:

sudo ./filebeat -e -c filebeat.yml -d "publish"

Filebeat將嘗試在端口5044上鍊接,在Logstash使用激活的Beats插件啓動以前,該端口上不會有任何迴應,所以你看到的任何關於在該端口上鍊接失敗的消息目前都是正常的。

要驗證你的配置,請運行如下命令:

bin/logstash -f second-pipeline.conf --config.test_and_exit

--config.test_and_exit選項解析配置文件並報告任何錯誤,當配置文件經過配置測試時,使用如下命令啓動Logstash:

bin/logstash -f second-pipeline.conf

使用grep工具在目標文件中搜索,以驗證信息是否存在:

grep syslog /path/to/target/file

運行一個Elasticsearch查詢,在Elasticsearch集羣中找到相同的信息:

curl -XGET 'localhost:9200/logstash-$DATE/_search?pretty&q=fields.type:syslog'

使用YYYY.MM.DD格式將$DATE替換爲當前日期。

要查看來自Twitter提要的數據,請嘗試如下查詢:

curl -XGET 'http://localhost:9200/logstash-$DATE/_search?pretty&q=client:iphone'

一樣,請記住使用YYYY.MM.DD格式將$DATE替換爲當前日期。

相關文章
相關標籤/搜索