來源:http://blog.csdn.net/liubenlong007/article/details/53782955
ELK2參考:http://blog.csdn.net/liubenlong007/article/details/53782961
基本環境
Linux系統
- elasticsearch-2.4.2.tar.gz
- logstash-2.4.1.tar.gz
- kibana-4.6.3-linux-x86_64.tar.gz
基本概念
本節內容摘自http://baidu.blog.51cto.com/71938/1676798
日誌主要包括系統日誌、應用程序日誌和安全日誌。系統運維和開發人員可以通過日誌瞭解服務器軟硬件信息、檢查配置過程中的錯誤及錯誤發生的原因。經常分析日誌可以瞭解服務器的負荷,性能安全性,從而及時採取措施糾正錯誤。
通常,日誌被分散的儲存不同的設備上。如果你管理數十上百臺服務器,你還在使用依次登錄每臺機器的傳統方法查閱日誌。這樣是不是感覺很繁瑣和 效率低下。當務之急我們使用集中化的日誌管理,例如:開源的syslog,將所有服務器上的日誌收集彙總。
集中化管理日誌後,日誌的統計和檢索又成爲一件比較麻煩的事情,一般我們使用grep、awk和wc等Linux命令能實現檢索和統計,但是對於要求更高的查詢、排序和統計等要求和龐大的機器數量依然使用這樣的方法難免有點力不從心。
開源實時日誌分析ELK平臺能夠完美的解決我們上述的問題,ELK由ElasticSearch、Logstash和Kiabana三個開源工具組成。官方網站:https://www.elastic.co/products
- Elasticsearch是個開源分佈式搜索引擎,它的特點有:分佈式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。
- Logstash是一個完全開源的工具,他可以對你的日誌進行收集、分析,並將其存儲供以後使用(如,搜索)。
- kibana 也是一個開源和免費的工具,他Kibana可以爲 Logstash 和 ElasticSearch 提供的日誌分析友好的 Web 界面,可以幫助您彙總、 分析和搜索重要數據日誌。
工作原理如下如所示:
在需要收集日誌的所有服務上部署logstash,作爲logstash agent(logstash shipper)用於監控並過濾收集日誌,將過濾後的內容發送到logstash indexer,logstash indexer將日誌收集在一起交給全文搜索服務ElasticSearch,可以用ElasticSearch進行自定義搜索通過Kibana 來結合自定義搜索進行頁面展示。
elasticsearch集羣安裝
下載地址
https://www.elastic.co/products/elasticsearch
解壓
tar -zxvf elasticsearch-2.4.2.tar.gz
mv elasticsearch-2.4.2 elasticsearch-2.4.2_1
cd elasticsearch-2.4.2_1/config
- 1
- 2
- 3
- 1
- 2
- 3
安裝head插件
./bin/plugin install mobz/elasticsearch-head
- 1
- 1
配置config
這裏集羣包含3臺服務器
elasticsearch-2.4.2_1的配置
cluster.name: es-cluster
node.name: node-1
network.host: 你的服務器ip地址
http.port: 9211
transport.tcp.port: 9311
#過期時間
index.cache.field.expire: 1d
#默認類型爲resident, 字面意思是常駐(居民), 一直增加,直到內存 耗盡。 改爲soft就是當內存不足的時候,先clear掉 佔用的,然後再 往內存中放。設置爲soft後,相當於設置成了相對的內存大小。resident的話,除非內存夠大。
index.cache.field.type: soft
#可能是因爲我使用的服務器已經有了一個elasticsearch集羣的原因,這裏不寫集羣地址,集羣啓動後無法建立,原因待查
discovery.zen.ping.unicast.hosts: ["你的服務器列表(TCP端口哦)", "你的服務器列表(TCP端口哦)","你的服務器列表(TCP端口哦)"]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
elasticsearch-2.4.2_21的配置(只寫了不同的部分)
node.name: node-2
http.port: 9212
transport.tcp.port: 9312
- 1
- 2
- 3
- 1
- 2
- 3
elasticsearch-2.4.2_3的配置(只寫了不同的部分)
node.name: node-3
http.port: 9213
transport.tcp.port: 9313
- 1
- 2
- 3
- 1
- 2
- 3
後臺啓動3臺服務器:
./bin/elasticsearch &
- 1
- 1
注意要講elasticsearch所有文件用戶賦給elasticsearch用戶,否則沒權限。
這是出於系統安全考慮設置的條件。由於ElasticSearch可以接收用戶輸入的腳本並且執行,爲了系統安全考慮。chown -R elasticsearch elasticsearch2.4.0
如果出現
curl 127.0.0.1:9211
可以正常訪問,curl 本機IP地址:9211
不能訪問的問題,則需要在conf文件中配置network.host: 你的服務器ip地址
。參考:ss -l
命令
安裝logstash
修改配置文件
- 讀取文件方式
input {
file {
type => "infolog"
#監聽文件的路徑
path => "你的日誌路徑*.log"
}
file {
type => "errorlog"
#監聽文件的路徑
path => "你的日誌路徑*.log"
}
}
filter {
multiline {
pattern => "^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}"
negate => true
what => "previous"
}
}
output {
if [type] == "infolog" {
elasticsearch {
action => "index" #The operation on ES
hosts => ["elasticsearch的IP地址:9211", "elasticsearch的IP地址:9212","elasticsearch的IP地址:9213"] #ElasticSearch host, can be array.
index => "apilog_%{+YYYY.MM.dd}" #The index to write data to.
}
}else{
elasticsearch {
action => "index" #The operation on ES
hosts => ["elasticsearch的IP地址:9211", "elasticsearch的IP地址:9212","elasticsearch的IP地址:9213"] #ElasticSearch host, can be array.
index => "apierrorlog_%{+YYYY.MM.dd}" #The index to write data to.
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 說明:multiline的作用是爲了處理錯誤日誌的,使得錯誤堆棧信息作爲一條記錄顯示。這裏可能導致無法創建多線程,只能以單線程運行,解決辦法參考我的另一篇文章ELK 之 nginx日誌分析
filter {
multiline {
pattern => "^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}"
negate => true
what => "previous"
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 還可以直接與log4j配合使用,直接將日誌輸出到logstash中
log4j.logger.包名=debug, socket
# appender socket
log4j.appender.socket=org.apache.log4j.net.SocketAppender
log4j.appender.socket.Port=${elk_port}
log4j.appender.socket.RemoteHost=${elk_ip}
log4j.appender.socket.layout=org.apache.log4j.PatternLayout
log4j.appender.socket.layout.ConversionPattern=%d [%-5p] [%l] %m%n
log4j.appender.socket.ReconnectionDelay=10000
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
啓動服務
./bin/logstash agent -f config/log4j_to_es.conf &
- 1
- 1
安裝kibana
修改配置
server.port: 5601
server.host: "你的IP地址"
elasticsearch.url: "http://你的IP地址:9211"
kibana.index: ".kibana"
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
後臺啓動
nohup bin/kibana &
- 1
- 1
但是nohup在使用時還需要注意一些問題:
1、當輸入nohup COMMAND & 命令後,需要按任意鍵返回到shell窗口
2、退出當前登錄窗口用exit命令,不要直接點擊窗口上的叉來關閉
配置索引
進入kibana,配置好在logstash中配置的索引
定時清理ES索引數據
- 編寫清理腳本
參考資料 elasticsearch的索引自動清理及自定義清理
LAST_DATA=`date -d '-3 day' +%Y.%m.%d`
echo ”${LAST_DATA} 開始執行刪除操作“
curl -XDELETE 'http://10.104.29.19:9211/*'${LAST_DATA}''
echo "${LAST_DATA} 執行完畢。"
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
文件名爲: es-index-clear.sh
- 設置定時任務
輸入crontab -e,出現vi編輯頁面
輸入以下命令,每天兩點10分執行sh文件:
10 2 */1 * * /letv/soft/elk/logstash-2.4.1/bin/es-index-clear.sh
- 1
- 1
保存退出即可。
到此爲止,ELK環境搭建完畢。
後續會繼續寫ELK的具體使用教程,敬請期待
參考資料
- ELK(ElasticSearch, Logstash, Kibana)搭建實時日誌分析平臺
- Elasticsearch部分節點不能發現集羣(腦裂)問題處理
- ElasticSearch集羣服務器配置
- ElasticSearch教程(三)————ElasticSearch集羣搭建
- 源實時日誌分析ELK平臺部署
- logstash日誌分析的配置和使用