搞懂ELK並不是一件特別難的事(ELK)

一寸HUI發表於2020-06-29

本篇文章主要介紹elk的一些框架組成,原理和實踐,採用的ELK本版為7.7.0版本

一、ELK介紹

1.1、ELK簡介

  ELK是Elasticsearch、Logstash、Kibana三大開源框架首字母大寫簡稱(但是後期出現的filebeat(beats中的一種)可以用來替代logstash的資料收集功能,比較輕量級)。市面上也被成為Elastic Stack。

  Filebeat是用於轉發和集中日誌資料的輕量級傳送工具。Filebeat監視您指定的日誌檔案或位置,收集日誌事件,並將它們轉發到Elasticsearch或 Logstash進行索引。Filebeat的工作方式如下:啟動Filebeat時,它將啟動一個或多個輸入,這些輸入將在為日誌資料指定的位置中查詢。對於Filebeat所找到的每個日誌,Filebeat都會啟動收集器。每個收集器都讀取單個日誌以獲取新內容,並將新日誌資料傳送到libbeat,libbeat將聚集事件,並將聚集的資料傳送到為Filebeat配置的輸出。

  Logstash是免費且開放的伺服器端資料處理管道,能夠從多個來源採集資料,轉換資料,然後將資料傳送到您最喜歡的“儲存庫”中。Logstash能夠動態地採集、轉換和傳輸資料,不受格式或複雜度的影響。利用Grok從非結構化資料中派生出結構,從IP地址解碼出地理座標,匿名化或排除敏感欄位,並簡化整體處理過程。

  Elasticsearch是Elastic Stack核心的分散式搜尋和分析引擎,是一個基於Lucene、分散式、通過Restful方式進行互動的近實時搜尋平臺框架。Elasticsearch為所有型別的資料提供近乎實時的搜尋和分析。無論您是結構化文字還是非結構化文字,數字資料或地理空間資料,Elasticsearch都能以支援快速搜尋的方式有效地對其進行儲存和索引。

  Kibana是一個針對Elasticsearch的開源分析及視覺化平臺,用來搜尋、檢視互動儲存在Elasticsearch索引中的資料。使用Kibana,可以通過各種圖表進行高階資料分析及展示。並且可以為 Logstash 和 ElasticSearch 提供的日誌分析友好的 Web 介面,可以彙總、分析和搜尋重要資料日誌。還可以讓海量資料更容易理解。它操作簡單,基於瀏覽器的使用者介面可以快速建立儀表板(dashboard)實時顯示Elasticsearch查詢動態

1.2、為什麼要使用ELK

  日誌主要包括系統日誌、應用程式日誌和安全日誌。系統運維和開發人員可以通過日誌瞭解伺服器軟硬體資訊、檢查配置過程中的錯誤及錯誤發生的原因。經常分析日誌可以瞭解伺服器的負荷,效能安全性,從而及時採取措施糾正錯誤。

  往往單臺機器的日誌我們使用grep、awk等工具就能基本實現簡單分析,但是當日志被分散的儲存不同的裝置上。如果你管理數十上百臺伺服器,你還在使用依次登入每臺機器的傳統方法查閱日誌。這樣是不是感覺很繁瑣和效率低下。當務之急我們使用集中化的日誌管理,例如:開源的syslog,將所有伺服器上的日誌收集彙總。集中化管理日誌後,日誌的統計和檢索又成為一件比較麻煩的事情,一般我們使用grep、awk和wc等Linux命令能實現檢索和統計,但是對於要求更高的查詢、排序和統計等要求和龐大的機器數量依然使用這樣的方法難免有點力不從心。

  一般大型系統是一個分散式部署的架構,不同的服務模組部署在不同的伺服器上,問題出現時,大部分情況需要根據問題暴露的關鍵資訊,定位到具體的伺服器和服務模組,構建一套集中式日誌系統,可以提高定位問題的效率。

1.3、完整日誌系統基本特徵

  • 收集:能夠採集多種來源的日誌資料
  • 傳輸:能夠穩定的把日誌資料解析過濾並傳輸到儲存系統
  • 儲存:儲存日誌資料
  • 分析:支援 UI 分析
  • 警告:能夠提供錯誤報告,監控機制


二、ELK架構分析

2.1、beats+elasticsearch+kibana模式

 

  如上圖所示,該ELK框架由beats(日誌分析我們通常使用filebeat)+elasticsearch+kibana構成,這個框架比較簡單,入門級的框架。其中filebeat也能通過module對日誌進行簡單的解析和索引。並檢視預建的Kibana儀表板。

 

該框架適合簡單的日誌資料,一般可以用來玩玩,生產環境建議接入logstash

2.2、beats+logstash+elasticsearch+kibana模式

該框架是在上面的框架的基礎上引入了logstash,引入logstash帶來的好處如下:

  • 通Logstash具有基於磁碟的自適應緩衝系統,該系統將吸收傳入的吞吐量,從而減輕背壓
  • 從其他資料來源(例如資料庫,S3或訊息傳遞佇列)中提取
  • 將資料傳送到多個目的地,例如S3,HDFS或寫入檔案
  • 使用條件資料流邏輯組成更復雜的處理管道

filebeat結合logstash帶來的優勢:

1、水平可擴充套件性,高可用性和可變負載處理:filebeat和logstash可以實現節點之間的負載均衡,多個logstash可以實現logstash的高可用

2、訊息永續性與至少一次交付保證:使用Filebeat或Winlogbeat進行日誌收集時,可以保證至少一次交付。從Filebeat或Winlogbeat到Logstash以及從Logstash到Elasticsearch的兩種通訊協議都是同步的,並且支援確認。Logstash持久佇列提供跨節點故障的保護。對於Logstash中的磁碟級彈性,確保磁碟冗餘非常重要。

3、具有身份驗證和有線加密的端到端安全傳輸:從Beats到Logstash以及從 Logstash到Elasticsearch的傳輸都可以使用加密方式傳遞 。與Elasticsearch進行通訊時,有很多安全選項,包括基本身份驗證,TLS,PKI,LDAP,AD和其他自定義領域

當然在該框架的基礎上還可以引入其他的輸入資料的方式:比如:TCP,UDP和HTTP協議是將資料輸入Logstash的常用方法(如下圖所示):

 

 

 

2.3、beats+快取/訊息佇列+logstash+elasticsearch+kibana模式

 

在如上的基礎上我們可以在beats和logstash中間新增一些元件redis、kafka、RabbitMQ等,新增中介軟體將會有如下好處:
第一,降低對日誌所在機器的影響,這些機器上一般都部署著反向代理或應用服務,本身負載就很重了,所以儘可能的在這些機器上少做事;
第二,如果有很多臺機器需要做日誌收集,那麼讓每臺機器都向Elasticsearch持續寫入資料,必然會對Elasticsearch造成壓力,因此需要對資料進行緩衝,同時,這樣的緩衝也可以一定程度的保護資料不丟失;
第三,將日誌資料的格式化與處理放到Indexer中統一做,可以在一處修改程式碼、部署,避免需要到多臺機器上去修改配置

三、ELK部署 

elk各個元件的網址可以在官網下載:https://www.elastic.co/cn/

或者在中文社群下載:https://elasticsearch.cn/download/

注:本次安裝都是採用壓縮包的方式安裝

3.1、filebeat的安裝介紹

3.1.1、原理

  Filebeat的工作方式如下:啟動Filebeat時,它將啟動一個或多個輸入,這些輸入將在為日誌資料指定的位置中查詢。對於Filebeat所找到的每個日誌,Filebeat都會啟動收集器。每個收集器都讀取單個日誌以獲取新內容,並將新日誌資料傳送到libbeat,libbeat將聚集事件,並將聚集的資料傳送到為Filebeat配置的輸出

  Filebeat結構:由兩個元件構成,分別是inputs(輸入)和harvesters(收集器),這些元件一起工作來跟蹤檔案並將事件資料傳送到您指定的輸出,harvester負責讀取單個檔案的內容。harvester逐行讀取每個檔案,並將內容傳送到輸出。為每個檔案啟動一個harvester。harvester負責開啟和關閉檔案,這意味著檔案描述符在harvester執行時保持開啟狀態。如果在收集檔案時刪除或重新命名檔案,Filebeat將繼續讀取該檔案。這樣做的副作用是,磁碟上的空間一直保留到harvester關閉。預設情況下,Filebeat保持檔案開啟,直到達到close_inactive

3.1.2、簡單安裝

本文采用壓縮包的方式安裝,linux版本,filebeat-7.7.0-linux-x86_64.tar.gz

curl-L-Ohttps://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.7.0-linux-x86_64.tar.gz
tar -xzvf filebeat-7.7.0-linux-x86_64.tar.gz

配置示例檔案:filebeat.reference.yml(包含所有未過時的配置項)
配置檔案:filebeat.yml
啟動命令:./filebeat -e

具體的原理、使用、例項見文一篇文章搞懂filebeat(ELK)

3.2、logstash的安裝介紹

3.2.1、基本原理

logstash分為三個步驟:inputs(必須的)→ filters(可選的)→ outputs(必須的),inputs生成時間,filters對其事件進行過濾和處理,outputs輸出到輸出端或者決定其儲存在哪些元件裡。inputs和outputs支援編碼和解碼

Logstash管道中的每個input階段都在自己的執行緒中執行。將寫事件輸入到記憶體(預設)或磁碟上的中心佇列。每個管道工作執行緒從該佇列中取出一批事件,通過配置的filter處理該批事件,然後通過output輸出到指定的元件儲存。管道處理資料量的大小和管道工作執行緒的數量是可配置的

3.2.2、簡單安裝

下載地址1:https://www.elastic.co/cn/downloads/logstash   

下載地址2:https://elasticsearch.cn/download/

這裡需要安裝jdk,我使用的是elasticsearch7.7.0自帶的jdk:

解壓即安裝:

tar -zxvf logstash-7.7.0.tar.gz

來個logstash版本的HelloWorld:

./bin/logstash -e 'input { stdin { } } output { stdout {} }'

具體的原理、使用、例項見文從0到1學會logstash的玩法(ELK)

3.3、elasticsearch的安裝介紹

3.3.1、基本介紹

  Elasticsearch(ES)是一個基於Lucene構建的開源、分散式、RESTful介面的全文搜尋引擎。Elasticsearch還是一個分散式文件資料庫,其中每個欄位均可被索引,而且每個欄位的資料均可被搜尋,ES能夠橫向擴充套件至數以百計的伺服器儲存以及處理PB級的資料。可以在極短的時間記憶體儲、搜尋和分析大量的資料。

  基本概念有:Cluster 叢集、Node節點、Index索引、Document文件、Shards & Replicas分片與副本等

elasticsearch的優勢:

  • 分散式:橫向擴充套件非常靈活
  • 全文檢索:基於lucene的強大的全文檢索能力;
  • 近實時搜尋和分析:資料進入ES,可達到近實時搜尋,還可進行聚合分析
  • 高可用:容錯機制,自動發現新的或失敗的節點,重組和重新平衡資料
  • 模式自由:ES的動態mapping機制可以自動檢測資料的結構和型別,建立索引並使資料可搜尋。
  • RESTful API:JSON + HTTP

3.3.2、linux系統引數設定

1、設定系統配置
ulimit #暫時修改,切換到該使用者es,ulimit -n 65535 
/etc/security/limits.conf #永久修改 es -  nofile  65535
ulimit -a #檢視當前使用者的資源限制

2、禁用sawpping
方式一:
swapoff -a #臨時禁用所有的swap檔案
vim /etc/fstab #註釋掉所有的swap相關的行,永久禁用

方式二:
cat /proc/sys/vm/swappiness #檢視該值
sysctl vm.swappiness=1 #臨時修改該值為1
vim /etc/sysctl.conf #修改檔案 永久生效
vm.swappiness = 1 #如果有該值,則修改該值,若沒有,則追加該選項,sysctl -p生效命令

方式三:
配置elasticsearch.yml檔案,新增如下配置:
bootstrap.memory_lock: true
GET _nodes?filter_path=**.mlockall  #檢查如上配置是否成功
注意:如果試圖分配比可用記憶體更多的記憶體,mlockall可能會導致JVM或shell會話退出!

3、配置檔案描述符
ulimit -n 65535  #臨時修改
vim /etc/security/limits.conf #永久修改
es         soft    nproc     65535
es         hard    nproc     65535

4、配置虛擬記憶體
sysctl -w vm.max_map_count=262144 #臨時修改該值
vim /etc/sysctl.conf #永久修改
vm.max_map_count=262144

5、配置執行緒數
ulimit -u 4096 #臨時修改
vim /etc/security/limits.conf #永久修改

3.3.3、elasticsearch安裝

elasticsearch是需要其他使用者啟動的,所以需要先建立一個新的使用者elk:

groupadd  elastic
useradd elk -d /data/hd05/elk -g elastic
echo '2edseoir@' | passwd elk --stdin

下載:https://elasticsearch.cn/download/ 

也可以去官網下載:wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.7.0-linux-x86_64.tar.gz

解壓:tar -zxvf elasticsearch-7.7.0-linux-x86_64.tar.gz
建立軟連結:ln –s elasticsearch-7.7.0  es

目錄介紹:

$ES_HOME:/data/hd05/elk/elasticsearch-7.7.0
bin: $ES_HOME/bin  #es啟動命令和外掛安裝命令
conf:$ES_HOME/conf #elasticsearch.yml配置檔案目錄
data:$ES_HOME/data  #對應的引數path.data,用於存放索引分片資料檔案
logs:$ES_HOME/logs  #對應的引數path.logs,用於存放日誌
jdk:$ES_HOME/jdk  #自帶支援該es版本的jdk
plugins: $ES_HOME/jplugins #外掛存放目錄
lib: $ES_HOME/lib #存放依賴包,比如java類庫
modules: $ES_HOME/modules #包含所有的es模組

配置自帶的java環境:

Vim ~/.bashrc
############往後面新增如下內容######################
export JAVA_HOME=/data/hd05/elk/es/jdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar\:/lib/tools.jar

jvm.options檔案說明:

配置java引數
一種是通過修改/data/hd05/elk/elasticsearch-7.7.0/config/jvm.options檔案修改jvm引數,一個使用過一個變數ES_JAVA_OPTS來宣告jvm引數
/data/hd05/elk/elasticsearch-7.7.0/config/jvm.options介紹:
8:-Xmx2g  #表示只適合java8
8-:-Xmx2g  #表示適合高於java8的版本
8-9:-Xmx2g #表示適合java8,和java9
其他配置,都是jvm的相關引數,如果要想明白,得去看java虛擬機器

通過變數ES_JAVA_OPTS來宣告jvm引數:
例如:export ES_JAVA_OPTS="$ES_JAVA_OPTS -Djava.io.tmpdir=/path/to/temp/dir"
./bin/elasticsearch

配置config/jvm.options

[elk@lgh config]$ cat  jvm.options  | egrep -v '^$|#'                 
-Xms2g
-Xmx2g
8-13:-XX:+UseConcMarkSweepGC
8-13:-XX:CMSInitiatingOccupancyFraction=75
8-13:-XX:+UseCMSInitiatingOccupancyOnly
14-:-XX:+UseG1GC
14-:-XX:G1ReservePercent=25
14-:-XX:InitiatingHeapOccupancyPercent=30
-Djava.io.tmpdir=${ES_TMPDIR}
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=data
-XX:ErrorFile=logs/hs_err_pid%p.log
8:-XX:+PrintGCDetails
8:-XX:+PrintGCDateStamps
8:-XX:+PrintTenuringDistribution
8:-XX:+PrintGCApplicationStoppedTime
8:-Xloggc:logs/gc.log
8:-XX:+UseGCLogFileRotation
8:-XX:NumberOfGCLogFiles=32
8:-XX:GCLogFileSize=64m
9-:-Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=32,filesize=64m

配置加密通訊證照

生成證照:

  • 方法一:
./bin/elasticsearch-certutil ca -out config/elastic-certificates.p12 -pass "password"

檢視config目錄,有elastic-certificates.p12檔案生成

 

 

 

  • 方法二: 
./bin/elasticsearch-certutil ca  #建立叢集認證機構,需要互動輸入密碼
./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12  #為節點頒發證照,與上面密碼一樣
執行./bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password 並輸入第一步輸入的密碼 
執行./bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password 並輸入第一步輸入的密碼 
將生成的elastic-certificates.p12、elastic-stack-ca.p12檔案移動到config目錄下

配置config/elasticsearch.yml

[elk@lgh config]$ cat  elasticsearch.yml  | egrep -v '^$|#'
cluster.name: my_cluster
node.name: lgh01
node.data: true
node.master: true
path.data: /data/hd05/elk/elasticsearch-7.7.0/data
path.logs: /data/hd05/elk/elasticsearch-7.7.0/logs
network.host: 192.168.110.130
http.port: 9200
transport.tcp.port: 9300
discovery.seed_hosts: ["192.168.110.130","192.168.110.131","192.168.110.132","192.168.110.133"]
cluster.initial_master_nodes: ["lgh01","lgh02","lgh03"]
cluster.routing.allocation.cluster_concurrent_rebalance: 32
cluster.routing.allocation.node_concurrent_recoveries: 32
cluster.routing.allocation.node_initial_primaries_recoveries: 32
http.cors.enabled: true
http.cors.allow-origin: '*'

#下面的是配置x-pack和tsl/ssl加密通訊的 xpack.security.enabled: true xpack.license.self_generated.type: basic xpack.security.transport.ssl.enabled: true xpack.security.transport.ssl.verification_mode: certificate xpack.security.transport.ssl.keystore.path: elastic-certificates.p12 xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
bootstrap.memory_lock:
false #centos6需要配置 bootstrap.system_call_filter: false #centos6需要配置

然後通過scp到其他的節點,修改上面的node.name和node.master引數,然後要刪除data目標,不然會存在報錯

然後使用./bin/elasticsearch -d 後臺啟動elasticsearch,去掉-d則是前端啟動elasticsearch

然後./bin/elasticsearch-setup-passwords interactive 配置預設使用者的密碼:(有如下的互動),可以使用auto自動生成。

[elk@lgh elasticsearch-7.7.0]$ ./bin/elasticsearch-setup-passwords interactive
Enter password for the elasticsearch keystore : 
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]y


Enter password for [elastic]: 
Reenter password for [elastic]: 
Enter password for [apm_system]: 
Reenter password for [apm_system]: 
Enter password for [kibana]: 
Reenter password for [kibana]: 
Enter password for [logstash_system]: 
Reenter password for [logstash_system]: 
Enter password for [beats_system]: 
Reenter password for [beats_system]: 
Enter password for [remote_monitoring_user]: 
Reenter password for [remote_monitoring_user]: 
1qaz@WSXChanged password for user [apm_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]

然後可以登入http://192.168.110.130:9200/ 需要輸入密碼,輸入elastic/passwd即可登入

 

 

 

3.3.4、head外掛安裝

https://github.com/mobz/elasticsearch-head   #head官網

https://nodejs.org/zh-cn/download/  #nodejs下載

官方說明,elasticsearch7有三種方式使用head外掛,這裡我只試過兩種:

第一種:使用谷歌瀏覽器head外掛,這個直接在谷歌瀏覽器上面安裝外掛就可以使用了

第二種:使用head服務(把head當做一個服務來使用),安裝如下

#Running with built in server
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install
npm run start
open http://localhost:9100/

如果在如上的安裝過程中報錯,可以嘗試下這個命令再繼續安裝npm install phantomjs-prebuilt@2.1.16 --ignore-scripts

3.4、kibana的安裝介紹

下載地址:https://elasticsearch.cn/download/

也可以去官網下載

解壓後修改kibana.yml檔案

[elk@lgh config]$ cat kibana.yml  | egrep -v "^$|#"
server.port: 5601
server.host: "0.0.0.0"
server.name: "my-kibana"
elasticsearch.hosts: ["http://192.168.110.130:9200","http://192.168.110.131:9200","http://192.168.110.132:9200"]
elasticsearch.preserveHost: true
kibana.index: ".kibana"
elasticsearch.username: "elastic"
elasticsearch.password: "password"   #或者使用keystore的儲存的密碼"${ES_PWD}"

./bin/kibana  啟動

訪問網址:http://192.168.110.130:5601/  並使用elastic/password 登入

四、例項分析

一篇文章搞懂filebeat(ELK) 該文章中有beats+elasticsearch+kibana的例項

從0到1學會logstash的玩法(ELK)  該文章中有beats+logstash+elasticsearch+kibana例項

現在我們弄一個beats+快取/訊息佇列+logstash+elasticsearch+kibana的例項:

中間元件我們使用kafka,我們看下filebeat把kafka作為output的官網:

https://www.elastic.co/guide/en/beats/filebeat/7.7/kafka-output.html

 

 這裡要注意kafka的版本,我試過兩個都是極端的版本,坑了自己一把。假如你已經有kafka叢集了,我這裡安裝的是一個單機版本(1.1.1):

資料集我們採用apache的日誌格式,下載地址:https://download.elastic.co/demos/logstash/gettingstarted/logstash-tutorial.log.gz

日誌格式如下:

[elk@lgh ~]$ tail -3 logstash-tutorial.log 
86.1.76.62 - - [04/Jan/2015:05:30:37 +0000] "GET /projects/xdotool/ HTTP/1.1" 200 12292 "http://www.haskell.org/haskellwiki/Xmonad/Frequently_asked_questions" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20140205 Firefox/24.0 Iceweasel/24.3.0"
86.1.76.62 - - [04/Jan/2015:05:30:37 +0000] "GET /reset.css HTTP/1.1" 200 1015 "http://www.semicomplete.com/projects/xdotool/" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20140205 Firefox/24.0 Iceweasel/24.3.0"
86.1.76.62 - - [04/Jan/2015:05:30:37 +0000] "GET /style2.css HTTP/1.1" 200 4877 "http://www.semicomplete.com/projects/xdotool/" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20140205 Firefox/24.0 Iceweasel/24.3.0"

首先我們配置filebeat的配置檔案filebeat.yml

#=========================== Filebeat inputs =============================

filebeat.inputs:

# Each - is an input. Most options can be set at the input level, so
# you can use different inputs for various configurations.
# Below are the input specific configurations.

- type: log

  # Change to true to enable this input configuration.
  enabled: true

  # Paths that should be crawled and fetched. Glob based paths.
  paths:
    - /data/elk/logstash-tutorial.log  #這裡使用的是apache的日誌格式
    #- c:\programdata\elasticsearch\logs\*

  # Exclude lines. A list of regular expressions to match. It drops the lines that are
  # matching any regular expression from the list.
  #exclude_lines: ['^DBG']

  # Include lines. A list of regular expressions to match. It exports the lines that are
  # matching any regular expression from the list.
  #include_lines: ['^ERR', '^WARN']

  # Exclude files. A list of regular expressions to match. Filebeat drops the files that
  # are matching any regular expression from the list. By default, no files are dropped.
  #exclude_files: ['.gz$']

  # Optional additional fields. These fields can be freely picked
  # to add additional information to the crawled log files for filtering
  #fields:
  #  level: debug
  #  review: 1

  ### Multiline options

  # Multiline can be used for log messages spanning multiple lines. This is common
  # for Java Stack Traces or C-Line Continuation

  # The regexp Pattern that has to be matched. The example pattern matches all lines starting with [
  #multiline.pattern: ^\[

  # Defines if the pattern set under pattern should be negated or not. Default is false.
  #multiline.negate: false

  # Match can be set to "after" or "before". It is used to define if lines should be append to a pattern
  # that was (not) matched before or after or as long as a pattern is not matched based on negate.
  # Note: After is the equivalent to previous and before is the equivalent to to next in Logstash
  #multiline.match: after
#================================ Outputs =====================================
output.kafka:
  hosts: ["192.168.110.130:9092"]   #配置kafka的broker
  topic: 'filebeat_test'   #配置topic 名字
  partition.round_robin:
    reachable_only: false
  required_acks: 1
  compression: gzip
  max_message_bytes: 1000000

然後使用命令後臺啟動:

cd filebeat-7.7.0-linux-x86_64 && nohup ./filebeat -e &

接下來我們配置logstash的配置檔案

cd logstash-7.7.0/ && mkidr conf.d
cd conf.d
vim apache.conf 
################apache.conf檔案中填入如下內容##############################
input {
        kafka{
                bootstrap_servers => "192.168.110.130:9092"
                topics => ["filebeat_test"]
                group_id => "test123"
                auto_offset_reset => "earliest"
        }
    }
filter {
json
        {
                source => "message"
        }
        grok {
        match => { "message" => "%{COMBINEDAPACHELOG}"}
        remove_field => "message"
    }
}
output {
    stdout { codec => rubydebug }
    elasticsearch {
                    hosts => ["192.168.110.130:9200","192.168.110.131:9200","10.18.126.224:9200","192.168.110.132:9200"]
                    index => "test_kakfa"
                    user => "elastic"
                    password => "${ES_PWD}"
                }
}

然後後臺啟動logstash命令

cd logstash-7.7.0/ && nohup ./bin/logstash -f conf.d/apache.conf &

然後我們檢視elasticsearch叢集檢視該索引

 

 

 接下來我們登入到kibana檢視該索引的分析

 

 

 參考:filebeat,logstash,elasticsearch,kibana官網

相關文章