[01] EFK (Elasticsearch + Fluentd + Kibana) の構築 ... Elasticsearch の基本概念の把握

|本シリーズのトップページ|
|:--|
|https://qiita.com/robozushi10/items/68dc5f8c2df38f160fda|

# はじめに

職場[^1] で「CI/CD ログ」や「CLI および Webアプリログ」の収集と可視化の導入の話が出てきた.
また、自宅で K8s の学習をする中で Fluentd という単語が頻繁に出てきていた.

そこで自宅の Ubuntu 18.04 マシンで docker-compose を用いて、
下図・下表のような Elasticsearch + Fluentd + Kibana (EFK) 環境を構築して検証し、
これらソフトの知見を得ることにした.

本項では以下を記す.
・**文書だけでは理解できない派** の私が、**Elasticsearch を図で把握するために見たサイト** を書き出す


# 構成


## 図

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1246056/957f2884-bcf2-a8d1-379b-7a425c69c492.png)


## 表

| No | サービス | ホスト側ポート | コンテナ側ポート | 備考 |
|:--|:--|:--|:--|:--|
| 1 | Nginx | 21337 | 80 | 採用バージョン v1.20.0.<br/>Fluentd のテストのために導入しているだけである.<br/>本表 No 2 の Fluentd(24224) へログを配送する. |
| 2 | Fluentd | 24224 | 24224 | 採用バージョン v1.13.1.<br/>受信したログを本表  No 3 の Fluentd(34224)へ転送する. |
| 3 | Fluentd | 34224 | 34224 | 採用バージョン v1.13.1.<br/>受信したログを stdout へ出力する.<br/>本項記載時点では Elasticsearch との連携は未である.|
| 4 | Elasticsearch | 29200 | 29200 | 採用バージョン v7.14.<br/>ログ格納のためのデータストア.<br/>日本語検索をするための analysis-kuromoji 導入あり. |
| 5 | Kibana | 29601 | 29601 | 採用バージョン v7.14.<br/>Elasticsearch の視覚化 |

## 留意次項

次の設定は職場環境を想定したためである.
>・Fluentd を 2つ配置していること
・Elasticsearch のコンテナ側ポートを 9200 以外にしていること.
・Kibana のコンテナ側ポートを 5601 以外にしていること.



# 用語

## インスタンス、ノード、クラスタ

用語と図ともに圧倒的に分かりやすかった.

|項目|URL|
|:--|:--|
|用語|[Qiita - Elasticsearchの構成要素について](https://qiita.com/gitya107/items/597ac557ff187d136d63#elasticsearch%E3%81%AE%E6%A7%8B%E6%88%90%E8%A6%81%E7%B4%A0%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)|
|図|[Qiita - Elasticsearchの構成要素について](https://qiita.com/gitya107/items/597ac557ff187d136d63#elasticsearch%E3%81%AE%E6%A7%8B%E6%88%90%E8%A6%81%E7%B4%A0%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)|

## インデックス、タイプ、ドキュメント、フィールド

RDBMS に置き換えた考え方が、個人的には合っていた.

|項目|URL|
|:--|:--|
|用語|https://dev.classmethod.jp/articles/elasticsearch-getting-started-06/|
|図|https://www.devopsschool.com/blog/wp-content/uploads/2018/09/Elasticsearch-Keywords-and-Terminology.jpg|

## シャード (プライマリとレプリカ)

シャードの目的を把握すると理解できた気になった.

|項目|URL|
|:--|:--|
|用語|https://dev.classmethod.jp/articles/elasticsearch-getting-started-06/#toc-5|
|図|https://miro.medium.com/max/700/1*u6kVsD_Yl3DY43IJAixDqw.png|

## マッピング

|項目|URL|
|:--|:--|
|用語|https://dev.classmethod.jp/articles/es-01/#toc-6|
|図|https://d2908q01vomqb2.cloudfront.net/887309d048beef83ad3eabf2a79a64a389ab1c9f/2018/11/19/DMSElasicsearch1.png|

## 転置インデックス

下図を見つつ「転置インデックス」についての説明文を読むことで理解できた気になった.

|項目|URL|補足|
|:--|:--|:--|
|図|https://www.slideshare.net/JunOhtani/elasticsearch-pyfes-201207|← P8, P9 のスライドが該当する|

　

以上.


# 参考書籍およびサイト

|書籍|
|:---|
|[nginx実践入門](https://gihyo.jp/book/2016/978-4-7741-7866-0)|
|[「Docker/Kubernetes 実践コンテナ開発入門  山田 明憲」](https://gihyo.jp/book/2018/978-4-297-10033-9)|
|[データ分析基盤構築入門［Fluentd，Elasticsearch，Kibanaによるログ収集と可視化］](https://gihyo.jp/book/2017/978-4-7741-9218-5)|
|[検索だけじゃない Elasticsearch 入門+](https://booth.pm/ja/items/1031664)|


|URL|一言|
|:--|:---|
|https://qiita.com/sanyamarseille/items/1c4c31547502791ecac6||
|https://www.elastic.co/guide/en/elastic-stack-get-started/current/get-started-docker.html||
|https://qiita.com/suzuki_y/items/6365799485fa3973b916||
|https://qiita.com/sugikeitter/items/f3b2c57bf8bbdc47a8bc||
|https://github.com/sugikeitter/elasticsearch-kibana-docker/blob/master/docker-compose.yml||
|https://gitya107.hatenablog.com/entry/2018/06/15/170334||
|http://ittoo.jugem.jp/?eid=737||
|https://qiita.com/kaibadash@github/items/9cfb532696dc8711e408|日本語検索を可能にする|
|https://qiita.com/mserizawa/items/8335d39cacb87f12b678|日本語検索を可能にする|
|https://github.com/deviantony/docker-elk|ELK を構築するための docker-compose が公開されている|
|https://dev.classmethod.jp/articles/es-01/|index, document, type の説明が簡潔に RDMS に例えられていて良かった|
|http://www.tech-joy.work/article/a20180527115811.html|/etc/elasticsearch/elasticsearch.yml の記述例と説明あり|
|https://qiita.com/Esfahan/items/3c07bfbb57c7098e9531|3台に Elasticsearch を導入した場合の手順あり|

　


[^1]: オンプレ環境での組込み機器開発向け DevOps 業務