これまで、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そうです。
Kibanaで見ると、こんな感じになりました。