魏山林
摘要:日志主要包括系統(tǒng)日志、應(yīng)用程序日志和安全日志。系統(tǒng)運維和開發(fā)人員可以通過日志了解服務(wù)器軟硬件信息、檢查配置過程中的錯誤及錯誤發(fā)生的原因。經(jīng)常分析日志可以了解服務(wù)器的負荷,性能安全性,從而及時采取措施糾正錯誤。
關(guān)鍵詞:日志;系統(tǒng)運維
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2017)05-0069-02
1 Elk日志分析平臺介紹
通常,日志被分散的儲存不同的設(shè)備上。如果你管理數(shù)十上百臺服務(wù)器,你還在使用依次登錄每臺機器的傳統(tǒng)方法查閱日志。這樣是不是感覺很繁瑣和效率低下。當(dāng)務(wù)之急我們使用集中化的日志管理,例如:開源的syslog ,將所有服務(wù)器上的日志收集匯總。
集中化管理日志后,日志的統(tǒng)計和檢索又成為一件比較麻煩的事情,一般我們使用 grep 、 awk 和 wc 等Linux 命令能實現(xiàn)檢索和統(tǒng)計,但是對于要求更高的查詢、排序和統(tǒng)計等要求和龐大的機器數(shù)量依然使用這樣的方法難免有點力不從心。
2 開源實時日志分析ELK平臺部署流程
1)安裝Logstash 依賴包 JDK
Logstash 的運行依賴于Java 運行環(huán)境, Logstash 1.5 以上版本不低于 java 7 推薦使用最新版本的Java 。
下載RPM包安裝jdk
#rpm -ivh jdk-8u91-linux-x64.rpm
設(shè)置 JDK 的環(huán)境變量,如下:
# tail -5 /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_91
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
在 Shell 提示符中執(zhí)行java version 命令,顯示如下結(jié)果,說明安裝成功:
# java -version
java version "1.8.0_91"
2)安裝 Logstash
下載并安裝Logstash ,下載allplugins的版本,安裝logstash 只需將它解壓的對應(yīng)目錄即可,例如: /usr/local 下:
# tar zxf logstash-all-plugins-2.3.1.tar.gz -C /usr/local/
#cd /usr/local
#mv logstash-2.3.1 logstash
安裝完成后運行如下命令:
# /usr/local/logstash/bin/logstash -e 'input { stdin { } } output { stdout {} }'
Settings: Default pipeline workers: 8
Pipeline main started
ysten
2016-05-20T01:53:36.857Z localhost ysten
使用-e參數(shù)在命令行中指定配置是很常用的方式,不過如果需要配置更多設(shè)置則需要很長的內(nèi)容。這種情況,我們首先創(chuàng)建一個簡單的配置文件,并且指定logstash使用這個配置文件。例如:在logstash 安裝目錄下創(chuàng)建一個“基本配置”測試文件 logstash-test.conf,文件內(nèi)容如下:
# cat logstash-simple.conf
input { stdin { } }
output {
stdout { codec=> rubydebug }
}
Logstash 使用 input 和 output 定義收集日志時的輸入和輸出的相關(guān)配置,本例中 input 定義了一個叫"stdin"的 input , output 定義一個叫"stdout"的 output 。無論我們輸入什么字符,Logstash 都會按照某種格式來返回我們輸入的字符,其中 output 被定義為"stdout"并使用了 codec 參數(shù)來指定logstash 輸出格式。
使用logstash的-f參數(shù)來讀取配置文件,執(zhí)行如下開始進行測試:
# echo "`date` hello World"
Fri May 20 09:58:13 CST 2016 hello World
# /usr/local/logstash/bin/logstash agent -f logstash-simple.conf
Settings: Default pipeline workers: 8
Pipeline main started
Fri May 20 09:58:13 CST 2016 hello World
{
"message" =>"Fri May 20 09:58:13 CST 2016 hello World",
"@version" =>"1",
"@timestamp" =>"2016-05-20T01:58:23.138Z",
"host" =>"localhost"
}
3)安裝 Elasticsearch
下載 Elasticsearch 的最新版RPM包并安裝。
#rpm -ivh elasticsearch-2.3.2.rpm
修改 Elasticsearch配置
#vim /etc/elasticsearch/elasticsearch.yml
啟動elasticsearch服務(wù)
# /etc/init.d/elasticsearch start
確認 elasticsearch 的 9200 端口已監(jiān)聽,說明 elasticsearch 已成功運行
# netstat -anp |grep :9200
tcp 0 0 ::ffff:192.168.1.111:9200 :::* LISTEN 12440/java
訪問http://192.168.1.111:9200/
Elasticsearch 安裝完成。
4)安裝 Kibana
下載 kibana 的最新版RPM包并安裝。
# rpm -ivhkibana-4.5.0-1.x86_64.rpm
修改 kibana配置
# vim /opt/kibana/config/kibana.yml
啟動kibana服務(wù)
# /etc/init.d/kibana start
使用 http://192.168.1.111:5601訪問 Kibana,全綠就說明安裝成功。
5)安裝Redis
下載最新版Redis
# tar -zxvf redis-3.2.0.tar.gz -C /usr/local
# cd /usr/local
# mv redis-3.2.0 redis
安裝redis
# cd /usr/local/redis
# make
# make install
使用redis自帶的腳本配置redis
啟動redis
# /usr/local/bin/redis-server
6)集成測試-搜集分析nginx日志
Logstash
創(chuàng)建input output配置文件
#cat sp.conf #采集傳輸nginx日志到redis
input {
file {
type =>"nginx_access"
path => ["/nginxlogs/tvlivemedia.log"]
}
}
output {
redis {
host =>“l(fā)ocalhost"#若不是本地redis則改成redis服務(wù)器ip
data_type =>"list"
key =>"logstash:redis"
}
}
#cat index.conf#從redis發(fā)送日志到Elasticsearch
input {
redis {
host =>"localhost"
data_type =>"list"
key =>"logstash:redis"
type =>"redis-input"
}
}
output {
elasticsearch {
hosts =>"192.168.1.111"
index =>"access-%{+YYYY.MM.dd}"
}
}
啟動采集進程
#/usr/local/logstash/bin/logstash agent -f sp.conf &
Settings: Default pipeline workers: 8
Pipeline main started
Elasticsearch
訪問http://192.168.1.111:9200/_search?pretty=true來查看index-pattern
已經(jīng)可以看到nginx日志進入了Elasticsearch并建立索引access-2016.05.19
Kibana
打開Kibana
http://192.168.1.111:5601/app/kibana#/settings