logstash 讀取 Redis 資料

來源:互聯網
上載者:User

Redis 伺服器是 logstash 官方推薦的 broker 選擇。Broker 角色也就意味著會同時存在輸入和輸出倆個外掛程式。這裡我們先學習輸入外掛程式。

LogStash::Inputs::Redis 支援三種 data_type(實際上是redis_type),不同的資料類型會導致實際採用不同的 Redis 命令操作: list => BLPOP channel => SUBSCRIBE pattern_channel => PSUBSCRIBE

注意到了麼。這裡面沒有 GET 命令。

Redis 伺服器通常都是用作 NoSQL 資料庫,不過 logstash 只是用來做訊息佇列。所以不要擔心 logstash 裡的 Redis 會撐爆你的記憶體和磁碟。 配置樣本(以下配置不能少,否則logstash會報錯)

input {    redis {        data_type => "pattern_channel"        key => "logstash-*"        host => "192.168.0.2"        port => 6379        threads => 5    }}
使用方式 基本方法

首先確認你設定的 host 伺服器上已經運行了 redis-server 服務,然後開啟終端運行 logstash 進程等待輸入資料,然後開啟另一個終端,輸入 redis-cli 命令(先安裝好 redis 軟體包),在互動式提示符後面輸入PUBLISH logstash-demochan "hello world":

# redis-cli127.0.0.1:6379> PUBLISH logstash-demochan "hello world"

你會在第一個終端裡看到 logstash 進程輸出類似下面這樣的內容:

{       "message" => "hello world",      "@version" => "1",    "@timestamp" => "2014-08-08T16:26:29.399Z"}

注意:這個事件裡沒有 host 欄位。(或許這算是 bug……) 輸入 JSON 資料

如果你想通過 redis 的頻道給 logstash 事件添加更多欄位,直接向頻道發布 JSON 字串就可以了。LogStash::Inputs::Redis 會直接把 JSON 轉換成事件。

繼續在第二個終端的互動式提示符下輸入如下內容:

127.0.0.1:6379> PUBLISH logstash-chan '{"message":"hello world","@version":"1","@timestamp":"2014-08-08T16:34:21.865Z","host":"raochenlindeMacBook-Air.local","key1":"value1"}'

你會看到第一個終端裡的 logstash 進程隨即也返回新的內容,如下所示:

{       "message" => "hello world",      "@version" => "1",    "@timestamp" => "2014-08-09T00:34:21.865+08:00",          "host" => "raochenlindeMacBook-Air.local",          "key1" => "value1"}

看,新的欄位出現了。現在,你可以要求開發工程師直接向你的 redis 頻道發送資訊好了,一切自動搞定。 小貼士

這裡我們建議的是使用 pattern_channel 作為輸入外掛程式的 data_type 設定值。因為實際使用中,你的 redis 頻道可能有很多不同的 keys,一般命名成 logstash-chan-%{type} 這樣的形式。這時候 pattern_channel 類型就可以協助你一次訂閱全部 logstash 相關頻道。 擴充方式

如上段"小貼士"提到的,之前兩個使用情境採用了同樣的配置,即資料類型為頻道發布訂閱者式。這種方式在需要擴充 logstash 成多節點叢集的時候,會出現一個問題:通過頻道發布的一條資訊,會被所有訂閱了該頻道的 logstash 進程同時接收到,然後輸出重複內容。

你可以嘗試再做一次上面的實驗,這次在兩個終端同時啟動 logstash -f redis-input.conf 進程,結果會是兩個終端都輸出訊息。

這種時候,就需要用 list 類型。在這種類型下,資料輸入到 redis 伺服器上暫存,logstash 則連上 redis 伺服器取走 (BLPOP 命令,所以只要 logstash 不堵塞,redis 伺服器上也不會有資料堆積佔用空間)資料。 配置樣本

input {    redis {        batch_count => 1        data_type => "list"        key => "logstash-list"        host => "192.168.0.2"        port => 6379        threads => 5    }}
使用方式

這次我們同時在兩個終端運行 logstash -f redis-input-list.conf 進程。然後在第三個終端裡啟動 redis-cli 命令互動:

$ redis-cli 127.0.0.1:6379> RPUSH logstash-list "hello world"(integer) 1

這時候你可以看到,只有一個終端輸出了結果。

連續 RPUSH 幾次,可以看到兩個終端近乎各自輸出一半條目。 小貼士

RPUSH 支援 batch 方式,修改 logstash 配置中的 batch_count 值,作為樣本這裡只改到 2,實際運用中可以更大(事實上 LogStash::Outputs::Redis 對應這點的 batch_event 配置預設值就是 50)。

重啟 logstash 進程後,redis-cli 命令中改成如下發送:

127.0.0.1:6379> RPUSH logstash-list "hello world" "hello world" "hello world" "hello world" "hello world" "hello world"(integer) 3

可以看到,兩個終端也各自輸出一部分結果。而你只用了一次 RPUSH 命令。 推薦閱讀

http://redis.io 轉載自:http://udn.yyuap.com/doc/logstash-best-practice-cn/input/redis.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.