总结自己在配合研发,对接前后端的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文件

<?xml version="1.0" encoding="UTF-8"?><configuration><springPropertyscope="context"name="application"source="spring.application.name"/><springPropertyscope="context"name="host"source="logstash.host"/><springPropertyscope="context"name="port"source="logstash.port"/><appendername="LOGSTASH"class="net.logstash.logback.appender.LogstashTcpSocketAppender"><destination>${host}:${port}</destination><encodercharset="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><includeresource="org/springframework/boot/logging/logback/defaults.xml"/><appendername="CONSOLE"class="ch.qos.logback.core.ConsoleAppender"><filterclass="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><rootlevel="info"><appender-refref="LOGSTASH"/><appender-refref="CONSOLE"/><!--<appender-ref ref="FILE_INFO"/>--><!--<appender-ref ref="FILE_ERROR"/>--></root></configuration>

application.yml文件添加配置

#logback对接logstash的日志配置文件logstash:host: 10.136.0.51port: 5000

vue挂载nginx日志

前端挂载日志举例

dockerfile

测试环境
# fielbeat收集日志VOLUME["/var/log/nginx"]WORKDIR/appADDhttps://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.15.1-linux-x86_64.tar.gz /appRUNtar -zxvf filebeat-7.15.1-linux-x86_64.tar.gzRUNrm -rf filebeat-7.15.1-linux-x86_64.tar.gzCOPYfilebeat_test.yml /app/filebeat-7.15.1-linux-x86_64COPYrun.sh /app/filebeat-7.15.1-linux-x86_64WORKDIR/app/filebeat-7.15.1-linux-x86_64RUNmv filebeat_test.yml filebeat.ymlRUNchmod -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/appADDhttps://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.15.1-linux-x86_64.tar.gz /appRUNtar -zxvf filebeat-7.15.1-linux-x86_64.tar.gzRUNrm -rf filebeat-7.15.1-linux-x86_64.tar.gzCOPYfilebeat_prod.yml /app/filebeat-7.15.1-linux-x86_64COPYrun.sh /app/filebeat-7.15.1-linux-x86_64WORKDIR/app/filebeat-7.15.1-linux-x86_64RUNmv filebeat_prod.yml filebeat.ymlRUNchmod -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"]

配置参考

FROMswr.cn-north-1.myhuaweicloud.com/iss-tpb-dev-zrpiao/nginx:latestENVLANG C.UTF-8ENVTZ=Asia/ShanghaiRUNln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezoneRUNmkdir -p /app && mkdir -p /config && chmod -R 777 /appEXPOSE8090#将当前文件夹的dist文件复制到容器的/usr/share/nginx/html目录COPY./dist /app/distCOPYnginx.conf /etc/nginx/nginx.confCOPY./test /app/dist# fielbeat收集日志 开始VOLUME["/var/log/nginx"]WORKDIR/appADDhttps://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.15.1-linux-x86_64.tar.gz /appRUNtar -zxvf filebeat-7.15.1-linux-x86_64.tar.gzRUNrm -rf filebeat-7.15.1-linux-x86_64.tar.gzCOPYfilebeat_test.yml /app/filebeat-7.15.1-linux-x86_64COPYrun.sh /app/filebeat-7.15.1-linux-x86_64WORKDIR/app/filebeat-7.15.1-linux-x86_64RUNmv filebeat_test.yml filebeat.ymlRUNchmod -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.logsetup.ilm.enabled: falsesetup.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.logsetup.ilm.enabled: falsesetup.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
#!/bin/bashset -mnginx -g "daemon off;" &./filebeat -e -c /app/filebeat-7.15.1-linux-x86_64/filebeat.ymlfg %1

Kibana新建索引

ES可以作为日志系统,要比专门去找对应的日志存档效率要高,直接通过搜索KQL或者Lucene(这里指的是Lucene的语法,实际上直接搜索关键词就可以了)。
但是我们在Kinaba上看到的索引(你也可以理解每一份对应的日志)上没有你想要的,你该如何去建立索引去查找日志,具体操作过程如下:
这里假设你的数据都已经添加进去或者是自动收集的,你要做的就是创建一个索引对应起来,能在discover里面能看到就可以。
只有当你的日志记录已经通过logstash存储在ElasticSearch中时,你在kibana中添加索引才能看到具体的日志记录

添加索引

创建索引模式

根据源创建索引

查询

链接:https://blog.51cto.com/u_11555417/9346198
(版权归原作者所有,侵删)
继续阅读
阅读原文