脱Excel Elastic Stack（docker-compose）でcsvログを分析・可視化 - Elastic Stackとは

## はじめに
どうも！生産技術部で製品の検査工程を担当しているエンジニアです。
ソフトウェア業界の方には馴染みのない生産技術の検査工程の主なお仕事は、製品を検査する装置のハード設計、検査ソフト設計に加えて、製品を安定して生産するために検査ログを解析し不具合対策を行います。検査工程が停止することは、生産性の悪化に直結するため早期解決が求められます。

今までの不具合対策は、検査ログ（csv）をExcelで開き、検査がNGになる項目にフィルタをかけ分析したり、Excel VBAで週ごとのデータを事務員さんが集計し、兆候管理をするというものでした。言うまでもなく、作業時間は長く、早期解決とは程遠いものです。

そこで、Elastic Stackを用いて業務効率と生産性の向上を目指します。

## 対象読者
この記事では、Elastic Stackをそもそも知らない方、これから試そうと思っている方を対象としています。

## この記事の内容
この記事は触りの部分のみです。Elastic Stackとはなんなのかについて説明します。

docker-composeで立ち上げる時に必要な設定ファイルの書き方、日本時間などの日付の分析方法、csvファイルの扱い方などは、今後の記事で紹介したいと思っています。

Elastic Stack関連の投稿済み内容

* [docker-composeでセットアップ](https://qiita.com/TomoyukiSugiyama/items/a146edf2cc2daee06afb)
* [multilineの中の"年/月/日,時:分:秒"をgrokフィルタでパースし、日本時間として扱う](https://qiita.com/TomoyukiSugiyama/items/1633a1ce72cfc7ab38b9)
* [（1行目：日付、2行目以降：csvデータ）の日付を2行目以降の各行にtimestampフィールドとして追加](https://qiita.com/TomoyukiSugiyama/items/e9df5752120c3575c693)
* [LogstashのOutOfMemoryErrorが出た時の２つの対応方法](https://qiita.com/TomoyukiSugiyama/items/33f96cdabba3b8b6b22d)
* [PipelineFilterを[input/filter/output]の3ファイルに分割し、保守性と再利用性向上](https://qiita.com/TomoyukiSugiyama/items/3011eb10e4d1a2d59c62)
* [LogstashのPipeline-to-Pipelineで複数のbeatからの入力を受け付ける](https://qiita.com/TomoyukiSugiyama/items/51327e8b056d05c0c7bb)
* [MetricbeatとLogstashを経由してelastic-stackの監視](https://qiita.com/TomoyukiSugiyama/items/17a87b648b27dbbde9d7)
* [Elastic Stack（docker-compose）でcsvログを分析・可視化 - Elasticsearchのデータ重複エラー対処方法](https://qiita.com/TomoyukiSugiyama/items/10e84424f9f4bb2626d7)
* [Elasticsearchにオセロの記譜（GGF）を取り込みElastic-OthelloDBにする](https://qiita.com/TomoyukiSugiyama/items/0ef325cdaa5de47bcdd6)

## まず、具体的にやったこと
検査ログ（sample.csv）から、日付と、検査結果を抽出し、行ごとの検査結果に日付を紐づけることで、時系列データとしてグラフ化することを可能にしました。

```csvs:sample.csv
Dummy,1
Date,2020/10/18,20:19:18　　<--- 日付
ID,123456
Step,TestName,Value1,Judge　<--- 以下、検査結果
10,Test1,130,OK
20,Test2,1321,OK
30,Test3,50,NG
40,Test4,13432,OK
55,Test5,15,NG
70,Test6,1,OK
100,Test7,1734,OK
120,Test8,54,OK
End　　　　　　　　　　　　　　　<--- ここまでが一つ分の検査結果
Dummy,2
Date,2020/10/19,12:30:50
ID,123457
Step,TestName,Value1,Judge
10,Test1,140,OK
20,Test2,1300,OK
30,Test3,50,NG
40,Test4,13431,OK
55,Test5,20,NG
70,Test6,1,OK
100,Test7,1733,OK
120,Test8,56,OK
End
```

グラフは適当に追加しただけですが、必要なデータを正しく抽出できていることを確認しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/451049/ffbf9ca7-e1ba-84dc-d871-61f09c69f9a0.png)

## Elastic Stackとは
まずELK Stackと呼ばれるものがあります。[公式サイト](https://www.elastic.co/jp/what-is/elk-stack)を見ればわかると言われればそれまでですが、**E**lasticsearch、**L**ogstash、**K**ibanaの頭文字をとって"ELK"です。これらは全てElastic社が提供するオープンソースの製品群であり、用途に合わせて組み合わせることで、ログの分析や可視化を可能にします。そして、より柔軟に対応することを可能にするために、BeatsをELK Stackに組み合わせ、Elastic Stackと呼びます。
### Elasticsearch
ドキュメントを保存したり、ドキュメントへの検索可能な参照をインデックスに追加したりしてくれる分散検索・分析エンジンです。ブログの記事内の単語で検索する全文検索などに利用されます。公式に、"Elasticsearchは速い。とにかく速い。"と言う謳い文句が記載されている通り、検索がとにかく早いです。

### Logstash
入力されたデータを加工するための仕組みを提供します。数多くの加工フィルタが用意されており、あらゆるログを解析することが可能です。具体的には、非構造データを構造化するためのGrokフィルタ、csvデータを各フィールドに分解するcsvフィルタなど様々なフィルタが存在します。フィルタの一覧は[こちら](https://www.elastic.co/guide/en/logstash/current/filter-plugins.html)です。

また、様々な種類の入力、出力先をサポートしています。Webログやcsvなどのファイル、システムのログなどを受け取ることができます。サポートされている入力一覧は[こちら](https://www.elastic.co/guide/en/logstash/current/input-plugins.html)です。出力先は、Elasticsearchを指定できることはもちろんですが、メール、slack、ファイルなどを選択することができます。サポートされている出力先一覧は[こちら](https://www.elastic.co/guide/en/logstash/current/output-plugins.html)です。

Logstashは、ログ収集ツールであるFluentdと、比較されることが多いようです。
### Kibana
Elasticsearchに集約されたデータをグラフ化するツールです。複雑な操作は不要であり、直感的な操作でグラフを作成することができます。また、ダッシュボードを作成することができ、ボード上に必要なグラフを追加しておけば、好きな時に手間なくグラフを確認することができます。

もう一つの大事な機能としてアラートがあります。閾値を設定しておき、閾値を超えた時に、メールやslackに通知することができます。PagerDutyとの連携などにも対応しています。これにより、インシデント管理が可能になります。

Kibanaは、Grafanaと比較されることが多いようです。

### Beats
今回利用したFilebeatはBeatsと呼ばれるカテゴリに属するもので、Beatsは軽量データシッパーと呼ばれます。これはデータをElasticsearchやLogstashに転送するためのもので、Filebeat以外にもMetricbeat、Packetbeat、Winlogbeat、Audiobeat、Heartbeat、Functionbeatがあります。Filebeatは、その名の通りログファイルを転送するためのものです。


## Elastic Stackを使った具体的なフロー
フォルダに追加されるcsvファイルをFilebeatでLogstashに転送、Logstashで日付と検査結果の抽出、加工後のデータをElasticsearchに格納し、Kibanaでグラフ化と言う流れになります。

## 最後に
今回、初めてElastic Stackを使い、可視化に挑戦しました。実際に使った機能のみを紹介しましたが、他にも知らない機能が豊富にあるようです。これからいろいろ試してみたいと思います。今後は、docker-composeで立ち上げる時に必要な設定ファイル、日付の分析方法、csvファイルの扱い方などを紹介したいと思います。