Logstash5.3借助临时字段修改@timestamp为北京时间,方便按天生成output文件
$more config/first-pipeline.conf input { beats { port => "5044" } } 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 => 100 # idle_flush_time => 10 # 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 => "5044" } } 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}" } }
各位高手,如果有更好的方法,还请指教
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具