1. ELK是什么
ELK是ElasticSearch缘厢,Logstash狸演,Kibana加在一起的縮寫眉厨,ElasticSearch簡稱ES,主要用來存儲和檢索數(shù)據(jù)孵户。Logstash主要用來往ES中寫入數(shù)據(jù)萧朝。Kibana主要用來展示數(shù)據(jù)。一般用這幾個應用組合來搭建分布式日志系統(tǒng)延届,監(jiān)控平臺剪勿。
2. 為什么要使用ELK
記錄系統(tǒng)日志,并方便檢索
我在維護一個已經(jīng)運行很多年的網(wǎng)站方庭,一個Java WEB項目厕吉,部署在weblogic上,后臺使用的是Oracle數(shù)據(jù)庫械念,平心而論這個項目全部用開源的技術(shù)就好头朱,根本沒必要花錢用Oracle的東西,不過這種電信的遺留系統(tǒng)龄减,也不能說調(diào)整就調(diào)整项钮,呵呵扯遠了。
最開始一臺服務器就能跑起來了,后來訪問量大了烁巫,就增加幾臺服務器署隘,再配個負載均衡。問題來了亚隙,后臺的日志都是打印在war包所在服務器上磁餐,系統(tǒng)出現(xiàn)問題的話需要逐個服務器查找日志文件,相當麻煩阿弃。能不能把這些分布式的日志都放到同一個地方呢诊霹?一開始有個“大神”(好像是我)想到了把日志都放到數(shù)據(jù)庫-Oracle。問題是勉強解決渣淳,但是脾还,日志本身只會不停新增,不會有更新操作入愧,刪除操作鄙漏,也不會有什么一致性要求,放到關(guān)系型數(shù)據(jù)庫實在是殺雞用牛刀的感覺砂客,于是后來就用到了這個ELK泥张。
以往有syslogd等工具可以匯總到一臺機器,但都是以文件方式鞠值,搜索不方便媚创。Logstash可配置輸出到ElasticSearch服務幫忙做搜索功能,可以做到實時的關(guān)鍵字搜索彤恶,作為系統(tǒng)管理員钞钙,這個配置非常方便。
為什么要用0.9版本声离? 現(xiàn)在都有ELK5了啊
所謂的0.9版本其實就是指ElasticSearch的0.9版本芒炼。而0.9版本是最后一個還支持JDK 1.6的版本。JDK1.6是國內(nèi)第一個被大范圍廣泛使用的JDK版本术徊,直到現(xiàn)在還有無數(shù)的項目用著1.6本刽。 因為安裝ELK的服務器正是某個電信遺留系統(tǒng)所在的服務器,給遺留系統(tǒng)升級JDK版本也不是說升級就升級的赠涮,除了技術(shù)上的工作還有大量非技術(shù)的工作子寓,這會折騰我好多時間,所以先用0.9試試手笋除,以后再找一臺新的服務器安裝最新的ELK斜友,以便用上其更強大的功能。
3. 安裝步驟
系統(tǒng)環(huán)境
16核 Intel(r) Xeon(R) CPU E5620 @ 2.40GHz
32G內(nèi)存
Red Hat Enterprise Linux Server release 5.5 (Tikanga)
jdk1.6.0_23
Redis
Redis是什么
Redis 是一個開源(BSD許可)的垃它,內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)存儲系統(tǒng)鲜屏,它可以用作數(shù)據(jù)庫烹看、緩存和消息中間件。
為什么要使用Redis
ELK本身并沒有Redis洛史,為什么會需要這個東東呢惯殊?
Redis在這里充當?shù)氖且粋€緩沖的消息隊列。
- 在Java開發(fā)中也殖,不少人會用到Logback作為日志的工具靠胜,由于Logback目前沒有渠道直接把Log發(fā)到Logstash上,所以就做一個Appender毕源,先把log發(fā)送到Redis上,然后logstash自己上redis取日志
- 提高系統(tǒng)穩(wěn)定性陕习,避免因網(wǎng)絡抖動等原因突然出現(xiàn)大量寫入日志造成阻塞霎褐。先把日志放到Redis中緩沖一下怕吴,即使logstash讀取數(shù)據(jù)失敗桃笙,數(shù)據(jù)依舊在Redis中不會丟失。
安裝
安裝的是3.2.8版本歌径,編譯安裝
$ wget http://download.redis.io/releases/redis-3.2.8.tar.gz
$ tar xzvf redis-3.2.8.tar.gz
$ cd redis-3.2.8
$ make & make install
$ vi redis.conf
# 編輯redis.conf文件
#(1)把“bind 127.0.0.1”注釋掉损合,否則redis只能從本地訪問
#(2)加上這一句:requirepass 【密碼】省艳,既然允許遠程訪問,自然應該設置密碼
$ cd src
$ ./redis-server
Logstash
安裝的是1.3.3版本嫁审,注意Logstash的版本必須對應ElasticSearch特定版本跋炕,否則無法運行,而且兩者版本號并不是一致的律适,相當混亂辐烂,好像是ELK3還是ELK5重新整理了版本號才改善過來。
$ mkdir logstash
$ cd logstash
$ wget http://download.elasticsearch.org/logstash/logstash/logstash-1.3.3-flatjar.jar
# 創(chuàng)建redis-logstash.conf
$ touch redis-logstash.conf
$ vi redis-logstash.conf
input{
redis{
host=>"127.0.0.1" #我的redis也裝在同一臺服務器
port=>6379 #redis的端口
data_type=>"list"
key=>"logstash" # 自定義的key捂贿,需要與我在logback上配置的對應
password=>"Abcedfg" #在redis設置的訪問密碼
codec=>json{
charset=>"UTF-8"
}
}
output{
file{
#從redis中獲取的日志纠修,放到這個文件,支持動態(tài)文件名
path=>"/data/logs/logstash-%{+yyyy.MM.dd}.log"
}
elasticsearch{
host=>"127.0.0.1" # 我的elasticsearch也是裝在同一臺服務器上
}
}
# 直接用Java跑這個jar包
# 其中 -f 是指以前臺方式運行厂僧,結(jié)合實際情況考慮去掉
$ java -jar logstash-1.3.3-flatjar.jar agent -f redis-logstash.conf
ElasticSearch
安裝的版本是0.90.13
$ wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.13.tar.gz
$ tar xvf elasticsearch-0.90.13.tar.gz
$ cd elasticsearch-0.90.13/bin/
# 使用的是默認的配置扣草,在redis-logstash.conf中已經(jīng)指定了ElasticSearch所在的ip,所以只需開啟ElasticSearch颜屠,它自會處理日志
# -f 是指以前臺方式運行辰妙,根據(jù)實際情況去掉
$ ./elasticsearch -f
Kibana
可以通過一個圖形化的界面看日志
logstash已經(jīng)包含了:
java -jar logstash-1.3.3-flatjar.jar web
它默認使用的是9292端口,我們用一個支持HTML5的瀏覽器打開即可http://127.0.0.1:9292/index.html#/dashboard/file/logstash.json
4. 不足與展望
以上只是介紹了一個簡單的安裝步驟汽纤,可以看到安裝的版本很舊上岗,ELK全部裝在一臺服務器,索引也沒有優(yōu)化蕴坪,內(nèi)存會越來越少肴掷,也沒有使用集群以保證高可用敬锐。這個以后再另寫文章總結(jié)