$more config/first-pipeline.conf
input {
beats {
port => ""
}
}
filter {
if [type] == "speech" {
ruby {
code => "event.set('timestamp', event.get('@timestamp').time.localtime + 8*60*60); event.set('@timestamp', event.get('timestamp'))"
}
} if [type] == "speech-en" {
ruby {
code => "event.set('timestamp', event.get('@timestamp').time.localtime + 8*60*60); event.set('@timestamp', event.get('timestamp'))"
} } if [type] == "client-agent" {
ruby {
code => "event.set('timestamp', event.get('@timestamp').time.localtime + 8*60*60); event.set('@timestamp', event.get('timestamp'))"
} } if [type] == "client-agent-en" {
ruby {
code => "event.set('timestamp', event.get('@timestamp').time.localtime + 8*60*60); event.set('@timestamp', event.get('timestamp'))"
} } if [type] == "session-manager" {
ruby {
code => "event.set('timestamp', event.get('@timestamp').time.localtime + 8*60*60); event.set('@timestamp', event.get('timestamp'))"
}
}
}
output {
stdout {
codec => rubydebug
}
file{
codec => line {format => "%{message}"}
path => "/home/baoshan/elk/data/logstash/%{type}.%{+YYYYMMdd}"
}
# elasticsearch {
# hosts => ["test41:9200","test42:9200","test43:9200"]
# index => "%{hostabc}"
# document_type => "%{hostabc}"
# #protocol: "http"
# flush_size =>
# idle_flush_time =>
# user => "elastic"
# password => "baoshan"
# }
}

核心代码为ruby中的code语句。(感觉这是最笨的方法,继续探求精简的办法。。。。)

特么的找了一天了,现在大部分都还不是logstash5.x的

下面这种方法试烂了都不管用,不知哪里不对,还请高手指教:

    grok {
match => {
"message" => "time%{NUMBER:timestamp}id%{UUID:sn}asr%{NOTSPACE:asr}nlp%{NOTSPACE:nlp}domain%{NOTSPACE:domain}intent%{NOTSPACE:intent}"
}
}
date {
match => ["timestamp", "UNIX_MS"] #因为我的日志时间戳为UNIX时间戳,毫秒级,后来发现这个时间戳硬生生被ELK改成了UTC时间
target => "@timestamp"
locale => "en"
timezone => "+00:00"
}

所以有了下面的配置

改配置文件包括两个知识点

1. 不可见字符(ctrl+A,ctrl+B)grok的方法

2. logstash时间戳@timestamp修改为日志中时间字段的方法

input {
beats {
port => ""
}
}
filter {
grok {
match => [ # 此处的^A为vim下的CTRL+A
"message", "time\^B%{INT:timestamp}\^Aid\^B%{NOTSPACE:sn}\^Aasr\^B%{NOTSPACE:asr}\^Anlp\^B%{DATA:nlp}\^Adomain\^B%{JAVACLASS:domain}\^Aintent\^B%{NOTSPACE:intent}"
]
}
date {
match => ["timestamp", "UNIX_MS"]
target => "@timestamp"
}
ruby {
code => "event.set('temp', event.get('@timestamp').time.localtime + 8*60*60); event.set('@timestamp', event.get('temp'))"
}
}
output {
# stdout { codec => rubydebug }
file {
codec => line {format => "%{message}"}
path => "/home/admin/data/speech/speech.log.%{+YYYYMMdd}"
}
file {
codec => line {format => "%{+YYYY-MM-dd HH:mm:ss}^A%{sn}^A%{asr}^A%{nlp}^A%{domain}^A%{intent}"}
path => "/home/admin/data/speech/speech%{+YYYY-MM-dd}"
}
}

各位高手,如果有更好的方法,还请指教

Logstash5.3借助临时字段修改@timestamp为北京时间,方便按天生成output文件的更多相关文章

  1. unix时间戳(unix timestamp)与北京时间的互转方法

    1.在linux bash下北京时间与unix时间戳互转: 获取unix timestamp: 命令:date "+%s" 输出:1372654714 获取北京时间: 命令:dat ...

  2. 代码的坏味道(7)——临时字段(Temporary Field)

    坏味道--临时字段(Temporary Field) 特征 临时字段的值只在特定环境下有意义,离开这个环境,它们就什么也不是了. 问题原因 有时你会看到这样的对象:其内某个实例变量仅为某种特定情况而设 ...

  3. oracle数据库根据不同条件给同一字段修改相应的值:

    oracle数据库根据不同条件给同一字段修改相应的值: 例如:根据职务调整雇员的工资,如果职务为“SALESMAN”或者“ANALYST”工资上调100元,如果职务为“MANAGER”工资上调200元 ...

  4. Sqlserver 查询 临时字段

    临时字段格式   字段名=N'字段值' 例子如下: select cEmp_C, cEmp_N, oper_id=N'001', log_pw=N'123', sSex, cDept_C, cDept ...

  5. 如何把datetime类型字段修改为int类型

    如何把datetime类型字段修改为int类型 我有一个表为:table1 其中有一个datetime类型的字段  a    现在我想我想把字段a的类型改为int类型 当我执行以下命令时报如下的错误a ...

  6. mysql字段修改脚本

    -- help_text:帮助说明 -- help_content -- raw USE pro_seal_chip_sell_portal_v1; -- 表修改ALTER TABLE `help_t ...

  7. mysql中TIMESTAMP设置默认时间为当前时间

    在我们保存数据进入到数据库中时多半会使用像php之类的脚本来获取一个时间保存到mysql中,其实在mysql可以直接使用TIMESTAMP 数据类型来实现默认类型了,下面一起来看看.   很多时候,为 ...

  8. Linux环境变量的修改(永久,暂时)以及修改ls显示的时间格式

    本文转自:http://blog.sina.com.cn/s/blog_8e21864f01014u9h.html Linux修改环境变量,很简单但很重要 一.Linux的变量种类 按变量的生存周期来 ...

  9. Mybatis自动生成Xml文件,针对字段类型为text等会默认产生XXXXWithBlobs的方法问题

    默认情况下产生的Mapper.xml里面存在: 需要修改generatorConfiguration.xml,里面的table加属性,如: <table domainObjectName=&qu ...

随机推荐

  1. Eclipse 如何创建Web项目

      Eclipse 如何创建Web项目 CreateTime--2018年3月8日16:43:33 Author:Marydon 第一步: 右键-->New-->Dynamic Web P ...

  2. python之函数用法vars()

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #python之函数用法vars() #vars() #说明:返回对象object的属性和属性值的字典对象 ' ...

  3. reload基础

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #reload基础 #与import和from的不同之处: #reload是python的内置函数,而不是语句 ...

  4. 每天写点shell脚本 (持续更新)

    1.显示系统信息脚本 #!/bin/bash #A system information gathering script #Command UNAME="uname -a" pr ...

  5. scala中:: , +:, :+, :::, +++的区别

    4种操作符的区别和联系 一. ::   该方法被称为cons,意为构造,向队列的头部追加数据,创造新的列表. 用法为 x::list,其中x为加入到 头部的元素,无论x是列表与否,它都只将成为新生成列 ...

  6. 【laravel5.4】PHP5.6+ 调用命名空间下类方法、属性和对象

    1.调用命名空间的类方法,对象.属性 类对象:\App\User(); 类方法:\App\User::find($this->user_id) //查询构造器方法,将$this->user ...

  7. Java JDBC数据库编程

    课程  Java面向对象程序设计 一.实验目的 掌握数据库编程技术 二.实验环境 1.微型计算机一台 2.WINDOWS操作系统,Java SDK,Eclipse开发环境,Microsoft SQL  ...

  8. 我认为比较有用的快捷键(Eclipse)

    http://hi.baidu.com/%D4%AD%CA%BC%C1%F7%C0%CB%D5%DF/blog/item/e497b94dd1b0b92daec3ab36.html 我认为比较有用的快 ...

  9. POJ 3096 Surprising Strings

    Surprising Strings Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5081   Accepted: 333 ...

  10. RabbitMQ消息队列的小伙伴: ProtoBuf(Google Protocol Buffer) [转]

    什么是ProtoBuf? 一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化.它很适合做数据存储或 RPC 数据交换格式.可用于通讯协议.数据存储等领域的语言无关.平台无关.可扩 ...