ELK环境搭建
什么是ELK
ELK Stack 是 Elasticsearch、Logstash、Kibana 三個開源軟件的組合。在實時數(shù)據(jù)檢索和分析場合,三者通常是配合共用,而且又都先后歸于 Elastic.co 公司名下,故有此簡稱。
-
Elasticsearch 開源的搜索引擎,基于lucene,負責(zé)數(shù)據(jù)的索引和存儲
-
Logstash 日志采集器,負責(zé)日志的采集和格式化。(可以被替代,例如fluentd,kafka等)
-
Kibana 一個基于瀏覽器頁面的Elasticsearch前端展示工具,負責(zé)數(shù)據(jù)的可視化
ELK系統(tǒng)的搭建
使用版本:
-
ElasticSearch 2.2
-
Logstash 2.2
-
Kibana 4.4
要求:JDK 1.7以上
其他:解壓后即可使用,簡單方便
ElasticSearch的配置
-
shards:主分片與復(fù)制分片 (數(shù)據(jù)的重要性,查詢qps)
-
node:系統(tǒng)的可靠性
默認5主分片,1復(fù)制片
node起兩組
編輯此區(qū)域ELK系統(tǒng)的使用
編輯此區(qū)域日志采集
logstash配置文件的結(jié)構(gòu)
# This is a comment. You should use comments to describe # parts of your configuration. input {... }filter {... }output {... }Inputs,Outputs,Filters構(gòu)成了Logstash的核心配置項。Logstash通過這3項的配置,建立一條事件處理的管道。
各個配置項下的的配置都是以插件的形式存在,這也為logstash提供了強大的擴展能力。
編輯此區(qū)域input
input的機制是讓日志數(shù)據(jù)進入logstash。比如下面常用的:
-
file: 以文件來讀取日志數(shù)據(jù),像linux的tail -0a命令。
-
syslog:監(jiān)聽514端口的系統(tǒng)日志消息,并根據(jù)RFC3164格式解析。
-
redis: 采用redis來讀取。
-
kafka: 從kafka消息隊列中讀取
常用的file配置舉例:
input {file {path => "/var/log/messages"type => "syslog"}file {path => "/var/log/apache/access.log"type => "apache"} } 編輯此區(qū)域filter
filter通常使用是介入logstash的鏈中處理數(shù)據(jù)。它的處理是管道化的,根據(jù)配置的順序進行處理。一些常用的filter:
-
grok: 幾乎可以解析任何文本的數(shù)據(jù),它能把數(shù)據(jù)格式化成你需要的查詢格式。系統(tǒng)提供了120種正則,很多都是你需要的。
-
mutate: 你可以使用它重命名,刪除,替換和修改field。
-
geoip: 增加有關(guān)ip地理位置的信息
-
json: 解析json格式的數(shù)據(jù)
grok語法
https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html
grok 里寫標準的正則,像下面這樣(類似perl): \s+(?<request_time>\d+(?:\.\d+)?)\s+grok使用的正則語法oniguruma: https://github.com/kkos/oniguruma/blob/master/doc/RE內(nèi)置匹配樣式的使用: %{SYNTAX:SEMANTIC}內(nèi)置的匹配樣式
https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns
編輯此區(qū)域output
輸出時logstash的最后處理階段了。一個事件可以通過多個輸出來處理,但是一旦所有的輸出都完成,這事件將運行結(jié)束。
-
elasticsearch: 如果你打算把你的數(shù)據(jù)保存在一個高效、便捷、容易的地方,elasticsearch是不錯的選擇。
-
file: 保存入文件
-
stdout: 標準輸出
線上配置示例
input { file {type => "offerinfo_wf"path => "/mnt/logs/api/offerinfo/offerinfo.log.wf*"exclude => "*.monitor.old"close_older => 3600} file {type => "radar_wf"path => "/mnt/logs/api/radar/radarwf.*"exclude => ["*.monitor.old", "*.gz"]close_older => 3600} }filter {if [type] == "offerinfo_wf" {grok {match => { "message" => "%{WORD:level}: %{TIMESTAMP_ISO8601:timestamp} \[%{DATA:errorfile}:%{NUMBER:errorline}\] errno\[%{NUMBER:errno}\] ip\[%{IP:ip}\] logId\[%{NUMBER:log_id}\] uri\[%{DATA:uri}\] %{GREEDYDATA:loginfo}"}remove_field => ["message"]} }elseif [type] == "radar_wf" {grok {match => { "message" => "\[%{WORD:level}\] \[%{TIMESTAMP_ISO8601:timestamp}\] \[log_id:%{NUMBER:log_id},%{DATA:log_message}\] \|%{DATA:log_data}\|%{GREEDYDATA:baseinfo}"}remove_field => ["message"]} json {source => baseinforemove_field => ["baseinfo"]} }}output {elasticsearch {hosts => "172.31.4.209:9200"index => "logstash-%{type}-%{+YYYY.MM.dd}"document_type => "%{type}"} } 編輯此區(qū)域kibana入門?
編輯附件2Zo3bPa3.png?查看?(90.6 KB)?鄭 銘興, 2016-03-08 14:12
新建文件
總結(jié)
- 上一篇: codeigniter在nginx安装配
- 下一篇: 爆仓是什么意思?爆仓的原因都有哪些?