EFK实战二 - 日志集成

简介: 在EFK基础架构中,我们需要在客户端部署Filebeat,通过Filebeat将日志收集并传到LogStash中。

前言


在LogStash中对日志进行解析后再将日志传输到ElasticSearch中,最后通过Kibana查看日志。

上文EFK实战一 - 基础环境搭建已经搭建好了EFK的基础环境,本文我们通过真实案例打通三者之间的数据传输以及解决EFK在使用过程中的一些常见问题。


首先看一下实际的业务日志


2020-01-0910:03:26,719INFO========GetCostCenterStart===============2020-01-0910:03:44,267WARN成本中心编码少于10位!{"deptId":"D000004345","companyCode":"01"}
2020-01-0910:22:37,193ERRORjava.lang.IllegalStateException: SessionImpl[abcpI7fK-WYnW4nzXrv7w,]: can't call getAttribute() when session is no longer valid.at com.caucho.server.session.SessionImpl.getAttribute(SessionImpl.java:283)at weaver.filter.PFixFilter.doFilter(PFixFilter.java:73)at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:87)at weaver.filter.MonitorXFixIPFilter.doFilter(MonitorXFixIPFilter.java:30)at weaver.filter.MonitorForbiddenUrlFilter.doFilter(MonitorForbiddenUrlFilter.java:133)


日志组成格式为:


时间 日志级别 日志详情


主要任务就是将这段日志正常写入EFK中。


filebeat安装配置



  • 将下载后的文件上传至服务器并解压
    tar -zxvf filebeat-7.5.1-linux-x86_64.tar.gz


  • 修改filebeat.yml,


filebeat.inputs:
-type: logenabled: truepaths:
-/app/weaver/Resin/log/xxx.log


此段配置日志输入,指定日志存储路径


output.logstash:
#TheLogstashhostshosts: ["172.31.0.207:5044"]


此段配置日志输出,指定Logstash存储路径


  • 启动filebeat
    ./filebeat -e -c filebeat.yml
    如果需要静默启动,则使用nohup ./filebeat -e -c filebeat.yml & 命令启动即可


logstash配置


logstash的配置主要分为三段inputfilteroutput


input用于指定输入,主要是开放端口给Filebeat用于接收日志


filter用于指定过滤,对日志内容进行解析过滤。


output用于指定输出,直接配置ES的地址即可


input {
beats {
port=>5044  }
}
output {
elasticsearch {
hosts=> ["http://172.31.0.127:9200"]
index=>"myindex-%{+YYYY.MM.dd}"user=>"elastic"password=>"xxxxxx"  }
}


我们配置好logstash后通过命令重启logstash

docker-compose -f elk.yml restart logstash


经过上述两步配置后应用程序往日志文件写入日志,filebeat会将日志写入logstash。在kibana查看写入的日志结果如下:

1.jpg


日志显示有2个问题:


  • 由于错误日志堆栈信息有多行,在kibana中展示成了多行,数据查看很乱。需要将堆栈异常整理成一行显示。


  • 需要对日志进行解析,拆成“时间 日志级别 日志详情”的显示格式。


优化升级


  • 在filebeat中设置合并行
    filebeat默认是行传输的,但是我们的日志肯定是多行一个日志,我们要把多行合并到一起就要找到日志的规律。比如我们的日志格式全都是以时间格式开头,所以我们在filebeat中filebeat.inputs区域添加如下几行配置


#以日期作为前缀multiline.pattern: ^\d{4}-\d{1,2}-\d{1,2}
#开启多行合并multiline.negate: true#合并到上一行之后multiline.match: after


  • 在logstash中设置对日志的解析
    将日志解析成“时间 日志级别 日志详情”的展示格式,所以我们需要在logstash配置文件中添加filter段


filter {
grok{
match=> {
"message"=>"(?<date>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}),\d{3} %{LOGLEVEL:loglevel} (?<des>.*)"    }
  }
}


这里主要是使用grok语法对日志进行解析,通过正则表达式对日志进行过滤。大家可以通过kibana里的grok调试工具进行调试


2.png


配置完成后我们重新打开kibana Discover界面查看日志,符合预期,完美!


3.png


常见问题

kibana 乱码


这个主要原因还是客户端日志文件格式有问题,大家可以通过file xxx.log查看日志文件的编码格式,如果是ISO8859的编码基本都会乱码,我们可以在filebeat配置文件中通过encoding指定日志编码进行传输。


filebeat.inputs:
-type: logenabled: truepaths:
-/app/weaver/Resin/log/xxx.logencoding: GB2312


kibana 提取字段出错


4.png


如上所示,打开kibana Discover面板时出现此异常,大家只要删除ES中的.kibana_1索引然后重新访问Kibana即可。


5.png


查看周围文件


我们在终端查看日志某关键字时一般会查上下文信息便于排查问题,如经常用到的指令cat xxx.log | grep -C50 keyword,那么在Kibana中如何实现这功能呢。


6.png


在Kibana中搜索关键字,然后找到具体日志记录,点击左边向下箭头,然后再点击“查看周围文档”即可实现。


动态索引


我们日志平台可能需要对接多个业务系统,需要根据业务系统建立不同的索引。


  • 在filebeat中给日志打上标记


-type: log  ......
fields:
logType: oabusiness


  • 在logstash中根据标记生成索引


input {
beats {
port=>5044  }
}
filter {
if [fields][logType] =="oabusiness" {
grok{
match=> {
"message"=>"(?<date>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}),\d{3} %{LOGLEVEL:loglevel} (?<des>.*)"      }
    }
  }
}
output {
elasticsearch {
hosts=> ["http://172.31.0.207:9200"]
index=>"%{[fields][logType]}-%{+YYYY.MM.dd}"user=>"elastic"password=>"elastic"  }
}


好了,各位朋友们,本期的内容到此就全部结束啦,能看到这里的同学都是优秀的同学,下一个升职加薪的就是你了!


如果觉得这篇文章对你有所帮助的话请扫描下面二维码加个关注。“转发” 加 “在看”,养成好习惯!咱们下期再见!

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
5天前
|
弹性计算 Serverless 应用服务中间件
Serverless 应用引擎操作报错合集之集成sls时出现报错,是什么导致的
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
4天前
|
分布式计算 监控 大数据
spark实战:实现分区内求最大值,分区间求和以及获取日志文件固定日期的请求路径
spark实战:实现分区内求最大值,分区间求和以及获取日志文件固定日期的请求路径
|
4天前
|
存储 缓存 安全
LLM应用实战:当图谱问答(KBQA)集成大模型(三)
本文主要是针对KBQA方案基于LLM实现存在的问题进行优化,主要涉及到响应时间提升优化以及多轮对话效果优化,提供了具体的优化方案以及相应的prompt。
13 1
|
4天前
|
存储 自然语言处理 C++
LLM应用实战:当KBQA集成LLM(二)
本文主要是针对KBQA方案基于LLM实现存在的问题进行优化,主要涉及到图谱存储至Es,且支持Es的向量检索,还有解决了一部分基于属性值倒查实体的场景,且效果相对提升。
13 1
|
4天前
|
缓存 自然语言处理 知识图谱
LLM应用实战:当KBQA集成LLM
项目是关于一个博物馆知识图谱,上层做KBQA应用。实现要求是将传统KBQA中的部分模块,如NLU、指代消解、实体对齐等任务,完全由LLM实现,本qiang~针对该任务还是灰常感兴趣的,遂开展了项目研发工作
14 0
|
12天前
|
存储 缓存 安全
【实战指南】轻松自研嵌入式日志框架,6大功能亮点一文读懂
本文介绍了如何自研一个嵌入式日志框架,涵盖了6大功能亮点:日志分级管理、异步处理与并发安全性、详尽上下文信息记录、滚动日志归档策略、高效资源利用和便捷API接口。设计上,通过日志过滤器、共享环形缓冲区和独立的日志管理进程实现日志管理。在并发环境下,使用信号量保证线程安全。日志文件按大小滚动并有序归档,同时考虑了资源效率。对外提供简洁的API接口,便于开发人员使用。文章还简述了实现细节,包括实时存储、日志滚动和共享内存管理。测试部分验证了日志回滚和实时打印功能的正确性。
|
1月前
|
存储 消息中间件 Java
Java多线程实战-异步操作日志记录解决方案(AOP+注解+多线程)
Java多线程实战-异步操作日志记录解决方案(AOP+注解+多线程)
|
1月前
|
缓存 Java 测试技术
Java多线程实战-实现多线程文件下载,支持断点续传、日志记录等功能
Java多线程实战-实现多线程文件下载,支持断点续传、日志记录等功能
|
1月前
|
运维 监控 Java
实战总结|系统日志规范及最佳实践
打印日志是一门艺术,日志信息是开发人员排查线上问题最主要的手段之一,但规范打日志被开发同学经常所忽视。日志就像保险,平时正常的时候用不上,但是一旦出问题就都想看有没有保险可以用。一条良好的日志,是我们向外部证明的材料。
132 0
|
12天前
|
SQL 监控 关系型数据库