Elastic Stack入門ウェビナー for インフラ勉強会

A presentation at インフラ勉強会 in November 2018 in by Jun Ohtani

Slide 1

Slide 1

様々なメトリクスやログを集めてシステム解析 - Elastic Stackの入門と活用 - 2018/10/27 Community Engineer @Elastic Jun Ohtani @johtani !1

Slide 2

Slide 2

アジェンダ • メトリック/ログとは? • システムメトリクス解析、ログ解析を試しにやってみよう • Beats - Elasticsearch - Kibanaで解析 • 本格的に解析をやるには? • Logstashでログやメトリクスを中継・集約 • さらに色々試してみるには? !2

Slide 3

Slide 3

about • • !3 Me, Jun Ohtani / Community Engineer ‒ lucene-gosenコミッター ‒ データ分析基盤構築入門 共著 ‒ http://blog.johtani.info Elastic, founded in 2012 ‒ Products: Elasticsearch, Logstash, Kibana, Beats Elastic APM, Elastic Cloud, Swiftype Professional services: Support & development subscriptions Trainings, Consulting, SaaS

Slide 4

Slide 4

どんなメトリック、 ログを集めていますか? !4

Slide 5

Slide 5

メトリック !5 • CPU、メモリ使用率、ディスク使用率 • アクセス数、ネットワーク転送量 • 応答時間 • コネクション数 • トランザクション数、売上 • コンテナの上の各種メトリクス

Slide 6

Slide 6

ログ !6 • 認証ログ • システムログ • アプリケーションログ • Slow log • アクセスログ • コンテナの中のログ

Slide 7

Slide 7

できればログとメトリックを まとめて1つの画面で 見たいですよね? !7

Slide 8

Slide 8

Elastic Stack !8

Slide 9

Slide 9

Elastic Stack Kibana 可視化、管理 Elasticsearch 保存、検索、分析 Beats Logstash インジェスト

Slide 10

Slide 10

Application Search Metrics Elastic Stack Site Search APM Enterprise Search Logging Business Analytics Security Analytics Future ソリューション Kibana 可視化、管理 Elasticsearch 保存、検索、分析 Beats Logstash インジェスト

Slide 11

Slide 11

App Search Site Search Metrics Elastic Stack APM Enterprise Search Logging Business Analytics Security Analytics Future ソリューション Kibana 可視化、管理 Elasticsearch 保存、検索、分析 Beats SaaS Elastic Cloud Logstash インジェスト Self Managed Elastic Cloud Enterprise Standalone デプロイ

Slide 12

Slide 12

Application Search Site Search Metrics Elastic Stack APM Enterprise Search Logging Business Analytics Security Analytics Future ソリューション Kibana 可視化、管理 Elasticsearch 保存、検索、分析 Beats SaaS Elastic Cloud Logstash インジェスト Self Managed Elastic Cloud Enterprise Standalone デプロイ

Slide 13

Slide 13

定型のメトリクス/ログ解析を Elastic Stackで !13

Slide 14

Slide 14

メトリック・ログ分析(簡易版) Beats Log Files Elasticsearch Wire Data Instances Nodes Metrics !14 Kibana

Slide 15

Slide 15

!15

Slide 16

Slide 16

Beats 軽量データシッパー ソースからデータを転送 転送しElasticsearchに集約 変換とパースのため Logstashに転送 Elastic Cloudに転送 Libbeat: カスタムbeatsのた めのAPIフレームワーク 30以上のコミュニティbeats 16

Slide 17

Slide 17

The Beats family Packetbeat Metricbeat Winlogbeat Network data Metrics Windows Event Logs Auditbeat Filebeat Audit data Log files Heartbeat Uptime monitoring +40 community Beats

Slide 18

Slide 18

Metricbeat Collect system and application metrics

Slide 19

Slide 19

Metricbeat lots of modules

Slide 20

Slide 20

Metricbeat モジュール ● ● ● ● ● ● ● ● ● ● ● ● !20 Aerospike module Apache module Ceph module Couchbase module Docker module Dropwizard module Elasticsearch module Etcd module Golang module Graphite module HAProxy module HTTP module ● ● ● ● ● ● ● ● ● ● ● ● Jolokia module Kafka module Kibana module Kubernetes module kvm module Logstash module Memcached module MongoDB module Munin module MySQL module Nginx module ● ● ● ● ● ● ● ● ● ● PHP_FPM module PostgreSQL module Prometheus module RabbitMQ module Redis module System module uwsgi module vSphere module Windows module ZooKeeper module

Slide 21

Slide 21

Filebeat tail log from file

Slide 22

Slide 22

Filebeat many modules

Slide 23

Slide 23

Filebeat modules - v6.4.2 • Apache2 module • MySQL module • Auditd module • Nginx module • Icinga module • Osquery module • IIS module • PostgreSQL module • Kafka module • Redis module • Logstash module • System module • MongoDB module • Traefik module

Slide 24

Slide 24

Packetbeat Capture the Packet

Slide 25

Slide 25

Packetbeat Capture the Packet

Slide 26

Slide 26

winlogbeat Welcome to 1998

Slide 27

Slide 27

winlogbeat Now

Slide 28

Slide 28

!28

Slide 29

Slide 29

Elasticsearch Heart of the Elastic Stack 分散型、スケーラブル 高可用性 マルチテナント 開発者フレンドリー リアルタイム、全文検索 アグリゲーション 29

Slide 30

Slide 30

Elasticsearchとは?

Slide 31

Slide 31

フリーワード検索 !31

Slide 32

Slide 32

絞り込み !32

Slide 33

Slide 33

ハイライト !33

Slide 34

Slide 34

ソート !34

Slide 35

Slide 35

ページング !35

Slide 36

Slide 36

集計 !36

Slide 37

Slide 37

サジェスト !37

Slide 38

Slide 38

Elasticsearch in 10 seconds • スキーマフリー、分散ドキュメントストア、REST & JSON • オープンソース: Apache License 2.0 • 設定なしで簡単に試すことが可能 • Javaで実装。拡張も容易 !38

Slide 39

Slide 39

簡単なCRUD

Slide 40

Slide 40

データ登録 curl -XPUT localhost:9200/books/book/1 -d ’ { “title” : “authors” “started” “pages” : “Elasticsearch - The definitive guide”, : “Clinton Gormley”, : “2013-02-04”, 230 }’ 40

Slide 41

Slide 41

データ更新 curl -XPUT localhost:9200/books/book/1 -d ’ { “title” : “authors” “started” “pages” : “Elasticsearch - The definitive guide”, : [ “Clinton Gormley”, “Zachary Tong” ], : “2013-02-04”, 230 }’ 41

Slide 42

Slide 42

データ削除 curl -X DELETE localhost:9200/books/book/1 データの取得 curl —X GET localhost:9200/books/book/1 curl —X GET localhost:9200/books/book/1/_source !42

Slide 43

Slide 43

検索 - Query DSL curl -XGET ‘localhost:9200/books/doc/_search’ -d ‘{ “query”: { “bool”: { “must”: [ { “match”: { “match”: ], “filter”: [ { “term”: { “range”: ] } } }’ !43 { “title”: “Search” }}, { “content”: “Elasticsearch” }} { “status”: “published” }}, { “publish_date”: { “gte”: “2015-01-01” }}}

Slide 44

Slide 44

分散構成、 スケール

Slide 45

Slide 45

Basic terms • インデックス ‒ データの論理的な集合。 RDBのデータベースのようなものLogical • レプリケーション • 読み込みのスケーラビリティ向上 • SPOFの解消 • シャーディング !45 • 複数マシンへデータを分割 書き込みのスケーラビリティ向上 データフロー制御

Slide 46

Slide 46

シャードとレプリカ node 1 orders 1 2 3 4 products 1 2 !46 curl -X PUT localhost:9200/orders -d ‘{ “settings.index.number_of_shards” : 4 “settings.index.number_of_replicas” : 1 }’ curl -X PUT localhost:9200/products -d ‘{ “settings.index.number_of_shards” : 2 “settings.index.number_of_replicas” : 0 }’

Slide 47

Slide 47

シャードとレプリカ node 1 node 2 orders orders 1 2 1 2 3 4 3 4 products 1 !47 products 2

Slide 48

Slide 48

自動的な分散 node 1 node 2 node 3 orders orders orders 1 2 4 products 1 !48 2 3 products 2 1 3 4 products

Slide 49

Slide 49

全文検索とは?

Slide 50

Slide 50

全文検索とは? • 全文検索(Full text search)とは、コンピュータにおいて、複数の文書 (ファイル)から特定の文字列を検索すること。「ファイル名検索」や 「単一ファイル内の文字列検索」と異なり、「複数文書にまたがって、文 書に含まれる全文を対象とした検索」という意味で使用される。 (Wikipediaより) !50

Slide 51

Slide 51

用語 • インデックス 検索エンジンが検索に使用するデータの保存先 • ドキュメント(文書) ‒ 検索エンジンに保存されたデータ • フィールド ‒ ドキュメントに含まれる属性 • クエリ ‒ 検索条件、検索式 !51

Slide 52

Slide 52

用語 • スキーマ ‒ ドキュメントの構造を定義するもの • ターム(Term)、トークン(Token) ‒ インデックスのキーになる単語(文字列) ‒ 文章を一定の法則で区切った単語 ‒ 単語だけでなく、単語の位置なども含む !52

Slide 53

Slide 53

ドキュメントの登録 !53 1 カツオはサザエの弟 2 サザエはワカメの姉 ドキュメントの登録

Slide 54

Slide 54

ドキュメントの登録 !54 1 カツオはサザエの弟 2 サザエはワカメの姉 1 カツオ は サザエ の 弟 2 サザエ は ワカメ の 姉 ドキュメントの登録 単語に分割

Slide 55

Slide 55

ドキュメントの登録 !55 1 カツオはサザエの弟 2 サザエはワカメの姉 1 カツオ は サザエ の 弟 2 サザエ は ワカメ の 姉 カツオ 1 の 1 2 弟 1 サザエ 1 2 は 1 2 姉 2 ワカメ 2 ドキュメントの登録 単語に分割 単語からidの配列が 引けるように

Slide 56

Slide 56

検索 カツオ !56 検索条件入力 サザエ カツオ 1 の 1 2 弟 1 サザエ 1 2 は 1 2 姉 2 ワカメ 2

Slide 57

Slide 57

検索 カツオ カツオ !57 検索条件入力 サザエ AND 検索条件のパース サザエ 検索クエリ化 カツオ 1 の 1 2 弟 1 サザエ 1 2 は 1 2 姉 2 ワカメ 2

Slide 58

Slide 58

検索 カツオ カツオ !58 検索条件入力 サザエ AND 検索条件のパース サザエ 検索クエリ化 カツオ 1 の 1 2 弟 1 サザエ 1 2 は 1 2 姉 2 ワカメ 2

Slide 59

Slide 59

検索 カツオ カツオ !59 検索条件入力 サザエ AND 検索条件のパース サザエ 検索クエリ化 カツオ 1 の 1 2 弟 1 サザエ 1 2 は 1 2 姉 2 ワカメ 2

Slide 60

Slide 60

検索 カツオ カツオ !60 検索条件入力 サザエ AND 検索条件のパース サザエ 検索クエリ化 カツオ 1 の 1 2 弟 1 サザエ 1 2 は 1 2 姉 2 ワカメ 2

Slide 61

Slide 61

検索 カツオ カツオ !61 検索条件入力 サザエ AND 検索条件のパース サザエ 検索クエリ化 カツオ 1 の 1 2 弟 1 サザエ 1 2 は 1 2 姉 2 ワカメ 2

Slide 62

Slide 62

検索 カツオ カツオ !62 検索条件入力 サザエ AND 検索条件のパース サザエ 検索クエリ化 カツオ 1 の 1 2 弟 1 サザエ 1 2 は 1 2 姉 2 ワカメ 2

Slide 63

Slide 63

単語の区切り方 • 英語の場合 I am speaking Introduction Elasticsearch. • 日本語の場合 私は入門Elasticsearchについて話している。 !63

Slide 64

Slide 64

単語の区切り方 • 英語の場合 I am speaking Introduction Elasticsearch. スペースが切れ目とわかる • 日本語の場合 私は入門Elasticsearchについて話している。 どこで区切ればよい? 64

Slide 65

Slide 65

N-Gramと形態素解析 • 転置インデックスのキーの作り方 ‒ 日本語は単語の切れ目がわからないので、転置インデックスのキーは 主に次の2つの手法で作成 • N-Gram ‒ N文字ずつ文章を区切る • 形態素解析 ‒ 辞書などを用いて意味のある単語で区切る !65

Slide 66

Slide 66

形態素解析 カツオはサザエの弟 カツオ は サザエ の 弟 • メリット: ‒ 意味のある単語の切れ目 品詞情報を元に追加処理が可能(語幹変換など) • デメリット: ‒ 新語(未知語)に弱い→辞書ベースの場合、辞書にない単語は検出不 能。 !66

Slide 67

Slide 67

N-Gram カツオはサザエの弟 カツ ツオ オは はサ • メリット: ‒ 未知語に対応可能 • デメリット: ‒ インデックス肥大化 ‒ 品詞情報に基づく処理が不可能 !67 サザ ザエ エの の弟

Slide 68

Slide 68

その他の機能

Slide 69

Slide 69

GEO さまざまな形式のデータで Geo検索可能 緯度経度、GeoHash、 GeoShape… elasticsearch

Slide 70

Slide 70

Ecosystem • Plugins ‒ プラグインによる機能の追加 • クライアントライブラリ !70 • Java, Ruby, python, php, perl, javascript, .NET • Scala, clojure, go

Slide 71

Slide 71

詳しく知りたい方は Elasticsearch - The Definitive guide http://www.elastic.co/guide/en/ elasticsearch/guide/current/index.html 71

Slide 72

Slide 72

!72

Slide 73

Slide 73

Kibana Window into the Elastic Stack 可視化と分析 地理空間 カスタマイズと レポートの共有 グラフ探索 Elastic Stackへの セキュアなアクセスと管理 カスタムAppsの作成 73

Slide 74

Slide 74

Kibana 6 !74

Slide 75

Slide 75

デモ データ投入から可視化まで !75

Slide 76

Slide 76

本格的に解析を行うには? !76

Slide 77

Slide 77

Elastic Stackの構成 Beats Log Files Elasticsearch Wire Data Instances Nodes Metrics !77 Kibana

Slide 78

Slide 78

Elastic Stackの構成 Beats Log Files Elasticsearch Kibana Wire Data Instances Nodes Metrics your{beat} Distributed Message Queue Kafka !78 Data Store Web APIs Social Sensors Logstash Nodes Queues Storage Metrics Notification

Slide 79

Slide 79

!79

Slide 80

Slide 80

Logstash データ加工パイプライン 全ての形式、サイズとデータソー スの投入 パースと動的な データ変換 あらゆる出力に データ転送 安全で暗号化された データ入力 独自のパイプライン処理 の作成 200以上のプラグイン 80

Slide 81

Slide 81

Logstash in 10 seconds • ログ・データの収集・管理 • 収集、パース・加工、送出 • オープンソース:Apache License 2.0 • Ruby app (JRuby) !81

Slide 82

Slide 82

Logstash architecture Input Filter Output collect and split alter and enrich store and visualize ? !82 ?

Slide 83

Slide 83

設定 input { … } filter { … } output { … } 83

Slide 84

Slide 84

設定:input input { file { path => “/Users/johtani/sample/*_log” start_position => “beginning” } } 84

Slide 85

Slide 85

1行1データ 189.120.xx.xx - - [02/Dec/2014:12:18:29 +0900] “GET /manager/html HTTP/ 1.1” 404 274 “-” “Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0” 85

Slide 86

Slide 86

設定:filter filter { grok { match => { “message” => “%{COMBINEDAPACHELOG}” } break_on_match => false } date { match => [“timestamp”, “dd/MMM/YYYY:HH:mm:ss Z”] locale => en } geoip { source => [“clientip”] } useragent { source => “agent” target => “useragent” } } 86

Slide 87

Slide 87

パース 189.120.xx.xx - - [02/Dec/2014:12:18:29 +0900] “GET /manager/html HTTP/1.1” 404 274 “-” “Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0” {… !87 “@timestamp”: “2015-04-10T09:07:49.325Z”, “clientip”: “189.120.xx.xx”, “ident”: “-“, “auth”: “-“, “timestamp”: “02/Dec/2014:12:18:29 +0900”, “verb”: “GET”, “request”: “/manager/html”, … “agent”: “”Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/

Slide 88

Slide 88

設定:filter filter { grok { match => { “message” => “%{COMBINEDAPACHELOG}” } break_on_match => false } date { match => [“timestamp”, “dd/MMM/YYYY:HH:mm:ss Z”] locale => en } geoip { source => [“clientip”] } useragent { source => “agent” target => “useragent” } } !88

Slide 89

Slide 89

日付のパース {… “@timestamp”: “2015-04-10T09:07:49.325Z”, … “timestamp”: “02/Dec/2014:12:18:29 +0900”, … } {… “@timestamp”: “2014-12-02T03:18:29.000Z”, … “timestamp”: “02/Dec/2014:12:18:29 +0900”, 89 … }

Slide 90

Slide 90

設定:filter filter { grok { match => { “message” => “%{COMBINEDAPACHELOG}” } break_on_match => false } date { match => [“timestamp”, “dd/MMM/YYYY:HH:mm:ss Z”] locale => en } geoip { source => [“clientip”] } useragent { source => “agent” target => “useragent” } } !90

Slide 91

Slide 91

IPから緯度経度など付与 “clientip”: “189.120.xx.xx”, “clientip”: “189.120.xx.xx”, “geoip”: { “ip”: “189.120.xxx.xxx”, … 91 “country_name”: “Brazil”, “continent_code”: “SA”, “region_name”: “27”, “city_name”: “São Paulo”, “latitude”:

Slide 92

Slide 92

設定:filter filter { grok { match => { “message” => “%{COMBINEDAPACHELOG}” } break_on_match => false } date { match => [“timestamp”, “dd/MMM/YYYY:HH:mm:ss Z”] locale => en } geoip { source => [“clientip”] } useragent { source => “agent” target => “useragent” } } !92

Slide 93

Slide 93

ユーザエージェントのパース “agent”: “”Mozilla/5.0 (Windows NT 5.1; rv: 5.0) Gecko/20100101 Firefox/5.0”” 93 “agent”: “”Mozilla/5.0 (Windows NT 5.1; rv: 5.0) Gecko/20100101 Firefox/5.0”” “useragent”: { “name”: “Firefox”, “os”: “Windows XP”, “os_name”: “Windows XP”, “device”: “Other”, “major”: “5”, “minor”: “0”

Slide 94

Slide 94

設定:output output { elasticsearch { hosts => [“localhost”] index => “demo_access_log-%{+YYYY.MM.dd}” } } 94

Slide 95

Slide 95

さらに活用するには? !95

Slide 96

Slide 96

elasticsearch-hadoop D • • g • • !96 H PD ER • E ecd D CH D Ca FERC M DMS

Slide 97

Slide 97

!97

Slide 98

Slide 98

!98

Slide 99

Slide 99

!99

Slide 100

Slide 100

その他の使い方 !100

Slide 101

Slide 101

データの登録方法 !101 • Kibanaのサンプルデータ(6.4から) • LogstashでJDBC input • LogstashでCSV • Filebeatでアクセスログ • Metricbeatでメトリック • PacketbeatでMySQL/PostgreSQLのパケット解析

Slide 102

Slide 102

Kibanaのサンプルデータ(>= 6.4.0) !102

Slide 103

Slide 103

ワンクリックでデータ登録 !103

Slide 104

Slide 104

LogstashでJDBC Input Elasticsearch Kibana Instances Nodes Logstash Nodes Data Store !104

Slide 105

Slide 105

JDBC Input !105

Slide 106

Slide 106

LogstashでCSV Elasticsearch Kibana Instances Nodes Logstash Nodes CSV File !106

Slide 107

Slide 107

CSV filter !107

Slide 108

Slide 108

Filebeatでアクセスログ Beats Elasticsearch Log Files Instances Nodes !108 Kibana

Slide 109

Slide 109

Filebeatでアクセスログ !109 • 2つのElasticsearchプラグインをインストールしてElasticsearchを起動 • Filebeatのapache2モジュールを有効化 • modules.d/apache2.ymlにアクセスログのパスを設定 • setupコマンドを実行してからFilebeatを起動

Slide 110

Slide 110

Metricbeatでメトリック Beats Elasticsearch Kibana Instances Nodes Metrics

Slide 111

Slide 111

Metricbeatでメトリック !111 • Metricbeatのsystemモジュールを有効化 • setupコマンドを実行してからFilebeatを起動

Slide 112

Slide 112

PacketbeatでMySQL、PostgreSQLのパケット解析 Beats Elasticsearch Wire Data Instances Nodes !112 Kibana

Slide 113

Slide 113

参考文献 • Elasticsearch - The Definitive guide ‒ http://www.elastic.co/guide/en/elasticsearch/guide/current/ index.html • 書籍(日本語) !113 ‒ データ分析基盤構築入門 ‒ Elasticsearch実践ガイド

Slide 114

Slide 114

参考サイト • ユースケース • https://www.elastic.co/use-cases • Discuss(Webフォーラム) • https://discuss.elastic.co • Elastic{ON}のビデオと資料 • https://www.elastic.co/elasticon/videos • サポートメニュー • https://www.elastic.co/subscriptions !114

Slide 115

Slide 115

Thank you! ● Web : https://www.elastic.co/jp/ ● Forums : https://discuss.elastic.co/ ● Twitter : @johtani