Docker for Mac 環境で簡単に ELK Stack をビルドする1

背景

先ポストで書いたように、2015年頃に Elasticsearch, Logstash, Kiban あわせて ELK Stack なるものを知って、自分の検証環境の簡易 Syslog サーバとしてみたり、自宅監視用の NetfFlow コレクタにしたりしていました。
visualizing netflow version 9 on ELK

当時のログ可視化環境作り

当時こんな記事はありませんでしたが、いまほど「可視化」が流行っておらず、無料のものは殆ど使い物にならない印象でした。
NetFlow コレクター(無料・フリー版)の比較検討【2016決定版】

その時の手順はというと、

  • Linux (自分はCentOS) をたてる
  • firewalld/iptables, selinux などなどの基本設定
  • Java をインストール
  • ELK をそれぞれインストールする
  • それぞれの conf ファイルをいじいじする(ドキュメント読む&ググる&試行錯誤)
  • 自動起動、自動停止、Index 整理のためのシェルスクリプトを書いたり、パフォーマンス周りのチューニング(ドキュメント読む&ググる&試行錯誤)
  • そうこうしているうちに新しいバージョンの ELK が出てきてアップデート…
    などと、わりとお勉強色が強く、非効率的な作業が多かったです。

本当に楽になったログ可視化環境作り

Docker や Vagrant といった、Infrastructure as a Code の潮流による、スタック化されたアプリケーションがある程度簡易に利用できるようになりました。
vagrant and elk stack installation

いまどきの手順ざっくりメモ

Docker の基本的な概念や用語については割愛します。まずそちらからという方は以下等をご参照ください。
Dockerについて基本から最近追加された機能までまとめ

Docker for Mac のインストール

2016年末まで、Mac への正式サポートがなかったため、ググると混乱する可能性があります。公式サイトが英語ですが最も正確です。
Get started with Docker for Mac

2017年1月でバージョンは 1.12.1
docker version

Kitematic (Docker Toolbox) のインストール

楽をするために、Mac のメニューバーのクジラアイコンから、Kitematic をインストールしましょう。
GUI で、好きな Docker イメージをインストールしたり、設定変更したりできるようになります。

menu

kitematic by docker というページにリダイレクトされます。
注意)現在、Kitematic は Docker Toolbox に吸収されたようです。
Docker for mac と Kitematic でGUIから環境構築

Kitematic のダウンロードを指示に従って進めますと、DockerHub アカウントとの連携を促されますが、しなくとも大丈夫です。

Docker Image の検索とインストール

ここまでお読みいただくと既にお分かりかと思いますが、ここから例えば+NEWを押して、検索窓からelk docker-elk などと検索してみます。


たくさん出てきますね。

ELK を触ってみる

例えば以下の Docker Image を入れてみます。
これを選択した理由は、ダウンロード数が多く、説明分に latest から古いバージョンまで利用できる旨が説明されていたためです。
sebp/elk
+CREATE を押すとダウンロードとデプロイが開始されます。数分かかることもあります。

完了後

右上Settings>Generalから、各種バージョン等が指定されていることがわかります。
Settings>General

Settings>Portsでは、このコンテナとローカルホスト (Mac) が通信するための設定が記述されています。
Settings>Ports

Kibana の起動確認

http://localhost:32770/ へアクセスします。
本来の Kibana へは、:5601 がデフォルトですが、ここでは、PAT が設定されており、`localhost:32770’ をブラウザからたたきます。

Elasticsearch の起動確認

同様に、http://localhost:32769が 従来における localhost:9200 へのアクセスで、Elasticsearch のプロセスが起動していることの確認となります。

Terminal へのアクセス

EXEC をクリックすると、ターミナルアクセスができるようになります。
bash が使えます。

Logstash の起動確認

logstash,kibana,elasticsearchにまつわるものはoptディレクトリにあります。

cd opt/logstashしていただいて、以下のようなチュートリアルにある標準出力が出ればOKです。
Timestamp + hostname + 標準出力に入力した string
となります。

1
2
3
4
5
6
7
8
root@38ef067ec9de:/opt/logstash# ./bin/logstash -e 'input { stdin { } } output { stdout {} }'
hello world
Sending Logstash's logs to /opt/logstash/logs which is now configured via log4j2.properties
The stdin plugin is now waiting for input:
[2017-01-25T10:04:59,971][INFO ][logstash.pipeline ] Starting pipeline {"id"=>"main", "pipeline.workers"=>4, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>5, "pipeline.max_inflight"=>500}
[2017-01-25T10:04:59,987][INFO ][logstash.pipeline ] Pipeline main started
2017-01-25T10:05:00.012Z 38ef067ec9de hello world
[2017-01-25T10:05:00,090][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9601}

長くなったので次へ続く