前言:
隨着實時分析技術的發展及成本的下降,用戶已經不只僅知足於離線分析。目前咱們服務的用戶包括微博、微盤、雲存儲、彈性計算平臺等十多個部門的多個產品的日誌搜索分析業務,天天處理約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