Elastic StackをDocker上で実行してログモニタリングサービスを作成するまで - デモ編

## 背景
細かいことはいいからとりあえず動かしてみたい！という方向けです。
完成品をこちらで用意しているので、それを動かしてみるデモを行っていきます。

## できること
この投稿はどのように作っていくかシリーズ化しているシリーズ記事の番外編になります！
ほかの記事もよろしければぜひご覧ください。

1. [Elasticsearch編](https://qiita.com/sgr0416st/items/d0d00723b49c3935137e): ElasticsearchをDocker上で起動して、実際に動かしてみる
2. [Kibana編](https://qiita.com/sgr0416st/items/28dc2df02bb946f94209): KibanaをDocker上で起動して、データを可視化してみる
3. [Filebeat編](https://qiita.com/sgr0416st/items/74723ba2bb5667f5411a): Filebeatを利用して、ログファイルをKibanaで表示してみる
4. [Spring Boot編](https://qiita.com/sgr0416st/items/3bb415783f1464aa7df6): 簡単なSpring Webアプリケーションをローカルで実行、ログを作成してそれをKibanaで可視化する

**[デモ編](https://qiita.com/sgr0416st/items/6409fb84f5463cd2112a): とりあえず完成品を動かしてみる**


## 手順
**1. インストール**
それでは早速このプロジェクトをダウンロードしていきます。
まずはterminalに行って以下の様にプロジェクトをクローンしましょう。
その後ルートディレクトリまで移動し、docker-composeでElastic Stackを起動させてください。

```shell
git clone https://github.com/sgr0416st/elastic-docker-demo.git
cd elastic-docker-demo
docker-compose up --build
```

**2. Spring Bootアプリケーションの起動**
次は、project内にlogging-demoというサブプロジェクトが存在するはずなのでこれをお好みのIDEで開いてみましょう。(mavenコマンドを利用してJarを直接buildして実行してもらう方法でも構いません)。
これはmavenで管理されたSpring Bootアプリケーションとなっており、http://localhost:8080 にアクセスすると```yyyy-MM-ddThh:mm:ss.SSS: return response```というフォーマットで現在時刻のログをlogs/logging-demo.log に出力し、Hello, worldという文字列を返す簡単なエンドポイントを持っています。

今は、起動したらlogs/フォルダ内にlogging-demo.logというファイルがきちんと生成できているかどうかだけ確認して次に進んでください。

**3. 実行されているか確認する**
その後、filebeatがログを読み込んでElasticsearchにデータを送信できているか確認するために、filebeatによって作成されたインデックスパターンのログが存在するか検証するリクエストを送ってみましょう。
以下のコマンドを新しいターミナルから入力して実行してみてください。

```shell
curl -XGET "http://localhost:9200/filebeat-*/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "match_all": { }
  },
  "sort": [
    {
      "@timestamp": "desc"
    }
  ]
}'
```

以下の様なレスポンスが返ってきたら成功です。

```json
{
  "took" : 4,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 4,
      "relation" : "eq"
    },
  ...
```

**4. Kibanaでログデータを表示する**
次に、初回のみKibanaに手動でindex patternを登録する必要があるので、Kibana [(http://localhost:5601)](http://localhost:5601) にアクセスして、ホーム左上のアイコンからStack Management > Index Patterns へと進んでCreate Index Patternを選択してください。
![kibana index pattern registration.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271486/ed8060f9-b66d-012d-719b-cff17383f8d2.png)![kibana index pattern registration2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271486/5522bffb-b369-caab-2b54-c45c2302ea4a.png)

次に、"sel"の欄にfilebeat-*と選択して次へ進んでください。
![kibana index pattern registration3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271486/cd594c68-20c5-a2c0-9544-d9608680b716.png)

その後、time fieldの欄のドロップダウンから@timestampを選択し、index patternを作成してください。
![kibana index pattern registration4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271486/5e00f907-168e-67ce-491f-8cd44b5beedf.png)

これで無事準備が整ったので、メニューからAnalytics > Discoverへと進みましょう。
![kibana index pattern registration5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271486/692c33a8-0ce9-e076-258b-997afc99b61a.png)

左にあるドロップダウンから作成されたindex patternが選択されていることを確認します。
その後、検索範囲をfilebeatを実行した日の0:00 ~ 翌日の0:00に設定して再検索してみましょう。
![kibana index pattern registration6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271486/225fa61b-78bb-211b-f1f4-f89b984e0ebc.png)

![search result.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271486/eaa20026-72c1-23f1-5fac-c76926163f79.png)

そこまできたら、検索窓にreponseと打ち込んでrefreshしてみましょう。
このキーワードに一致するログはまだ見つからないはずです。

![response.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271486/40acdf13-7b09-2b5c-d64d-502e21bfbb02.png)

最後に、http://localhost:8080 にアクセスしてみましょう。
すると、アプリケーション側で ```yyyy-MM-ddThh:mm:ss.SSS: return response``` というようなフォーマットのログが生成され、それがKibanaに反映されるはずです。30秒程待って、もう一度Kibanaを開きrefreshボタンをクリックしてみましょう。(デフォルトではfilebeatがログを読みこむ時間は30秒おきになっています)

![final result.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271486/69d5dca9-cf79-1ecb-0fd3-e2a2c1d32e68.png)

この様に検索結果が変わって新しいログを取得できた方、おめでとうございます！！
これで、Elastic StackをDocker上で動かしてSpring Bootアプリケーションのログをモニタリングする方法を体験できたと思います。
自分で最初から作ってみたい場合は、是非このシリーズの他の記事もみてみてください！

最後にコンテナを消去して綺麗にしておきましょう。

```shell
docker-compose down -v --rmi local
```

#### 完成プロジェクトURL
https://github.com/sgr0416st/elastic-docker-demo