前后端如何对接elk,你应该知道
总结自己在配合研发,对接前后端的ELK日志配置举例
ELK介绍
日志系统ELK(ElasticSearch、Logstash、Kibana)搭建的,其架构是Filebeat收集日志传输到Logstash,Logstash解析日志然后将日志存储到Elasticsearch中,最后通过Kibana查询展示日志
ES(nosql非关数据库):存储功能和索引
Logstash(收集日志):到应用服务器上拿取log,并进行格式转换后输出到es中
通过input功能来收集/采集log
filter过滤器:格式化数据
output输出:日志输出到es数据库内
Kibana(展示工具):将es内的数据在浏览器展示出来,通过UI界面展示(可以根据自己的需求对日志进行处理,方便查阅读取)
1、ElasticSearch:是一个分布式的搜索和分析引擎,可以用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 基于 Lucene 开发,现在是使用最广的开源搜索引擎之一。
2、Logstash:简单来说就是一根具备实时数据传输能力的管道,负责将数据信息从管道的输入端传输到管道的输出端,与此同时这根管道还可以让你根据自己的需求在中间加上滤网,Logstash提供了很多功能强大的滤网以满足你的各种应用场景。
3、Kibana:是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的。你可以用kibana搜索、查看、交互存放在Elasticsearch索引里的数据,使用各种不同的图标、表格、地图等,kibana能够很轻易的展示高级数据分析与可视化。
springboot配置ELK
pom.xml依赖
要想将logback与Logstash整合,必须引入logstash-logback-encoder包。
<!-- logback 推送日志文件到logstash -->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>6.0</version>
</dependency>
在resources下新建logback-spring.xml文件
<configuration>
<springProperty scope="context" name="application" source="spring.application.name"/>
<springProperty scope="context" name="host" source="logstash.host"/>
<springProperty scope="context" name="port" source="logstash.port"/>
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>${host}:${port}</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<pattern>
<pattern>
<!--输出日志可自定义,可根据自己需要配置-->
{
<!--es索引名称 -->
"indexname":"${application}",
<!--应用名称 -->
"appname":"${application}",
<!--打印时间 -->
"timestamp": "%d{yyyy-MM-dd HH:mm:ss.SSS}",
<!--线程名称 -->
"thread": "%thread",
<!--日志级别 -->
"level": "%level",
<!--日志名称 -->
"logger_name": "%logger",
"traceId": "%X{traceId}",
<!--日志信息 -->
"message": "%msg",
<!--日志堆栈 -->
"stack_trace": "%exception"
}
</pattern>
</pattern>
</providers>
</encoder>
</appender>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<encoder>
<pattern>%date [%thread]-[%X{traceId}] %-5level [%logger{50}] %file:%line - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<root level="info">
<appender-ref ref="LOGSTASH"/>
<appender-ref ref="CONSOLE"/>
<!--<appender-ref ref="FILE_INFO"/>-->
<!--<appender-ref ref="FILE_ERROR"/>-->
</root>
</configuration>
application.yml文件添加配置
#logback对接logstash的日志配置文件
logstash:
host: 10.136.0.51
port: 5000
vue挂载nginx日志
前端挂载日志举例
dockerfile
测试环境
# fielbeat收集日志
VOLUME ["/var/log/nginx"]
WORKDIR /app
ADD https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.15.1-linux-x86_64.tar.gz /app
RUN tar -zxvf filebeat-7.15.1-linux-x86_64.tar.gz
RUN rm -rf filebeat-7.15.1-linux-x86_64.tar.gz
COPY filebeat_test.yml /app/filebeat-7.15.1-linux-x86_64
COPY run.sh /app/filebeat-7.15.1-linux-x86_64
WORKDIR /app/filebeat-7.15.1-linux-x86_64
RUN mv filebeat_test.yml filebeat.yml
RUN chmod -R 777 /app/filebeat-7.15.1-linux-x86_64/run.sh
# 同时运行nginx和filebeat服务
ENTRYPOINT ["/app/filebeat-7.15.1-linux-x86_64/run.sh"]
# fielbeat收集日志
VOLUME ["/var/log/nginx"]
WORKDIR /app
ADD https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.15.1-linux-x86_64.tar.gz /app
RUN tar -zxvf filebeat-7.15.1-linux-x86_64.tar.gz
RUN rm -rf filebeat-7.15.1-linux-x86_64.tar.gz
COPY filebeat_prod.yml /app/filebeat-7.15.1-linux-x86_64
COPY run.sh /app/filebeat-7.15.1-linux-x86_64
WORKDIR /app/filebeat-7.15.1-linux-x86_64
RUN mv filebeat_prod.yml filebeat.yml
RUN chmod -R 777 /app/filebeat-7.15.1-linux-x86_64/run.sh
# 同时运行nginx和filebeat服务
ENTRYPOINT ["/app/filebeat-7.15.1-linux-x86_64/run.sh"]
配置参考
FROM swr.cn-north-1.myhuaweicloud.com/iss-tpb-dev-zrpiao/nginx:latest
ENV LANG C.UTF-8
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN mkdir -p /app && mkdir -p /config && chmod -R 777 /app
EXPOSE 8090
#将当前文件夹的dist文件复制到容器的/usr/share/nginx/html目录
COPY ./dist /app/dist
COPY nginx.conf /etc/nginx/nginx.conf
COPY ./test /app/dist
# fielbeat收集日志 开始
VOLUME ["/var/log/nginx"]
WORKDIR /app
ADD https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.15.1-linux-x86_64.tar.gz /app
RUN tar -zxvf filebeat-7.15.1-linux-x86_64.tar.gz
RUN rm -rf filebeat-7.15.1-linux-x86_64.tar.gz
COPY filebeat_test.yml /app/filebeat-7.15.1-linux-x86_64
COPY run.sh /app/filebeat-7.15.1-linux-x86_64
WORKDIR /app/filebeat-7.15.1-linux-x86_64
RUN mv filebeat_test.yml filebeat.yml
RUN chmod -R 777 /app/filebeat-7.15.1-linux-x86_64/run.sh
# 同时运行nginx和filebeat服务
ENTRYPOINT ["/app/filebeat-7.15.1-linux-x86_64/run.sh"]
filebeat.yml
测试配置
索引名称修改为具体项目,例如iam-portal-iam-portal-%{+yyyy.MM.dd} 或者archives-portal-iam-portal-%{+yyyy.MM.dd}
filebeat.inputs:
- type: log
paths:
- /var/log/nginx/access.log
setup.ilm.enabled: false
setup.template.name: "nginx"
setup.template.pattern: "nginx-*"
output.elasticsearch:
hosts: ["10.136.0.51:9200"]
username: "elastic"
password: "123456"
index: "iam-portal-%{+yyyy.MM.dd}" #索引名称
索引文件要修改为具体项目,例如iam-portal-iam-portal-%{+yyyy.MM.dd} 或者archives-portal-iam-portal-%{+yyyy.MM.dd}
filebeat.inputs:
- type: log
paths:
- /var/log/nginx/access.log
setup.ilm.enabled: false
setup.template.name: "nginx"
setup.template.pattern: "nginx-*"
output.elasticsearch:
hosts: ["10.136.1.181:9200"]
username: "elastic"
password: "123456"
index: "iam-portal-%{+yyyy.MM.dd}" #索引名称
启动脚本
run.sh
set -m
nginx -g "daemon off;" &
./filebeat -e -c /app/filebeat-7.15.1-linux-x86_64/filebeat.yml
fg %1
Kibana新建索引
ES可以作为日志系统,要比专门去找对应的日志存档效率要高,直接通过搜索KQL或者Lucene(这里指的是Lucene的语法,实际上直接搜索关键词就可以了)。
但是我们在Kinaba上看到的索引(你也可以理解每一份对应的日志)上没有你想要的,你该如何去建立索引去查找日志,具体操作过程如下:
这里假设你的数据都已经添加进去或者是自动收集的,你要做的就是创建一个索引对应起来,能在discover里面能看到就可以。
只有当你的日志记录已经通过logstash存储在ElasticSearch中时,你在kibana中添加索引才能看到具体的日志记录
添加索引
创建索引模式
根据源创建索引
查询
链接:https://blog.51cto.com/u_11555417/9346198
(版权归原作者所有,侵删)
微信扫码关注该文公众号作者