提示:先安裝wget,執行yum -y install wget或sudo yum install wgethtml
大綱:java
1、簡介node
2、Logstashlinux
3、Redisweb
4、Elasticsearchredis
5、Kinabashell
ELK由Elasticsearch、Logstash和Kibana三部分組件組成;數據庫
Elasticsearch是個開源分佈式搜索引擎,它的特色有:分佈式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。json
Logstash是一個徹底開源的工具,它能夠對你的日誌進行收集、分析,並將其存儲供之後使用。vim
kibana 是一個開源和免費的工具,它能夠爲 Logstash 和 ElasticSearch 提供的日誌分析友好的 Web 界面,能夠幫助您彙總、分析和搜索重要數據日誌。
Logstash: logstash server端用來蒐集日誌;
Elasticsearch: 存儲各種日誌;
Kibana: web化接口用做查尋和可視化日誌;
Logstash Forwarder: logstash client端用來經過lumberjack 網絡協議發送日誌到logstash server;
在須要收集日誌的全部服務上部署logstash,做爲logstash agent(logstash shipper)用於監控並過濾收集日誌,將過濾後的內容發送到Redis,而後logstash indexer將日誌收集在一塊兒交給全文搜索服務ElasticSearch,能夠用ElasticSearch進行自定義搜索經過Kibana 來結合自定義搜索進行頁面展現。
ELK官網:https://www.elastic.co/
ELK官網文檔:https://www.elastic.co/guide/index.html
ELK中文手冊:http://kibana.logstash.es/content/elasticsearch/monitor/logging.html
提示:
ELK有兩種安裝方式:
(1)集成環境:Logstash有一個集成包,裏面包括了其全套的三個組件;也就是安裝一個集成包。
(2)獨立環境:三個組件分別單獨安裝、運行、各司其職。(比較經常使用)
本實驗以第二種方式獨立環境來進行演示;單機版主機地址爲:192.168.1.104。
一、Logstash的運行依賴於Java運行環境,安裝jdk(採用yum安裝jdk不需手動配置環境變量):
# yum -y install java-1.8.0
# java -version
輸出jdk版本信息:
Openjdk version "1.8.0_51"
OpenJDK Runtime Environment (build 1.8.0_51-b16)
OpenJDK 64-Bit Server VM (build 25.51-b03, mixed mode)
二、安裝logstash:
# wget https://download.elastic.co/logstash/logstash/logstash-1.5.4.tar.gz
# tar zxf logstash-1.5.4.tar.gz -C /usr/local
三、配置logstash環境變量:
# echo "export PATH=\$PATH:/usr/local/logstash-1.5.4/bin" > /etc/profile.d/logstash.sh
# . /etc/profile
四、logstash經常使用參數:
e:指定logstash的配置信息,能夠用於快速測試;
f:指定logstash的配置信息,能夠用於生產測試;
五、啓動logstash:
5.1 經過-e參數指定logstash的配置信息,用於快速測試,直接輸出到屏幕。
# logstash -e "input {stdin{}} output {stdout{}}"
啓動成功顯示:Logstash startup completed
輸入hello logstash. //手動輸入後回車,等待10秒後會有返回結果:
2015-10-08T13::55:50.660Z 0.0.0 hello logstash. //這種輸出是直接原封不動的返回
5.2 經過-e參數指定logstash的配置信息,用於快速測試,以json格式輸出到屏幕。
# logstash -e 'input {stdin{}} output {stdout {codec=>rubydebug}}'
啓動成功顯示:Logstash startup completed
輸入hello logstash. //手動輸入後回車,等待10秒後會有返回結果:
{
"message" => " hello logstash.",
"@version" => "1",
"@timestamp" => "2015-10-08T13:57:31.851Z",
"host" => "0.0.0.0"
}
這種輸出是以json格式的返回。
六、logstash以配置文件方式啓動:
6.1 輸出信息到屏幕:
編輯配置文件
# vim logstash-simple.conf
input { stdin {} }
output {
stdout { codec=>rubydebug }
}
普通方式啓動
# logstash -f logstash-simple.conf
啓動成功顯示:Logstash startup comleted
開啓debug模式啓動
# logstash agent -f logstash-simple.conf --verbose
啓動成功顯示:
Pipeline started {:leave=>:info}
Logstash startup comleted
測試:效果同5.命令行配置參數同樣。
7.啓動成功,查看logstash的監聽端口號(默認4567端口):
# netstat -tunlp|grep java
提示:啓動成功後,按2次ctrl+c退出
8.剛纔將信息直接顯示在屏幕上,如今將logstash輸出信息存儲到redis數據庫中:
編輯配置文件
# vim logstash_to_redis.conf
input { stdin{} }
output {
stdout { codec => rubydebug }
redis {
host => '172.16.114.133'
data_type => 'list'
key => 'logstash:redis'
}
}
其中,input是從控制檯輸入,output輸出到redis,host是redis服務器ip,data_type是json格式的list,每一條json格式日誌信息都加入到list,list的鍵由key決定,在redis的客戶端redis-cli下輸入命令keys *可查看全部鍵,redis中查看list內容的命令是lrange 鍵 起始索引(0開始) 條數。
以該配置文件啓動Logstash:
# logstash agent -f logstash_to_redis.conf --verbose
啓動成功後,在控制檯輸入日誌信息進行測試,若是未安裝redis或出現以下異常:
提示:
解決 centos中-bash: vim: command not found
用centos 的主機的時候, 用 vim 時出現 -bash: vim: command not found. 只能使用 vi. 那麼如何安裝 vim 呢?
輸入 rpm -qa|grep vim 命令, 若是 vim 已經正確安裝,會返回下面的三行代碼:
[root@centos]# rpm -qa |grep vim
vim-minimal-7.0.109-6.el5
vim-common-7.0.109-7.2.el5
vim-enhanced-7.0.109-7.2.el5
若是少了其中的某一條,好比 vim-enhanced 的,就用命令 yum -y install vim-enhanced 來安裝:
yum -y install vim-enhanced
若是上面的三條都沒有返回, 能夠直接用 yum -y install vim* 命令
yum -y install vim*
0、下載elasticsearch需用wget(Linux的下載工具),若未安裝wget,執行以下命令:
# yum -y install wget或# sudo yum install wget
安裝過程當中提示y/n時,輸入y便可,直到出現complete!則安裝成功。
一、下載
# wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.2.tar.gz
二、解壓
# tar zxf elasticsearch-1.7.2.tar.gz -C /usr/local/
三、修改配置項:
# cd /usr/local/elasticsearch
# vi config/elasticsearch.yml
配置內容(後面有解釋):
cluster.name: es_cluster
node.name: elk
path.data: /tmp/elasticsearch/data
path.logs: /tmp/elasticsearch/logs
network.host: 172.16.114.133
network.port: 9200
由於elasticsearch安裝完成之後elasticsearch.yml裏的配置項都是註釋過的,因此直接在文件底部插入以上配置內容便可,效果以下:(切記配置名後面是冒號,後面有空格,而後纔是配置值,若是冒號後面沒有空格,elasticsearch會拋異常,提示沒法加載配置文件),配置好後保存:
可從瀏覽器訪問elasticsearch服務,但須要安裝head插件,這是一個用瀏覽器與es集羣交互的插件,能夠查看集羣狀態,集羣doc內容,執行搜索和普通的rest請求等,安裝過程以下:
在elasticsearch-1.7.2文件夾下執行命令
# ./bin/plugin install mobz/elasticsearch-head
配置正確,安裝完head插件,啓動elasticsearch服務:
在elasticsearch-1.7.2文件夾下執行命令
# ./bin/elasticsearch
上圖爲啓動信息,注意其中的transport,啓用了9300端口與其它節點傳輸數據,啓用9200端口接受http請求,可從瀏覽器經過ip:9200訪問。
注意:若配置項的冒號後面沒空格,安裝插件時拋異常以下,提示無法從配置文件加載配置:
注意:若是啓動時拋以下異常,即不認識的主機名,須要配置hosts文件:
# vi /etc/hosts
在最後添加一行,將本機IP和主機名進行映射:
啓動完成後,會在/tmp/elasticsearch下面生成data和logs文件夾存數據文件和日誌文件:
註釋:該data和logs文件的路徑和目錄由配置項的path.data和path.logs決定
訪問ip:9200,注意,若是本地訪問不到linux服務器的9200,需讓Linux服務器防火牆開啓9200端口,或直接關閉防火牆,關閉防火牆命令
# service iptables stop
訪問ip:9200/_plugin/head查看ES集羣狀態:
若要退出elasticsearch服務,在linux按ctrl+c便可。
閱讀目錄
a.在前面我簡單的說過redis封裝成共用類的實現,地址以下:http://www.cnblogs.com/hanyinglong/p/Redis.html。
b.redis是一個key-value存儲系統,它支持存儲的value類型相比較Memcached更多,包括string,list,set,sets,hashes等(It supports data structures such as strings,hashes,lists,sets,sorted sets with range queries,bitmaps,hyperloglogs and geospatial indexes with radius queies)這些數據類型都支持push/pop,Add/remove等豐富的操做,並且這些操做都是原子性的。
c.redis和Memcached同樣,爲了保證效率,數據都是緩存在內存中的,區別就是redis會週期性的將更新的數據寫入磁盤,而且能夠實現主從(master-slave)同步。
d.redis在數據存儲方面,採用了NoSql數據庫的思想,即將Key做爲數據檢索的惟一標示,能夠將其簡單的理解爲關係型數據庫中索引的鍵,而value則做爲數據存儲的主要對象,其中每個Value都有一個Key與之對應,在Redis中,Value將被視爲二進制字節流用於存儲任何格式的數據,如Json,XML,圖片和序列化對象的字節流等,所以咱們也能夠將其想象爲RDB中的Blob類型字段,從而在咱們進行數據查詢是,只能基於Key做爲咱們查詢的條件。
e.redis官網:http://www.redis.io/
a.經過上面的說明以後咱們既能夠開始在linux系統下面安裝redis了,在安裝redis的過程當中我遇到了一些問題,但也所有解決了,原本我想直接寫而後遇到錯誤在引出來須要安裝什麼,可是感受不太好寫,因此我仍是在前面將這些軟件準備好,你們安裝的時候能夠先去安裝redis去驗證會不會出現問題,在解決也行。
b.下載redis的包,下載地址:http://download.redis.io/releases/redis-3.0.5.tar.gz
c.redis是C語言實現的,因此在Linux系統中須要安裝gcc來進行編譯,安裝gcc請參考第三步。
d.接下來須要安裝Unix的Tcl工具,若是不安裝的話後期咱們將沒法對Redis進行測試,完成安裝以後make test會報錯,安裝tcl請參考第4步,tcl包的下載地址是:http://downloads.sourceforge.net/tcl/tcl8.6.3-src.tar.gz
e.安裝完成上面的幾個必須的包以後,便可以安裝redis,請參考第5步以後。
f.操做須要的軟件以及系統以下:虛擬機(Vmware),虛擬機中安裝的Centos系統,Xshell,Xftp,redis包,tcl包。
a.經過上面準備工做以後,咱們如今已經擁有了能夠安裝和發佈的環境,若是沒有,請自行查詢安裝。
b.在centos下面安裝gcc,咱們使用yum(包管理器)安裝,由於gcc依賴了不少東西,而有些包系統可能已經安裝了,有些沒有,因此下面的命令最後都執行一遍,在Xshell中執行下面的命令:
b.1 yum install cpp
b.2 yum install binutils
b.3 yum install glibc-kernheaders
b.4 yum install glibc-common
b.5 yum install glibc-devel
b.6 yum install gcc
b.7 yum install make
備註:以上全部的包信息在安裝完成的時候都會提示Complete,若是沒有是Complete,而是Nothing to do,則說明服務器已經安裝了這個包,不須要再次安裝,因此不要緊,繼續執行下一個命令便可。
c.若是安裝過程當中沒有報錯,則說明gcc的安裝已經完成了,下面繼續安裝tcl。
a.在Xshell中使用命令跳轉到local下面建立屬於本身的文件夾:kencery
a.1 cd usr/local/ mkdir kencery cd kencery/
b. 而後使用Xftp將在準備工做下載的tcl包複製到kencery文件夾下面,如圖所示:
c.將上傳的tcl包解壓,解壓以後重命名爲tcl,如圖所示
c.1 tar -zxvf tcl8.6.3-src.tar.gz
c.2 mv tcl8.6.3 tcl
c.3 cd tcl
d.解壓完成以後使用下面的命令安裝,命令執行順序按照我寫的便可。
d.1 cd unix/
d.2 ./configure
d.3 make
d.4 make install
e.在執行的過程當中若是不出現錯誤,耐心等待便可,這些命令的截圖就不放在這裏了,按照我寫的順序執行便可。
a.經過上面幾步以後,準備工做已經完成,便可以開始安裝redis了。
b.使用Xftp將在準備工做下下載的redis包複製到kencery文件夾下面,如圖所示:
c.將上傳的redis包解壓,解壓以後重命名爲redis,如圖所示:
c.1 tar -zxvf redis-3.0.5.tar.gz
c.2 mv redis-3.0.5 redis
c.3 cd redis
d.當對包解壓完成以後,即可以開始對其進行安裝了,安裝的命令爲(在redis目錄下執行):
d.1 make
(1) 在練習的時候輸入make出現錯誤了,可是如今寫博客的時候部署沒有出現錯誤,若是出現錯誤,請使用這個命令(make MALLOC=libc)便可執行,由於沒有出現錯誤,因此沒有截圖,你們若是遇到的話給我截圖留言,謝謝。
(2) 若是執行make出現錯誤,當再次執行make的話,咱們建議,清理一下在執行,命令爲:make clean。
d.2 cd src/ make test
(1)在執行完make以後,在最後的程序中會輸出(t's a good idea to run 'make test'),它建議咱們執行make test進行測試,那麼接下來咱們就輸入make test,檢查測試,是否出現問題,如出現如圖所示:則說明測試沒有問題:
(2)在輸入make test執行的時候我在練習的時候是會出現錯誤的,可是這個錯誤不影響咱們的測試,故而能夠忽略。
d.3 make install
最後執行make install,不出現錯誤的話則說明redis安裝成功,如圖所示:
a.當安裝完redis以後,就須要進行測試,如下簡單作一個測試來驗證咱們的redis是否安裝成功。
b.首先咱們啓動redis服務,啓動和關閉redis服務命令以下:
b.1 src/redis-server & 啓動redis,加上&表示使redis之後臺程序方式運行
b.2 redis-server /usr/local/kencery/redis/redis.conf 啓動redis
b.3 src/redis-cli shutdown 關閉redis
b.4 輸入啓動redis的命令,啓動redis,如圖所示:
b.5 當redis啓動完成以後,使用netstat -ntlp |grep 6379 查看端口是否在使用中,若是在使用中,則說明安裝成功,不然安裝沒有成功。
b.6 鏈接redis而且測試,鏈接命令爲:src/redis-cli,最後的測試結果如圖所示:
b.7 到這裏reids的安裝和測試工做所有完成了。
a.如上面所述,咱們已經完成了對redis的安裝,接下來就能夠按照上面的方法使用,可是這裏還存在一些小問題,那就是linux系統重啓以後都須要找到安裝路徑才能執行啓動命令,那麼咱們能夠設置按照service的形式來啓動redis嗎?
b.執行命令:vim /etc/init.d/redis,建立腳本文件,在文件中寫入以下代碼,保存而且退出:
1 # Date 2015-12-10
2 # chkconfig: 2345 10 90
3 # description: Start and Stop redis
4
5 PATH=/usr/local/kencery/redis/src:/sbin:/usr/bin:/bin
6 REDISPORT=6379
7 EXEC=/usr/local/kencery/redis/src/redis-server
8 REDIS_CLI=/usr/local/kencery/redis/src/redis-cli
9
10 PIDFILE=/var/run/redis.pid
11 CONF="/usr/local/kencery/redis/redis.conf"
12 AUTH="1234"
13 case "$1" in
14 start)
15 if [ -f $PIDFILE ]
16 then
17 echo "$PIDFILE exists, process is already running or crashed."
18 else
19 echo "Starting Redis server..."
20 $EXEC $CONF
21 fi
22 if [ "$?"="0" ]
23 then
24 echo "Redis is running..."
25 fi
26 ;;
27 stop)
28 if [-f $PIDFILE ]
29 then
30 echo "$PIDFILE exists, process is not running."
31 else
32 PID=$(cat $PIDFILE)
33 echo "Stopping..."
34 $REDIS_CLI -p $REDISPORT SHUTDOWN
35 sleep 2
36 while [ -x $PIDFILE ]
37 do
38 echo "Waiting for Redis to shutdown..."
39 sleep 1
40 done
41 echo "Redis stopped"
42 fi
43 ;;
44 restart|force-reload)
45 ${0} stop
46 ${0} start
47 ;;
48 *)
49 echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2
50 exit 1
51 esac
c.給文件添加權限,使用腳本文件能夠執行,命令爲:chmod 755 /etc/init.d/redis
d.以上工做順利完成而且沒有出現報錯,則配置完成,每次咱們開機以後均可以輸入如下兩個命令啓動和關閉redis服務,如圖所示:
d.1 service redis start 開啓redis服務
d.2 service redis stop 關閉redis服務
f.當開啓服務以後既能夠鏈接redis測試進行操做或者使用其餘客戶端來操做redis,測試如圖所示:
a.在大部分狀況下,咱們須要服務器從新啓動的時候自動開啓redis,而不是咱們手工的去開啓,那麼下來就說一下開機自動啓動的設置。
b.首先設置redis.config中的daemonize爲yes,確保守護進行開啓,執行如下命令:
b.1 cd usr/local/kencery/redis
b.2 vim redis.conf 開啓配置文件,找到daemonize屬性酒設置爲yes, 保存而且退出便可。
c.而後設置開機啓動,命令:chkconfig redis on
d.當以上步驟完成以後,便可以能夠從新啓動Linux而後按照前面所寫的測試是否隨機器自動啓動了。
參考網上配置logstash從console取數據發送到elasticsearch:
啓動失敗:
測試發送消息失敗:
緣由,網上給的配置裏面確少protocol => "http":
修改後再次啓動成功,併發送測試消息:
在es查看:
或
安裝kopf插件
Elasticsearch-kopf插件能夠查詢Elasticsearch中的數據
訪問http://172.16.114.133:9200/_plugin/kopf/#!/cluster,瀏覽器訪問kopf頁面訪問elasticsearch保存的數據:
logstash採集log4j的日誌產生的日誌並輸出到es,網上的配置文件有誤,可添加filter{}:
啓動成功:
1、下載
# wget https://download.elastic.co/kibana/kibana/kibana-4.1.2-linux-x64.tar.gz
2、解壓
# tar zxf kibana-4.1.2-linux-x64.tar.gz -C /usr/local
3、修改kinaba配置文件kinaba.yml
# vim /usr/local/kibana-4.1.2-linux-x64/config/kibana.yml
將其中的elasticsearch_url的localhost修改成elasticsearch服務器的ip:
elasticsearch_url: "http://172.16.114.133:9200"
4、啓動
# /usr/local/kibana-4.1.2-linux-x64/bin/kibana
kinaba默認監聽在本地的5601端口上
5、瀏覽器訪問http://172.16.114.133:5601/#/settings/indices/?_g=()
6、點擊Create建立索引,使用默認的logstash-*的索引名稱,而且是基於時間的,或使用指定的索引。
索引建立完成:
7、點擊上圖的Discover,搜索和瀏覽Elasticsearch中的數據。
1、新建一個java或java web項目,必須log4j的包,如log4j-1.2.17.jar:
2、log4j.properties內容:
3、生成日誌
4、logstash採集log4j日誌並輸出到elasticsearch的配置文件log4j_to_es.conf
5、以上面的配置文件啓動logstash
6、啓動測試,產生日誌
7、從es查看日誌消息,索引applog
8、從Kibana查看日誌
8.1
8.2
8.3