ELK日誌分析系統

提示:先安裝wget,執行yum  -y  install  wgetsudo  yum  install  wgethtml

大綱:java

1、簡介node

2、Logstashlinux

3、Redisweb

4、Elasticsearchredis

5、Kinabashell

 

1、簡介

一、核心組成

ELKElasticsearchLogstashKibana三部分組件組成;數據庫

Elasticsearch是個開源分佈式搜索引擎,它的特色有:分佈式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。json

Logstash是一個徹底開源的工具,它能夠對你的日誌進行收集、分析,並將其存儲供之後使用。vim

kibana 是一個開源和免費的工具,它能夠爲 Logstash 和 ElasticSearch 提供的日誌分析友好的 Web 界面,能夠幫助您彙總、分析和搜索重要數據日誌。

二、四大組件

Logstash: logstash server端用來蒐集日誌;

Elasticsearch: 存儲各種日誌;

Kibana: web化接口用做查尋和可視化日誌;

Logstash Forwarder: logstash client端用來經過lumberjack 網絡協議發送日誌到logstash server;

三、ELK工做流程

在須要收集日誌的全部服務上部署logstash,做爲logstash agent(logstash shipper)用於監控並過濾收集日誌,將過濾後的內容發送到Redis,而後logstash indexer將日誌收集在一塊兒交給全文搜索服務ElasticSearch,能夠用ElasticSearch進行自定義搜索經過Kibana 來結合自定義搜索進行頁面展現。

四、ELK的幫助手冊

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。

 

2、Logstash

一、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

提示:啓動成功後,按2ctrl+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*

 

3、ElasticSearch

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下面生成datalogs文件夾存數據文件和日誌文件:

註釋:該datalogs文件的路徑和目錄由配置項的path.datapath.logs決定

 

訪問ip:9200注意,若是本地訪問不到linux服務器的9200,需讓Linux服務器防火牆開啓9200端口,或直接關閉防火牆,關閉防火牆命令

# service iptables stop

訪問ip:9200/_plugin/head查看ES集羣狀態:

若要退出elasticsearch服務,在linuxctrl+c便可。

 

Linux(Centos)之安裝Redis及注意事項

閱讀目錄

 

1.redis簡單說明

  a.在前面我簡單的說過redis封裝成共用類的實現,地址以下:http://www.cnblogs.com/hanyinglong/p/Redis.html

  b.redis是一個key-value存儲系統,它支持存儲的value類型相比較Memcached更多,包括stringlistsetsetshashes(It supports data structures such as stringshasheslistssetssorted sets with range queriesbitmapshyperloglogs and geospatial indexes with radius queies)這些數據類型都支持push/popAdd/remove等豐富的操做,並且這些操做都是原子性的。

  c.redisMemcached同樣,爲了保證效率,數據都是緩存在內存中的,區別就是redis會週期性的將更新的數據寫入磁盤,而且能夠實現主從(master-slave)同步。

  d.redis在數據存儲方面,採用了NoSql數據庫的思想,即將Key做爲數據檢索的惟一標示,能夠將其簡單的理解爲關係型數據庫中索引的鍵,而value則做爲數據存儲的主要對象,其中每個Value都有一個Key與之對應,在Redis中,Value將被視爲二進制字節流用於存儲任何格式的數據,如Json,XML,圖片和序列化對象的字節流等,所以咱們也能夠將其想象爲RDB中的Blob類型字段,從而在咱們進行數據查詢是,只能基於Key做爲咱們查詢的條件。

  e.redis官網:http://www.redis.io/

回到頂部

2.準備工做

  a.經過上面的說明以後咱們既能夠開始在linux系統下面安裝redis了,在安裝redis的過程當中我遇到了一些問題,但也所有解決了,原本我想直接寫而後遇到錯誤在引出來須要安裝什麼,可是感受不太好寫,因此我仍是在前面將這些軟件準備好,你們安裝的時候能夠先去安裝redis去驗證會不會出現問題,在解決也行。

  b.下載redis的包,下載地址:http://download.redis.io/releases/redis-3.0.5.tar.gz

  c.redisC語言實現的,因此在Linux系統中須要安裝gcc來進行編譯,安裝gcc請參考第三步。

  d.接下來須要安裝UnixTcl工具,若是不安裝的話後期咱們將沒法對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包。

回到頂部

3.gcc的安裝

  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

回到頂部

4.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.在執行的過程當中若是不出現錯誤,耐心等待便可,這些命令的截圖就不放在這裏了,按照我寫的順序執行便可。   

回到頂部

5.redis的安裝

  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安裝成功,如圖所示:

6.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的安裝和測試工做所有完成了。

回到頂部

7.Linux中設置redis的服務器啓動和關閉

  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,測試如圖所示:

 

8.Linux中設置redis的開機啓動

  a.在大部分狀況下,咱們須要服務器從新啓動的時候自動開啓redis,而不是咱們手工的去開啓,那麼下來就說一下開機自動啓動的設置。

  b.首先設置redis.config中的daemonizeyes,確保守護進行開啓,執行如下命令:

    b.1 cd usr/local/kencery/redis

    b.2 vim redis.conf  開啓配置文件,找到daemonize屬性酒設置爲yes, 保存而且退出便可。

  c.而後設置開機啓動,命令:chkconfig redis on

  d.當以上步驟完成以後,便可以能夠從新啓動Linux而後按照前面所寫的測試是否隨機器自動啓動了。

 

參考網上配置logstashconsole取數據發送到elasticsearch

 

啓動失敗:

  

  測試發送消息失敗:

  

  緣由,網上給的配置裏面確少protocol => "http":

  

  修改後再次啓動成功,併發送測試消息:

   

  es查看:

  

  或

  

  安裝kopf插件

  

Elasticsearch-kopf插件能夠查詢Elasticsearch中的數據

訪問http://172.16.114.133:9200/_plugin/kopf/#!/cluster,瀏覽器訪問kopf頁面訪問elasticsearch保存的數據:

  logstash採集log4j的日誌產生的日誌並輸出到es,網上的配置文件有誤,可添加filter{}:

  

  啓動成功:

  

  

  

  

4、Kibana

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_urllocalhost修改成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中的數據。

5、測試

1、新建一個javajava web項目,必須log4j的包,如log4j-1.2.17.jar

2log4j.properties內容:

3、生成日誌

4logstash採集log4j日誌並輸出到elasticsearch的配置文件log4j_to_es.conf

5、以上面的配置文件啓動logstash

6、啓動測試,產生日誌

7、從es查看日誌消息,索引applog

8、從Kibana查看日誌

8.1

8.2

8.3

相關文章
相關標籤/搜索