來源: http://blog.csdn.net/xifeijian/article/details/50829617
日志監控和分析在保障業務穩定運行時,起到了很重要的作用,不過一般情況下日志都分散在各個生產服務器,且開發人員無法登陸生產服務器,這時候就需要一個集中式的日志收集裝置,對日志中的關鍵字進行監控,觸發異常時進行報警,並且開發人員能夠查看相關日志。logstash+elasticsearch+kibana3就是實現這樣功能的一套系統,並且功能更強大。
logstash:是一個管理日志和事件的工具,你可以收集它們,解析它們,並存儲它們以供以后使用(例如日志搜索),logstash有一個內置的web界面,用來搜索你的所有日志。logstash在部署時有兩種運行模式:standalone和centralized:
* standalone:standalone的意思是所有的事情都在一台服務器上運行,包括日志收集、日志索引、前端WEB界面都部署在一台機器上。
* centralized:就是多服務器模式,從很多服務器運輸(ship)日志到一台總的日志(collector)服務器上用來索引和查找。
需要注意的是logstash本身並沒有什么shipper和indexer這種說法,因為不論是運輸日志的進程還是匯集總的日志的進程運行的都是同一個程序,只是使用的配置文件不同而已。
elasticsearch:
基於lucene的開源搜索引擎,是一個分布式的搜索分析系統,主要特點有:real time data、real time analytics、distributed、high availability、multi-tenancy、full text search、document oriented、conflict management、schema free、restful api等等。
kibana3:
可視化日志和數據系統,作為WEB前端可以很容易的和elasticsearch系統結合。kibana有版本2和版本3的區分,版本2采用ruby編寫,部署起來很麻煩,需要安裝很多ruby依賴包(目前網上多是這個版本的部署),版本3采用純html+css編寫,因此部署起來很方便,解壓即用,目前已經是kibana4了,建議大家使用最新版。
出於性能及擴展性考慮,實際應用中logstash我們必然采用centralized模式,最基本的結構圖如下:
1、安裝Redis,安裝過程簡單,這里不做詳細說明。
2、安裝ElasticSearch(目前版本1.4)
- <span style="font-size:14px;">wget 'https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.7.tar.gz'
- tar zxvf elasticsearch-0.90.7.tar.gz
- cd elasticsearch-0.90.7/bin
- #可以在logstash agent啟動后再啟動
- ./elasticsearch -f</span>
3、啟動logstash shipper,定義配置文件logstash.conf,根據實際情況定義,以下主要定義了input源為文件,output到redis,啟動logstash shipper,例如:
- <span style="font-family: 'Microsoft YaHei';"><span style="font-size:14px;">input {
- file {
- type => "api_log"
- path => "/home/jws/app/nginxserver/logs/apiaccess.log"
- debug => true
- }
- file {
- type => "cas_log"
- path => "/home/jws/app/nginxserver/logs/casaccess.log"
- debug => true
- }
- file {
- type => "id_log"
- path => "/home/jws/app/nginxserver/logs/idaccess.log"
- debug => true
- }
- file {
- type => "login_log"
- path => "/home/jws/app/nginxserver/logs/loginaccess.log"
- debug => true
- }
- file {
- type => "proxy_log"
- path => "/home/jws/app/nginxserver/logs/proxyaccess.log"
- debug => true
- }
- }
- output {
- redis {
- host => "10.20.164.121"
- data_type => "list"
- key => "logstash:redis"
- }
- redis {
- host => "10.20.164.122"
- data_type => "list"
- key => "logstash:uop_file"
- }
- }</span></span>
啟動shipper:
Java -jar /home/jws/htdocs/logstash/lib/logstash.jar agent -f /home/jws/htdocs/logstash/conf/logstash.conf -l /home/jws/htdocs/logstash/logs/logstash.log
例如以下indexer中的配置,並啟動indexer:
- <span style="font-size:14px;">input {
- file {
- path => "/home/rsyslog/asaserver/*/*/*/proxy.log.*"
- exclude => "*.bz2"
- type => "proxy"
- }
- }
- filter {
- grok {
- match => [ "message", "%{APIPROXY}" ]
- patterns_dir => ["/home/jws/app/logstash/patterns"]
- }
- if [request_uripath_orig]{
- grok {
- match => [ "request_uripath_orig", "%{NSSS}" ]
- patterns_dir => ["/home/jws/app/logstash/patterns"]
- }
- }
- }
- output {
- #stdout { codec =>"rubydebug"}
- elasticsearch_http {
- host => "10.20.161.36"
- flush_size => 500
- idle_flush_time => 3
- index => "logstash_pf_proxy-%{+YYYY.MM.dd.HH}"
- template => "/home/jws/app/logstash/template/t.json"
- template_overwrite => true
- }
- }</span>
5、安裝並啟動kibana3,安裝過程與普通軟件安裝無異,可以配合nginx安裝,這里不做描述,需要注意的是需要在kibana config.js中配置elasticSearch的地址與端口。
注意紅框中的內容,這只是kibana3的默認界面,需要我們用logstash.json代替default.json界面,具體目錄源碼目錄下app/dashboards中。
例如項目中的一個例子,根據需求制作圖表(類似餅圖,柱狀圖,折線圖等),在筆者實際項目中,從日志中分析數據,實現系統穩定性、響應時間、請求量、業務響應碼、HTTP狀態碼等等以kibana展現;
並且,elasticsearch的用途遠不如此,可以用來做搜索數據源,ES提供了編程接口,可以使用編程的方式獲取ES中的數據自定義開發監控程序,靈活且功能強大。
官方文檔(現在都整合在一起了):
logstash:https://www.elastic.co/guide/en/logstash/current/index.html
elasticsearch:https://www.elastic.co/
kibana:https://www.elastic.co/