目錄
一、什么是elk. 1
二、ELK 常用架構及使用場景介紹... 2
1、最簡單架構... 2
2、以Logstash 作為日志搜集器... 2
3、以Beats 作為日志搜集器... 3
4、引入消息隊列模式... 3
三、基於 Filebeat+ELK架構的配置部署詳解... 4
1、安裝jdk. 5
2、安裝elasticsearch. 5
3、安裝kibana. 7
4、安裝logstash. 8
5、安裝filebeats. 9
一、什么是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 進行集中式存儲和分析。
二、ELK 常用架構及使用場景介紹
1、最簡單架構
在這種架構中,只有一個 Logstash、Elasticsearch 和 Kibana 實例。Logstash 通過輸入插件從多種數據源(比如日志文件、標准輸入 Stdin 等)獲取數據,再經過濾插件加工數據,然后經 Elasticsearch 輸出插件輸出到 Elasticsearch,通過 Kibana 展示。

這種架構非常簡單,使用場景也有限。初學者可以搭建這個架構,了解 ELK 如何工作
2、以Logstash 作為日志搜集器

這種結構因為需要在各個服務器上部署 Logstash,而它比較消耗 CPU 和內存資源,所以比較適合計算資源豐富的服務器,否則容易造成服務器性能下降,甚至可能導致無法正常工作。
3、以Beats 作為日志搜集器
這種架構引入 Beats 作為日志搜集器。目前 Beats 包括四種:
- Packetbeat(搜集網絡流量數據);
- Topbeat(搜集系統、進程和文件系統級別的 CPU 和內存使用情況等數據);
- Filebeat(搜集文件數據);
- Winlogbeat(搜集 Windows 事件日志數據)。
Beats 將搜集到的數據發送到 Logstash,經 Logstash 解析、過濾后,將其發送到 Elasticsearch 存儲,並由 Kibana 呈現給用戶。

這種架構解決了 Logstash 在各服務器節點上占用系統資源高的問題。相比 Logstash,Beats 所占系統的 CPU 和內存幾乎可以忽略不計。另外,Beats 和 Logstash 之間支持 SSL/TLS 加密傳輸,客戶端和服務器雙向認證,保證了通信安全。
因此這種架構適合對數據安全性要求較高,同時各服務器性能比較敏感的場景。
4、引入消息隊列模式
Beats 還不支持輸出到消息隊列(新版本除外:5.0版本及以上),所以在消息隊列前后兩端只能是 Logstash 實例。logstash從各個數據源搜集數據,不經過任何處理轉換僅轉發出到消息隊列(kafka、redis、rabbitMQ等),后logstash從消息隊列取數據進行轉換分析過濾,輸出到elasticsearch,並在kibana進行圖形化展示

模式特點:這種架構適合於日志規模比較龐大的情況。但由於 Logstash 日志解析節點和 Elasticsearch 的負荷比較重,可將他們配置為集群模式,以分擔負荷。引入消息隊列,均衡了網絡傳輸,從而降低了網絡閉塞,尤其是丟失數據的可能性,但依然存在 Logstash 占用系統資源過多的問題
工作流程:Filebeat采集—> logstash轉發到kafka—> logstash處理從kafka緩存的數據進行分析—> 輸出到es—> 顯示在kibana
三、基於 Filebeat+ELK架構的配置部署詳解

1、Filebeat負責收集應用寫到磁盤上的日志,並將日志發送給logstash
2、logstash處理來自filebeat的日志,並將處理后的日志保存elasticsearch索引庫。
3、elasticsearch存儲來自logstash的日志。
4、kibana從elasticsearch搜索日志,並展示到頁面。
系統環境及軟件:
centos7.5,java8
Filebeat,logstash,elasticsearch,kibana(可以去官網下載,這里用的版本是6.8.1)
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
2、安裝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
訪問:

3、安裝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
4、安裝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
5、安裝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已全部連通
