echo  
                
               
                 
              
                  
                    February 8, 2020, 11:12am
                   
                   
              1 
               
             
            
              Logstash.conf で Filebeat から送信されたファイル名を grok で取得したいのですが、 
下記で出来ませんでした。(バージョン7.5.2)
6.3.1 では出来ていて、ドキュメントを読んでも同様の動作が 
可能な方法が見つからない状況です。
Filebeatの送信ファイルパスは、/var/log/2.log です。 
どなたかご教示いただければと思います。
input {
  beats {
    port => 5044
  }
}
filter {
  grok {
    match => { "source" => "/var/log/%{INT:filename}.log" }
  }
}
output {
  file {
    path => "/usr/local/var/logstash/%{filename}.tsv"
    codec => line { format => "%{message}" }
  }
} 
             
            
               
               
               
            
            
           
          
            
              
                tsgkdt  
                (tsgkdt)
               
                 
              
                  
                    February 9, 2020,  1:10pm
                   
                   
              2 
               
             
            
              こんにちわ
filebeat6.3.1と、7.5.2ではlogstashに送られる中身の構造が変わっているかと思います。 
これは、7系からElastic Common Schemaに準拠するようになったからかと思っています。 
例えば、7.5.2ではこんなデータになってLogstashに送られていますね。
{
    "@version" => "1",
    "@timestamp" => 2020-02-06T10: 14: 11.310Z,
    "agent" => {
        "hostname" => "a00271752ce1",
        "version" => "7.5.2",
        "id" => "b26e6309-0577-408e-9284-b059421fcf0c",
        "type" => "filebeat",
        "ephemeral_id" => "c4eb8204-77e1-4d87-a252-c5ad5f978afb"
    },
    "log" => {
        "offset" => 0,
        "file" => {
            "path" => "/var/log/2.log"
        }
    },
    "ecs" => {
        "version" => "1.1.0"
    },
    "message" => "aaaa",
    "host" => {
        "hostname" => "a00271752ce1",
        "containerized" => true,
        "os" => {
            "version" => "7 (Core)",
            "kernel" => "4.19.76-linuxkit",
            "family" => "redhat",
            "name" => "CentOS Linux",
            "platform" => "centos",
            "codename" => "Core"
        },
        "name" => "a00271752ce1",
        "architecture" => "x86_64"
    },
    "input" => {
        "type" => "log"
    }
}
 
このため、従来 sourceに入っていたところのファイルのパスが log.file.pathになっています。 
ここがLogstash側でエラーになっている原因かと推察します。
ですので、grokの部分をlog.file.pathにあわせて変更してやれば良いとなります。 
こんな感じです。
input {
  beats {
    port => 5044
  }
}
filter {
  grok {
    # データ取得元を変更
    match => { "[log][file][path]" => "/var/log/%{INT:filename}.log" }
  }
}
output {
  stdout {
  }
}
 
まず、一度stdoutでgrokのエラーが出ないことを確認してから、ファイル出力でお試しいただくのが良いかと思います。
ご参考になれば幸いです。
             
            
               
               
               
            
            
           
          
            
              
                echo  
                
               
              
                  
                    February 9, 2020,  3:51pm
                   
                   
              3 
               
             
            
              
 tsgkdt:
 
[log][file][path]
 
 
ご丁寧なご説明と、貴重な情報をありがとうございます。 
無事に解決できました。
             
            
               
               
               
            
            
           
          
            
              
                system  
                (system)
                  Closed 
               
              
                  
                    March 8, 2020,  3:51pm
                   
                   
              4 
               
             
            
              This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.