首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ELK Stack -弹性搜索索引创建(logstash)

ELK Stack -弹性搜索索引创建(logstash)
EN

Stack Overflow用户
提问于 2016-03-01 20:53:14
回答 2查看 2.5K关注 0票数 1

我在试验麋鹿来分析我们的日志文件。根据可用的文档,设法在我的pc中设置堆栈。现在,我面临着弹性搜索索引创建的问题。以前我使用的是filebeat -> logstash -> elasticsearch -> kibana组合,使用以下logstash.conf文件可以将数据发送到elasticsearch

代码语言:javascript
复制
input {
  beats {
   port => 5044
   type => "log"
  }
}

output {
  elasticsearch {
   hosts => "localhost:9200"
   manage_template => false
   index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
   document_type => "%{[@metadata][type]}"
  }
}

并对弹性搜索的指标进行了评价。

代码语言:javascript
复制
 "filebeat-*" 

从表达式中

代码语言:javascript
复制
  index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"

现在我根据实际的日志文件将logstash.conf更改为

代码语言:javascript
复制
input { 

file
{
    path => "C:\logs\application.log"
    start_position => "beginning"
    codec => 
    multiline {
      charset => "ISO-8859-1"
      pattern => "^%{TIMESTAMP_ISO8601}"
      max_lines => 1000
      negate => true
      what => "previous"
    } 
}

}

filter {
 mutate {
     gsub => [ "message", "\r", "" ]
   }

   grok {
    patterns_dir => "./patterns"
    match => {"message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL1:loglevel} %{THREAD:thread} %{IP5:remoteipaddress} %{JAVA:logclass} %{GREEDYDATA:details}"}
  add_field => [ "received_at", "%{@timestamp}" ]
  add_field => [ "received_from", "%{host}" ]

  }
   date {
            match => [ "timestamp", "yyyy-MM-dd HH:mm:ss,SSS" ]
            remove_field => [ "timestamp" ]
        }


}

output {

  elasticsearch { 
                hosts => "localhost:9200"
    manage_template => false
     index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
     document_type => "%{[@metadata][type]}"
                }
                file {
     path => "C:\logs\output.txt"
  }
}

在这种情况下,logstash对conf文件很满意,但是我为弹性搜索建议的索引没有得到正确的评估。

如果我用头部插件检查弹性搜索,

代码语言:javascript
复制
http://localhost:9200/_plugin/head/

索引显示为

代码语言:javascript
复制
%{[@metadata][beat]}-

我不知道为什么现在没有计算索引表达式。任何解决这个问题的建议都是有帮助的。

谢谢你,桑

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-01 21:09:45

某些logstash插件使用元数据来传输不想存储在文档中的字段。在第一个示例中,B拍输入设置了某些元数据,稍后在elasticsearch输出中使用这些元数据来设置索引和类型。由于文件输入没有设置这些元数据字段,logstash将输出变量名而不是空字符串,因此它为什么设置“%{@元数据}-2016.04.05”索引,日期是已知的,但元数据字段beat不是。

如果您只保留elasticsearch输出,因为它是默认的,那么它应该工作得很好:

elasticsearch { hosts => "localhost:9200" }

如果您将manage_template保留为false,那么它也不会应用logstash-模板,而且字段映射可能会有点偏离,所以我建议将其保留为默认值(true)。

票数 1
EN

Stack Overflow用户

发布于 2016-03-01 21:10:20

既然您知道应该调用什么索引,只需将其放入elasticsearch:

代码语言:javascript
复制
Since you know what the index should be called, just put it in the `elasticsearch` output:

output {
  elasticsearch { 
    hosts => "localhost:9200"
    manage_template => false
    index => "filebeat-%{+YYYY.MM.dd}"
    document_type => "whatever_type_filebeat_put_in"
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35733265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档