elk示例-精简版2
作者:Danbo 時間:2016-03-13
1.保存進Elasticsearch
Logstash可以試用不同的協議實現完成將數據寫入Elasticsearch的工作,本節中介紹HTTP方式。
配置示例:
output {elasticsearch {hosts => ["192.168.0.2:9200"]index => "logstash-%{type}-%{+YYYY.MM.dd}"document_type => "%{type}"workers => 1flush_size => 20000idle_flush_time => 10template_overwrite => true} }解釋:
批量發送
flush_size 和 idle_flush_time 共同控制Logstash向 Elasticsearch發送批量數據的行為。上面的示例說明:Logstash會將數據攢到20k條數據然后一次性發送出去,并且設置最大老化時間為10s。
默認情況下:flush_size 是500條,idle_flush_time是1s,注意,這點也是很多人單改大flush_size 也沒能提高ES性能的原因。
索引名
寫入的ES索引的名稱,這里可以使用變量。為了更貼合日志場景,Logstash 提供了%{+YYYY.MM.dd} 這種寫法。在語法解析的時候,看到以+號開頭的,就會自動認為后面是時間格式,嘗試用時間格式來解析后續字符串。
索引名中不能有大寫字母,否則ES在日志中會報錯InvalidIndexNameException,但是Logstash不會報錯。
?
模板
Elasticsearch支持給索引預定義設置和mapping。logstash自帶有一個優化好的模板。內容如下:
其中的關鍵設置包括
template for index-pattern
只匹配logstash-* 的索引才會應用這個模板。有時候我們會變更Logstash的默認索引名稱,記住也得通過PUT方式上傳可以匹配你自定義索引名的模板。當然,更建議的做法是,把自定義的名稱放在"logstash-"后面,變成index => "logstash-custom-%{+yyyy.MM.dd}"
refresh_interval for indexing?
Elasticsearch 是一個近實時搜索引擎。它實際上是每1s 刷新一次數據。對于日志分析應用我們用不著那么實時,所以logstash自帶的模板修改成了5s,其實還可以繼續提高這個刷新間隔以提高數寫入性能。
multi-field with not_analyzed
Elasticsearch 會自動使用自己的默認分詞器(空格,點,斜線等分隔)來分析字段。分詞器對于搜索和評分是非常重要的,但是大大降低了索引寫入和聚合請求的性能。所以logstash模板定義了一種叫“多字段”(multi-field)類型的字段,并給這個字段設置為不啟用分詞器。也就是當你想獲取url字段的聚合結果的時候,不要直接用“url”,而是用“url.raw”作為字段名。
geo_point
Elasticsearch 支持geo_point 類型,geo distance 聚合等等,比如說,你可以請求某個geo_point 點方圓10km內的數據點的總數。
doc_values
doc_values 是Elasticsearch 1.0版本引入的新特性。啟用該特性的字段,索引寫入的時候回在磁盤上構建fielddata。doc_values 只能給不分詞(對于字符串字段就是設置了 “index ”)
2.標準輸入(Stdout)
output {stdout {codec => rubydebugworkers => 2} }輸出插件同一具有一個參數是workers。logstash 為輸出做了多線程的準備。
其次是codec 設置。P39。可能除了 codecs/multiline,其他codec 插件本身并沒有太多的設置項。所以,上面的示例配置我們可以寫成:
output {stdout {codec => rubydebug {}workers => 2} }單就 outputs/stdout 插件來說,其最重要和常見的用途就是調試。
3.發送網絡數據(TCP)
配置示例如下:
output {tcp {host => "192.168.0.2"port => 8888codec => json_lines} }在收集端采用TCP方式發送給遠端的TCP端口。這里需要注意的是,默認的codec 選項是json。而遠端的Logstash::Inputs::TCP 的默認codec 選項卻是 line! 所以不指定各自的codec,對接肯定是失敗的。
另外,由于IO BUFFER 的原因,即使是兩端共同約定為json 依然無法正常運行,接收端會認為一行數據沒有結束,一直等待直到自己OutOfMemory!
正確的做法是:發送端指定codec 為json_lines,這樣每條數據后面會加上一個回車,接收端指定codec 為json_lines或者json 均可,這樣才能正常處理。包括在收集端已經切割好的字段,也可以直接帶入手機端使用了。
?
?
?
?
?
*******
轉載于:https://www.cnblogs.com/danbo/p/5274030.html
總結
以上是生活随笔為你收集整理的elk示例-精简版2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 沧海一声笑,移动应用的CRASH原因我找
- 下一篇: Centos6.5搭建bugzilla