背景
先ポスト で書いたように、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
Kitematic (Docker Toolbox) のインストール
楽をするために、Mac のメニューバーのクジラアイコンから、Kitematic をインストールしましょう。
GUI で、好きな Docker イメージをインストールしたり、設定変更したりできるようになります。
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>Ports
では、このコンテナとローカルホスト (Mac) が通信するための設定が記述されています。
Kibana の起動確認
http://localhost:32770/
へアクセスします。
本来の Kibana へは、
Elasticsearch の起動確認
同様に、http://localhost:32769
が 従来における localhost:9200
へのアクセスで、Elasticsearch のプロセスが起動していることの確認となります。
Terminal へのアクセス
EXEC
をクリックすると、ターミナルアクセスができるようになります。
bash
が使えます。
Logstash の起動確認
logstash
,kibana
,elasticsearch
にまつわるものはopt
ディレクトリにあります。
cd opt/logstash
していただいて、以下のようなチュートリアルにある標準出力が出ればOKです。
Timestamp + hostname + 標準出力に入力した string
となります。
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}
長くなったので次へ続く