Logstash+Redis+Elasticsearch+Kibana+Nginx搭建日誌分析系統

前言:
隨着實時分析技術的發展及成本的下降,用戶已經不只僅知足於離線分析。目前咱們服務的用戶包括微博、微盤、雲存儲、彈性計算平臺等十多個部門的多個產品的日誌搜索分析業務,天天處理約32億條(2TB)日誌。哈哈 以上都是新浪的信息~不是咱們小公司的分析業務規模。


固然爲了使得運行在客戶端的軟件有良好的體驗,而且獲得有用的數據,咱們須要對這些系統產生的數據,進行統計和分析,這個過程一般包括數據採集,清洗,建模,分析,報表等。接下來在本篇文章中,將會構建一個基於logstash,redis,elasticSearch,kibana的一套數據收集分析的系統。
平臺架構:
 


        nginx做爲前端服務器 生成業日誌,logstash實時的從業務日誌中數據數據(能夠進行響應的過濾,一個Logstash進程能夠有多個輸入源,因此一個Logstash進程能夠應付一臺服務器上的全部日誌),而後把數據輸入到redis中,redis只作消息隊列不對消息作處理和存儲(Redis是Logstash官方推薦的Broker角色「人選」,支持訂閱發佈和隊列兩種數據傳輸模式),而後redis會把數據轉給elasticSearch(同時能夠對錯誤信息進行過濾 發送郵件提醒),elasticSearch會對數據作存儲,索引(基於Lunce),再kibana中創建對elasticSearch的連接,實時的抓取索索引後的數據,這樣數據就能夠實時的進行展現,經過一些數據組裝,查詢條件,獲得咱們想要的結果(能夠經過各類方式例如圖表,表格,折線圖等顯示)

效果展現:
 

再看一下之前咱們是如何查看日誌的:html

  • 線上日誌逐個tail+grep前端

  • 編寫腳本,下載某個時間範圍內的所有日誌到本地再搜索linux

tail+grep或者把日誌下載下來再搜索,能夠應付很少的主機和很少的應用部署場景。但對於多機多應用部署就不合適了。這裏的多機多應用指的是同一種應用被部署到幾臺服務器上,每臺服務器上又部署着不一樣的多個應用。能夠想象,這種場景下,爲了監控或者搜索某段日誌,須要登錄多臺服務器,執行多個tail -F和grep命令。一方面這很被動。另外一方面,效率很是低,數次操做下來,你心情也會變糟。是否是看的眼花料哦亂~nginx

 

 


系統版本 阿里雲 centos 6.5 64位
軟件版本 (版本更新頻繁而且各個軟件之間兼容性有問題,主要是elk之間的,經測試一下版本可使用)
logstash-2.1.1,elasticsearch-2.1.0,redis-2.8.4,kibana-4.3.1-linux-x64
1、安裝logstash
linux下 直接  wget  https://download.elastic.co/logs ... gstash-2.1.1.tar.gz
而後解壓 tar -zxvf logstash-2.1.1.tar.gz 便可。


2、安裝elasticsearch
linux下安裝elasticsearch :http://www.52itstyle.com/thread-20114-1-1.html


3、安裝 redis
linux下redis安裝和使用:http://www.52itstyle.com/thread-20084-1-1.html


4、安裝kibana
linux下安裝kibana:http://www.52itstyle.com/thread-20127-1-1.html


以上軟件 啓動方式見連接。


這裏主要說一下 如何收集Tomcat異常日誌:
1、好比咱們的日誌 放在tomcat/log目錄下 異常日誌格式爲
52itstyle_error.2016-03-01.txt #異常信息
2、編寫logstash  shipper 收集日誌信息redis

 

 

input {
    file {
        type => "tomcat_itstyle"
        tags => [ "tomcat_error", "log4j" ]
        path => "/tomcat7/log/*error*.txt"
    }
}
filter {
    if [type] == "tomcat_itstyle" {
        grok {
            match => { 
               "message" => "(?m)%{TIMESTAMP_ISO8601:logtime}"
            }
        }
        multiline {
                      pattern => "^[^\[]"
                      what => "previous"
                  }
        mutate {
            split => ["message", "|"]
        }
    }
}
output {
    stdout {
            codec => rubydebug 
        }
    redis {
        host => "127.0.0.1"
        port => 6379
        data_type => "list"
        key => "logstash-tomcat-error"
        password => "123456"
        db => 0
    }
}

2、編寫logstash  indexer整理日誌信息centos

input {
        redis {
                host => "127.0.0.1"
                port => 6379
                data_type => "list"
                key => "logstash-tomcat-error"
                type => "redis-input"
                password => "123456"
                db => 0
        }
}
output {
        elasticsearch {        
               hosts => ["127.0.0.1:9200"] 
        }
        exec {
              #發送錯誤日誌 到指定郵件
              command => "echo '%{@timestamp} %{type}: %{message}' | mail -s tomcat_error_message 345849402@qq.com"
        }
}

分別啓動 indexer 和 shipper 
切換到 logstash/bin 下執行一下命令
./logstash -f  indexer.conf &
./logstash -f  shipper .conf &tomcat

相關文章
相關標籤/搜索