これまで、ElasticsearchとKibanaをちょくちょくと扱ってきたのですが、Logstashも少し触っておこうと
思いまして。
Logstash | データの一元化、変換、保管 | Elastic
ドキュメントは、こちら。
Logstash Reference [5.1] | Elastic
Logstash自体は、ログなどを収集して加工、他のデータストアなどに保存していくための
ソフトウェアですね。
まずは、インストールを行ってみます。インストール先は、Ubuntu Linuxとします。
ドキュメントは、こちらを参照してパッケージインストールします。
Installing Logstash | Logstash Reference [5.1] | Elastic
なお、JDKはインストール済みとします。
インストール
次のように入力してインストール前の準備。
$ wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - $ sudo apt-get install apt-transport-https $ echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list $ sudo apt-get update
インストール。
$ sudo apt-get install logstash
バージョンを指定してインストールする場合は、こちら。
$ sudo apt-get install logstash=1:5.1.1-1
起動と停止
Logstashの起動。
$ sudo systemctl start logstash.service
停止。
$ sudo systemctl stop logstash.service
ディレクトリ構成
設定ファイルは、「/etc/logstash」ディレクトリ。
$ ls -l /etc/logstash total 24 drwxrwxr-x 2 root root 4096 Dec 6 13:18 conf.d -rw-rw-r-- 1 root root 1738 Dec 6 13:12 jvm.options -rw-rw-r-- 1 root root 1334 Dec 6 13:12 log4j2.properties -rw-rw-r-- 1 root root 4487 Dec 27 17:45 logstash.yml -rw-rw-r-- 1 root root 1659 Dec 6 13:12 startup.options
pipelineの設定は、「/etc/logstash/conf.d」に配置。
$ ls -l /etc/logstash/conf.d total 0
「/var/log/logstash」ディレクトリにログ。
$ ls -l /var/log/logstash total 8 -rw-r--r-- 1 logstash logstash 5401 Dec 27 17:51 logstash-plain.log
バイナリなどは、「/usr/share/logstash」ディレクトリ。
$ ls -l /usr/share/logstash total 184 -rw-rw-r-- 1 logstash logstash 111569 Dec 6 13:12 CHANGELOG.md -rw-rw-r-- 1 logstash logstash 2249 Dec 6 13:12 CONTRIBUTORS -rw-rw-r-- 1 logstash logstash 3834 Dec 6 13:17 Gemfile -rw-rw-r-- 1 logstash logstash 21182 Dec 6 13:12 Gemfile.jruby-1.9.lock -rw-rw-r-- 1 logstash logstash 589 Dec 6 13:12 LICENSE -rw-rw-r-- 1 logstash logstash 149 Dec 6 13:12 NOTICE.TXT drwxrwxr-x 2 logstash logstash 4096 Dec 27 17:45 bin drwxrwxr-x 3 logstash logstash 4096 Dec 27 17:48 data drwxrwxr-x 5 logstash logstash 4096 Dec 27 17:45 lib drwxrwxr-x 4 logstash logstash 4096 Dec 27 17:45 logstash-core drwxrwxr-x 3 logstash logstash 4096 Dec 27 17:45 logstash-core-event-java drwxrwxr-x 3 logstash logstash 4096 Dec 27 17:45 logstash-core-plugin-api drwxrwxr-x 3 logstash logstash 4096 Dec 27 17:45 logstash-core-queue-jruby drwxrwxr-x 4 logstash logstash 4096 Dec 27 17:45 vendor
動作確認
それでは、動作確認してみましょう。
お試し的に、ApacheのアクセスログをElasticsearchに取り込んでみます。Elasticsearchは、
起動済みとします。
アクセスログは、apache_log_genでダミーで用意します。
GitHub - tamtam180/apache_log_gen: generate dummy apache log.
apache_log_genのインストール。
$ gem install apache-loggen
ログを100000ほど、秒間100で生成してみます。
$ apache-loggen --limit=100000 --rate=100 access-log
確認。
$ wc -l access-log 100001 access-log $ head -n 5 access-log 88.51.41.78 - - [27/Dec/2016:18:00:23 +0000] "GET /item/garden/2773 HTTP/1.1" 200 107 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; YTB730; GTB7.2; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; Media Center PC 6.0)" 212.42.46.113 - - [27/Dec/2016:18:00:23 +0000] "GET /item/electronics/2081 HTTP/1.1" 200 62 "/search/?c=Electronics+Music" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.1) Gecko/20100101 Firefox/10.0.1" 152.36.45.138 - - [27/Dec/2016:18:00:23 +0000] "GET /category/computers HTTP/1.1" 200 122 "/item/software/2693" "Mozilla/5.0 (iPhone; CPU iPhone OS 5_0_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A405 Safari/7534.48.3" 216.102.51.188 - - [27/Dec/2016:18:00:23 +0000] "GET /category/software HTTP/1.1" 200 46 "/category/health" "Mozilla/5.0 (Windows NT 6.0; rv:10.0.1) Gecko/20100101 Firefox/10.0.1" 212.45.213.191 - - [27/Dec/2016:18:00:23 +0000] "GET /category/books?from=20 HTTP/1.1" 200 104 "/search/?c=Books" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0.1) Gecko/20100101 Firefox/9.0.1" $ tail -n 5 access-log 168.87.93.202 - - [27/Dec/2016:18:02:07 +0000] "GET /category/electronics?from=0 HTTP/1.1" 200 124 "/category/electronics" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; Trident/4.0; GTB6; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET4.0C)" 152.171.175.228 - - [27/Dec/2016:18:02:07 +0000] "GET /category/electronics HTTP/1.1" 200 108 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" 20.180.31.115 - - [27/Dec/2016:18:02:07 +0000] "GET /item/networking/1688 HTTP/1.1" 200 66 "/search/?c=Networking+Music" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)" 188.102.156.179 - - [27/Dec/2016:18:02:07 +0000] "GET /category/software HTTP/1.1" 200 109 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" 84.195.87.99 - - [27/Dec/2016:18:02:07 +0000] "GET /item/electronics/2151 HTTP/1.1" 200 44 "/item/finance/330" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"
では、これをLogstashで取り込んでElasticsearchに放り込んでみましょう。
pipelineを作成してみます。
$ sudo vim /etc/logstash/conf.d/pipeline.conf
中身は、こんな感じで。
input { file { path => "/tmp/access-log" start_position => "beginning" } } filter { grok { match => { "message" => "%{COMBINEDAPACHELOG}" } break_on_match => false } } output { elasticsearch { hosts => ["elasticsearch:9200"] } }
Input Pluginのfileで読み込み、Filter PluginのgrokでCommon Log Formatでパースし、
Output PluginでElasticsearchに放り込みます、と。
file | Logstash Reference [5.1] | Elastic
grok | Logstash Reference [5.1] | Elastic
elasticsearch | Logstash Reference [5.1] | Elastic
アクセスログは「/tmp/access-log」に置き、ファイルの先頭から読むようにしました。
ここまでできたら、Logstashを再起動。
$ sudo systemctl restart logstash.service
すると、Elasticsearchにアクセスログが入ります。
インデックスの一覧を見ると、「logstash-yyyy.mm.dd」なインデックスが増えました。
$ curl http://elasticsearch:9200/_cat/indices?v health status index uuid pri rep docs.count docs.deleted store.size pri.store.size yellow open logstash-2016.12.27 D51a_dHSRU6H_c549O5_0w 5 1 100001 0 37.8mb 37.8mb yellow open .kibana u8X_mxW8TyCUZtu6XwiFfw 1 1 2 0 13.8kb 13.8kb yellow open .monitoring-data-2 iWUJpueMSECH6MhjuxFtqA 1 1 5 0 6.8kb 6.8kb yellow open .monitoring-es-2-2016.12.27 XFB22wXZTMKEzF97AHOjDg 1 1 7458 144 3.4mb 3.4mb yellow open .monitoring-kibana-2-2016.12.27 -NQRmB_0QKOHmFl5APAgKA 1 1 1472 0 420.3kb 420.3kb
カウントしてみます。
$ curl http://elasticsearch:9200/logstash-2016.12.27/_count {"count":100001,"_shards":{"total":5,"successful":5,"failed":0}}
とりあえず最低限の設定ですが、OKそうです。