【问题标题】:Logstash input filename as output elasticsearch indexLogstash 输入文件名作为输出弹性搜索索引
【发布时间】:2016-10-20 13:08:06
【问题描述】:

有没有办法让 logstash 读取的文件的文件名作为输出到 ElasticSearch 的索引名称?

我正在为 logstash 使用以下配置。

input{
    file{
        path => "/logstashInput/*"
    }
}
output{
    elasticsearch{
        index => "FromfileX"
    }
}

我希望能够放置一个文件e.g. log-from-20.10.2016.log 并将其编入索引log-from-20.10.2016。 logstash 输入插件“文件”是否会产生任何用于过滤器或输出的变量?

【问题讨论】:

    标签: logstash logstash-file


    【解决方案1】:

    是的,您可以使用 path 字段和 grok 将文件名提取到 index 字段中

      input {
         file {
             path => "/logstashInput/*"
         }
      }
      filter {
         grok {
            match => ["path", "(?<index>log-from-\d{2}\.\d{2}\.\d{4})\.log$" ]
         }
      }
      output{
         elasticsearch {
            index => "%{index}"
         }
      }
    

    【讨论】:

    • 7.9.1版本,它不起作用,它显示一个错误,这是一个无效的语法
    • @max 我会检查并回复你。同时,如果您可以分享您遇到的错误,那将有所帮助。也许您可以删除您的反对票 ;-)
    • 如果我在 grok match 中添加任何其他内容,我会收到错误:无法执行操作 {:action=>LogStash::PipelineAction::Create/pipeline_id:main, :exception=>"LogStash: :ConfigurationError 并且如果我删除其他东西,我不会收到任何错误,但 %{index} 没有被替换。我尝试使用字符串作为路径而不是列表,仍然没有工作。
    【解决方案2】:
    input {
        file {
            path => "/home/ubuntu/data/gunicorn.log"
            start_position => "beginning"
        }
    }
    
    filter { 
        grok {
            match => {
            "message" => "%{USERNAME:u1} %{USERNAME:u2} \[%{HTTPDATE:http_date}\] \"%{DATA:http_verb} %{URIPATHPARAM:api} %{DATA:http_version}\" %{NUMBER:status_code} %{NUMBER:byte} \"%{DATA:external_api}\" \"%{GREEDYDATA:android_client}\""
            remove_field => ["message"]
           }
        }
    
        date {
            match => ["http_date", "dd/MMM/yyyy:HH:mm:ss +ssss"]
        } 
    
        ruby {
            code => "event.set('index_name',event.get('path').split('/')[-1].gsub('.log',''))"
        } 
    }
    output {
        elasticsearch {
            hosts => ["0.0.0.0:9200"]
            index => "%{index_name}-%{+yyyy-MM-dd}"
            user => "*********************"
            password => "*****************"
        }
    
        stdout { codec => rubydebug }
    }
    

    【讨论】:

    • 在 7.9.1 版本中,它会导致日志存储冻结,您无法再重新启动服务
    猜你喜欢
    • 1970-01-01
    • 2022-12-04
    • 2023-03-16
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多