ELK学习3_使用redis+logstash+elasticsearch+kibana快速搭建日志平台
日志的分析和監(jiān)控在系統(tǒng)開(kāi)發(fā)中占非常重要的地位,系統(tǒng)越復(fù)雜,日志的分析和監(jiān)控就越重要,常見(jiàn)的需求有:
- 根據(jù)關(guān)鍵字查詢?nèi)罩驹斍?/li>
- 監(jiān)控系統(tǒng)的運(yùn)行狀況
- 統(tǒng)計(jì)分析,比如接口的調(diào)用次數(shù)、執(zhí)行時(shí)間、成功率等
- 異常數(shù)據(jù)自動(dòng)觸發(fā)消息通知
- 基于日志的數(shù)據(jù)挖掘
很多團(tuán)隊(duì)在日志方面可能遇到的一些問(wèn)題有:
- 開(kāi)發(fā)人員不能登錄線上服務(wù)器查看詳細(xì)日志,經(jīng)過(guò)運(yùn)維周轉(zhuǎn)費(fèi)時(shí)費(fèi)力
- 日志數(shù)據(jù)分散在多個(gè)系統(tǒng),難以查找
- 日志數(shù)據(jù)量大,查詢速度慢
- 一個(gè)調(diào)用會(huì)涉及多個(gè)系統(tǒng),難以在這些系統(tǒng)的日志中快速定位數(shù)據(jù)
- 數(shù)據(jù)不夠?qū)崟r(shí)
常見(jiàn)的一些重量級(jí)的開(kāi)源Trace系統(tǒng)有
- facebook scribe
- cloudera flume
- twitter zipkin
- storm
這些項(xiàng)目功能強(qiáng)大,但對(duì)于很多團(tuán)隊(duì)來(lái)說(shuō)過(guò)于復(fù)雜,配置和部署比較麻煩,在系統(tǒng)規(guī)模大到一定程度前推薦輕量級(jí)下載即用的方案,比如logstash+elasticsearch+kibana(LEK)組合。
對(duì)于日志來(lái)說(shuō),最常見(jiàn)的需求就是收集、查詢、顯示,正對(duì)應(yīng)logstash、elasticsearch、kibana的功能。
logstash
logstash主頁(yè)
logstash部署簡(jiǎn)單,下載一個(gè)jar就可以用了,對(duì)日志的處理邏輯也很簡(jiǎn)單,就是一個(gè)pipeline的過(guò)程
inputs >> codecs >> filters >> outputs對(duì)應(yīng)的插件有
從上面可以看到logstash支持常見(jiàn)的日志類型,與其他監(jiān)控系統(tǒng)的整合也很方便,可以將數(shù)據(jù)輸出到zabbix、nagios、email等。
推薦用Redis作為輸入緩沖隊(duì)列。
你還可以把數(shù)據(jù)統(tǒng)計(jì)后輸出到graphite,實(shí)現(xiàn)統(tǒng)計(jì)數(shù)據(jù)的可視化顯示。
metrics demo?
statsd?
graphite
參考文檔
- cookbook
- doc
- demo
elasticsearch
elasticsearch主頁(yè)
elasticsearch是基于lucene的開(kāi)源搜索引擎,近年來(lái)發(fā)展比較快,主要的特點(diǎn)有
- real time
- distributed
- high availability
- document oriented
- schema free
- restful api
elasticsearch的詳細(xì)介紹以后再寫(xiě),常用的一些資源如下
中文
smartcn, ES默認(rèn)的中文分詞?
https://github.com/elasticsearch/elasticsearch-analysis-smartcn
mmseg?
https://github.com/medcl/elasticsearch-analysis-mmseg
ik?
https://github.com/medcl/elasticsearch-analysis-ik
pinyin, 拼音分詞,可用于輸入拼音提示中文?
https://github.com/medcl/elasticsearch-analysis-pinyin
stconvert, 中文簡(jiǎn)繁體互換?
https://github.com/medcl/elasticsearch-analysis-stconvert
常用插件
elasticsearch-servicewrapper,用Java?Service Wrapper對(duì)elasticsearch做的一個(gè)封裝?
https://github.com/elasticsearch/elasticsearch-servicewrapper
Elastic HQ,elasticsearch的監(jiān)控工具?
http://www.elastichq.org
elasticsearch-rtf,針對(duì)中文集成了相關(guān)插件(rtf = Ready To Fly)?
https://github.com/medcl/elasticsearch-rtf?
作者主頁(yè)
kibana
kibana主頁(yè)
kibana是一個(gè)功能強(qiáng)大的elasticsearch數(shù)據(jù)顯示客戶端,logstash已經(jīng)內(nèi)置了kibana,你也可以單獨(dú)部署kibana,最新版的kibana3是純html+js客戶端,可以很方便的部署到Apache、Nginx等Http服務(wù)器。
kibana3的地址:?https://github.com/elasticsearch/kibana?
kibana2的地址:?https://github.com/rashidkpc/Kibana?
kibana3 demo地址:?http://demo.kibana.org
從demo可以先看一下kibana的一些基本功能
圖表
數(shù)據(jù)表格,可以自定義哪些列顯示以及顯示順序
可以看到實(shí)際執(zhí)行的查詢語(yǔ)句
新加一行
新加panel,可以看到支持的panel類型
加一個(gè)餅圖
用地圖顯示統(tǒng)計(jì)結(jié)果
按照http response code來(lái)統(tǒng)計(jì)
豐富的查詢語(yǔ)法
安裝部署
下面列一下一個(gè)簡(jiǎn)易LEK體驗(yàn)環(huán)境的搭建步驟
安裝jdk 1.7
oracle java主頁(yè)
省略安裝過(guò)程,推薦1.7+版本
java -version設(shè)置Java的環(huán)境變量,比如
sudo vim ~/.bashrc>> export JAVA_HOME=/usr/lib/jvm/java-7-oracle export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH >>source ~/.bashrc安裝redis
redis主頁(yè)
cd ~/src wget http://download.redis.io/releases/redis-2.6.16.tar.gz tar -zxf redis-2.6.16.tar.gz cd redis-2.6.16 make sudo make install可以通過(guò)redis源代碼里utils/install_server下的腳本簡(jiǎn)化配置工作
cd utils sudo ./install_server.shinstall_server.sh在問(wèn)你幾個(gè)問(wèn)題后會(huì)把redis安裝為開(kāi)機(jī)啟動(dòng)的服務(wù),可以通過(guò)下面的命令行來(lái)啟動(dòng)/停止服務(wù)
sudo /etc/init.d/redis_ start/end啟動(dòng)redis客戶端來(lái)驗(yàn)證安裝
redis-cli > keys *安裝Elasticsearch
Elasticsearch主頁(yè)
cd /search sudo mkdir elasticsearch cd elasticsearch sudo wget http://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.5.zip sudo unzip elasticsearch-0.90.5.zipelasticsearch解壓即可使用非常方便,接下來(lái)我們看一下效果,首先啟動(dòng)ES服務(wù),切換到elasticsearch目錄,運(yùn)行bin下的elasticsearch
cd /search/elasticsearch/elasticsearch-0.90.5 bin/elasticsearch -f訪問(wèn)默認(rèn)的9200端口
curl -X GET http://localhost:9200安裝logstash
logstash主頁(yè)
cd /search sudo mkdir logstash cd logstash sudo wget http://download.elasticsearch.org/logstash/logstash/logstash-1.2.1-flatjar.jarlogstash下載即可使用,命令行參數(shù)可以參考logstash flags,主要有
agent #運(yùn)行Agent模式 -f CONFIGFILE #指定配置文件web #自動(dòng)Web服務(wù) -p PORT #指定端口,默認(rèn)9292安裝kibana
logstash的最新版已經(jīng)內(nèi)置kibana,你也可以單獨(dú)部署kibana。kibana3是純粹JavaScript+html的客戶端,所以可以部署到任意http服務(wù)器上。
cd /search sudo mkdir kibana sudo wget http://download.elasticsearch.org/kibana/kibana/kibana-latest.zip sudo unzip kibana-latest.zip sudo cp -r kibana-latest /var/www/html可以修改config.js來(lái)配置elasticsearch的地址和索引。
用瀏覽器訪問(wèn)試試看?http://127.0.0.1/html/kibana-latest/index.html
集成
把上面的系統(tǒng)集成起來(lái)
首先把redis和elasticsearch都啟動(dòng)起來(lái)
為logstash新建一個(gè)配置文件
cd /search/logstash sudo vi redis.conf配置文件內(nèi)容如下
input {redis {host => "127.0.0.1"port => "6379" key => "logstash:demo"data_type => "list"codec => "json"type => "logstash-redis-demo"tags => ["logstashdemo"]} }output {elasticsearch {host => "127.0.0.1"}}用這個(gè)配置文件啟動(dòng)logstash agent
java -jar /search/logstash/logstash-1.2.1-flatjar.jar agent -f /search/logstash/redis.conf &啟動(dòng)logstash內(nèi)置的web
java -jar /search/logstash/logstash-1.2.1-flatjar.jar web &查看web,應(yīng)該還沒(méi)有數(shù)據(jù)
http://127.0.0.1:9292在redis 加一條數(shù)據(jù)
RPUSH logstash:demo "{\"time\": \"2013-01-01T01:23:55\", \"message\": \"logstash demo message\"}"看看elasticsearch中的索引現(xiàn)狀
curl 127.0.0.1:9200/_search?pretty=true curl -s http://127.0.0.1:9200/_status?pretty=true | grep logstash再通過(guò)logstash web查詢一下看看
http://127.0.0.1:9292通過(guò)單獨(dú)的kibana界面查看
http://127.0.0.1/html/kibana-latest/index.html#/dashboard/file/logstash.json數(shù)據(jù)清理
logstash默認(rèn)按天創(chuàng)建ES索引,這樣的好處是刪除歷史數(shù)據(jù)時(shí)直接刪掉整個(gè)索引就可以了,方便快速。
elasticsearch也可以設(shè)置每個(gè)文檔的ttl(time to live),相當(dāng)于設(shè)置文檔的過(guò)期時(shí)間,但相比刪除整個(gè)索引要耗費(fèi)更多的IO操作。
索引
elasticsearch默認(rèn)會(huì)按照分隔符對(duì)字段拆分,日志有些字段不要分詞,比如url,可以為這類字段設(shè)置not_analyzed屬性。
設(shè)置multi-field-type屬性可以將字段映射到其他類型。multi-field-type。
大量日志導(dǎo)入時(shí)用bulk方式。
對(duì)于日志查詢來(lái)說(shuō),filter比query更快 過(guò)濾器里不會(huì)執(zhí)行評(píng)分而且可以被自動(dòng)緩存。query-dsl。
elasticsearch默認(rèn)一個(gè)索引操作會(huì)在所有分片都完成對(duì)文檔的索引后才返回,你可以把復(fù)制設(shè)置為異步來(lái)加快批量日志的導(dǎo)入。
elasticsearch 優(yōu)化
優(yōu)化JVM?
優(yōu)化系統(tǒng)可以打開(kāi)最大文件描述符的數(shù)量?
適當(dāng)增加索引刷新的間隔
最佳實(shí)踐
- 首先你的程序要寫(xiě)日志
- 記錄的日志要能幫助你分析問(wèn)題,只記錄"參數(shù)錯(cuò)誤"這樣的日志對(duì)解決問(wèn)題毫無(wú)幫助
- 不要依賴異常,異常只處理你沒(méi)考慮到的地方
- 要記錄一些關(guān)鍵的參數(shù),比如發(fā)生時(shí)間、執(zhí)行時(shí)間、日志來(lái)源、輸入?yún)?shù)、輸出參數(shù)、錯(cuò)誤碼、異常堆棧信息等
- 要記錄sessionid、transitionid、userid等幫你快速定位以及能把各個(gè)系統(tǒng)的日志串聯(lián)起來(lái)的關(guān)鍵參數(shù)
- 推薦純文本+json格式
- 使用隊(duì)列
其他日志輔助工具
- rsyslog
- syslog-ng
- graylog
- fluentd
- nxlog
原文來(lái)自:http://www.cnblogs.com/buzzlight/p/logstash_elasticsearch_kibana_log.html
來(lái)源:http://blog.csdn.net/wang_zhenwei/article/details/49361171
總結(jié)
以上是生活随笔為你收集整理的ELK学习3_使用redis+logstash+elasticsearch+kibana快速搭建日志平台的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 糯米排骨的家常做法?
- 下一篇: 荔枝直接放冰箱里最多放几天?