什么是EFK?
Elasticsearch:一个分布式、高扩展、高实时的搜索与数据分析引擎。
Filebeat:轻量型日志采集器。
Kibana:是一款开源的数据分析和可视化平台,可以当做是Elasticsearch的可视化操作界面。
EFK可以替代ELK来使用,logstash跑在jvm上,资源消耗比较大,filebeat更轻量,占用资源更少。
下载安装
- 下载地址如下:
Elasticsearch:https://www.elastic.co/downloads/elasticsearch
Filebeat:https://www.elastic.co/downloads/beats/filebeat
Kibana:https://www.elastic.co/downloads/kibana - 安装(解压即安装)
tar -zxvf elasticsearch-6.7.0.tar.gz
tar -zxvf filebeat-6.7.0-linux-x86_64.tar.gz
tar -xzvf kibana-6.7.0-linux-x86_64.tar.gz
使用
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
cd elasticsearch-6.7.0
bin/elasticsearch
- 启动 kibana
cd kibana-6.7.0-linux-x86_64
bin/kibana
- 启动 filebeat
cd filebeat-6.7.0-linux-x86_64
#-c filebeat.yml 表示以filebeat.yml的配置来启动
./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"