我是ELK堆栈的新手。探索最后一周的logstash和弹性搜索。我发现很难将时间戳(默认视为字符串类型)转换为日期类型字段。 字符串“Thu May 18 06:39:44 CEST 2017”表示工具日志中的时间戳,希望使用logstash过滤器Date插件将此字符串转换为日期字段。我不知道怎么做。任何建议或帮助将不胜感激。谢谢 !
filter {
csv {
columns =>["Make","Color","Price","Sold"]
separator =>","
}
date
{
match => ["Sold", "DD-MM-YYYY"] # Not sure how to match timestamp in log file to convert to date type.
target => "Sold"
}
mutate{
convert => ["Price","float"]
}
}
//我们假设我的csv文件包含以下日志。时间戳的最后一个字段 iPhone,银色,260,星期四07月07日11:05:07 CEST 2017
iPhone,黄金,400,星期四07月12日12:05:07 CEST 2017
答案 0 :(得分:0)
首先按以下命令设置索引。 (...将其替换为其余列及其类型。请参阅Elasticsearch Put Mapping)
df2 = df[df['Name'] == 'aaa'].reset_index().reset_index() # I did this just to create an empty data frame with the columns I want
for name, row in df.groupby('Name').count().iterrows():
table = df[df['Name'] == name].sort_values('Time').reset_index().reset_index()
to_concat = [df2,table]
df2 = pd.concat(to_concat)
df2.drop('index', axis = 1, inplace = True)
df2.columns = ['Order', 'Distance', 'Name', 'Time']
df2
现在,您可以继续使用logstash将数据推送到ES。从logstash配置文件中删除日期过滤器。 ES会将字符串解析为日期。
注意:在使用示例数据对其进行测试时,我意识到PUT date
{
"mappings": {
"date": {
"properties": {
...,
"TimeStamp": {
"type": "date",
"format": "EEE MMM dd HH:mm:ss zzz yyyy"
},
...
}
}
}
}
不被接受为时区。我想你需要用CST替换CEST。这种解析存在一些问题,refer。
如果您的数据中的时区固定为CEST,那么您可以执行以下操作:
CEST