Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logstash输入文件名作为输出elasticsearch索引_Logstash_Logstash File - Fatal编程技术网

Logstash输入文件名作为输出elasticsearch索引

Logstash输入文件名作为输出elasticsearch索引,logstash,logstash-file,Logstash,Logstash File,有没有办法让logstash读取的文件名作为输出到ElasticSearch的索引名 我正在使用以下配置进行日志存储 input{ file{ path => "/logstashInput/*" } } output{ elasticsearch{ index => "FromfileX" } } 我希望能够放置一个文件,例如log-from-20.10.2016.log,并将其索引到索引log-from-20.10

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

我正在使用以下配置进行日志存储

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

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

是的,您可以使用
路径
字段进行该操作,并使用
grok
将文件名提取到
索引
字段中

  input {
     file {
         path => "/logstashInput/*"
     }
  }
  filter {
     grok {
        match => ["path", "(?<index>log-from-\d{2}\.\d{2}\.\d{4})\.log$" ]
     }
  }
  output{
     elasticsearch {
        index => "%{index}"
     }
  }
输入{
文件{
路径=>“/logstashInput/*”
}
}
滤器{
格罗克{
match=>[“path”,“(?日志从-\d{2}\.\d{2}\.\d{4})\.log$”]
}
}
输出{
弹性搜索{
index=>“%{index}”
}
}

对于7.9.1版,它不起作用,它会显示一个错误,表明这是无效的syntax@max我查一下再给你回电话。同时,如果你能分享你得到的错误,那会有帮助的。也许你可以取消你的否决票;-)如果我在grok match中放入任何其他内容,我会得到错误:执行操作失败{:action=>LogStash::PipelineAction::Create/pipeline_id:main,:exception=>“LogStash::ConfigurationError,如果我删除其他内容,除了%{index}之外,我不会得到任何错误未得到替代。我尝试使用字符串作为路径而不是列表,但仍然无效。对于7.9.1版,它会导致日志存储冻结,并且您无法再重新启动服务
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 }
}