ELK是elasticsearch、Logstashh和Kibana三個系統的首字母組合。當咱們部署集羣服務器的時候,日誌文件就會散落在多臺服務器上。查看日誌信息就須要到各個服務器上去取和查看,咱們把這些日誌文件歸集到一個地方統一管理。css
Elasticsearch是個開源分佈式搜索引擎,它的特色有:分佈式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。前端
Logstash是一個徹底開源的工具,他能夠對你的日誌進行收集、過濾,並將其存儲供之後使用(如,搜索)。java
Kibana 也是一個開源和免費的工具,Kibana能夠爲 Logstash 和 ElasticSearch 提供的日誌分析友好的 Web 界面,能夠幫助您彙總、分析和搜索重要數據日誌。node
名稱 | 角色 | 地址 |
---|---|---|
centos 7-1 | node1+kibana | 192.168.142.221 |
centos 7-2 | node1 | 192.168.142.132 |
centos 7-3 | Logstash+web | 192.168.142.136 |
這裏我將WEB端與日誌文件系統安裝在了,各位能夠根據我的狀況,所有獨立出去。(虛擬機開太多了,電腦頂不住啊)linux
添加域名解析。方便後期使用nginx
[root@node1 ~]# vim /etc/hosts //添加 192.168.142.221 node1 192.168.142.132 node2
檢查JAVA版本(沒有安裝的可使用yum install java進行安裝)c++
[root@node1 ~]# java -version openjdk version "1.8.0_131" OpenJDK Runtime Environment (build 1.8.0_131-b12) OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
部署elasticsearch服務(端口號:9200)web
//部署elasticsearch服務 [root@node1 ~]# rpm -ivh elasticsearch-5.5.0.rpm //加載系統服務 [root@node1 ~]# systemctl daemon-reload [root@node1 ~]# systemctl enable elasticsearch.service
修改ES配置文件apache
[root@node1 ~]# vim /etc/elasticsearch/elasticssearch.yml //如下幾行取消註釋 17/ cluster.name: my-elk-eluster //集羣名字(全部節點必須同樣) 23/ node.name: node1 //節點名字(每一個節點不一樣) 33/ path.data:/data/elk_data //數據存放路徑 37/ path.logs:/var/log/elasticsearch/ //日誌存放路徑 43/ bootstrap.memorylock: false //不在啓動的時候鎖定內存 55/ network.host: 0.0.0.0 //提供服務綁定的IP地址,0. 0. 0. 0表明全部地址 59/ http.port: 9200 //偵聽端口爲9200 68/ discovery.zen.ping.unicast.hosts: ["node1", "node2"] //集羣發現經過單播實現
創建數據文件存放目錄,並開啓服務npm
[root@node1 ~]# mkdir -p /data/elk_data [root@node1 ~]# chown -R elasticsearch:elasticsearch /data/elk_data //修改屬主屬組 [root@node1 ~]# systemctl start elasticsearch.service [root@node1 ~]# netstat -atnp | grep 9200
驗證服務是否開啓
使用宿主機瀏覽器訪問:http://192.168.142.132:9200
,便可獲取到相應的節點信息,以下:
{
"name" : "node1",
"cluster_name" : "my-elk-cluster",
"cluster_uuid" : "mi3-z72CRqS-ofc4NhjXdQ",
"version" : {
"number" : "5.5.0",
"build_hash" : "260387d",
"build_date" : "2017-06-30T23:16:05.735Z",
"build_snapshot" : false,
"lucene_version" : "6.6.0"
},
"tagline" : "You Know, for Search"
}
解壓並編譯安裝
[root@node1 ~]# yum install gcc gcc-c++ make -y //安裝node組件包 [root@node1 ~]# tar zxf node-v8.2.1.tar.gz -C /opt //在node目錄中 [root@node1 ~]# ./configure [root@node1 ~]# make //異常費時,大概耗時20min [root@node1 ~]# make install
安裝phantomjs前端框架
[root@node1 ~]# tar jxf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src [root@node1 ~]# cp /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin
安裝elasticsearch-head數據可視化工具
[root@node1 ~]# tar zxf elasticsearch-head.tar.gz -C /usr/local/src //在elasticsearch-head目錄中 [root@node1 ~]# npm install //使用npm工具進行安裝(node組件自帶)
修改elasticsearch-head配置文件
[root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml //末行添加 http.cors.enabled: true //開啓跨域訪問支持 http.cors.allow-origin: "*" //跨域訪問容許的域名地址,*號爲全網段
開啓elasticsearch-head工具
[root@node1 ~]# systemctl restart elasticsearch //重啓ES服務 [root@node1 ~]# cd /usr/local/src/elasticsearch-head/ [root@node1 elasticsearch-head]# npm run start & //保持後臺運行
安裝WEB服務
任意web服務都可(Apache、nginx、Tomcat都可),再也不進行詳細解釋。
這裏使用的Apache服務
安裝logstash系統
[root@apache ~]# rpm -ivh logstash-5.5.1.rpm [root@apache ~]# systemctl start logstash.service //啓動logstash [root@apache ~]# systemctl enable logstash.service //設置爲開機自啓 [root@apache ~]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin //創建軟連接方便使用
設置logstash與elasticsearch進行對接
logstash配置文件由三部分組成:input(入)、output(出)、filter
[root@apache log]# chmod o+r messages [root@apache log]# ll /var/log/messages -rw----r--. 1 root root 483737 Dec 18 17:54 /var/log/messages [root@apache log]# vim /etc/logstash/conf.d/system.conf //手動添加 input { file{ path => "/var/log/messages" //收集日誌的路徑 type => "system" //便籤名稱 start_position => "beginning" //收集方式,"beginning"從頭開始 } } output { elasticsearch { hosts => ["192.168.142.136:9200"] //es服務地址 index => "system-%{+YYYY.MM.dd}" //索引名稱 } } [root@apache log]# systemctl restart logstash.service //重啓服務
結果驗證
字段描述解釋:
-f 經過這個選項能夠指定logstash的配置文件,根據配置文件配置logstash
-e 後面跟着字符串該字符串能夠被當作logstash的配置 (若是是」」,則默認使用stdin作爲輸入、stdout做爲輸出)
-t 測試配置文件是否正確,而後退出
一、輸入、輸出均爲標準模式
[root@apache ~]# logstash -e 'input { stdin{} },output { stdout{} }'
##輸入直接輸出在屏幕上
輸入:www.baidu.com
輸出:apache www.baidu.com
二、使用codec解碼器,使用rubydebug顯示詳細輸出
[root@apache ~]# logstash -e 'input { stdin{} },output { stdout { codec=>rubydebug } }'
##會按照編碼格式進行輸出
輸入:www.baidu.com
輸出:
{
"@timestamp"=> 2018-10-12T02: 15:39.136Z, #時間
"@version=> "1", #版本
"host" => "apache", #使用Apache服務
"message" => "www.baidu. com" #訪問網頁
}
三、將信息寫入elasticsearch中
[root@apache ~]# logstash -e 'input { stdin{} },output {elasticsearch { hosts=>["192.168.142.221:9200"] } }'
##會在elasticsearch中生成索引
輸入:www.baidu.com
輸出:在elasticsearch中生成lostash-2019.12.17
在node1中進行安裝
[root@node1 ~]# cd /abc/elk/ [root@node1 elk]# rpm -ivh kibana-5.5.1-x86_64.rpm [root@node1 kibana]# cp kibana.yml kibana.yml.bak
修改Kibana配置文件
[root@node1 kibana]# vim kibana.yml //按照下圖進行修改 2/ server.port: 5601 //打開端口 7/ server.host: "0.0.0.0" //監聽的地址 21/ elasticsearch.url: "http://192.168.142.136:9200" //與elasticsearch創建聯繫 30/ kibana.index: ".kibana" //在elasticsearch中添加.kibana索引
啓動Kibana
[root@node1 kibana]# systemctl start kibana.service //開啓kibana服務 [root@node1 kibana]# systemctl enable kibana.service //設爲開機自啓動
web服務與elasticsearch進行對接後,使用kibana進行可視化
[root@apache log]# cd /etc/logstash/conf.d/ //修改配置文件(空的自行添加) [root@apache conf.d]# vim apache_log.conf input { file{ path => "/etc/httpd/logs/access_log" //針對於Apache的access日誌 type => "access" start_position => "beginning" } file{ path => "/etc/httpd/logs/error_log" //針對於Apache的error日誌 type => "error" start_position => "beginning" } } output { if [type] == "access" { elasticsearch { hosts => ["192.168.142.136:9200"] //elasticsearch地址 index => "apache_access-%{+YYYY.MM.dd}" } } if [type] == "error" { elasticsearch { hosts => ["192.168.142.136:9200"] //elasticsearch地址 index => "apache_error-%{+YYYY.MM.dd}" } } } [root@apache conf.d]# /usr/share/logstash/bin/logstash -f apache_log.conf //僅對於該日誌文件進行生效
在可視化界面進行配置
在瀏覽器輸入http://192.168.142.136:5601/
首次登陸時建立一個索引(對接系統日誌文件):
輸入:access-*
點擊create按鈕進行建立
點擊Discover按鈕,會發現access-*信息
故障集:
19:43:59.210 [LogStash::Runner] FATAL logstash.runner - Logstash could not be started because there is already another instance using the configured data directory. If you wish to run multiple instances, you must change the "path.data" setting.
解決方案
//查看logstash配置文件 vim /etc/logstash/logstash.yml //找到path.data路徑 /var/lib/logstash/ //刪除緩存 rm -rf .lock //帶路徑重啓 logstash -f /etc/logstash/conf.d/nginx_log.conf --path.data=/var/lib/logstash