大家好,我是不才陳某~
在排查線上異常的過程中,查詢?nèi)罩究偸潜夭豢扇钡囊徊糠帧,F(xiàn)今大多采用的微服務(wù)架構(gòu),日志被分散在不同的機(jī)器上,使得日志的查詢變得異常困難。
工欲善其事,必先利其器。如果此時(shí)有一個(gè)統(tǒng)一的實(shí)時(shí)日志分析平臺(tái),那可謂是雪中送碳,必定能夠提高我們排查線上問題的效率。本文帶您了解一下開源的實(shí)時(shí)日志分析平臺(tái) ELK 的搭建及使用。
ELK 簡介
ELK 是一個(gè)開源的實(shí)時(shí)日志分析平臺(tái),它主要由 Elasticsearch、Logstash 和 Kiabana 三部分組成。
Logstash
Logstash 主要用于收集服務(wù)器日志,它是一個(gè)開源數(shù)據(jù)收集引擎,具有實(shí)時(shí)管道功能。Logstash 可以動(dòng)態(tài)地將來自不同數(shù)據(jù)源的數(shù)據(jù)統(tǒng)一起來,并將數(shù)據(jù)標(biāo)準(zhǔn)化到您所選擇的目的地。
Logstash 收集數(shù)據(jù)的過程主要分為以下三個(gè)部分:
- 輸入:數(shù)據(jù)(包含但不限于日志)往往都是以不同的形式、格式存儲(chǔ)在不同的系統(tǒng)中,而 Logstash 支持從多種數(shù)據(jù)源中收集數(shù)據(jù)(File、Syslog、MySQL、消息中間件等等)。
- 過濾器:實(shí)時(shí)解析和轉(zhuǎn)換數(shù)據(jù),識(shí)別已命名的字段以構(gòu)建結(jié)構(gòu),并將它們轉(zhuǎn)換成通用格式。
- 輸出:Elasticsearch 并非存儲(chǔ)的唯一選擇,Logstash 提供很多輸出選擇。
Elasticsearch
Elasticsearch (ES)是一個(gè)分布式的 Restful 風(fēng)格的搜索和數(shù)據(jù)分析引擎,它具有以下特點(diǎn):
- 查詢:允許執(zhí)行和合并多種類型的搜索 — 結(jié)構(gòu)化、非結(jié)構(gòu)化、地理位置、度量指標(biāo) — 搜索方式隨心而變。
- 分析:Elasticsearch 聚合讓您能夠從大處著眼,探索數(shù)據(jù)的趨勢和模式。
- 速度:很快,可以做到億萬級(jí)的數(shù)據(jù),毫秒級(jí)返回。
- 可擴(kuò)展性:可以在筆記本電腦上運(yùn)行,也可以在承載了 PB 級(jí)數(shù)據(jù)的成百上千臺(tái)服務(wù)器上運(yùn)行。
- 彈性:運(yùn)行在一個(gè)分布式的環(huán)境中,從設(shè)計(jì)之初就考慮到了這一點(diǎn)。
- 靈活性:具備多個(gè)案例場景。支持?jǐn)?shù)字、文本、地理位置、結(jié)構(gòu)化、非結(jié)構(gòu)化,所有的數(shù)據(jù)類型都?xì)g迎。
Kibana
Kibana 可以使海量數(shù)據(jù)通俗易懂。它很簡單,基于瀏覽器的界面便于您快速創(chuàng)建和分享動(dòng)態(tài)數(shù)據(jù)儀表板來追蹤 Elasticsearch 的實(shí)時(shí)數(shù)據(jù)變化。其搭建過程也十分簡單,您可以分分鐘完成 Kibana 的安裝并開始探索 Elasticsearch 的索引數(shù)據(jù) — 沒有代碼、不需要額外的基礎(chǔ)設(shè)施。另外,歡迎關(guān)注公眾號(hào)碼猿技術(shù)專欄,后臺(tái)回復(fù)“1111”,阿里內(nèi)部JAVA性能調(diào)優(yōu)手冊!
對(duì)于以上三個(gè)組件在 《ELK 協(xié)議棧介紹及體系結(jié)構(gòu)》 一文中有具體介紹,這里不再贅述。
在 ELK 中,三大組件的大概工作流程如下圖所示,由 Logstash 從各個(gè)服務(wù)中采集日志并存放至 Elasticsearch 中,然后再由 Kiabana 從 Elasticsearch 中查詢?nèi)罩静⒄故窘o終端用戶。
圖 1. ELK 的大致工作流程
ELK 實(shí)現(xiàn)方案
通常情況下我們的服務(wù)都部署在不同的服務(wù)器上,那么如何從多臺(tái)服務(wù)器上收集日志信息就是一個(gè)關(guān)鍵點(diǎn)了。本篇文章中提供的解決方案如下圖所示:
圖 2. 本文提供的 ELK 實(shí)現(xiàn)方案
如上圖所示,整個(gè) ELK 的運(yùn)行流程如下:
- 在微服務(wù)(產(chǎn)生日志的服務(wù))上部署一個(gè) Logstash,作為 Shipper 角色,主要負(fù)責(zé)對(duì)所在機(jī)器上的服務(wù)產(chǎn)生的日志文件進(jìn)行數(shù)據(jù)采集,并將消息推送到 redis 消息隊(duì)列。
- 另用一臺(tái)服務(wù)器部署一個(gè) Indexer 角色的 Logstash,主要負(fù)責(zé)從 Redis 消息隊(duì)列中讀取數(shù)據(jù),并在 Logstash 管道中經(jīng)過 Filter 的解析和處理后輸出到 Elasticsearch 集群中存儲(chǔ)。
- Elasticsearch 主副節(jié)點(diǎn)之間數(shù)據(jù)同步。
- 單獨(dú)一臺(tái)服務(wù)器部署 Kibana 讀取 Elasticsearch 中的日志數(shù)據(jù)并展示在 Web 頁面。
通過這張圖,相信您已經(jīng)大致清楚了我們將要搭建的 ELK 平臺(tái)的工作流程,以及所需組件。下面就讓我們一起開始搭建起來吧。
ELK 平臺(tái)搭建
本節(jié)主要介紹搭建 ELK 日志平臺(tái),包括安裝 Indexer 角色的 Logstash,Elasticsearch 以及 Kibana 三個(gè)組件。完成本小節(jié),您需要做如下準(zhǔn)備:
- 一臺(tái) Ubuntu 機(jī)器或虛擬機(jī),作為入門教程,此處省略了 Elasticsearch 集群的搭建,且將 Logstash(Indexer)、Elasticsearch 以及 Kibana 安裝在同一機(jī)器上。
- 在 Ubuntu 上安裝 JDK,注意 Logstash 要求 JDK 在 1.7 版本以上。
- Logstash、Elasticsearch、Kibana 安裝包,您可以在 此頁面 下載。
安裝 Logstash
解壓壓縮包:
tar -xzvf logstash-7.3.0.tar.gz
顯示更多簡單用例測試,進(jìn)入到解壓目錄,并啟動(dòng)一個(gè)將控制臺(tái)輸入輸出到控制臺(tái)的管道。
cd logstash-7.3.0
elk@elk:~/elk/logstash-7.3.0$ bin/logstash -e 'input { stdin {} } output { { stdout {} } }'
顯示更多看到如下日志就意味著 Logstash 啟動(dòng)成功。
圖 3. Logstash 啟動(dòng)成功日志
在控制臺(tái)輸入 Hello Logstash ,看到如下效果代表 Logstash 安裝成功。
清單 1. 驗(yàn)證 Logstash 是否啟動(dòng)成功Hello Logstash
{
"@timestamp" => 2019-08-10T16:11:10.040Z,
"host" => "elk",
"@version" => "1",
"message" => "Hello Logstash"
}
安裝 Elasticsearch
解壓安裝包:
tar -xzvf elasticsearch-7.3.0-linux-x86_64.tar.gz
啟動(dòng) Elasticsearch:
cd elasticsearch-7.3.0/
bin/elasticsearch
在啟動(dòng) Elasticsearch 的過程中我遇到了兩個(gè)問題在這里列舉一下,方便大家排查。
問題一 :內(nèi)存過小,如果您的機(jī)器內(nèi)存小于 Elasticsearch 設(shè)置的值,就會(huì)報(bào)下圖所示的錯(cuò)誤。解決方案是,修改 elasticsearch-7.3.0/config/jvm.options 文件中的如下配置為適合自己機(jī)器的內(nèi)存大小,若修改后還是報(bào)這個(gè)錯(cuò)誤,可重新連接服務(wù)器再試一次。
圖 4. 內(nèi)存過小導(dǎo)致 Elasticsearch 啟動(dòng)報(bào)錯(cuò)
問題二 ,如果您是以 root 用戶啟動(dòng)的話,就會(huì)報(bào)下圖所示的錯(cuò)誤。解決方案自然就是添加一個(gè)新用戶啟動(dòng) Elasticsearch,至于添加新用戶的方法網(wǎng)上有很多,這里就不再贅述。
圖 5. Root 用戶啟動(dòng) Elasticsearch 報(bào)錯(cuò)
啟動(dòng)成功后,另起一個(gè)會(huì)話窗口執(zhí)行 curl http://localhost:9200 命令,如果出現(xiàn)如下結(jié)果,則代表 Elasticsearch 安裝成功。
清單 2. 檢查 Elasticsearch 是否啟動(dòng)成功
elk@elk:~$ curl http://localhost:9200
{
"name" : "elk",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "hqp4Aad0T2Gcd4QyiHASmA",
"version" : {
"number" : "7.3.0",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "de777fa",
"build_date" : "2019-07-24T18:30:11.767338Z",
"build_snapshot" : false,
"lucene_version" : "8.1.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
安裝 Kibana
解壓安裝包:
tar -xzvf kibana-7.3.0-linux-x86_64.tar.gz
修改配置文件 config/kibana.yml ,主要指定 Elasticsearch 的信息。
清單 3. Kibana 配置信息#Elasticsearch主機(jī)地址
elasticsearch.hosts: "http://ip:9200"
# 允許遠(yuǎn)程訪問
server.host: "0.0.0.0"
# Elasticsearch用戶名 這里其實(shí)就是我在服務(wù)器啟動(dòng)Elasticsearch的用戶名
elasticsearch.username: "es"
# Elasticsearch鑒權(quán)密碼 這里其實(shí)就是我在服務(wù)器啟動(dòng)Elasticsearch的密碼
elasticsearch.password: "es"
啟動(dòng) Kibana:
cd kibana-7.3.0-linux-x86_64/bin
./kibana
在瀏覽器中訪問 http://ip:5601 ,若出現(xiàn)以下界面,則表示 Kibana 安裝成功。
圖 6. Kibana 啟動(dòng)成功界面
圖片
ELK 日志平臺(tái)安裝完成后,下面我們就將通過具體的例子來看下如何使用 ELK,下文將分別介紹如何將 Spring Boot 日志和 Nginx 日志交由 ELK 分析。
在 Spring Boot 中使用 ELK
首先我們需要?jiǎng)?chuàng)建一個(gè) Spring Boot 的項(xiàng)目,之前我寫過一篇文章介紹 如何使用 AOP 來統(tǒng)一處理 Spring Boot 的 Web 日志 ,本文的 Spring Boot 項(xiàng)目就建立在這篇文章的基礎(chǔ)之上。
修改并部署 Spring Boot 項(xiàng)目
在項(xiàng)目 resources 目錄下創(chuàng)建 spring-logback.xml 配置文件。
清單 4. Spring Boot 項(xiàng)目 Logback 的配置
<?xml versinotallow="1.0" encoding="UTF-8"?>
<configuration debug="false">
<contextName>Logback For demo Mobile</contextName>
<property name="LOG_HOME" value="/log" />
<springProperty scope="context" name="AppName" source="spring.application.name"
defaultValue="localhost" />
...
<appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
...
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{25} ${appName} -%msg%n</pattern>
</encoder>
...
</appender>
...
</configuration>
以上內(nèi)容省略了很多內(nèi)容,您可以在源碼中獲取。在上面的配置中我們定義了一個(gè)名為 ROLLING_FILE 的 Appender 往日志文件中輸出指定格式的日志。而上面的 pattern 標(biāo)簽正是具體日志格式的配置,通過上面的配置,我們指定輸出了時(shí)間、線程、日志級(jí)別、logger(通常為日志打印所在類的全路徑)以及服務(wù)名稱等信息。
將項(xiàng)目打包,并部署到一臺(tái) Ubuntu 服務(wù)器上。
清單 5. 打包并部署 Spring Boot 項(xiàng)目
# 打包命令
mvn package -Dmaven.test.skip=true
# 部署命令
java -jar sb-elk-start-0.0.1-SNAPSHOT.jar
查看日志文件, logback 配置文件中我將日志存放在 /log/sb-log.log 文件中,執(zhí)行 more /log/sb-log.log 命令,出現(xiàn)以下結(jié)果表示部署成功。
圖 7. Spring Boot 日志文件
配置 Shipper 角色 Logstash
Spring Boot 項(xiàng)目部署成功之后,我們還需要在當(dāng)前部署的機(jī)器上安裝并配置 Shipper 角色的 Logstash。Logstash 的安裝過程在 ELK 平臺(tái)搭建小節(jié)中已有提到,這里不再贅述。
安裝完成后,我們需要編寫 Logstash 的配置文件,以支持從日志文件中收集日志并輸出到 Redis 消息管道中,Shipper 的配置如下所示。
清單 6. Shipper 角色的 Logstash 的配置
input {
file {
path => [
# 這里填寫需要監(jiān)控的文件
"/log/sb-log.log"
]
}
}
output {
# 輸出到redis
redis {
host => "10.140.45.190" # redis主機(jī)地址
port => 6379 # redis端口號(hào)
db => 8 # redis數(shù)據(jù)庫編號(hào)
data_type => "channel" # 使用發(fā)布/訂閱模式
key => "logstash_list_0" # 發(fā)布通道名稱
}
}
其實(shí) Logstash 的配置是與前面提到的 Logstash 管道中的三個(gè)部分(輸入、過濾器、輸出)一一對(duì)應(yīng)的,只不過這里我們不需要過濾器所以就沒有寫出來。上面配置中 Input 使用的數(shù)據(jù)源是文件類型的,只需要配置上需要收集的本機(jī)日志文件路徑即可。Output 描述數(shù)據(jù)如何輸出,這里配置的是輸出到 Redis。
Redis 的配置 data_type 可選值有 channel 和 list 兩個(gè)。channel 是 Redis 的發(fā)布/訂閱通信模式,而 list 是 Redis 的隊(duì)列數(shù)據(jù)結(jié)構(gòu),兩者都可以用來實(shí)現(xiàn)系統(tǒng)間有序的消息異步通信。
channel 相比 list 的好處是,解除了發(fā)布者和訂閱者之間的耦合。舉個(gè)例子,一個(gè) Indexer 在持續(xù)讀取 Redis 中的記錄,現(xiàn)在想加入第二個(gè) Indexer,如果使用 list ,就會(huì)出現(xiàn)上一條記錄被第一個(gè) Indexer 取走,而下一條記錄被第二個(gè) Indexer 取走的情況,兩個(gè) Indexer 之間產(chǎn)生了競爭,導(dǎo)致任何一方都沒有讀到完整的日志。
channel 就可以避免這種情況。這里 Shipper 角色的配置文件和下面將要提到的 Indexer 角色的配置文件中都使用了 channel 。
配置 Indexer 角色 Logstash
配置好 Shipper 角色的 Logstash 后,我們還需要配置 Indexer 角色 Logstash 以支持從 Redis 接收日志數(shù)據(jù),并通過過濾器解析后存儲(chǔ)到 Elasticsearch 中,其配置內(nèi)容如下所示。
清單 7. Indexer 角色的 Logstash 的配置
input {
redis {
host => "192.168.142.131" # redis主機(jī)地址
port => 6379 # redis端口號(hào)
db => 8 # redis數(shù)據(jù)庫編號(hào)
data_type => "channel" # 使用發(fā)布/訂閱模式
key => "sb-logback" # 發(fā)布通道名稱
}
}
filter {
#定義數(shù)據(jù)的格式
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:time} [%{NOTSPACE:threadName}] %{LOGLEVEL:level} %{DATA:logger} %{NOTSPACE:applicationName} -(?:.*=%{NUMBER:timetaken}ms|)"}
}
}
output {
stdout {}
elasticsearch {
hosts => "localhost:9200"
index => "logback"
}
}
與 Shipper 不同的是,Indexer 的管道中我們定義了過濾器,也正是在這里將日志解析成結(jié)構(gòu)化的數(shù)據(jù)。下面是我截取的一條 logback 的日志內(nèi)容:
清單 8. Spring Boot 項(xiàng)目輸出的一條日志
2019-08-11 18:01:31.602 [http-nio-8080-exec-2] INFO c.i.s.aop.WebLogAspect sb-elk -接口日志
POST請(qǐng)求測試接口結(jié)束調(diào)用:耗時(shí)=11ms,result=BaseResponse{code=10000, message='操作成功'}
在 Filter 中我們使用 Grok 插件從上面這條日志中解析出了時(shí)間、線程名稱、Logger、服務(wù)名稱以及接口耗時(shí)幾個(gè)字段。Grok 又是如何工作的呢?
- message 字段是 Logstash 存放收集到的數(shù)據(jù)的字段, match = {"message" => ...} 代表是對(duì)日志內(nèi)容做處理。
- Grok 實(shí)際上也是通過正則表達(dá)式來解析數(shù)據(jù)的,上面出現(xiàn)的 TIMESTAMP_ISO8601 、 NOTSPACE 等都是 Grok 內(nèi)置的 patterns。
- 我們編寫的解析字符串可以使用 Grok Debugger 來測試是否正確,這樣避免了重復(fù)在真實(shí)環(huán)境中校驗(yàn)解析規(guī)則的正確性。
查看效果
經(jīng)過上面的步驟,我們已經(jīng)完成了整個(gè) ELK 平臺(tái)的搭建以及 Spring Boot 項(xiàng)目的接入。下面我們按照以下步驟執(zhí)行一些操作來看下效果。
啟動(dòng) Elasticsearch,啟動(dòng)命令在 ELK 平臺(tái)搭建 小節(jié)中有提到,這里不贅述(Kibana 啟動(dòng)同)。啟動(dòng) Indexer 角色的 Logstash。
# 進(jìn)入到 Logstash 的解壓目錄,然后執(zhí)行下面的命令
bin/logstash -f indexer-logstash.conf
啟動(dòng) Kibana。
啟動(dòng) Shipper 角色的 Logstash。
# 進(jìn)入到 Logstash 的解壓目錄,然后執(zhí)行下面的命令
bin/logstash -f shipper-logstash.conf
調(diào)用 Spring Boot 接口,此時(shí)應(yīng)該已經(jīng)有數(shù)據(jù)寫入到 ES 中了。
在瀏覽器中訪問 http://ip:5601 ,打開 Kibana 的 Web 界面,并且如下圖所示添加 logback 索引。
圖 8. 在 Kibana 中添加 Elasticsearch 索引
圖片
進(jìn)入 Discover 界面,選擇 logback 索引,就可以看到日志數(shù)據(jù)了,如下圖所示。
圖 9. ELK 日志查看
圖片
在 Nginx 中使用 ELK
相信通過上面的步驟您已經(jīng)成功的搭建起了自己的 ELK 實(shí)時(shí)日志平臺(tái),并且接入了 Logback 類型的日志。但是實(shí)際場景下,幾乎不可能只有一種類型的日志,下面我們就再在上面步驟的基礎(chǔ)之上接入 Nginx 的日志。
當(dāng)然這一步的前提是我們需要在服務(wù)器上安裝 Nginx,具體的安裝過程網(wǎng)上有很多介紹,這里不再贅述。查看 Nginx 的日志如下(Nginx 的訪問日志默認(rèn)在 /var/log/nginx/access.log 文件中)。
清單 9. Nginx 的訪問日志
192.168.142.1 - - [17/Aug/2019:21:31:43 +0800] "GET /weblog/get-test?name=elk HTTP/1.1"
200 3 "http://192.168.142.131/swagger-ui.html" "Mozilla/5.0 (windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"
同樣,我們需要為此日志編寫一個(gè) Grok 解析規(guī)則,如下所示:
清單 10. 針對(duì) Nginx 訪問日志的 Grok 解析規(guī)則
%{IPV4:ip} - - [%{HTTPDATE:time}] "%{NOTSPACE:method} %{DATA:requestUrl}
HTTP/%{NUMBER:httpVersion}" %{NUMBER:httpStatus} %{NUMBER:bytes}
"%{DATA:referer}" "%{DATA:agent}"
完成上面這些之后的關(guān)鍵點(diǎn)是 Indexer 類型的 Logstash 需要支持兩種類型的輸入、過濾器以及輸出,如何支持呢?首先需要給輸入指定類型,然后再根據(jù)不同的輸入類型走不同的過濾器和輸出,如下所示。
清單 11. 支持兩種日志輸入的 Indexer 角色的 Logstash 配置
input {
redis {
type => "logback"
...
}
redis {
type => "nginx"
...
}
}
filter {
if [type] == "logback" {
...
}
if [type] == "nginx" {
...
}
}
output {
if [type] == "logback" {
...
}
if [type] == "nginx" {
...
}
}
我的 Nginx 與 Spring Boot 項(xiàng)目部署在同一臺(tái)機(jī)器上,所以還需修改 Shipper 類型的 Logstash 的配置以支持兩種類型的日志輸入和輸出,其配置文件的內(nèi)容可 點(diǎn)擊這里獲取。
以上配置完成后,我們按照 查看效果 章節(jié)中的步驟,啟動(dòng) ELK 平臺(tái)、Shipper 角色的 Logstash、Nginx 以及 Spring Boot 項(xiàng)目,然后在 Kibana 上添加 Nignx 索引后就可同時(shí)查看 Spring Boot 和 Nginx 的日志了,如下圖所示。
圖 10. ELK 查看 Nginx 日志
圖片
ELK 啟動(dòng)
在上面的步驟中,ELK 的啟動(dòng)過程是我們一個(gè)一個(gè)的去執(zhí)行三大組件的啟動(dòng)命令的。而且還是在前臺(tái)啟動(dòng)的,意味著如果我們關(guān)閉會(huì)話窗口,該組件就會(huì)停止導(dǎo)致整個(gè) ELK 平臺(tái)無法使用,這在實(shí)際工作過程中是不現(xiàn)實(shí)的,我們剩下的問題就在于如何使 ELK 在后臺(tái)運(yùn)行。
根據(jù) 《Logstash 最佳實(shí)踐》 一書的推薦,我們將使用 Supervisor 來管理 ELK 的啟停。首先我們需要安裝 Supervisor,在 Ubuntu 上執(zhí)行 apt-get install supervisor 即可。安裝成功后,我們還需要在 Supervisor 的配置文件中配置 ELK 三大組件(其配置文件默認(rèn)為 /etc/supervisor/supervisord.conf 文件)。
清單 12. ELK 后臺(tái)啟動(dòng)
[program:elasticsearch]
envirnotallow=JAVA_HOME="/usr/java/jdk1.8.0_221/"
directory=/home/elk/elk/elasticsearch
user=elk
command=/home/elk/elk/elasticsearch/bin/elasticsearch
[program:logstash]
envirnotallow=JAVA_HOME="/usr/java/jdk1.8.0_221/"
directory=/home/elk/elk/logstash
user=elk
command=/home/elk/elk/logstash/bin/logstash -f /home/elk/elk/logstash/indexer-logstash.conf
[program:kibana]
envirnotallow=LS_HEAP_SIZE=5000m
directory=/home/elk/elk/kibana
user=elk
command=/home/elk/elk/kibana/bin/kibana
按照以上內(nèi)容配置完成后,執(zhí)行 sudo supervisorctl reload 即可完成整個(gè) ELK 的啟動(dòng),而且其默認(rèn)是開機(jī)自啟。當(dāng)然,我們也可以使用 sudo supervisorctl start/stop [program_name] 來管理單獨(dú)的應(yīng)用。另外,歡迎關(guān)注公眾號(hào)碼猿技術(shù)專欄,后臺(tái)回復(fù)“9527”,送你一份Spring Cloud Aliababa實(shí)戰(zhàn)視頻!
結(jié)束語
在本教程中,我們主要了解了什么是 ELK,然后通過實(shí)際操作和大家一起搭建了一個(gè) ELK 日志分析平臺(tái),并且接入了 Logback 和 Nginx 兩種日志。