1. 操作前提
确保已完成logstash7.9.1 容器安装&解析kafka日志到控制台章节相关内容,本章基于上一章节内容.
2. 日志解析到ES
-
2.1 修改logstash配置
修改文件
/root/docker-compose/logstash/pipeline/log-kafka-dev.conf
内容,vim /root/docker-compose/logstash/pipeline/log-kafka-dev.conf
将原先输出到控制台配置改为输出到elasticsearch,修改完成后全部内容如下:
input{ kafka{ bootstrap_servers => "192.168.1.14:9092" #kafka地址 auto_offset_reset => "earliest" #消息读取位置 topics => ["log_kafka_dev"] #kafka中topic名称,记得创建该topic group_id => "logstash-7.9.1" #默认为“logstash” codec => "json" #与Shipper端output配置项一致 consumer_threads => 3 #消费的线程数 max_poll_records => "2000" decorate_events => true #在输出消息的时候回输出自身的信息,包括:消费消息的大小、topic来源以及consumer的group信息。 } } filter { #添加字段,kafka分区,偏移,时间戳 mutate{ add_field =>{ kafkaPartition => "%{[@metadata][kafka][partition]}" kafkaOffset => "%{[@metadata][kafka][offset]}" kafkaTime => "%{[@metadata][kafka][timestamp]}" } } # 将分区,偏移改为数值型(此处integer包含java中long类型) mutate{ convert => ["kafkaPartition", "integer"] convert => ["kafkaOffset", "integer"] } } output { # ES输出 elasticsearch { hosts => [ "192.168.1.14:9200" ] #索引名,此处每月一个索引 index =>"logstash-%{system}-%{+YYYY.MM}" } # 将日志输出到控制台,生产环境记得注释掉控制台输出,否则会导致日志 大量堆积在kafka stdout { codec => rubydebug } }
3. 日志写入&分析
3.1 启动logback-kafka-springboot项目
logback-kafka-springboot项目介绍
运行LogbackKafkaSpringbootApplication
类的main方法,将项目启动,用来模拟日志写入kafka的log_kafka_dev
主题.
3.2 通过kibana进行日志分析
- 1. 在浏览器输入http://192.168.1.14:5601,访问kibana界面,然后依次点击
三道杠
->Stack Management
- 2. 点击索引管理,会发现已经有一个索引
logstash-logback-kafka-springboot-dev-2020.09
,命名规则为logstash-%{system}-%{+YYYY.MM}
,此处我们使用的系统名称为logback-kafka-springboot-dev
- 3. 依次点击
索引模式
->创建索引模式
- 4. 填入索引模式名称
logstash-logback-kafka-springboot-dev*
,其中*表示匹配任意字符,因此能够匹配到索引logstash-logback-kafka-springboot-dev-2020.09
,然后点击下一步
- 5. 时间字段选择
@timestamp
,然后点击创建索引模式.
- 6. 索引模式创建完成后,依次点击
三道杠
->Kibana
->Discover
- 7. 此时我们的日志便显示到页面中,不足之处为日期为英文,不太好看,通过第8步进行修改日期格式
- 8. 依次点击
三道杠
->Management
->Stack Management
->高级设置
,将Date format设置为YYYY-MM-DD HH:mm:ss.SSS
,然后点击保存设置
- 9. 再次依次点击
三道杠
->Kibana
->Discover
,此时日期格式已符合国人审美观! 我们可以点击左侧字段旁的添加按钮,定制右面的表格,
- 10. 此处我添加
level
,message
两个字段,效果如下:
- 11. 我们调整好字段后,可以将此样式保存起来以便下次快速浏览, 点击左上方的保存按钮,在弹出的窗口中填入标题,然后点击保存按钮,完成
样式保存.
3.3 通过TID快速定位一次请求日志
- 1. 通过浏览器发送一次请求
http://localhost:8080/log/998
,后台返回TID为e3bf6e32-d7cb-4161-8a34-4da5c6393e8a
- 2. 依次点击
三道杠
->Kibana
->Discover
进行日志查询
- 3. 点击左上方的
打开
按钮,点击我们前面保存的my_title
- 4. 此时界面快速切换到我们之前保存的只有
level
,message
两个字段的样式,我们点击TID字段右面的添加按钮,将TID字段也加入到右侧的表格
- 5. 此时表格便包含了TID列,我们可以通过
TID
字段右侧的按钮进行移动和删除,让我们点击右移按钮将TID字段放在level和message之间
- 6. 此时字段排序变成了level,TID,message,当我们将鼠标滑过level,message字段的值时,会提示出一个筛选按钮,然而滑过TID时不会有这个提示,如下图所示
- 7. 上面出现这个问题的原因是我们在创建索引模式的时候,还没有TID这个字段,我们只需要刷新下索引模式即可.依次点击
三道杠
->Management
->Stack Management
->索引模式
->logstash-logback-kafka-springboot-dev*
,然后点击右上方的刷新字段列表
按钮
- 8. 此时再次回到
Discover
页面,TID字段值上面就可以进行筛选了,我们点击筛留值
按钮
- 9. 此时页面中便只有TID= e3bf6e32-d7cb-4161-8a34-4da5c6393e8a的日志了
- 10. 通过浏览器再发送一次请求
http://localhost:8080/log/999
,后台返回TID为13572a9a-e3a9-4885-a7e4-6165b2b04287
- 11. 改变查询条件,只查询TID=13572a9a-e3a9-4885-a7e4-6165b2b04287的日志,按下图所示进行点击操作
- 12. 此时页面上便只留下TID=13572a9a-e3a9-4885-a7e4-6165b2b04287的日志了
- 13. 我们可以将这个查询方式保存下来,点击左上方的
保存
按钮,以便后续使用