如何将字符串转换为logstash过滤器插件

时间:2017-10-17 16:05:51

标签: elasticsearch logstash

我是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

1 个答案:

答案 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