前言:本文主要介紹docker搭建elk分布式日志平臺,利用filebeat監聽logback日志檔案,傳輸到elk中,最終在kibana渲染展示,
主要思路:filebeat監聽日志檔案的變化,傳輸到logstash,logstash通過分析提取,將日志資訊推送到elasticsearch指定索引中,最終kibana從elasticsearch索引中查詢并展示日志資訊,
一、docker搭建elk日志平臺(v7.6.1)
1.1、準備鏡像
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.6.1
docker pull docker.elastic.co/kibana/kibana:7.6.1
docker pull docker.elastic.co/logstash/logstash:7.6.1
1.2、創建elk網路
創建es-network網路主要用于在容器中可以直接通過容器名互相訪問
docker network create es-network
1.3、創建宿主機目錄,用于與容器目錄映射
根目錄:/Users/chenjiaming/data/docker,根據自身情況動態修改即可
授權:chmod 777 /Users/chenjiaming/data/docker
.
├── elasticsearch
│ ├── config
│ └── data
├── kibana
│ └── config
└── logstash
└── config
1.4、部署elasticsearch
在elasticsearch/config目錄下創建elasticsearch.yml檔案,內容如下:
# 配置es的集群名稱
cluster.name: "docker-cluster"
# 0.0.0.0為不限制,生產環境建議設定為固定IP
network.host: 0.0.0.0
# 是否開啟x-pack安全認證,訪問時需要密碼
xpack.security.enabled: false
# 關閉跨域驗證
http.cors.enabled: true
http.cors.allow-origin: "*"
啟動容器:
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "ES_JAVA_OPTS=-Xms2048m -Xmx2048m" -e "discovery.type=single-node" -e "TZ=Asia/Shanghai" \
--net es-network \
-v /Users/chenjiaming/data/docker/elasticsearch/data:/usr/share/elasticsearch/data \
-v /Users/chenjiaming/data/docker/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml docker.elastic.co/elasticsearch/elasticsearch:7.6.1
引數說明:
--name:指定容器名稱
-p:映射9200和9300埠
-e:指定elasticsearch占用記憶體,指定單機模式(生產環境一般是集群),指定時區
--net:指定網路
-v:指定掛載目錄,掛載data目錄和elasticsearch.yml檔案,主要方便修改配置,/Users/chenjiaming/data/docker為宿主機目錄,根據自身情況動態修改即可
1.5、部署logstash
在logstash/config創建logstash.conf檔案,內容如下:
input{
beats {
# 監聽5044埠
port => "5044"
# 關閉ssl驗證
ssl => false
# 指定輸入格式為json
codec => json
}
}
output{
stdout {
# 指定輸出內容為ruby處理后的內容
codec => rubydebug
}
elasticsearch{
# 指定elasticsearch地址
hosts => ["elasticsearch:9200"]
# 指定索引,生產環境建議根據環境/日期創建動態索引
index => "elk"
}
}
在logstash/config創建logstash.yml檔案,內容如下:
# 0.0.0.0為不限制,生產環境建議設定為固定IP
http.host: 0.0.0.0
# 是否開啟x-pack安全認證
xpack.monitoring.enabled: false
# elasticsearch地址,如果開啟x-pack安全認證需要填寫
#xpack.monitoring.elasticsearch.hosts:
#- http://elasticsearch:9200
# elasticsearch賬號,如果開啟x-pack安全認證需要填寫
#xpack.monitoring.elasticsearch.username: "elastic"
# elasticsearch密碼,如果開啟x-pack安全認證需要填寫
#xpack.monitoring.elasticsearch.password: "xxx"
啟動容器:
docker run -p 5044:5044 \
--name logstash -d \
--net es-network \
-e TZ=Asia/Shanghai \
-v /Users/chenjiaming/data/docker/logstash/config/logstash.conf:/usr/share/logstash/pipeline/logstash.conf:rw \
-v /Users/chenjiaming/data/docker/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml:rw \
docker.elastic.co/logstash/logstash:7.6.1
1.6、部署kibana
在kibana/config目錄下創建kibana.yml檔案,內容如下:
server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://elasticsearch:9200" ]
xpack.monitoring.ui.container.elasticsearch.enabled: false
啟動容器:
docker run -d -p 5601:5601 \
--name=kibana \
-e TZ=Asia/Shanghai \
--net es-network \
-v /Users/chenjiaming/data/docker/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml \
docker.elastic.co/kibana/kibana:7.6.1
二、宿主機搭建filebeat平臺(v7.6.1)
2.1、部署filebeat
filebeat不通過容器部署,實際應用中,一般是每個應用服務器都安裝filebeat,收集本機日志傳輸到logstash集群中
從官網下載filebeat,下載地址:https://www.elastic.co/cn/downloads/past-releases/filebeat-7-6-1
解壓并存放在/usr/local目錄中,修改filebeat.yml組態檔,指定輸入日志路徑和開啟logstash輸出,如下圖:


三、程式輸出日志
3.1、springboot + logback寫入日志檔案
專案搭建不在這里說明,主要logback-spring.xml組態檔如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定義專案名稱-->
<springProperty scope="context" name="projectName" source="spring.application.name" defaultValue="logging"/>
<!--日志檔案存盤路徑-->
<property name="LOG_HOME" value="/Users/chenjiaming/data/logs/study/${projectName}"/>
<!--日志輸出格式-->
<!--格式化輸出:%d表示日期,%thread表示執行緒名,%-5level表示級別從左顯示5個字符寬度,%logger表示類名,%method表示方法名,%line表示行號,%msg表示日志內容,%n表示換行符-->
<property name="LOG_PATTERN"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-5level] %logger{56}.%method:%line %msg%n"/>
<!-- 控制臺輸出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- 檔案輸出,按照每天滾動生成檔案 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志檔案輸出的檔案名-->
<FileNamePattern>${LOG_HOME}/${projectName}.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!--活動檔案的大小-->
<MaxHistory>30</MaxHistory>
<maxFileSize>100MB</maxFileSize>
<!--控制所有歸檔日志檔案的總大小-->
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
<encoder
class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<timestamp>
<timeZone>GMT+8</timeZone>
</timestamp>
<pattern>
<pattern>
{
"dateTime": "%d{yyyy-MM-dd HH:mm:ss.SSS}",
"level": "%level",
"service": "${projectName}",
"thread": "%thread",
"class": "%logger.%method[%line]",
"message": "%message",
"stackTrace": "%exception"
}
</pattern>
</pattern>
</providers>
</encoder>
</appender>
<!-- 日志輸出級別 -->
<root level="INFO">
<appender-ref ref="STDOUT"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder類需要匯入logstash相關依賴:
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>6.6</version>
</dependency>
四、kibana渲染展示
4.1、添加索引
打開management選單,點擊Index Patterns,點擊Create index pattern,輸入logstash組態檔中指定的index名稱,選擇@timestamp作為時間過濾欄位,完成即可
4.2、查看日志
打開Discover選單,即可查看到相關日志資訊

五:總結
本文主要簡單講解如何通過springboot + logback + filebeat + elk 實作分布式日志中心,實際生產中還需要通過配置filebeat的input、Harvester、Spooler組件引數實作同步低延遲,logstash過濾多余日志欄位,elasticsearch索引創建及優化,logstash和elasticsearch集群,x-pack安全認證等企業級問題,有興趣的同學可以繼續深入研究,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/282277.html
標籤:其他
下一篇:2021華中杯 B 題
