ELk架構解析和部署

目錄java

1、什麼是elk. 1node

2、ELK 經常使用架構及使用場景介紹... 2linux

一、最簡單架構... 2git

二、以Logstash 做爲日誌蒐集器... 2github

三、以Beats 做爲日誌蒐集器... 3正則表達式

四、引入消息隊列模式... 3redis

3、基於 Filebeat+ELK架構的配置部署詳解... 4docker

一、安裝jdk. 5express

二、安裝elasticsearch. 5vim

三、安裝kibana. 7

四、安裝logstash. 8

五、安裝filebeats. 9

1、什麼是elk

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 進行集中式存儲和分析。

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

一、最簡單架構

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

 

這種架構很是簡單,使用場景也有限。初學者能夠搭建這個架構,瞭解 ELK 如何工做

二、以Logstash 做爲日誌蒐集器

 

這種結構由於須要在各個服務器上部署 Logstash,而它比較消耗 CPU 和內存資源,因此比較適合計算資源豐富的服務器,不然容易形成服務器性能降低,甚至可能致使沒法正常工做。

三、以Beats 做爲日誌蒐集器

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

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

 

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

 

 

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

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

四、引入消息隊列模式

 

Beats 還不支持輸出到消息隊列新版本除外:5.0版本及以上),因此在消息隊列先後兩端只能是 Logstash 實例。logstash從各個數據源蒐集數據,不通過任何處理轉換僅轉發出到消息隊列(kafka、redis、rabbitMQ等),後logstash從消息隊列取數據進行轉換分析過濾,輸出到elasticsearch,並在kibana進行圖形化展現

 

 

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

工做流程:Filebeat採集—>  logstash轉發到kafka—>  logstash處理從kafka緩存的數據進行分析—>  輸出到es—>  顯示在kibana

 

3、基於 Filebeat+ELK架構的配置部署詳解

 

 

 

 

一、Filebeat負責收集應用寫到磁盤上的日誌,並將日誌發送給logstash

二、logstash處理來自filebeat的日誌,並將處理後的日誌保存elasticsearch索引庫。

三、elasticsearch存儲來自logstash的日誌。

四、kibana從elasticsearch搜索日誌,並展現到頁面。

 

 

系統環境及軟件:

centos7.5,java8  

Filebeat,logstash,elasticsearch,kibana(能夠去官網下載,這裏用的版本是6.8.1)

 

一、安裝jdk

 

至少jdk 7以上。通常推薦使用 Oracle JDK 1.8 或者 OpenJDK 1.8。咱們這裏使用 Oracle JDK 1.8。

mkdir /usr/java
tar xf jdk-8u171-linux-x64.tar.gz
mv jdk1.8.0_171/ /usr/java/jdk1.8

#添加java環境變量

echo 'export JAVA_HOME=/usr/java/jdk1.8' >>/etc/profile
echo 'export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar' >>/etc/profile
echo 'export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH' >>/etc/profile
source /etc/profile
java -version

二、安裝elasticsearch

2.1建立用戶

出於安全考慮,elasticsearch默認不容許以root帳號運行。

groupadd es
useradd -g es es
echo "123456"|passwd --stdin es

 

 

2.2 調整系統參數

 

echo "vm.max_map_count = 655360" >> /etc/sysctl.conf
sysctl -p

vim
/etc/security/limits.conf ==》新增以下內容 * soft nofile 65536 * hard nofile 65536 * soft nproc 65536 * hard nproc 65536

 

2.3 安裝配置es

[root@linux01 ~]# tar xf elasticsearch-6.8.1.tar.gz

[root@linux01 ~]# mv elasticsearch-6.8.1 /usr/local/elasticsearch

[root@linux01 ~]# cd /usr/local/elasticsearch/config/

[root@linux01 config]# cp elasticsearch.yml elasticsearch.yml.bak

[root@linux01 config]# > elasticsearch.yml

[root@linux01 config]# vim elasticsearch.yml  #配置文件修改爲以下

cluster.name: "elasticsearch_petition"

node.name: node-01

transport.host: 0.0.0.0

transport.publish_host: 0.0.0.0

transport.bind_host: 0.0.0.0

network.host: 0.0.0.0

http.port: 9200

path.data: /usr/local/elasticsearch/data

path.logs: /usr/local/elasticsearch/logs

http.cors.enabled: true

http.cors.allow-origin: "*"

 

[root@linux01 config]# mkdir /usr/local/elasticsearch/data

[root@linux01 config]# mkdir /usr/local/elasticsearch/logs

[root@linux01 ~]# chown -R es.es /usr/local/elasticsearch/

 

2.4啓動

su - es

/usr/local/elasticsearch/bin/elasticsearch &

#啓動比較慢,稍等幾分鐘

 

2.5 驗證 elasticsearch

[es@linux01 ~]$ curl 127.0.0.1:9200   #出來如下內容,安裝成功

{

  "name" : "node-01",

  "cluster_name" : "elasticsearch_petition",

  "cluster_uuid" : "jPmcOZu5Rfi5JOq1wsWUSQ",

  "version" : {

    "number" : "6.8.1",

    "build_flavor" : "default",

    "build_type" : "tar",

    "build_hash" : "1fad4e1",

    "build_date" : "2019-06-18T13:16:52.517138Z",

    "build_snapshot" : false,

    "lucene_version" : "7.7.0",

    "minimum_wire_compatibility_version" : "5.6.0",

    "minimum_index_compatibility_version" : "5.0.0"

  },

  "tagline" : "You Know, for Search"

}

 

 

2.6 安裝head插件(非必須安裝)

elasticsearch-head是Elasticsearch的圖形化界面,方便用戶對數據進行增刪改查,基於REST的進行數據交互。

head插件維護地址:https://github.com/mobz/elasticsearch-head

直接使用docker啓動head

docker run -p 9100:9100 mobz/elasticsearch-head:5

訪問:

 

三、安裝kibana

3.1解壓

[root@linux01 ~]# tar xf kibana-6.8.1-linux-x86_64.tar.gz
[root@linux01 ~]# mv kibana-6.8.1-linux-x86_64 /usr/local/kibana

 

3.2修改配置文件

[root@linux01 ~]# grep '^[a-Z]' /usr/local/kibana/config/kibana.yml

server.port: 5601

server.host: "0.0.0.0"  #監聽地址

elasticsearch.hosts: ["http://192.168.100.163:9200"]   #es地址

kibana.index: ".kibana"  #在es中添加.kibana索引

i18n.locale: "zh-CN"  #設置爲中文

3.3 後臺運行 Kibana:

[root@linux01 ~]# /usr/local/kibana/bin/kibana &

 

3.4 瀏覽器訪問:http://ip:5601 

 

四、安裝logstash

4.1解壓文件 

tar xf logstash-6.8.1.tar.gz

mv logstash-6.8.1 /usr/local/logstash

 

4.2新增測試配置文件

[root@linux01 ~]# cat /usr/local/logstash/config/logstash-sample.conf

input {

beats {

port => "5044"}

}

output {

elasticsearch {hosts => "192.168.100.163:9200" } #elasticsearch服務地址

stdout { codec=> rubydebug }

}

 

4.3 啓動

[root@linux01 config]# /usr/local/logstash/bin/logstash -f /usr/local/logstash/config/logstash-sample.conf

 

五、安裝filebeats

5.1解壓

[root@linux01 ~]# tar xf filebeat-6.8.1-linux-x86_64.tar.gz

[root@linux01 ~]# mv filebeat-6.8.1-linux-x86_64 /usr/local/filebeat

 

5.2修改配置文件 

cd /usr/local/filebeat/

vim 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 #注意是否爲true # Paths that should be crawled and fetched. Glob based paths. paths: - /var/log/messages #收集日誌路徑 #- 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'] #-------------------------- Elasticsearch output ------------------------------ # Elasticsearch這部分所有註釋掉 #output.elasticsearch: # Array of hosts to connect to. #hosts: ["localhost:9200"] #----------------------------- Logstash output -------------------------------- output.logstash: #去掉註釋 # The Logstash hosts hosts: ["192.168.100.163:5044"] #logstash地址

 

filebeat.yml 配置的主要有兩個部分,一個是日誌收集,一個是日誌輸出的配置。

配置解釋:

type: log 讀取日誌文件的每一行(默認)
enabled: true 該配置是否生效,若是改成false,將不收集該配置的日誌
paths: 要抓取日誌的全路徑
fields: 自定義屬性,能夠定義多個,繼續往下排就行
multiline.pattern: 正則表達式
multiline.negate: true 或 false;默認是false,匹配pattern的行合併到上一行;true,不匹配pattern的行合併到上一行
multiline.match: after 或 before,合併到上一行的末尾或開頭

exclude_lines: ['DEBUG'] 該屬性配置不收集DEBUG級別的日誌,若是配置多行 這個配置也要放在多行的後面

192.168.100.163:5044 爲輸出到Logstash的地址和端口。

 

5.3 啓動服務

./filebeat -e -c filebeat.yml

5.4 添加索引到kibana

 

 

 

 

 

 

至此ELK+Filebeat已所有連通

相關文章
相關標籤/搜索