我有一个需要导入 Elasticsearch 的文本文件。我的文本文件格式是:
1 ARsv200711042 Allen Alane
2 ARsv200711042 Allen Arthur
3 ARsv200711042 Allen Bernice
4 ARsv200711042 Allen Betty
5 ARsv200711042 Allen Brittany
6 ARsv200711042 Allen Bruce
7 ARsv200711042 Allen Carolyn
8 ARsv200711042 Allen Carolyn
9 ARsv200711042 Allen Chadderick
10 ARsv200711042 Allen Darlene
我需要获取有关职位的数据;例如,第一列是 eMID,从第 1 位到第 13 位,我的 StateSource 位于第 14-15 位,CodeProducts 位于第 16-17 位,依此类推。
所以我做了这样的 Logstash 配置:
input {
file {
path => "D:/sample/sample 500.txt"
start_position => "beginning"
}
}
filter {
grok {
match => {
"message" => [
"(?<eMID>.{0,13})(?<StateSource>.{0,2})(?<CodeProducts>.{0,2})(?<AcquiredDate>.{0,8})(?<Uses>.{0,2})(?<Prefix>.{0,10})(?<LName>.{0,30})(?<FName>.{0,30})"
]
}
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "sample-data"
#user => "elastic"
#password => "changeme"
}
}
我能够成功导入数据。我有以下问题:
20071104
需要转换为日期格式的日期格式,elasticsearch可以分析Firstname/FName
或者Lastname/LName
可能包含特殊字符,例如+ - && || ! ( ) { } [ ] ^ " ~ * ? : \
等,我怎样才能将那些与正则表达式匹配并插入到 elasticsearch 中。好的,一种方法是将其20071104
分成四部分\d{4}
并将其分配给 y,将接下来的两位数字分配\d{2}
给 m,将剩余的两位数字\d{2}
分配给 d 并构建一个日期对象
或者第二种方法是从字符串创建一个日期并使用该对象重新格式化,就像我在这个例子中所做的那样,假设 AcquiredDate 是 20071104
filter {
ruby {
code => '
date = Date.strptime(event.get("AcquiredDate"), "%Y%m%d")
event.set("new_time", date.strftime("%Y-%m-%d"))
'
}
mutate {
remove_field =>
["host","@timestamp","sequence","message","@version"]
}
}
给你
{
"AcquiredDate" => "20071104",
"new_time" => "2007-11-04"
}
回答你的第二部分
使用这样的东西
mutate {
strip => ["field1withwhitespace", "field2withwhitespace"]
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句