LogstashとBeatsを利用してElasticsearchにデータ投入してみる

LogstashとBeatsを利用してElasticsearchにデータ投入してみたメモです。


Elasticsearch単体でのデータ登録、更新、削除を試してみたので、
LogstashとFileBeatを利用してデータ投入を試してみました。

下記のチュートリアルを参照しました。
www.elastic.co

LogstashとBeats

LogstashとBeatsはともにelasticのプロダクトで
Beatsでログやリソースなどのデータ収集を行い、
Logstashの各プラグインでデータの加工やフィルタリングを行うという役割分担のようです。

今回はUbuntu上で現時点で最新版のLogstash5.2とBeats5.2を使ってみます。

Logstash インストー

LogstashのインストールもElasticsearchやKibanaと同様にファイルをダウンロードして解凍するだけです。
aptやyumのパッケージもあります。

$ mkdir elastic
$ cd elastic/
$ curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-5.2.0.tar.gz
$ tar -xvzf logstash-5.2.0.tar.gz

Logstashのパイプラインでは入力⇒フィルタ⇒出力という流れで処理がされますが、
一番簡単な標準入力から入力して、そのまま標準出力に出力するパターンを試してみます。

設定はconfigに記述するのですが、-eオプションを使用するとコマンドラインから設定を直接指定できます。

-eオプションで'input { stdin { } } output { stdout {} }'を指定して起動します。
起動後のコンソールに"My first logstash!"と入力すると、タイムスタンプとホスト名(IP)とともに"My first logstash!"と出力されます。

$ bin/logstash -e 'input { stdin { } } output { stdout {} }'
Sending Logstash's logs to /home/xxxx/elastic/logstash-5.1.2/logs which is now configured via log4j2.properties
The stdin plugin is now waiting for input:
[2017-01-30T21:05:15,728][INFO ][logstash.pipeline        ] Starting pipeline {"id"=>"main", "pipeline.workers"=>1, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>5, "pipeline.max_inflight"=>125}
[2017-01-30T21:05:15,760][INFO ][logstash.pipeline        ] Pipeline main started
[2017-01-30T21:05:15,830][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}
My first logstash!
2017-01-30T12:05:57.115Z MyUbuntu My first logstash!

Apache アクセスログ取り込み

Apacheアクセスログを入力して、ログを解析してから各フィールドを作成し、Elasticsearchに取り込んでみます。

dummyログ配置

ApacheアクセスログのダミーデータがElasticsearchのチュートリアル用のサンプルからダウンロードできます。
https://download.elastic.co/demos/logstash/gettingstarted/logstash-tutorial.log.gz


自分の環境では下記に配置しました。

$ sudo mkdir /var/log/dummy
$ sudo chmod 777 /var/log/dummy
$ cd /var/log/dummy
$ curl -L -O https://download.elastic.co/demos/logstash/gettingstarted/logstash-tutorial.log.gz
$ gunzip logstash-tutorial.log.gz

中身はこんな感じ

$ wc -l logstash-tutorial.log
100 logstash-tutorial.log
$ tail logstash-tutorial.log
218.30.103.62 - - [04/Jan/2015:05:28:43 +0000] "GET /blog/geekery/xvfb-firefox.html HTTP/1.1" 200 10975 "-" "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)"
218.30.103.62 - - [04/Jan/2015:05:29:06 +0000] "GET /blog/geekery/puppet-facts-into-mcollective.html HTTP/1.1" 200 9872 "-" "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)"
198.46.149.143 - - [04/Jan/2015:05:29:13 +0000] "GET /blog/geekery/disabling-battery-in-ubuntu-vms.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+semicomplete%2Fmain+%28semicomplete.com+-+Jordan+Sissel%29 HTTP/1.1" 200 9316 "-" "Tiny Tiny RSS/1.11 (http://tt-rss.org/)"
198.46.149.143 - - [04/Jan/2015:05:29:13 +0000] "GET /blog/geekery/solving-good-or-bad-problems.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+semicomplete%2Fmain+%28semicomplete.com+-+Jordan+Sissel%29 HTTP/1.1" 200 10756 "-" "Tiny Tiny RSS/1.11 (http://tt-rss.org/)"
218.30.103.62 - - [04/Jan/2015:05:29:26 +0000] "GET /blog/geekery/jquery-interface-puffer.html%20target= HTTP/1.1" 200 202 "-" "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)"
218.30.103.62 - - [04/Jan/2015:05:29:48 +0000] "GET /blog/geekery/ec2-reserved-vs-ondemand.html HTTP/1.1" 200 11834 "-" "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)"
66.249.73.135 - - [04/Jan/2015:05:30:06 +0000] "GET /blog/web/firefox-scrolling-fix.html HTTP/1.1" 200 8956 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
86.1.76.62 - - [04/Jan/2015:05:30:37 +0000] "GET /projects/xdotool/ HTTP/1.1" 200 12292 "http://www.haskell.org/haskellwiki/Xmonad/Frequently_asked_questions" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20140205 Firefox/24.0 Iceweasel/24.3.0"

Filebeat install

Logstashにログを送信するために、Filebeatをインストールします。
Filebeatはサーバ上のファイルからログを収集するためのツールです。

Filebeatのインストールはdebrpmの各パッケージが公開されているので、
debのパッケージをダウンロードしてインストールします。
https://www.elastic.co/guide/en/beats/filebeat/5.2/filebeat-getting-started.html

$ curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.2.0-amd64.deb
$ sudo dpkg -i filebeat-5.2.0-amd64.deb
$ ll /etc/filebeat/
合計 64
drwxr-xr-x   2 root root  4096  130 21:48 ./
drwxr-xr-x 135 root root 12288  130 21:48 ../
-rw-r--r--   1 root root 31964  112 05:10 filebeat.full.yml
-rw-r--r--   1 root root  3040  112 05:10 filebeat.template-es2x.json
-rw-r--r--   1 root root  2397  112 05:10 filebeat.template.json
-rw-r--r--   1 root root  4196  112 05:10 filebeat.yml

インストールしたら設定ファイルを編集します。
filebeat.ymlに下記内容を記述します。
pathsの箇所に先程ダウンロードしたApacheのサンプルログの配置場所を指定します。

# vi /etc/filebeat/filebeat.yml
filebeat.prospectors:
- input_type: log
  paths:
    - /var/log/dummy/logstash-tutorial.log
output.logstash:
  hosts: ["localhost:5043"]

次のコマンドを実行し、Filebeatを起動します。
まだ、Logstashを起動していないため何も起きません。

$ sudo /etc/init.d/filebeat start
[ ok ] Starting filebeat (via systemctl): filebeat.service.

Logstash config

LogstashのパイプラインでFilebeatからの入力を受け付けるように設定をします。

first-pipeline.confというファイルを作成し、下記を記述します。
inputセクションでBeats input pluginを使用するようにしています。
outputセクションには確認のため一旦標準出力に出力されるように設定します。

$ cd elastic/logstash-5.2.0/
$ cd config/
$ vi first-pipeline.conf
input {
    beats {
        port => "5043"
    }
}
# The filter part of this file is commented out to indicate that it is
# optional.
# filter {
#
# }
output {
    stdout { codec => rubydebug }
}

設定が完了したら、下記コマンドを実行し設定ファイルの構文チェックを行います。
--config.test_and_exitオプションを使用すると構文チェックが行われます。

$ bin/logstash -f config/first-pipeline.conf --config.test_and_exit
Sending Logstash's logs to /home/xxxx/elastic/logstash-5.2.0/logs which is now configured via log4j2.properties
Configuration OK
[2017-02-03T18:22:28,886][INFO ][logstash.runner          ] Using config.test_and_exit mode. Config Validation Result: OK. Exiting Logstash

構文チェックがOKだったら、下記のコマンドでLogstashを実行します。
--config.reload.automaticオプションを使用すると、設定の自動読み込みが行われ、
設定ファイルを変更した時に再起動しなくても自動で設定が読み込まれます。
下記のように読み込んだデータが標準出力に表示されます。

$ bin/logstash -f config/first-pipeline.conf --config.reload.automatic
Sending Logstash's logs to /home/xxxx/elastic/logstash-5.2.0/logs which is now configured via log4j2.properties
log4j:WARN No appenders could be found for logger (io.netty.util.internal.logging.InternalLoggerFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
[2017-02-03T18:45:56,654][INFO ][logstash.inputs.beats    ] Beats inputs: Starting input listener {:address=>"0.0.0.0:5043"}
[2017-02-03T18:45:56,695][INFO ][logstash.pipeline        ] Starting pipeline {"id"=>"main", "pipeline.workers"=>1, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>5, "pipeline.max_inflight"=>125}
[2017-02-03T18:45:56,717][INFO ][logstash.pipeline        ] Pipeline main started
[2017-02-03T18:45:56,818][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}
{
    "@timestamp" => 2017-02-03T09:45:21.172Z,
        "offset" => 325,
      "@version" => "1",
          "beat" => {
        "hostname" => "MyUbuntu",
            "name" => "MyUbuntu",
         "version" => "5.2.0"
    },
    "input_type" => "log",
          "host" => "MyUbuntu",
        "source" => "/var/log/dummy/logstash-tutorial.log",
       "message" => "83.149.9.216 - - [04/Jan/2015:05:13:42 +0000] \"GET /presentations/logstash-monitorama-2013/images/kibana-search.png HTTP/1.1\" 200 203023 \"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\"",
          "type" => "log",
          "tags" => [
        [0] "beats_input_codec_plain_applied"
    ]
}
{
    "@timestamp" => 2017-02-03T09:45:21.172Z,
        "offset" => 654,
      "@version" => "1",
    "input_type" => "log",
          "beat" => {
        "hostname" => "MyUbuntu",
            "name" => "MyUbuntu",
         "version" => "5.2.0"
    },
          "host" => "MyUbuntu",
        "source" => "/var/log/dummy/logstash-tutorial.log",
       "message" => "83.149.9.216 - - [04/Jan/2015:05:13:42 +0000] \"GET /presentations/logstash-monitorama-2013/images/kibana-dashboard3.png HTTP/1.1\" 200 171717 \"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\"",
          "type" => "log",
          "tags" => [
        [0] "beats_input_codec_plain_applied"
    ]
}
              :
              :
              :
              :
grok filter plugin

ログの内容を解析して名前付きのフィールドを作成するために、grok filter pluginを使用します。
grok filter pluginはデフォルトで利用可能です。
Apacheアクセスログの解析には%{COMBINEDAPACHELOG}のパターンが利用できます。
%{COMBINEDAPACHELOG}パターンを使用すると、ログを下記のフィールドに分解します。

log Field Name
IP Address clientip
User ID ident
User Authentication auth
timestamp timestamp
HTTP Verb verb
Request body request
HTTP Version httpversion
HTTP Status Code response
Bytes served bytes
Referrer URL referrer
User agent agent

first-pipeline.confを編集して、filterセクションを下記の通り追記します。

$ cd logstash-5.2.0/config/
$ vi first-pipeline.conf
$ cat first-pipeline.conf
input {
    beats {
        port => "5043"
    }
}
filter {
    grok {
        match => { "message" => "%{COMBINEDAPACHELOG}"}
    }
}
output {
    stdout { codec => rubydebug }
}

設定を保存するとLogstashを再起動しなくても自動で読み込まれます。

Filebeatはデータを読み切ってしまっているため、最初からログファイルを読むようにするためにレジストリファイルを削除します。

$ sudo /etc/init.d/filebeat stop
$ ll /var/lib/filebeat/registry
$ sudo rm /var/lib/filebeat/registry

再度Filebeatを起動すると、最初からロードされます

$ sudo /etc/init.d/filebeat start
[ ok ] Starting filebeat (via systemctl): filebeat.service.

各フィールドに分割されて読み込まれているのがわかります。

{
        "request" => "/presentations/logstash-monitorama-2013/images/kibana-search.png",
          "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\"",
         "offset" => 325,
           "auth" => "-",
          "ident" => "-",
     "input_type" => "log",
           "verb" => "GET",
         "source" => "/var/log/dummy/logstash-tutorial.log",
        "message" => "83.149.9.216 - - [04/Jan/2015:05:13:42 +0000] \"GET /presentations/logstash-monitorama-2013/images/kibana-search.png HTTP/1.1\" 200 203023 \"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\"",
           "type" => "log",
           "tags" => [
        [0] "beats_input_codec_plain_applied"
    ],
       "referrer" => "\"http://semicomplete.com/presentations/logstash-monitorama-2013/\"",
     "@timestamp" => 2017-02-03T10:27:01.438Z,
       "response" => "200",
          "bytes" => "203023",
       "clientip" => "83.149.9.216",
       "@version" => "1",
           "beat" => {
        "hostname" => "MyUbuntu",
            "name" => "MyUbuntu",
         "version" => "5.2.0"
    },
           "host" => "MyUbuntu",
    "httpversion" => "1.1",
      "timestamp" => "04/Jan/2015:05:13:42 +0000"
}
{
        "request" => "/presentations/logstash-monitorama-2013/images/kibana-dashboard3.png",
          "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\"",
         "offset" => 654,
           "auth" => "-",
          "ident" => "-",
     "input_type" => "log",
           "verb" => "GET",
         "source" => "/var/log/dummy/logstash-tutorial.log",
        "message" => "83.149.9.216 - - [04/Jan/2015:05:13:42 +0000] \"GET /presentations/logstash-monitorama-2013/images/kibana-dashboard3.png HTTP/1.1\" 200 171717 \"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\"",
           "type" => "log",
           "tags" => [
        [0] "beats_input_codec_plain_applied"
    ],
       "referrer" => "\"http://semicomplete.com/presentations/logstash-monitorama-2013/\"",
     "@timestamp" => 2017-02-03T10:27:01.438Z,
       "response" => "200",
          "bytes" => "171717",
       "clientip" => "83.149.9.216",
       "@version" => "1",
           "beat" => {
        "hostname" => "MyUbuntu",
            "name" => "MyUbuntu",
         "version" => "5.2.0"
    },
           "host" => "MyUbuntu",
    "httpversion" => "1.1",
      "timestamp" => "04/Jan/2015:05:13:42 +0000"
}
              :
              :
              :
              :

GeoIP plugin

GeoIPはIPアドレスから地理情報を取得できます。
GeoIP pluginを使用すると、地理情報をログに追加することができます。

first-pipeline.confのfilterセクションに下記を追記します。
GeoIP pluginではIPアドレスが含まれるフィールドを指定する必要があるので、
clientipフィールドを指定します。

$ cd
$ cd elastic/logstash-5.2.0/config/
$ vi first-pipeline.conf
input {
    beats {
        port => "5043"
    }
}
 filter {
    grok {
        match => { "message" => "%{COMBINEDAPACHELOG}"}
    }
    geoip {
        source => "clientip"
    }
}
output {
    stdout { codec => rubydebug }
}

設定ファイルを保存したら同様にFilebeatのレジストリを削除して、最初から読み込みようにします。

$ sudo /etc/init.d/filebeat stop
[ ok ] Stopping filebeat (via systemctl): filebeat.service.
$ sudo rm /var/lib/filebeat/registry
$ sudo /etc/init.d/filebeat start
[ ok ] Starting filebeat (via systemctl): filebeat.service.

GeoIPの情報が追加されているのがわかります。

{
        "request" => "/presentations/logstash-monitorama-2013/images/kibana-search.png",
          "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\"",
          "geoip" => {
              "timezone" => "Europe/Moscow",
                    "ip" => "83.149.9.216",
              "latitude" => 55.7485,
        "continent_code" => "EU",
             "city_name" => "Moscow",
         "country_code2" => "RU",
          "country_name" => "Russia",
         "country_code3" => "RU",
           "region_name" => "Moscow",
              "location" => [
            [0] 37.6184,
            [1] 55.7485
        ],
           "postal_code" => "101194",
             "longitude" => 37.6184,
           "region_code" => "MOW"
    },
         "offset" => 325,
           "auth" => "-",
          "ident" => "-",
     "input_type" => "log",
           "verb" => "GET",
         "source" => "/var/log/dummy/logstash-tutorial.log",
        "message" => "83.149.9.216 - - [04/Jan/2015:05:13:42 +0000] \"GET /presentations/logstash-monitorama-2013/images/kibana-search.png HTTP/1.1\" 200 203023 \"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\"",
           "type" => "log",
           "tags" => [
        [0] "beats_input_codec_plain_applied"
    ],
       "referrer" => "\"http://semicomplete.com/presentations/logstash-monitorama-2013/\"",
     "@timestamp" => 2017-02-03T11:39:52.477Z,
       "response" => "200",
          "bytes" => "203023",
       "clientip" => "83.149.9.216",
       "@version" => "1",
           "beat" => {
        "hostname" => "MyUbuntu",
            "name" => "MyUbuntu",
         "version" => "5.2.0"
    },
           "host" => "MyUbuntu",
    "httpversion" => "1.1",
      "timestamp" => "04/Jan/2015:05:13:42 +0000"
}
{
        "request" => "/presentations/logstash-monitorama-2013/images/kibana-dashboard3.png",
          "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\"",
          "geoip" => {
              "timezone" => "Europe/Moscow",
                    "ip" => "83.149.9.216",
              "latitude" => 55.7485,
        "continent_code" => "EU",
             "city_name" => "Moscow",
         "country_code2" => "RU",
          "country_name" => "Russia",
         "country_code3" => "RU",
           "region_name" => "Moscow",
              "location" => [
            [0] 37.6184,
            [1] 55.7485
        ],
           "postal_code" => "101194",
             "longitude" => 37.6184,
           "region_code" => "MOW"
    },
         "offset" => 654,
           "auth" => "-",
          "ident" => "-",
     "input_type" => "log",
           "verb" => "GET",
         "source" => "/var/log/dummy/logstash-tutorial.log",
        "message" => "83.149.9.216 - - [04/Jan/2015:05:13:42 +0000] \"GET /presentations/logstash-monitorama-2013/images/kibana-dashboard3.png HTTP/1.1\" 200 171717 \"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\"",
           "type" => "log",
           "tags" => [
        [0] "beats_input_codec_plain_applied"
    ],
       "referrer" => "\"http://semicomplete.com/presentations/logstash-monitorama-2013/\"",
     "@timestamp" => 2017-02-03T11:39:52.477Z,
       "response" => "200",
          "bytes" => "171717",
       "clientip" => "83.149.9.216",
       "@version" => "1",
           "beat" => {
        "hostname" => "MyUbuntu",
            "name" => "MyUbuntu",
         "version" => "5.2.0"
    },
           "host" => "MyUbuntu",
    "httpversion" => "1.1",
      "timestamp" => "04/Jan/2015:05:13:42 +0000"
}
              :
              :
              :
              :

Elasticsearchへデータ投入

今まで標準出力へ出力していたので、Elasticsearchへ出力するようにします。

first-pipeline.confを編集し、outputをElasticsearchに向けます。
Elasticsearchがlocalhostでデフォルトポートで起動している場合、下記の通り記述します。

$ vi first-pipeline.conf
input {
    beats {
        port => "5043"
    }
}
 filter {
    grok {
        match => { "message" => "%{COMBINEDAPACHELOG}"}
    }
    geoip {
        source => "clientip"
    }
}
output {
    elasticsearch {
        hosts => [ "localhost:9200" ]
    }
}

設定ファイルを保存したら同様にFilebeatのレジストリを削除して、最初から読み込みようにします。

$ sudo /etc/init.d/filebeat stop
[ ok ] Stopping filebeat (via systemctl): filebeat.service.
$ sudo rm /var/lib/filebeat/registry
$ sudo /etc/init.d/filebeat start
[ ok ] Starting filebeat (via systemctl): filebeat.service.

Elasticsearchにデータ投入が出来たかクエリを投げて確認してみます。
インデックス名をlogstash-YYYY.MM.DDと指定して検索してみます。

curl

curl -XGET 'localhost:9200/logstash-2017.02.03/_search?pretty&q=response=200'

Console

GET /logstash-2017.02.03/_search?pretty&q=response=200

下記の通り、インデックスが作成されていることがわかります。

{
  "took": 22,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 98,
    "max_score": 3.527758,
    "hits": [
      {
        "_index": "logstash-2017.02.03",
        "_type": "log",
        "_id": "AVoDy72ddm3yw_7LpPfX",
        "_score": 3.527758,
        "_source": {
          "request": "/presentations/logstash-monitorama-2013/images/frontend-response-codes.png",
          "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"""",
          "geoip": {
            "timezone": "Europe/Moscow",
            "ip": "83.149.9.216",
            "latitude": 55.7485,
            "continent_code": "EU",
            "city_name": "Moscow",
            "country_code2": "RU",
            "country_name": "Russia",
            "country_code3": "RU",
            "region_name": "Moscow",
            "location": [
              37.6184,
              55.7485
            ],
            "postal_code": "101194",
            "longitude": 37.6184,
            "region_code": "MOW"
          },
          "offset": 2932,
          "auth": "-",
          "ident": "-",
          "input_type": "log",
          "verb": "GET",
          "source": "/var/log/dummy/logstash-tutorial.log",
          "message": """83.149.9.216 - - [04/Jan/2015:05:13:45 +0000] "GET /presentations/logstash-monitorama-2013/images/frontend-response-codes.png HTTP/1.1" 200 52878 "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"""",
          "type": "log",
          "tags": [
            "beats_input_codec_plain_applied"
          ],
          "referrer": """"http://semicomplete.com/presentations/logstash-monitorama-2013/"""",
          "@timestamp": "2017-02-03T11:46:02.978Z",
          "response": "200",
          "bytes": "52878",
          "clientip": "83.149.9.216",
          "@version": "1",
          "beat": {
            "hostname": "MyUbuntu",
            "name": "MyUbuntu",
            "version": "5.2.0"
          },
          "host": "MyUbuntu",
          "httpversion": "1.1",
          "timestamp": "04/Jan/2015:05:13:45 +0000"
        }
      },
      {
        "_index": "logstash-2017.02.03",
        "_type": "log",
        "_id": "AVoDy72ddm3yw_7LpPfY",
        "_score": 0.19398308,
        "_source": {
          "request": "/presentations/logstash-monitorama-2013/images/kibana-dashboard.png",
          "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"""",
          "geoip": {
            "timezone": "Europe/Moscow",
            "ip": "83.149.9.216",
            "latitude": 55.7485,
            "continent_code": "EU",
            "city_name": "Moscow",
            "country_code2": "RU",
            "country_name": "Russia",
            "country_code3": "RU",
            "region_name": "Moscow",
            "location": [
              37.6184,
              55.7485
            ],
            "postal_code": "101194",
            "longitude": 37.6184,
            "region_code": "MOW"
          },
          "offset": 3260,
          "auth": "-",
          "ident": "-",
          "input_type": "log",
          "verb": "GET",
          "source": "/var/log/dummy/logstash-tutorial.log",
          "message": """83.149.9.216 - - [04/Jan/2015:05:13:43 +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"""",
          "type": "log",
          "tags": [
            "beats_input_codec_plain_applied"
          ],
          "referrer": """"http://semicomplete.com/presentations/logstash-monitorama-2013/"""",
          "@timestamp": "2017-02-03T11:46:02.978Z",
          "response": "200",
          "bytes": "321631",
          "clientip": "83.149.9.216",
          "@version": "1",
          "beat": {
            "hostname": "MyUbuntu",
            "name": "MyUbuntu",
            "version": "5.2.0"
          },
          "host": "MyUbuntu",
          "httpversion": "1.1",
          "timestamp": "04/Jan/2015:05:13:43 +0000"
        }
      },
              :
              :
              :
              :

Kibanaで表示

投入したデータをKibanaで見てみます。

KibanaにアクセスしてDiscoverで「logstash-*」で検索してみると、
きちんと登録されていることが分かります。

f:id:pppurple:20170213215018p:plain


終わり。