用ELK搭建簡單的日誌收集分析系統【轉】

緣起

在微服務開發過程當中,通常都會利用多臺服務器作分佈式部署,如何可以把分散在各個服務器中的日誌歸集起來作分析處理,是一個微服務服務須要考慮的一個因素。html

搭建一個日誌系統

搭建一個日誌系統須要考慮一下一些因素:java

  1. 利用什麼技術,是本身實現還利用現成的組件
  2. 日誌須要定義統一的格式
  3. 日誌須要擁有一個錨點來進行全局跟蹤

第一個問題,針對咱們小公司來講,基本沒有本身的研發能力,絕對是選用第三方開源的組件了。ELK配置比較簡單,有現成的UI界面,容易檢索日誌信息,是首選。 
第二個問題,利用log4j2定義好統一的日誌格式,利用logstash過濾日誌內容。 
第三個問題,全局跟蹤的ID有幾種生產方式,一種是利用UUID或者生成隨機數,一種是利用數據庫來生成sequence number,還能夠經過自定義一個id生成服務來獲取。考慮到自身服務的須要,這裏選用生成隨機數來實現。linux

日誌系統架構

ELK簡單架構

從左邊看起,每一臺webserver上都會部署一個logstash-agent,它的做用是用相似tailf的方式監聽日誌文件,而後把新添加的日誌發送到redis隊列裏面,logstash-indexer負責從redis相應的隊列裏面取出日誌,對日誌進進行加工後輸出到elasticsearch中,elasticsearch會根據要求對日誌進行索引歸集,最後用戶能夠經過kibana來查看和分析日誌。git

開始搭建日誌系統

準備工做github

  1. 安裝JDK8
  2. 安裝Redis2.8

這裏不涉及怎樣安裝JDK和Redis,請自行查閱資料web

使用logstash2.3.1elasticsearch2.3.1kibana2.3.1redis

首先去ELK官網下載相應的壓縮包 
https://www.elastic.co/downloads數據庫

在webserver上安裝logstash-agent

1.解壓 tar -zxvf logstash2.3.1 
2.檢驗安裝是否成功 bin/logstash -e "input{stdin{}}output{stdout{}}",而後在終端輸入hello,看看有沒有內容返回 
安裝logstash 
3.編寫配置文件logstash_agent.conf 
在logstash安裝目錄下新建conf文件夾,在裏面新建配置文件logstash_agent.conf服務器

input {
        file {
                type => "customer_service"
                #須要收集的日誌文件
                path => ["/home/java/logs/cust/customer-service-*.log"] 
                tags => ["customer-service", "log4j2"]
                #              
                codec => multiline { #
                        pattern => "^%{TIMESTAMP_ISO8601}"
                        negate => true
                        what => "previous"
                }
        }
}
output {
        redis {
                host => "192.168.235.195"
                data_type => "list"
                key => "logstash:redis:customer"
        }
}

 

4.後臺啓動 
nohup ./bin/logstash -f conf/logstash_agent.conf &架構

在日誌server上安裝elasticsearch

1.解壓tar -zxvf elasticsearch-2.3.1.tar.gz 
2.修改安裝目錄下的配置文件config/elasticsearch.yml 
把network.host字段給反註釋掉,把地址改成0.0.0.0(官方並沒明確說要去改這配置,默認配置應該就能夠了,不過實測的時候發現若是不作這修改,elasticsearch訪問不了) 
這裏寫圖片描述 
3.後臺啓動elasticsearch 
nohup ./bin/elasticsearch &

在日誌server上安裝logstash-indexer

在webserver上安裝logstash-agent一節基本相同,只是配置文件不同,這裏使用logstash-indexer.conf

input {
        redis {
                host => "localhost" #redis地址
                data_type => "list"
                key => "logstash:redis:customer"
                type => "redis-input"
        }
}
filter {
    grok {
        match => {
            "message" => "%{TIMESTAMP_ISO8601:date} \[(?<thread_name>.+?)\] (?<log_level>\w+)\s*(?<content>.*)"
        }
    }
    date {
        match => ["timestamp", "dd/MMM/YYYY:HH:mm:ss Z"]
    }
}
output {
        if[type] == "customer_service" {
            elasticsearch {
                    #embedded => false
                    #protocol => "http"
                    hosts => "localhost:9200"
                    index => "customer-%{+YYYY.MM.dd}"
            }
        }else if[type] == "其餘類型" {
            elasticsearch {
                    #embedded => false
                    #protocol => "http"
                    hosts => "localhost:9200"
                    index => "其餘類型索引名字-%{+YYYY.MM.dd}"
            }
        }else {
            //作其餘處理
        }
        stdout{ #輸出到標準輸出,能夠去掉
        }
}

 

 

啓動logstash-indexer 
nohup ./bin/logstash -f conf/logstash-indexer.conf &

在日誌server上安裝kibana

1.解壓tar -zxvf kibana-4.5.0-linux-x64.gz 
2.後臺啓動kibana nohup ./bin/kibana & 
這裏沒有特別去配置kibana要訪問的elasticsearch地址,默認它會找本地的,若是須要,能夠到conf/kibana.yml修改

配置log4j2的日誌格式

<PatternLayout pattern="%d{ISO8601} %t %level %msg%n"/>

訪問kibana主頁

1.打開kibana主頁http://your-kibana-ip:5601/ 
2.輸入索引customer-*,並點擊create 
這裏寫圖片描述 
3.在Discover頁面觀察日誌 
這裏寫圖片描述

ToDo:

須要瞭解elasticsearch日誌存放在哪裏,按期清理日誌

清理Elasticsearch索引

索引放久了須要清理,清理因此可使用Elasticsearch的API。 
例如我須要刪除某個索引2016年5月份的全部索引,可使用下面的命令:

curl -XDELETE 'http://localhost:9200/customer-2016.05.*'

更多API能夠查閱Elastic官網 
https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete.html

參考資料

http://www.cnblogs.com/yjf512/p/4199105.html 

http://www.cnblogs.com/xing901022/p/4805586.html 
https://github.com/chenryn/logstash-best-practice-cn/blob/master/codec/multiline.md 
http://www.open-open.com/lib/view/open1451801542042.html

 

轉自

用ELK搭建簡單的日誌收集分析系統http://m.blog.csdn.net/lzw_2006/article/details/51280058

相關文章
相關標籤/搜索