ELK 日誌分析平臺搭建

ELK:Elasticsearch、Logstash和Kibana三部分組成

Elasticsearch(簡稱ES)是個開源分佈式搜索引擎,它的特點有:分佈式,零配置,自動發現。

Logstash 是一款強大的數據處理工具,它可以實現數據傳輸,格式處理,格式化輸出,還有強大的插件功能,常用於日誌處理。

Kibana是一個開源的分析與可視化平臺,設計出來用於和Elasticsearch一起使用的。你可以用kibana搜索、查看、交互存放在Elasticsearch索引裏的數據,使用各種不同的圖表、表格、地圖等kibana能夠很輕易地展示高級數據分析與可視化。

需要相關安裝包,可以直接去官網下載,地址:
下載頁:https://www.elastic.co/cn/downloads
也可以通過以下鏈接下載

安裝包

Elasticsearch5.4.0
kibana-5.4.0
jdk-8u131-linux-x64.tar.gz
這裏寫圖片描述
logstash-2.4.1.tar(支持java8以下的版本),logstash-5.4.0.tar(Java 8 or higher is required for Logstash 5.x.),因只能上傳60M內容,此處文件無法上傳。

前提條件

因爲 Kibana 需要 java 環境支持,所以需要配置 JDK
方法如下
(1)解壓 JDK 到自己定義的目錄

[zhou@myjavaweb myjre]$ pwd
/test1/myjre
[zhou@myjavaweb myjre]$ ll
total 181196
drwxr-xr-x 8   10  143      4096 Mar 15 16:35 jdk1.8.0_131
-rw-r--r-- 1 root root 185540433 May 26 17:17 jdk-8u131-linux-x64.tar.gz

(2)添加環境變量

[zhou@myjavaweb myjre]$ vi /etc/profile
.... 在配置文件下添加以下語句 ....
export JAVA_HOME=/test1/myjre/jdk1.8.0_131
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
.... 保存退出 ...
[zhou@myjavaweb myjre]$ source /etc/profile

注:/etc/profile:此文件爲系統的每個用戶設置環境信息,當用戶第一次登錄時,該文件被執行.並從/etc/profile.d目錄的配置文件中搜集shell的設置.
編輯該配置文件,需要使用 source 命令,立即生效。
(3)測試 JDK

[zhou@myjavaweb ~]$ java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

解壓即可使用,無需配置

(1)logstash-2.4.1 解壓後,進入文件夾,執行命令測試

[zhou@myjavaweb ELK_tar]$ tar xvzf logstash-2.4.1.tar.gz
[zhou@myjavaweb ELK]$ cd logstash-2.4.1/
[zhou@myjavaweb logstash-2.4.1]$ ./bin/logstash -e "input{stdin{}}output{stdout{codec=>rubydebug}}"
.... 顯示如下內容 ....
Settings: Default pipeline workers: 1
Pipeline main started
.... 可以鍵入 hello world ! 信息,待會會顯示出來 ....
hello world !
{
       "message" => "hello world !",
      "@version" => "1",
    "@timestamp" => "2017-06-10T13:51:15.847Z",
          "host" => "myjavaweb"
}

(2)elasticsearch 解壓後啓動

[zhou@myjavaweb elasticsearch-5.4.0]$ ./bin/elasticsearch
[2017-06-10T22:13:45,652][INFO ][o.e.t.TransportService   ] [node-1] publish_address {192.168.231.134:9300}, bound_addresses {192.168.231.134:9300}
[2017-06-10T22:13:45,669][INFO ][o.e.b.BootstrapChecks    ] [node-1] bound or publishing to a non-loopback or non-link-local address, enforcing bootstrap checks
[2017-06-10T22:13:48,810][INFO ][o.e.c.s.ClusterService   ] [node-1] new_master {node-1}{mw45jOGiQ5Cc6zp2Bf1JZQ}{xMEHc7UKTqGIlFZ44NhObw}{192.168.231.134}{192.168.231.134:9300}, reason: zen-disco-elected-as-master ([0] nodes joined)
[2017-06-10T22:13:48,935][INFO ][o.e.h.n.Netty4HttpServerTransport] [node-1] publish_address {192.168.231.134:9200}, bound_addresses {192.168.231.134:9200}

啓動成功,才能看到以下端口信息,這裏啓動可能會遇到問題


[root@myjavaweb ~]# netstat -ntpl | grep java
tcp6       0      0 192.168.231.134:9200    :::*                    LISTEN      3634/java           
tcp6       0      0 192.168.231.134:9300    :::*                    LISTEN      3634/java           

瀏覽器訪問部署 ES 的服務器地址(我的主機地址:192.168.231.134,需要端口號)
這裏寫圖片描述

(3)啓動 kibana ,並檢查端口是否監聽(5601,即待會通過瀏覽器訪問的地址和端口號)

[zhou@myjavaweb kibana-5.4.0-linux-x86_64]$ ./bin/kibana
[root@myjavaweb ~]# netstat -ntpl

....  .....
tcp        0      0 192.168.231.134:5601    0.0.0.0:*               LISTEN      3322/./bin/../node/ 

測試環境

兩臺虛擬機中,均部署 logstash,另一臺部署好 elasticsearch 以及 kibana,通過啓動 logstash (指定配置文件),蒐集日誌,並傳輸到 elasticsearch ,最終展示在 kibana 上,注意先後順序 logstash-> elasticsearch->kibana

示例
這裏讀取 Tomcat 的日誌,指定 elasticsearch 的主機地址,都在一臺主機上。

[zhou@myjavaweb conf]$ cat getTomcatlogs.conf 
input {
        file{
                path => ["/test1/local_Tomcat/tomcat8/logs/catalina.2017-06-10.log"]
                type => "proxy"
                start_position => "beginning"

        }

}
output{
#        stdout{
#                codec => rubydebug{}
#        }

    elasticsearch {
        hosts => ["192.168.231.134:9200"]
        index => "logstash-%{+YYYY.MM.dd}"
    }

}

.... 加載配置文件啓動 logstash ....
[zhou@myjavaweb conf]./bin/logstash -f ../conf/getTomcatlogs.conf 

這裏寫圖片描述

常見問題

(1)以下報錯,提示,不能以 root 用戶運行 elasticsearch
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
(2)更換用戶後啓動依然報錯,需要賦予權限

.... 錯誤信息 ....
/tmp/elasticsearch/logs/my-application.log) java.io.FileNotFoundException: /tmp/elasticsearch/logs/my-application.log (Permission denied) java.io.FileNotFoundException: /tmp/elasticsearch/logs/my-application.log (Permission denied)
.... 解決辦法,給 zhou 創建這個路徑文件權限 ....
 chown zhou.zhou -R /tmp/elasticsearch/logs/my-application.log

(3)啓動異常:ERROR: bootstrap checks failed

.... 錯誤內容 ....
system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk

問題原因:因爲Centos6不支持SecComp,而ES5.2.1默認bootstrap.system_call_filter爲true進行檢測,所以導致檢測失敗,失敗後直接導致ES不能啓動。
解決方法:在elasticsearch.yml中配置bootstrap.system_call_filter爲false,注意要在Memory下面:
bootstrap.memory_lock: false
bootstrap.system_call_filter: false

(4)錯誤 ERROR: bootstrap checks failed

.... 錯誤內容 ....
max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
max number of threads [1024] for user [lishang] likely too low, increase to at least [2048]

解決方法:切換到root用戶,編輯limits.conf 添加類似如下內容

vi /etc/security/limits.conf

添加如下內容:

* soft nofile 65536

* hard nofile 131072

* soft nproc 2048

* hard nproc 4096

(3)其他錯誤可以參見這個人的博客,很詳細。
http://blog.csdn.net/u012246178/article/details/63253531

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章