ELK环境搭建
什么是ELK
ELK Stack 是 Elasticsearch、Logstash、Kibana 三個開源軟件的組合。在實時數據檢索和分析場合,三者通常是配合共用,而且又都先后歸于 Elastic.co 公司名下,故有此簡稱。
-
Elasticsearch 開源的搜索引擎,基于lucene,負責數據的索引和存儲
-
Logstash 日志采集器,負責日志的采集和格式化。(可以被替代,例如fluentd,kafka等)
-
Kibana 一個基于瀏覽器頁面的Elasticsearch前端展示工具,負責數據的可視化
ELK系統的搭建
使用版本:
-
ElasticSearch 2.2
-
Logstash 2.2
-
Kibana 4.4
要求:JDK 1.7以上
其他:解壓后即可使用,簡單方便
ElasticSearch的配置
-
shards:主分片與復制分片 (數據的重要性,查詢qps)
-
node:系統的可靠性
默認5主分片,1復制片
node起兩組
編輯此區域ELK系統的使用
編輯此區域日志采集
logstash配置文件的結構
# This is a comment. You should use comments to describe # parts of your configuration. input {... }filter {... }output {... }Inputs,Outputs,Filters構成了Logstash的核心配置項。Logstash通過這3項的配置,建立一條事件處理的管道。
各個配置項下的的配置都是以插件的形式存在,這也為logstash提供了強大的擴展能力。
編輯此區域input
input的機制是讓日志數據進入logstash。比如下面常用的:
-
file: 以文件來讀取日志數據,像linux的tail -0a命令。
-
syslog:監聽514端口的系統日志消息,并根據RFC3164格式解析。
-
redis: 采用redis來讀取。
-
kafka: 從kafka消息隊列中讀取
常用的file配置舉例:
input {file {path => "/var/log/messages"type => "syslog"}file {path => "/var/log/apache/access.log"type => "apache"} } 編輯此區域filter
filter通常使用是介入logstash的鏈中處理數據。它的處理是管道化的,根據配置的順序進行處理。一些常用的filter:
-
grok: 幾乎可以解析任何文本的數據,它能把數據格式化成你需要的查詢格式。系統提供了120種正則,很多都是你需要的。
-
mutate: 你可以使用它重命名,刪除,替換和修改field。
-
geoip: 增加有關ip地理位置的信息
-
json: 解析json格式的數據
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內置匹配樣式的使用: %{SYNTAX:SEMANTIC}內置的匹配樣式
https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns
編輯此區域output
輸出時logstash的最后處理階段了。一個事件可以通過多個輸出來處理,但是一旦所有的輸出都完成,這事件將運行結束。
-
elasticsearch: 如果你打算把你的數據保存在一個高效、便捷、容易的地方,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}"} } 編輯此區域kibana入門?
編輯附件2Zo3bPa3.png?查看?(90.6 KB)?鄭 銘興, 2016-03-08 14:12
新建文件
總結
- 上一篇: codeigniter在nginx安装配
- 下一篇: CI框架中pdo的使用方法