手把手教你,在CentOS上安裝ELK,進行服務器日誌收集

每當項目上線時,因為項目是集群部署的,所以,來回到不同的服務器上查看日誌會變得很麻煩,你是不是也碰到這樣類似的問題,那麼ELK將能解決你遇到的問題!

01、ELK Stack 簡介

ELK 不是一款軟件,而是 Elasticsearch、Logstash 和 Kibana 三種軟件產品的首字母縮寫。這三者都是開源軟件,通常配合使用,而且又先後歸於 Elastic.co 公司名下,所以被簡稱為 ELK Stack。根據 Google Trend 的信息顯示,ELK Stack 已經成為目前最流行的集中式日誌解決方案。

  • Elasticsearch:分佈式搜索和分析引擎,具有高可伸縮、高可靠和易管理等特點。基於 Apache Lucene 構建,能對大容量的數據進行接近實時的存儲、搜索和分析操作。通常被用作某些應用的基礎搜索引擎,使其具有複雜的搜索功能;
  • Logstash:數據收集引擎。它支持動態的從各種數據源蒐集數據,並對數據進行過濾、分析、豐富、統一格式等操作,然後存儲到用戶指定的位置;
  • Kibana:數據分析和可視化平臺。通常與 Elasticsearch 配合使用,對其中數據進行搜索、分析和以統計圖表的方式展示;
  • Filebeat:ELK 協議棧的新成員,一個輕量級開源日誌文件數據蒐集器,基於 Logstash-Forwarder 源代碼開發,是對它的替代。在需要採集日誌數據的 server 上安裝 Filebeat,並指定日誌目錄或日誌文件後,Filebeat 就能讀取數據,迅速發送到 Logstash 進行解析,亦或直接發送到 Elasticsearch 進行集中式存儲和分析。

02、ELK 常用架構及使用場景介紹

2.1、最簡單架構

在這種架構中,只有一個 Logstash、Elasticsearch 和 Kibana 實例。Logstash 通過輸入插件從多種數據源(比如日誌文件、標準輸入 Stdin 等)獲取數據,再經過濾插件加工數據,然後經 Elasticsearch 輸出插件輸出到 Elasticsearch,通過 Kibana 展示。

手把手教你,在CentOS上安裝ELK,進行服務器日誌收集

這種架構非常簡單,使用場景也有限。初學者可以搭建這個架構,瞭解 ELK 如何工作。

2.2、Logstash 作為日誌蒐集器

這種架構是對上面架構的擴展,把一個 Logstash 數據蒐集節點擴展到多個,分佈於多臺機器,將解析好的數據發送到 Elasticsearch server 進行存儲,最後在 Kibana 查詢、生成日誌報表等。

手把手教你,在CentOS上安裝ELK,進行服務器日誌收集

這種結構因為需要在各個服務器上部署 Logstash,而它比較消耗 CPU 和內存資源,所以比較適合計算資源豐富的服務器,否則容易造成服務器性能下降,甚至可能導致無法正常工作。

2.3、Beats 作為日誌蒐集器

這種架構引入 Beats 作為日誌蒐集器。目前 Beats 包括四種:

  • Packetbeat(蒐集網絡流量數據);
  • Topbeat(蒐集系統、進程和文件系統級別的 CPU 和內存使用情況等數據);
  • Filebeat(蒐集文件數據);
  • Winlogbeat(蒐集 Windows 事件日誌數據)。

Beats 將蒐集到的數據發送到 Logstash,經 Logstash 解析、過濾後,將其發送到 Elasticsearch 存儲,並由 Kibana 呈現給用戶。


手把手教你,在CentOS上安裝ELK,進行服務器日誌收集


這種架構解決了 Logstash 在各服務器節點上佔用系統資源高的問題。相比 Logstash,Beats 所佔系統的 CPU 和內存幾乎可以忽略不計。另外,Beats 和 Logstash 之間支持 SSL/TLS 加密傳輸,客戶端和服務器雙向認證,保證了通信安全。

因此這種架構適合對數據安全性要求較高,同時各服務器性能比較敏感的場景。

2.4、引入消息隊列機制的架構

Beats 還不支持輸出到消息隊列,所以在消息隊列前後兩端只能是 Logstash 實例。這種架構使用 Logstash 從各個數據源蒐集數據,然後經消息隊列輸出插件輸出到消息隊列中。目前 Logstash 支持 Kafka、Redis、RabbitMQ 等常見消息隊列。然後 Logstash 通過消息隊列輸入插件從隊列中獲取數據,分析過濾後經輸出插件發送到 Elasticsearch,最後通過 Kibana 展示。

手把手教你,在CentOS上安裝ELK,進行服務器日誌收集

這種架構適合於日誌規模比較龐大的情況。但由於 Logstash 日誌解析節點和 Elasticsearch 的負荷比較重,可將他們配置為集群模式,以分擔負荷。引入消息隊列,均衡了網絡傳輸,從而降低了網絡閉塞,尤其是丟失數據的可能性,但依然存在 Logstash 佔用系統資源過多的問題。

說了這麼多理論,對於喜歡就乾的小編來說,下面我將以Beats 作為日誌蒐集器的架構,進行詳細安裝介紹!

03、基於 Filebeat 架構的配置安裝

由於我這邊是測試環境,所以ElasticSearch + Logstash + Kibana + nginx這四個軟件我都是裝在一臺機器上面,如果是生產環境,建議分開部署,並且ElasticSearch可配置成集群方式。

軟件架構示意圖:

手把手教你,在CentOS上安裝ELK,進行服務器日誌收集

安裝環境及版本:

  • 操作系統:Centos7
  • 內存:大於或等於4G
  • ElasticSearch:6.1.0
  • Logstash:6.1.0
  • Kibana:6.1.0
  • filebeat :6.2.4

建議把所需的安裝包,手動從網上下載下來,因為服務器下載ELK安裝包速度像蝸牛……,非常非常慢~~,可能是國內的網絡原因吧!

將手動下載下來的安裝包,上傳到服務器某個文件夾下。

手把手教你,在CentOS上安裝ELK,進行服務器日誌收集

3.1、ElasticSearch安裝

3.1.1、安裝JDK(已經安裝過,可以跳過)

elasticsearch依賴Java開發環境支持,先安裝JDK。

<code>yum -y install java-1.8.0-openjdk/<code>

查看java安裝情況

<code>java -version/<code>
手把手教你,在CentOS上安裝ELK,進行服務器日誌收集

3.1.2、安裝ElasticSearch

進入到對應上傳的文件夾,安裝ElasticSearch

<code>rpm -ivh elasticsearch-6.1.0.rpm/<code>

查找安裝路徑

<code>rpm -ql elasticsearch/<code>

一般是裝在/usr/share/elasticsearch/下。

3.1.3、設置data的目錄

創建/data/es-data目錄,用於elasticsearch數據的存放

<code>mkdir -p /data/es-data/<code>

修改該目錄的擁有者為elasticsearch

<code>chown -R elasticsearch:elasticsearch /data/es-data/<code>
3.1.4、設置log的目錄

創建/data/es-log目錄,用於elasticsearch日誌的存放

<code>mkdir -p /log/es-log/<code>

修改該目錄的擁有者為elasticsearch

<code>chown -R elasticsearch:elasticsearch /log/es-log/<code>
3.1.5、修改配置文件elasticsearch.yml
<code>vim /etc/elasticsearch/elasticsearch.yml/<code>

修改如下內容:

<code>#設置data存放的路徑為/data/es-datapath.data: /data/es-data#設置logs日誌的路徑為/log/es-logpath.logs: /log/es-log#設置內存不使用交換分區bootstrap.memory_lock: false#配置了bootstrap.memory_lock為true時反而會引發9200不會被監聽,原因不明#設置允許所有ip可以連接該elasticsearchnetwork.host: 0.0.0.0#開啟監聽的端口為9200http.port: 9200#增加新的參數,為了讓elasticsearch-head插件可以訪問es (5.x版本,如果沒有可以自己手動加)http.cors.enabled: truehttp.cors.allow-origin: "*"/<code> 
3.1.6、啟動elasticsearch

啟動

<code>systemctl start elasticsearch/<code>

查看狀態

<code>systemctl status elasticsearch/<code>

設置開機啟動

<code>systemctl enable elasticsearch/<code>

啟動成功之後,測試服務是否開啟

<code>curl -X GET http://localhost:9200/<code>

返回如下信息,說明安裝、啟動成功了


手把手教你,在CentOS上安裝ELK,進行服務器日誌收集


3.2、Logstash安裝

3.2.1、安裝logstash
<code>rpm -ivh logstash-6.1.0.rpm/<code>
3.2.2、設置data的目錄

創建/data/ls-data目錄,用於logstash數據的存放

<code>mkdir -p /data/ls-data/<code>

修改該目錄的擁有者為logstash

<code>chown -R logstash:logstash /data/ls-data/<code>
3.2.3、設置log的目錄

創建/data/ls-log目錄,用於logstash日誌的存放

<code>mkdir -p /log/ls-log/<code>

修改該目錄的擁有者為logstash

<code>chown -R logstash:logstash /log/ls-log/<code>
3.2.4、設置conf.d的目錄,創建配置文件
<code>#進入logstash目錄cd /etc/logstash#創建conf.d的目錄mkdir conf.d/<code>

創建配置文件,日誌內容輸出到elasticsearch中,如下

<code>vim /etc/logstash/conf.d/logstash.conf/<code>

內容如下:

<code>input {  beats {    port => 5044    codec => plain {          charset => "UTF-8"    }  }}output {  elasticsearch { hosts => ["localhost:9200"] }  stdout { codec => rubydebug }}/<code>
3.2.5、修改配置文件logstash.yml
<code>vim /etc/logstash/logstash.yml/<code>

內容如下:

<code># 設置數據的存儲路徑為/data/ls-datapath.data: /data/ls-data# 設置管道配置文件路徑為/etc/logstash/conf.dpath.config: /etc/logstash/conf.d# 設置日誌文件的存儲路徑為/log/ls-logpath.logs: /log/ls-log/<code>
3.2.6、啟動logstash

啟動

<code>systemctl start logstash/<code>

查看

<code>systemctl status logstash/<code>

設置開機啟動

<code>systemctl enable logstash/<code>
3.2.7、測試logstash

--config.test_and_exit表示,檢查測試創建的logstash.conf配置文件,是否有問題,如果沒有問題,執行之後,顯示Configuration OK 證明配置成功!

<code>/usr/share/logstash/bin/logstash  -f /etc/logstash/conf.d/logstash.conf --config.test_and_exit/<code>

**如果報錯:WARNING: Could not find logstash.yml which is typically located in $LS_HOME/config or /etc/logstash. You can specify the path using –path.settings. **

解決辦法:

<code>cd /usr/share/logstashln -s /etc/logstash ./config/<code>
3.2.8、logstash指定配置進行運行

指定logstash.conf配置文件,以後臺的方式運用,執行這段命令之後,需要回車一下

<code>nohup /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/logstash.conf &/<code>

檢查logstash是否啟動

<code>ps -ef|grep logstash/<code>

顯示如下信息,說明啟動了


手把手教你,在CentOS上安裝ELK,進行服務器日誌收集

3.3、kibana安裝

3.3.1、安裝kibana
<code>rpm -ivh kibana-6.1.0-x86_64.rpm/<code>

搜索rpm包

<code>rpm -ql kibana/<code>

默認是裝在/usr/share/kibana/下。

3.3.2、修改kibana.yml

修改kibana的配置文件

<code>vim /etc/kibana/kibana.yml/<code>

內容如下:

<code>#kibana頁面映射在5601端口server.port: 5601#允許所有ip訪問5601端口server.host: "0.0.0.0"#elasticsearch所在的ip及監聽的地址elasticsearch.url: "http://localhost:9200"/<code>
3.3.3、啟動kibana

啟動

<code>systemctl start kibana/<code>

查看狀態

<code>systemctl status kibana/<code>

設置開機啟動

<code>systemctl enable kibana/<code>

3.4、配置nginx 訪問

3.4.1、安裝nginx和http用戶認證工具
<code>yum -y install epel-releaseyum -y install nginx httpd-tools/<code> 
3.4.2、修改nginx配置
<code>cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bakvim /etc/nginx/nginx.conf/<code>

將location配置部分,註釋掉

手把手教你,在CentOS上安裝ELK,進行服務器日誌收集

創建kibana.conf文件

<code>vim /etc/nginx/conf.d/kibana.conf/<code>

內容如下:

<code>server {    listen 8000; #修改端口為8000    server_name kibana;    #auth_basic "Restricted Access";    #auth_basic_user_file /etc/nginx/kibana-user;    location / {        proxy_pass http://127.0.0.1:5601; #代理轉發到kibana        proxy_http_version 1.1;        proxy_set_header Upgrade $http_upgrade;        proxy_set_header Connection 'upgrade';        proxy_set_header Host $host;        proxy_cache_bypass $http_upgrade;    }}/<code>

重新加載配置文件

<code>systemctl reload nginx/<code>

到這一步,elk基本配置完了,輸入如下命令,啟動服務

<code># 啟動ELK和nginxsystemctl restart elasticsearch logstash kibana nginx#查看ELK和nginx啟動狀態systemctl status elasticsearch logstash kibana nginx/<code>

在瀏覽器輸入ip:8000, 就可以訪問了kibana

04、Linux節點服務器安裝配置filebeat

4.1、安裝filebeat

<code>yum localinstall -y filebeat-6.2.4-x86_64.rpm/<code>

4.2、啟動kibana

啟動

<code>systemctl start filebeat/<code>

查看狀態

<code>systemctl status filebeat/<code>

設置開機啟動

<code>systemctl enable filebeat/<code>

4.3、修改配置Filebeat

<code>vim /etc/filebeat/filebeat.yml/<code>
<code>#============= Filebeat prospectors ===============filebeat.prospectors:- input_type: log  enabled: true #更改為true以啟用此prospectors配置。  paths:  #支持配置多個文件收集目錄    #- /var/log/*.log    - /var/log/messages#==================== Outputs =====================#------------- Elasticsearch output ---------------#output.elasticsearch:  # Array of hosts to connect to.  #hosts: ["localhost:9200"]#---------------- Logstash output -----------------output.logstash:  # The Logstash hosts  hosts: ["localhost:5044"]/<code>

注意:註釋掉Elasticsearch output下面的部分,將Filebeat收集到的日誌輸出到 Logstash output

最後重啟服務

<code>systemctl restart filebeat/<code>

4.4、登錄kibana,創建索引,並且蒐集數據


手把手教你,在CentOS上安裝ELK,進行服務器日誌收集


手把手教你,在CentOS上安裝ELK,進行服務器日誌收集


手把手教你,在CentOS上安裝ELK,進行服務器日誌收集


ELK+ Filebeat的安裝,到此,就基本結束了,以上只是簡單的部署完了。

但是,還滿足不了需求,比如,一臺服務器,有多個日誌文件路徑,改怎麼配置,接下來,我們來分類創建索引!

05、Filebeat收集多個tomcat目錄下的日誌

5.1、修改filebeat.yml配置文件

<code>vim /etc/filebeat/filebeat.yml/<code>

配置多個paths收集路徑,並且使用fields標籤配置自定義標籤log_topics,以方便做索引判斷,如下:

<code>filebeat.prospectors:- type: log  enabled: true  paths:    - /usr/tomcat7-ysynet/logs/default/common_monitor.log    multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]{3}'  multiline.negate: true  multiline.match: after  fields:    log_topics: spd-ysynet- type: log  enabled: true  paths:    - /usr/tomcat7-ysynet-sync/logs/default/common_monitor.log  multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]{3}'  multiline.negate: true  multiline.match: after  fields:    log_topics: spd-ysynet-sync- type: log  enabled: true  paths:    - /usr/tomcat7-hscm/logs/default/common_monitor.log    multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]{3}'  multiline.negate: true  multiline.match: after  fields:    log_topics: spd-hscm- type: log  enabled: true  paths:    - /usr/tomcat7-hscm-sync/logs/default/common_monitor.log    multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]{3}'  multiline.negate: true  multiline.match: after    fields:    log_topics: spd-hscm-sync/<code>

filebeat安裝包所在服務器有tomcat7-ysynet、tomcat7-ysynet-sync、tomcat7-hscm、tomcat7-hscm-sync,4個tomcat,在fields下分別創建不同的log_topics,log_topics屬於標籤名,可以自定義,然後創建不同的值!

5.2、修改logstash.conf配置文件

接著,修改logstash中的配置文件,創建索引,將其輸出

<code>vim /etc/logstash/conf.d/logstash.conf/<code>

內容如下:

<code>input{    beats {        port => 5044        codec => plain {          charset => "UTF-8"        }    }}filter{    mutate{        remove_field => "beat.hostname"        remove_field => "beat.name"        remove_field => "@version"        remove_field => "source"        remove_field => "beat"        remove_field => "tags"        remove_field => "offset"        remove_field => "sort"    }}output{    if [fields][log_topics] == "spd-ysynet"  {        stdout { codec => rubydebug }        elasticsearch {            hosts => ["localhost:9200"]            index => "spd-ysynet-%{+YYYY.MM.dd}"        }    }    if [fields][log_topics] == "spd-ysynet-sync"  {        stdout { codec => rubydebug }        elasticsearch {            hosts => ["localhost:9200"]            index => "spd-ysynet-sync-%{+YYYY.MM.dd}"        }    }    if [fields][log_topics] == "spd-hscm"  {        stdout { codec => rubydebug }        elasticsearch {            hosts => ["localhost:9200"]            index => "spd-hscm-%{+YYYY.MM.dd}"        }    }    if [fields][log_topics] == "spd-hscm-sync"  {        stdout { codec => rubydebug }        elasticsearch {            hosts => ["localhost:9200"]            index => "spd-hscm-sync-%{+YYYY.MM.dd}"        }    }}/<code>

其中filter表示過濾的意思,在output中使用filebeat中配置的fields信息,方便創建不同的索引!

<code>#表示,輸出到控制檯stdout { codec => rubydebug }#elasticsearch表示,輸出到elasticsearch中,index表示創建索引的意思elasticsearch {   hosts => ["localhost:9200"]   index => "spd-hscm-sync-%{+YYYY.MM.dd}"}/<code>

5.3、測試修改的logstash.conf配置文件

輸入如下命令,檢查/etc/logstash/conf.d/logstash.conf文件,是否配置異常!

<code>/usr/share/logstash/bin/logstash  -f /etc/logstash/conf.d/logstash.conf --config.test_and_exit/<code>

輸入結果,顯示Configuration OK,就表示沒問題!

手把手教你,在CentOS上安裝ELK,進行服務器日誌收集

5.4、重啟相關服務

最後,重啟filebeat

<code>systemctl restart filebeat/<code>

關閉logstash服務

<code>systemctl stop logstash/<code>

以指定的配置文件,啟動logstash,輸入如下命令,回車就ok了,執行完之後也可以用ps -ef|grep logstash命令查詢logstash是否啟動成功!

<code>nohup /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/logstash.conf &/<code>

5.5、登錄kibana,創建索引

登錄kibana,以同樣的操作,頁面創建索引,查詢收集的日誌,以下是小編的測試服務器蒐集的信息


手把手教你,在CentOS上安裝ELK,進行服務器日誌收集


手把手教你,在CentOS上安裝ELK,進行服務器日誌收集


第3、4、5步驟,是篩選elasticsearch今天收集的日誌信息!


手把手教你,在CentOS上安裝ELK,進行服務器日誌收集


06、總結

整個安裝過程已經介紹完了,安裝比較簡單,複雜的地方就是配置了,尤其是logstash、kibana、nginx、filebeat,這幾個部分,看了網上很多的介紹,elk配置完之後,外網無法訪問kibana,使用nginx代理到kibana,頁面就出來了;同時,在配置filebeat多個路徑的時候,logstash也配置了輸出索引,但是就是沒有日誌出來,頁面檢查說Elasticsearch 沒有找到數據,最後才發現,一定要讓logstash指定/etc/logstash/conf.d/logstash.conf配置文件,進行啟動,那麼就有日誌出來了,整篇文章,可能有很多寫的不到位的地方,請大家多多包含,也可以直接給我們留言,以便修正!

07、參考

IBM - ELK 架構和 Filebeat 工作原理詳解


分享到:


相關文章: