Logstash:データ変換、分析、抽出、豊かでコア業務

Logstash:データ変換、分析、抽出、豊かでコア業務

Logstashプラグイン

Logstashは、拡張のための非常に簡単なフレームワークです。これは、様々なデータを分析し、処理することができます。これは、現在入手可能な以上、200以上のプラグインに依存しています。
まず、どのような現在のプラグインで見てみましょう:

入力プラグイン

最初は、binサブディレクトリLogstashのインストールディレクトリを入力し、コマンドラインで次のように入力します。

$ ./logstash-plugin list --group input

ディスプレイ:

logstash-input-azure_event_hubs
logstash-input-beats
logstash-input-couchdb_changes
logstash-input-elasticsearch
logstash-input-exec
logstash-input-file
logstash-input-ganglia
logstash-input-gelf
logstash-input-generator
logstash-input-graphite
logstash-input-heartbeat
logstash-input-http
logstash-input-http_poller
logstash-input-imap
logstash-input-jdbc
logstash-input-jms
logstash-input-kafka
logstash-input-pipe
logstash-input-rabbitmq
logstash-input-redis
logstash-input-s3
logstash-input-snmp
logstash-input-snmptrap
logstash-input-sqs
logstash-input-stdin
logstash-input-syslog
logstash-input-tcp
logstash-input-twitter
logstash-input-udp
logstash-input-unix

フィルタプラグ

コマンドラインで次のコマンドを入力します。

$ ./logstash-plugin list --group filter
logstash-filter-aggregate
logstash-filter-anonymize
logstash-filter-cidr
logstash-filter-clone
logstash-filter-csv
logstash-filter-date
logstash-filter-de_dot
logstash-filter-dissect
logstash-filter-dns
logstash-filter-drop
logstash-filter-elasticsearch
logstash-filter-fingerprint
logstash-filter-geoip
logstash-filter-grok
logstash-filter-http
logstash-filter-jdbc_static
logstash-filter-jdbc_streaming
logstash-filter-json
logstash-filter-kv
logstash-filter-memcached
logstash-filter-metrics
logstash-filter-mutate
logstash-filter-prune
logstash-filter-ruby
logstash-filter-sleep
logstash-filter-split
logstash-filter-syslog_pri
logstash-filter-throttle
logstash-filter-translate
logstash-filter-truncate
logstash-filter-urldecode
logstash-filter-useragent
logstash-filter-uuid
logstash-filter-xml

出力プラグイン

コマンドラインで次のコマンドを入力します。

$ ./logstash-plugin list --group output
logstash-output-cloudwatch
logstash-output-csv
logstash-output-elastic_app_search
logstash-output-elasticsearch
logstash-output-email
logstash-output-file
logstash-output-graphite
logstash-output-http
logstash-output-lumberjack
logstash-output-nagios
logstash-output-null
logstash-output-pipe
logstash-output-rabbitmq
logstash-output-redis
logstash-output-s3
logstash-output-sns
logstash-output-sqs
logstash-output-stdout
logstash-output-tcp
logstash-output-udp
logstash-output-webhdfs

コーデックプラグイン:

コマンドラインで次のコマンドを入力します。

$ ./logstash-plugin list codec
logstash-codec-avro
logstash-codec-cef
logstash-codec-collectd
logstash-codec-dots
logstash-codec-edn
logstash-codec-edn_lines
logstash-codec-es_bulk
logstash-codec-fluent
logstash-codec-graphite
logstash-codec-json
logstash-codec-json_lines
logstash-codec-line
logstash-codec-msgpack
logstash-codec-multiline
logstash-codec-netflow
logstash-codec-plain
logstash-codec-rubydebug

これで、私たちはLogstashをインストールした後、上に示している、私たちに構成されたプラグインを与えています。私たちは、独自のプラグインを開発し、それをインストールすることができます。我々はまた、他の人が良いプラグインを開発しているインストールすることができます。

ファイルは、入力と出力であるので、私たちは、上から見ることができ、私たちも、以下の設定を行うことができます。

input {
   file {
      path => "C:/Program Files/Apache Software Foundation/Tomcat 7.0/logs/*access*"
      type => "apache"
   }
} 
output {
   file {
      path => "C:/tpwork/logstash/bin/log/output.log"
   }
}

私たちは、Logstashへの入力ファイルを読み込み、その処理の後、これは次のような出力になります:

0:0:0:0:0:0:0:1 - - [
   25/Dec/2016:18:37:00 +0800] "GET / HTTP/1.1" 200 11418

{
   "path":"C:/Program Files/Apache Software Foundation/Tomcat 7.0/logs/
   localhost_access_log.2016-12-25.txt",
   "@timestamp":"2016-12-25T10:37:00.363Z","@version":"1","host":"Dell-PC",
   "message":"0:0:0:0:0:0:0:1 - - [25/Dec/2016:18:37:00 +0800] \"GET /
   HTTP/1.1\" 200 11418\r","type":"apache","tags":[]
}

プラグインのインストール

標準logstashでは、プラグインの多くがインストールされているがありますが、いくつかのケースでは、我々は手動で、このようなExecの出力プラグインとして私たちに必要ないくつかのプラグインをインストールする必要があります。私たちは、binディレクトリにあるコマンドの次の人を打つことができます。

./bin/logstash-plugin install logstash-output-exec

私たちは、上記のプラグインが正常にインストールされているかどうかを確認するには、次のコマンドを使用します。

./bin/logstash-plugin list --group output | grep exec

$ ./bin/logstash-plugin list --group output | grep exec
Java HotSpot(TM) 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.bouncycastle.jcajce.provider.drbg.DRBG (file:/Users/liuxg/elastic/logstash-7.4.0/vendor/jruby/lib/ruby/stdlib/org/bouncycastle/bcprov-jdk15on/1.61/bcprov-jdk15on-1.61.jar) to constructor sun.security.provider.Sun()
WARNING: Please consider reporting this to the maintainers of org.bouncycastle.jcajce.provider.drbg.DRBG
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
logstash-output-exec

ログファイルを読み込み

Logstash簡単にログファイルを読み取るように設定します。たとえば、私たちは、以下の方法でApacheのログファイルを読むことができます:

input {
  file { 
    type => "apache"
    path => "/Users/liuxg/data/apache_logs"
      start_position => "beginning"
      sincedb_path => "null"
  }
}
 
output {
    stdout { 
        codec => rubydebug 
    }
}

私たちも、複数のファイルを読むことができます:

# Pull in application-log data. They emit data in JSON form.
input {
  file {
    path => [
      "/var/log/app/worker_info.log",
      "/var/log/app/broker_info.log",
      "/var/log/app/supervisor.log"
    ]
    exclude => "*.gz"
    type    => "applog"
    codec   => "json"
  }
}

シリーズデータ

:私たちは、コーデックのような、私たちのデータ系列によって提供されている使用することができます

input {
  // Deserialize newline separated JSON
  file  { path => “/some/sample.log”, codec => json }
}
 
output {
  // Serialize to the msgpack format
  redis { codec => msgpack }
  stdout {
    codec => rubydebug
  }
}

当社longstashアップと実行した後、我々は、端末sample.json内のファイルにコンテンツを追加するには、次のコマンドを採用することができます。
$ echo '{"name2", "liuxg2"}' >> ./sample.log

私たちは、次の出力を見ることができます:

{
      "@version" => "1",
       "message" => "{\"name2\", \"liuxg2\"}",
    "@timestamp" => 2019-09-12T07:37:56.639Z,
          "host" => "localhost",
          "tags" => [
        [0] "_jsonparsefailure"
    ],
          "path" => "/Users/liuxg/data/sample.log"
}

最も一般的なコーデック

  1. logstashイベントに各行を変換する「メッセージ」を使用して、データライン。カスタム出力ラインを書式設定することができます。

  2. 複数行:あなたは「メッセージ」を可能にする任意の境界を構成しています。スタックトレース、他方は頻繁に使用されます。また、中filebeatで行うことができます。

  3. json_lines:JSONを解析改行区切りデータ

  4. JSON:すべてのJSONを解析します。そのようなRedisの/カフカ/ HTTPなどのようなメッセージ指向の入力/出力、のためにのみ

他の多くのコーデックがあります。

分析と抽出

GROKフィルター

filter {
    grok {
        match => [
            "message", "%{TIMESTAMP_ISO8601:timestamp_string}%{SPACE}%{GREEDYDATA:line}"
        ]
    }
}

上記の例では、データの身体へのログ情報として簡単に私たちを助けることができます。

2019-09-09T13:00:00Z Whose woods these are I think I know.

その他のパタ​​ーンパターンはアドレスGROKで見つけることができる完全に理解。

日付フィルタ

filter {
  date {
    match => ["timestamp_string", "ISO8601"]
  }
}

日付フィルタは、私たちは私たちが望む時間形式に文字列を入れて、@timestampフィールドにこの値を与えるのを助けることができます。

解剖フィルタ

それはより速く、より小さなGROKの軽量です。

filter {
  dissect {
    mapping => {“message” => “%{id} %{function->} %{server}”}
  }
}

フィールドデリミタパターン及びフォーマット類似GROK。

例:

    input {
      generator {
        message => "<1>Oct 16 20:21:22 www1 1,2016/10/16 20:21:20,3,THREAT,SCAN,6,2016/10/16 20:21:20,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54"
        count => 1
      }
    }
     
    filter {
      if [message] =~ "THREAT," {
        dissect {
          mapping => {
            message => "<%{priority}>%{syslog_timestamp} %{+syslog_timestamp} %{+syslog_timestamp} %{logsource} %{pan_fut_use_01},%{pan_rec_time},%{pan_serial_number},%{pan_type},%{pan_subtype},%{pan_fut_use_02},%{pan_gen_time},%{pan_src_ip},%{pan_dst_ip},%{pan_nat_src_ip},%{pan_nat_dst_ip},%{pan_rule_name},%{pan_src_user},%{pan_dst_user},%{pan_app},%{pan_vsys},%{pan_src_zone},%{pan_dst_zone},%{pan_ingress_intf},%{pan_egress_intf},%{pan_log_fwd_profile},%{pan_fut_use_03},%{pan_session_id},%{pan_repeat_cnt},%{pan_src_port},%{pan_dst_port},%{pan_nat_src_port},%{pan_nat_dst_port},%{pan_flags},%{pan_prot},%{pan_action},%{pan_misc},%{pan_threat_id},%{pan_cat},%{pan_severity},%{pan_direction},%{pan_seq_number},%{pan_action_flags},%{pan_src_location},%{pan_dst_location},%{pan_content_type},%{pan_pcap_id},%{pan_filedigest},%{pan_cloud},%{pan_user_agent},%{pan_file_type},%{pan_xff},%{pan_referer},%{pan_sender},%{pan_subject},%{pan_recipient},%{pan_report_id},%{pan_anymore}"
          }
        }
      }
    }
     
     
    output {
        stdout { 
            codec => rubydebug 
        }
    }

実行した後:

    {
                 "@timestamp" => 2019-09-12T09:20:46.514Z,
                 "pan_dst_ip" => "9",
             "pan_nat_src_ip" => "10",
                   "sequence" => 0,
                  "logsource" => "www1",
             "pan_session_id" => "23",
                   "pan_vsys" => "16",
                    "pan_cat" => "34",
              "pan_rule_name" => "12",
               "pan_gen_time" => "2016/10/16 20:21:20",
             "pan_seq_number" => "37",
                "pan_subject" => "50",
       
                    ....
       
                    "message" => "<1>Oct 16 20:21:22 www1 1,2016/10/16 20:21:20,3,THREAT,SCAN,6,2016/10/16 20:21:20,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54",
             "pan_fut_use_02" => "6",
                  "pan_flags" => "29",
           "syslog_timestamp" => "Oct 16 20:21:22",
                "pan_anymore" => "53,54"
    }

KVフィルタ

簡単な方法でデータの分析、キー/値のペア

    filter {
      kv {
        source => “message”
        target => “parsed”
        value_split => “:”
      }
    }

我々は、このconfファイルを実行します。

    input {
      generator {
        message => "pin=12345~0&d=123&[email protected]&oq=bobo&ss=12345"
        count => 1
      }
    }
     
    filter {
        kv {
            source => "message"
            target => "parsed"
            field_split => "&?"
        }
    }
     
    output {
        stdout { 
            codec => rubydebug 
        }
    }

結果はそれを示しています。

    {
        "@timestamp" => 2019-09-12T09:46:04.944Z,
              "host" => "localhost",
            "parsed" => {
             "ss" => "12345",
              "e" => "[email protected]",
            "pin" => "12345~0",
             "oq" => "bobo",
              "d" => "123"
        },
           "message" => "pin=12345~0&d=123&[email protected]&oq=bobo&ss=12345",
          "sequence" => 0,
          "@version" => "1"
    }

:KVのflterのために、我々はまた、のような、オブジェクトの内部に情報を整理するために、ターゲットを使用することができます

    filter {
      kv {
        source => “message”
        target => “parsed”
        value_split => “:”
      }
    }

コアオペレーティング変異させるフィルタ

このフィルタは、多くの機能を提供します。

  • 変換フィールドタイプ(stringToIntegerから等)
  • 追加/名前変更/置き換え/複製フィールド
  • ビッグ - 小文字変換
  • 一緒にアレイを接続する(アレイのため=>文字列の有用な操作)
  • マージハッシュ
  • フィールドには、分割された配列であります
  • 剥奪空白
    input {
      generator {
        message => "pin=12345~0&d=123&[email protected]&oq=bobo&ss=12345"
        count => 1
      }
    }
     
    filter {
        kv {
            source => "message"
            field_split => "&?"
        }
     
        if [pin] == "12345~0" {
            mutate { add_tag => [ 'metrics' ]
        }
     
        mutate {
            split => ["message", "&"]
            add_field => {"foo" => "bar-%{pin}"}
        }
      }
    }
     
    output {
        stdout { 
            codec => rubydebug 
        }
     
        if "metrics" in [tags] {
          stdout {
             codec => line { format => "custom format: %{message}" }
          }
       }
    }

結果はそれを示しています。

    {
         "foo" => "bar-12345~0",
          "e" => "[email protected]",
          "sequence" => 0,
           "message" => [
            [0] "pin=12345~0",
            [1] "d=123",
            [2] "[email protected]",
            [3] "oq=bobo",
            [4] "ss=12345"
        ],
               "pin" => "12345~0",
                 "d" => "123",
              "host" => "localhost",
                "ss" => "12345",
        "@timestamp" => 2019-09-14T15:03:15.141Z,
                "oq" => "bobo",
          "@version" => "1",
              "tags" => [
            [0] "metrics"
        ]
    }
    custom format: pin=12345~0,d=123,[email protected],oq=bobo,ss=12345

変換フィルタのコア

  • ミュート - 各項目を追加/変更
  • スプリト - 複数のイベントにイベントを入れます
  • イベントを失った - ドロップ

条件付きロジック

if/else

  • =〜正規表現(正規の)を使用することができます
  • あなたは、配列内のメンバーシップを確認することができます
    filter {
      mutate { lowercase => “account” }
      if [type] == “batch” {
        split { 
            field => actions 
           target => action 
        }
      }
     
      if { “action” =~ /special/ } {
        drop {}
      }
    }

GeoIP

豊富なIPアドレス情報:

filter { geoip { fields => “my_geoip_field” }}

次の設定を実行します。

    input {
      generator {
        message => "83.149.9.216"
        count => 1
      }
    }
     
    filter {
        grok {
            match => {
                "message" => '%{IPORHOST:clientip}'
            }
        }
     
        geoip {
            source => "clientip"
        }
    }
     
    output {
        stdout {
            codec => rubydebug
        }
    }

結果は以下のように示されています。

    {
              "host" => "localhost",
          "@version" => "1",
          "clientip" => "83.149.9.216",
           "message" => "83.149.9.216",
        "@timestamp" => 2019-09-15T06:54:46.695Z,
          "sequence" => 0,
             "geoip" => {
                  "timezone" => "Europe/Moscow",
               "region_code" => "MOW",
                  "latitude" => 55.7527,
             "country_code3" => "RU",
            "continent_code" => "EU",
                 "longitude" => 37.6172,
              "country_name" => "Russia",
                  "location" => {
                "lat" => 55.7527,
                "lon" => 37.6172
            },
                        "ip" => "83.149.9.216",
               "postal_code" => "102325",
             "country_code2" => "RU",
               "region_name" => "Moscow",
                 "city_name" => "Moscow"
        }
    }

私たちは、特定の情報がたくさんある、のGeoIPの下で見ることができます。

DNSフィルタ

詳細について有益なDNSホスト名の場合

filter { dns { fields => “my_dns_field” }}

私たちは、Logstash次のプロファイルを定義します。

    input {
      generator {
        message => "www.google.com"
        count => 1
      }
    }
     
    filter {
        mutate {
            add_field => { "hostname" => "172.217.160.110"}
        }
     
     
        dns {
            reverse => ["hostname"]
            action => "replace"  
        }   
     
    }
     
    output {
        stdout {
            codec => rubydebug
        }
    }

上記は、Googleのアドレスであり、その出力は次のようになります。

    {
              "host" => "localhost",
          "sequence" => 0,
           "message" => "www.google.com",
        "@timestamp" => 2019-09-15T11:35:43.791Z,
          "hostname" => "tsa03s06-in-f14.1e100.net",
          "@version" => "1"
    }

ここでは、ホスト名の値を見ることができます。

UserAgentのファイラー

ブラウザのユーザーエージェント情報がより豊富であるしましょう。Logstash我々は、次の設定を使用します。

    input {
      generator {
        message => '83.149.9.216 - - [17/May/2015:10:05:50 +0000] "GET /presentations/logstash-monitorama-2013/images/kibana-dashboard.png HTTP/1.1" 200 321631 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"'
        count => 1
      }
    }
     
    filter {
        grok {
            match => {
              "message" => '%{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] "%{WORD:verb} %{DATA:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:response:int} (?:-|%{NUMBER:bytes:int}) %{QS:referrer} %{QS:agent}'
            }
          }
     
        useragent {
            source => "agent"
            target => "useragent"
        }
    }
     
    output {
        stdout {
            codec => rubydebug
        }
    }

これは、不足の結果です:

    {
            "request" => "/presentations/logstash-monitorama-2013/images/kibana-dashboard.png",
          "useragent" => {
                "name" => "Chrome",
               "build" => "",
              "device" => "Other",
            "os_major" => "10",
                  "os" => "Mac OS X",
               "minor" => "0",
               "major" => "32",
             "os_name" => "Mac OS X",
               "patch" => "1700",
            "os_minor" => "9"
        },
           "sequence" => 0,
            "message" => "83.149.9.216 - - [17/May/2015:10:05:50 +0000] \"GET /presentations/logstash-monitorama-2013/images/kibana-dashboard.png HTTP/1.1\" 200 321631 \"http://semicomplete.com/presentations/logstash-monitorama-2013/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36\"",
          "timestamp" => "17/May/2015:10:05:50 +0000",
           "referrer" => "\"http://semicomplete.com/presentations/logstash-monitorama-2013/\"",
           "clientip" => "83.149.9.216",
              "ident" => "-",
               "auth" => "-",
           "response" => 200,
           "@version" => "1",
               "verb" => "GET",
               "host" => "localhost",
         "@timestamp" => 2019-09-15T12:03:34.650Z,
        "httpversion" => "1.1",
              "bytes" => 321631,
              "agent" => "\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36\""
    }

私たちは、ああでユーザーエージェントでは、より詳細な情報を見ることができます。

フィルターを翻訳

データをより豊富にするためにローカルデータを使用してください。我々は、次のLogstashプロファイルを使用します。

    input {
      generator {
        message => '83.149.9.216 - - [17/May/2015:10:05:50 +0000] "GET /presentations/logstash-monitorama-2013/images/kibana-dashboard.png HTTP/1.1" 200 321631 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"'
        count => 1
      }
    }
     
    filter {
        grok {
            match => {
              "message" => '%{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] "%{WORD:verb} %{DATA:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:response:int} (?:-|%{NUMBER:bytes:int}) %{QS:referrer} %{QS:agent}'
            }
         }
     
        translate {
            field => "[response]"
            destination => "[http_status_description]"
            dictionary => {
                "100" => "Continue"
                "101" => "Switching Protocols"
                "200" => "OK"
                "500" => "Server Error"
            }
            
            fallback => "I'm a teapot"
        }
        
    }
     
     
    output {
        stdout {
            codec => rubydebug
        }
    }

結果は、実行することを示しています。

    {
                           "auth" => "-",
                           "host" => "localhost",
                      "timestamp" => "17/May/2015:10:05:50 +0000",
                        "message" => "83.149.9.216 - - [17/May/2015:10:05:50 +0000] \"GET /presentations/logstash-monitorama-2013/images/kibana-dashboard.png HTTP/1.1\" 200 321631 \"http://semicomplete.com/presentations/logstash-monitorama-2013/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36\"",
                    "httpversion" => "1.1",
                       "@version" => "1",
                       "response" => 200,
                       "clientip" => "83.149.9.216",
                           "verb" => "GET",
                       "sequence" => 0,
                       "referrer" => "\"http://semicomplete.com/presentations/logstash-monitorama-2013/\"",
                          "agent" => "\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36\"",
        "http_status_description" => "OK",
                          "ident" => "-",
                     "@timestamp" => 2019-09-15T12:30:09.575Z,
                          "bytes" => 321631,
                        "request" => "/presentations/logstash-monitorama-2013/images/kibana-dashboard.png"
    }

私たちは、その値が「OK」となり、http_status_descriptionを見ることができます。

Elasticsearchフィルター

Elasticsearchは、インデックス、および豊富なイベントからデータを取得します。このテストを行うために、我々は最初のインデックスと呼ばれるelasticsearch_filterを作成します。

    PUT ç/_doc/1
    {
      "name":"liuxg",
      "age": 20,
      "@timestamp": "2019-09-15"
    }

そうでない場合はエラーが発生します、我々は@timestampと呼ばれるアイテムを持っている必要があります。ここでは、私がいることを指摘しなければなりません。これは、のようなものを作るために使用されます。

我々は、次のLogstash設定を使用します。

    input {
      generator {
        message => "liuxg"
        count => 1
      }
    }
     
    filter {
        elasticsearch {
            hosts => ["http://localhost:9200"]
            index => ["elasticsearch_filter"]
            query => "name.keyword:%{[message]}"
            result_size => 1
            fields => {"age" => "user_age"}
        }
    }
     
    output {
        stdout {
            codec => rubydebug
        }
    }

結果は、上記実施例の動作を示します。

    {
          "user_age" => 20,
              "host" => "localhost",
           "message" => "liuxg",
          "@version" => "1",
        "@timestamp" => 2019-09-15T13:21:29.742Z,
          "sequence" => 0
    }

私たちは、user_age 20を見ることができます。取得するliuxg:これは名前を検索しています。

参考ます。https://opensource.com/article/17/10/logstash-fundamentals

おすすめ

転載: www.cnblogs.com/sanduzxcvbnm/p/12076477.html