使用EKL(Elasticsearch、Kibana、Logstash)進行服務器日誌的匯聚與監控

1、前言html

本文主要介紹了使用工具Elasticsearch、Kibana和Logstash(配合Logstash Forwarder)對服務器的各類日誌文件,如nginx的log、系統的各類log、mysql的slow log等進行匯聚並存儲,並進行圖形化檢索展現。經過這套工具,能夠實現日誌的集中管理,並經過對日誌的分析,早晚發現存在的問題加以改進和完善。java

三個工具的做用分別是:elasticsearch用於存儲和檢索、Kibana用來圖形化展現和檢索、Logstash用來匯聚日誌。node

2、安裝python

運行環境 Centos 6.5 x86_64mysql

一、安裝Elasticsearchlinux

wget https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/rpm/elasticsearch/2.0.0/elasticsearch-2.0.0.rpm 
rpm -ivh elasticsearch-2.0.0.rpm
#修改如下配置,包括存儲路徑,選擇一個較大的分區保存數據
vi /etc/elasticsearch/elasticsearch.yml
path.data: /mnt/elasticsearch/data
path.work: /mnt/elasticsearch/tmp
path.logs: /mnt/elasticsearch/logs
path.plugins: /mnt/elasticsearch/plugins
#而後啓動,默認端口是 9200
service  elasticsearch start

二、安裝Kibanaios

wget https://download.elastic.co/kibana/kibana/kibana-4.2.0-linux-x64.tar.gz 
tar xzvf kibana-4.2.0-linux-x64.tar.gz
cd kibana-4.2.0-linux
#覈對下參數,裏面有配置elasticsearch的端口信息,通常不用修改使用默認便可
vi config/kibana.yml
elasticsearch_url: "http://localhost:9200"
#啓動kibana,監聽端口是5601
./bin/kibana
#添加到自啓動裏
echo `pwd`/bin/kibana >> /etc/rc.local

此時用瀏覽器訪問http://ip:5601/ 能夠看到kibana界面,不過此時沒有任何日誌信息,是無法使用的,接下來是重點,配置日誌匯聚。nginx

三、安裝Logstashgit

Logstash是匯聚日誌的和轉發日誌給elasticsearch的做用,通常叫之爲indexer。而安裝到各服務器收集日誌的機器,叫shipper,須要使用工具Logstash Forwarder(舊名稱叫Lumberjack),最新的shipper工具又準備要換成beats了,有興趣的能夠自行研究配置,參考地址github

通常Logstash能夠與elasticsearch,kibana安裝在一臺服務器上,Logstash Forwarder能夠安裝到任意其它要收集日誌的機器上。

先安裝Logstash:

wget #此包依賴jrm沒有的請自行安裝,推薦java 8
rpm ivh logstash-2.0.0-1.noarch.rpm
#查看安裝路徑
rpm -ql logstash|more

配置Logstash,要先生成ssl相關的證書用於shipper和indexer加密通信。

openssl req -x509 -days 99999 -nodes -newkey rsa:2048 -keyout logstash-forwarder.key -out logstash-forwarder.crt
#按提示輸入各信息,特別注意hostsname的輸入,要與你的indexer機器同樣,不然shipper機器可能沒法通信。
#-days 指定 證書的有效日期,不然會常常失效,查看日誌能夠看到報錯信息
#tail -f /var/log/logstash-forwarder/logstash-forwarder.er
#配置參數
vi /etc/logstash/conf.d/logstash.conf
input{
    lumberjack {
        port => 5043
#       type => "apache"
        ssl_certificate => "/etc/logstash/conf.d/logstash-forwarder.crt"
        ssl_key => "/etc/logstash/conf.d/logstash-forwarder.key"
    }
 file {
    path => [ "/var/log/*.log", "/var/log/messages", "/var/log/syslog" ]
    type => "syslog"
  }
}
filter {
  if [type] == "apache" {
    grok {
      match => { "message" => "%{COMBINEDAPACHELOG}" }
    }
  }
}
output {
    if !("_grokparsefailure" in [tags]) {
        #stdout { codec => rubydebug }
        elasticsearch { bind_host => "127.0.0.1" }
    }
}

而後啓動Logstash

#檢查下配置文件是否正確,正確的話就啓動
/opt/logstash/bin/logstash -t -f /etc/logstash/conf.d/logstash.con
service logstash start
#查看日誌,注意是否有錯,有錯
tail -f /var/log/logstash/logstash.err
#最後行是 started 表示啓動正常

一切正常的話,開始在採集機安裝Logstash Forwarder。

安裝步驟

wget https://download.elastic.co/logstash-forwarder/binaries/logstash-forwarder-0.4.0-1.x86_64.rpm
rpm -ivh logstash-forwarder-0.4.0-1.x86_64.rpm
rpm -ql logstash-forwarder
vi /etc/logstash-forwarder.conf
#修改如下幾項
{
"network": {
"servers": [ "YOUR_INDEXER_HOSTNAME:5043" ],
"ssl key": "/etc/logstash/conf.d/logstash-forwarder.key",
"ssl ca": "/etc/logstash/conf.d/logstash-forwarder.crt",
"timeout": 15
},
 "files": [
  {
      "paths": [
        "/var/log/nginx/*.log","/var/log/httpd/*.log"
      ],
      "fields": { "type": "apache" }
    }
 ]
}

上面的key和crt文件從安裝Logstash服務器裏複製過來,在採集機不用再重複生成。

啓動logstash-forwarder

service logstash-forwarder start

觀察Log是否有錯誤

tail -f /var/log/logstash-forwarder/logstash-forwarder.err

若是輸出 Registrar: processing 1 events 表示正常。

若是一切正常,表示日誌已經採集過去了,再次經過 http://localhost:5601/ 訪問kibaba,可能看到有報表和數據了。

以下圖

Kibana功能很是強大,結合Visualize能夠生成各類維度的報告,具體使用請參數官方網站

3、總結

EKL三者互相配合可能實現日誌分析的自動化,從多角度對你的日誌數據進行分析,同時Logstash還提供了大量的plugin(插件主要分3類,INPUT,FILTEROUTPUT),包括與Kabbix或Nagios配合實現自動告警服務等(請參考個人另一遍文章《Zabbix對服務器資源進行監控及百度告警的整合》)。

logstash plugin的安裝若是發現ruby的很慢,應該是域名被牆了,能夠換成國內淘寶的鏡像,相關參考在 https://ruby.taobao.org/,能夠搜索plugin目錄下的相關域名,直接替換成淘寶的域名,參數命令

$ sed -i -E 's!https?://cache.ruby-lang.org/pub/ruby!https://ruby.taobao.org/mirrors/ruby!' $rvm_path/config/db

 

2016.1.28 updated

logforward若是連不上服務端,會產生大量的log內容,如connection refused.因此對此服務的可用性要結合zabbix進行預警。添加自定義事件,如

vi /etc/zabbix/zabbix_agentd.d/userparameter_zg.conf 
UserParameter=check_logforward_fail[*],tail /var/log/logstash-forwarder/logstash-forwarder.err |grep $1|wc -l

修改後要重啓zabbix-server使其生效。

2016.2.23 updated

運行一段時間後,若是要對elastic日誌進行管理,如刪除,能夠參考 https://github.com/elastic/curator

yum install python-pip
pip install elasticsearch-curator
curator --host localhost delete indices --older-than 30 --time-unit days --timestring '%Y.%m.%d'

更多例子參考

https://www.elastic.co/guide/en/elasticsearch/client/curator/current/examples.html

 

<做者 朱淦 350050183@qq.com 2015.11.5>

相關文章
相關標籤/搜索