什麼是EFK?
Elasticsearch:一個分布式、高擴充、高實時的搜尋與資料分析引擎。
Filebeat:輕量型日志采集器。
Kibana:是一款開源的資料分析和可視化平台,可以當做是Elasticsearch的可視化操作界面。
EFK可以替代ELK來使用,logstash跑在jvm上,資源消耗比較大,filebeat更輕量,占用資源更少。
下載下傳安裝
-
windows下載下傳後直接解壓可直接使用,下載下傳位址如下:
Elasticsearch:https://www.elastic.co/downloads/elasticsearch
Filebeat:https://www.elastic.co/downloads/beats/filebeat
Kibana:https://www.elastic.co/downloads/kibana
使用
1.項目配置
- 在resources下的application.yml添加配置:
logging:
config: classpath:logback.xml
file: ad-sponsor.log
- 在resources中添加 logback.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- appender 定義了寫日志的元件, 有兩個必須的屬性: name 指定 appender 的名稱 和 class 指定 appender 的類型, 即實作的功能 -->
<!-- RollingFileAppender 的作用是滾動記錄檔案, 先将日志記錄到指定檔案, 當符合某個條件時再将日志記錄到其他檔案 -->
<appender name="system" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>./logs/qixingcxy-core.log</file>
<!-- rollingPolicy 的作用是當發生滾動時, 定義 RollingFileAppender 的行為 -->
<!-- TimeBasedRollingPolicy 是最常用的滾動政策, 它根據時間指定滾動政策, 既負責滾動也負責觸發滾動 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>./logs/qixingcxy-core.%d{yyyy-MM-dd}.log</fileNamePattern> <!-- 必要節點 -->
<maxHistory>5</maxHistory> <!-- 可選節點 -->
</rollingPolicy>
<!-- encoder 負責兩件事情: 把日志資訊轉換為位元組數組; 把位元組數組寫到輸出流 -->
<encoder>
<pattern>[%d{yyyy-MM-dd HH:mm:ss:SSS}] %thread %level %logger{36} %L - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%d{yyyy-MM-dd HH:mm:ss:SSS}] %thread %level %logger{36} %L - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- logger 是用來設定某一個包或者具體某一個類的日志列印級别, 以及指定的 appender -->
<logger name="com.qixingcxy.core" level="info" additivity="false">
<appender-ref ref="stdout"/>
<appender-ref ref="system"/>
</logger>
<logger name="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" level="info"
additivity="false">
<appender-ref ref="stdout"/>
</logger>
<logger name="org.springframework.orm.jpa.JpaTransactionManager" level="debug"
additivity="false">
<appender-ref ref="stdout"/>
</logger>
<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="trace"
additivity="false">
<appender-ref ref="stdout"/>
</logger>
<root level="warn">
<appender-ref ref="stdout"/>
</root>
</configuration>
2.Filebeat配置
- 打開filebeat檔案夾下的filebeat.yml,配置Filebeat inputs
filebeat.inputs:
- type: log
#true代表啟用目前配置
enabled: true
# filebeat監聽的日志檔案,path是數組,可以配置多個目錄下的檔案,名字和logback.xml中要對應
paths:
- C:\studyspace\qixingcxy\logs\qixingcxy-core.log
# 多行日志的配置,也就是将多行日志合并為一條日志的規則配置
# 這個需要與logback.xml中定義的日志規則比對 (^\[ 的意思為不以 [ 為開頭的将合并為多行)
multiline.pattern: ^\[
# negate和match 的配置将 [ 後面的多行與最近的一個以 [ 開頭的日志進行合并成為一行
multiline.negate: false
multiline.match: after
# 不從頭讀取檔案,而是從尾部讀取,意思是讀取filebeat啟動之後的日志,啟動之前的都被抛棄掉
tail_files: true
- 打開filebeat檔案夾下的filebeat.yml,配置Elasticsearch template
# setup.template區域指定索引的模闆,用來設定在ES中的映射
#模闆的名稱
setup.template.name: qixingcxy-core
#模闆的模式
setup.template.pattern: qixingcxy-core-*
#Kibana索引的配置
setup.dashboards.index: qixingcxy-core-*
#描述字段的YAML檔案路徑(發送到 ES 的字段定義),使用Filebeat自帶的
setup.template.fields: fields.yml
setup.template.settings:
# 索引分區個數的定義
index.number_of_shards: 3
- 打開filebeat檔案夾下的filebeat.yml,配置Elasticsearch output
output.elasticsearch:
# ES 主機的位址,即使是叢集也可以配置一個,建議全部配置
hosts: ["localhost:9200"]
# ES 資料索引的定義,也就是說将資料發送到哪個索引中去
index: "qixing-core-%{+yyyy.MM.dd}"
pipeline: "qixing-core-log"
啟動
-
啟動 elasticsearch
進入elasticsearch的bin目錄,輕按兩下elasticsearch.bat啟動
-
啟動 kibana
進入kibana的bin目錄,輕按兩下kibana.bat啟動
-
啟動 filebeat
進入filebeat目錄,自己建立一個start.bat輕按兩下啟動,内容如下:
.\filebeat -e -c filebeat.yml
配置截取條件 配置
可以使用postman來配置
送出路徑(送出方式為put):
127.0.0.1:9200/_ingest/pipeline/qixing-core-log
body内容
{
"description" : "qixing-core-log",
"processors": [
{
"grok": {
"field": "message",
"patterns": ["\\[%{TIMESTAMP_ISO8601:log_time}\\] %{NOTSPACE:thread} %{NOTSPACE:log_level} %{NOTSPACE:java_class} %{NOTSPACE:code_line} - %{GREEDYDATA:content}"]
}
},
{
"date": {
"field": "log_time",
"formats": ["yyyy-MM-dd HH:mm:ss:SSS"],
"timezone": "Asia/Shanghai",
"target_field": "@timestamp"
}
}
]
}
Filebeat.yml 配置 Elasticsearch output
output.elasticsearch:
# 需要和_ingest/pipeline/qixing-core-log相對應
pipeline: "qixing-core-log"
通路
位址:http://localhost:5601