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