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

1078801980 8年前發布 | 57K 次閱讀 日志處理

來自: http://my.oschina.net/52love/blog/628513


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


當然為了使得運行在客戶端的軟件有良好的體驗,并且得到有用的數據,我們需要對這些系統產生的數據,進行統計和分析,這個過程通常包括數據采集,清洗,建模,分析,報表等。接下來在本篇文章中,將會構建一個基于logstash,redis,elasticSearch,kibana的一套數據收集分析的系統。
平臺架構:
 


        nginx作為前端服務器 生成業日志,logstash實時的從業務日志中數據數據(可以進行響應的過濾,一個Logstash進程可以有多個輸入源,所以一個Logstash進程可以應付一臺服務器上的所有日志),然后把數據輸入到redis中,redis只做消息隊列不對消息做處理和存儲(Redis是Logstash官方推薦的Broker角色“人選”,支持訂閱發布和隊列兩種數據傳輸模式),然后redis會把數據轉給elasticSearch(同時可以對錯誤信息進行過濾 發送郵件提醒),elasticSearch會對數據做存儲,索引(基于Lunce),再kibana中建立對elasticSearch的鏈接,實時的抓取索索引后的數據,這樣數據就可以實時的進行展示,通過一些數據組裝,查詢條件,得到我們想要的結果(可以通過各種方式例如圖表,表格,折線圖等顯示)

效果展示:
 

再看一下以前我們是如何查看日志的:

  • 線上日志逐個tail+grep

  • 編寫腳本,下載某個時間范圍內的全部日志到本地再搜索

tail+grep或者把日志下載下來再搜索,可以應付不多的主機和不多的應用部署場景。但對于多機多應用部署就不合適了。這里的多機多應用指的是同一種應用被部署到幾臺服務器上,每臺服務器上又部署著不同的多個應用。可以想象,這種場景下,為了監控或者搜索某段日志,需要登陸多臺服務器,執行多個tail -F和grep命令。一方面這很被動。另一方面,效率非常低,數次操作下來,你心情也會變糟。是不是看的眼花料哦亂~

 



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


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


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


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


以上軟件 啟動方式見鏈接。


這里主要說一下 如何收集Tomcat異常日志:
一、比如我們的日志 放在tomcat/log目錄下 異常日志格式為
52itstyle_error.2016-03-01.txt #異常信息
二、編寫logstash  shipper 收集日志信息

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
    }
}

二、編寫logstash  indexer整理日志信息

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 &

 本文由用戶 1078801980 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!