filebeat使用dissect替换默认的的timestamp以及多行处理

大家在使用elasticsearch查询日志的时候应该都碰到过日志乱序的问题,因为elasticsearch默认使用写入ES的时间作为timestamp,这样多个文件往ES里面写的时候难免会有乱序的情况。

解决办法就是将日志里面的时间抽取出来作为日志的默认时间戳。下面就来讲讲具体怎么实现:

  1. 使用dissect提取日志里面的日期和时间

    yaml 复制代码
    - dissect:
        #这里按照日志的格式提取就好,不一定非要像我这样
        tokenizer: "%{log_date} %{log_time} %{message}"
        field: "message"
        target_prefix: "extracted"
  2. 使用script生成新的timestamp,并处理异常情况

    yaml 复制代码
    - script:
        language: javascript
        source: >
          function process(event) {
          	try{
          		var date = event.Get("extracted:log_date");
          		var time = event.Get("extracted:log_time");
          		if(date && time){
          			var timestamp = new Date(date + 'T' + time + 'Z');
          			if(isNaN(timestamp.getTime())){
          				return;
          			}
          			event.Put("@timestamp", timestamp);
          		}
          	}
          	catch(e){
          		event.Put("error", e.message);
          	}
          }
  3. 最后使用timestamp替换原有时间戳

    yaml 复制代码
    - timestamp:
        filed: "@timestamp"
        layouts: ["ISO8601"]

完整配置:

yaml 复制代码
# filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  path: 
    - /data/app/folder1/logs/aa.log
    - /data/app/folder2/logs/bb.log
    - /data/app/folder3/logs/cc.log
    - /data/app/folder4/logs/dd.log
    - /data/app/folder5/logs/ee.log
  
  # 多行处理(适用于将多行异常转为一条日志记录)
  multiline:
    pattern: '^\d{4}-\d{2}-\d{2}'
    negate: true
    match: after

  processors:
  - dissect:
	    tokenizer: "%{log_date} %{log_time} %{message}"
	    field: "message"
	    target_prefix: "extracted"
  - script:
      language: javascript
      source: >
        function process(event) {
         	try{
         		var date = event.Get("extracted:log_date");
         		var time = event.Get("extracted:log_time");
         		if(date && time){
         			var timestamp = new Date(date + 'T' + time + 'Z');
         			if(isNaN(timestamp.getTime())){
         				return;
         			}
         			event.Put("@timestamp", timestamp);
         		}
         	}
         	catch(e){
         		event.Put("error", e.message);
         	}
         }
  - timestamp:
	    filed: "@timestamp"
	    layouts: ["ISO8601"]
相关推荐
Dxy12393102166 小时前
Elasticsearch 索引与映射:为你的数据打造一个“智能仓库”
大数据·elasticsearch·搜索引擎
倒流时光三十年11 小时前
SpringBoot 数据库同步 Elasticsearch 性能优化
数据库·spring boot·elasticsearch
星辰_mya13 小时前
Elasticsearch更新了分词器之后
大数据·elasticsearch·搜索引擎
Elastic 中国社区官方博客13 小时前
Elasticsearch:Workflows 介绍 - 9.3
大数据·数据库·人工智能·elasticsearch·ai·全文检索
星辰_mya14 小时前
Elasticsearch主分片数写入后不能改
大数据·elasticsearch·搜索引擎
春日见1 天前
vscode代码无法跳转
大数据·人工智能·深度学习·elasticsearch·搜索引擎
那起舞的日子1 天前
ElasticSearch系列-3-java端整合CURD
elasticsearch
历程里程碑1 天前
普通数组----最大子数组和
大数据·算法·elasticsearch·搜索引擎·排序算法·哈希算法·散列表
星辰_mya1 天前
Elasticsearch之下
大数据·elasticsearch·搜索引擎
Elastic 中国社区官方博客1 天前
跳过 MLOps:通过 Cloud Connect 使用 EIS 为自管理 Elasticsearch 提供托管云推理
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索