A presentation at インフラ勉強会 by Jun Ohtani
様々なメトリクスやログを集めてシステム解析 - Elastic Stackの入門と活用 - 2018/10/27 Community Engineer @Elastic Jun Ohtani @johtani !1
アジェンダ • メトリック/ログとは? • システムメトリクス解析、ログ解析を試しにやってみよう • Beats - Elasticsearch - Kibanaで解析 • 本格的に解析をやるには? • Logstashでログやメトリクスを中継・集約 • さらに色々試してみるには? !2
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
どんなメトリック、 ログを集めていますか? !4
メトリック !5 • CPU、メモリ使用率、ディスク使用率 • アクセス数、ネットワーク転送量 • 応答時間 • コネクション数 • トランザクション数、売上 • コンテナの上の各種メトリクス
ログ !6 • 認証ログ • システムログ • アプリケーションログ • Slow log • アクセスログ • コンテナの中のログ
できればログとメトリックを まとめて1つの画面で 見たいですよね? !7
Elastic Stack !8
Elastic Stack Kibana 可視化、管理 Elasticsearch 保存、検索、分析 Beats Logstash インジェスト
Application Search Metrics Elastic Stack Site Search APM Enterprise Search Logging Business Analytics Security Analytics Future ソリューション Kibana 可視化、管理 Elasticsearch 保存、検索、分析 Beats Logstash インジェスト
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 デプロイ
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 デプロイ
定型のメトリクス/ログ解析を Elastic Stackで !13
メトリック・ログ分析(簡易版) Beats Log Files Elasticsearch Wire Data Instances Nodes Metrics !14 Kibana
!15
Beats 軽量データシッパー ソースからデータを転送 転送しElasticsearchに集約 変換とパースのため Logstashに転送 Elastic Cloudに転送 Libbeat: カスタムbeatsのた めのAPIフレームワーク 30以上のコミュニティbeats 16
The Beats family Packetbeat Metricbeat Winlogbeat Network data Metrics Windows Event Logs Auditbeat Filebeat Audit data Log files Heartbeat Uptime monitoring +40 community Beats
Metricbeat Collect system and application metrics
Metricbeat lots of modules
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
Filebeat tail log from file
Filebeat many modules
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
Packetbeat Capture the Packet
winlogbeat Welcome to 1998
winlogbeat Now
!28
Elasticsearch Heart of the Elastic Stack 分散型、スケーラブル 高可用性 マルチテナント 開発者フレンドリー リアルタイム、全文検索 アグリゲーション 29
Elasticsearchとは?
フリーワード検索 !31
絞り込み !32
ハイライト !33
ソート !34
ページング !35
集計 !36
サジェスト !37
Elasticsearch in 10 seconds • スキーマフリー、分散ドキュメントストア、REST & JSON • オープンソース: Apache License 2.0 • 設定なしで簡単に試すことが可能 • Javaで実装。拡張も容易 !38
簡単なCRUD
データ登録 curl -XPUT localhost:9200/books/book/1 -d ’ { “title” : “authors” “started” “pages” : “Elasticsearch - The definitive guide”, : “Clinton Gormley”, : “2013-02-04”, 230 }’ 40
データ更新 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
データ削除 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
検索 - 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” }}}
分散構成、 スケール
Basic terms • インデックス ‒ データの論理的な集合。 RDBのデータベースのようなものLogical • レプリケーション • 読み込みのスケーラビリティ向上 • SPOFの解消 • シャーディング !45 • 複数マシンへデータを分割 書き込みのスケーラビリティ向上 データフロー制御
シャードとレプリカ 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 }’
シャードとレプリカ node 1 node 2 orders orders 1 2 1 2 3 4 3 4 products 1 !47 products 2
自動的な分散 node 1 node 2 node 3 orders orders orders 1 2 4 products 1 !48 2 3 products 2 1 3 4 products
全文検索とは?
全文検索とは? • 全文検索(Full text search)とは、コンピュータにおいて、複数の文書 (ファイル)から特定の文字列を検索すること。「ファイル名検索」や 「単一ファイル内の文字列検索」と異なり、「複数文書にまたがって、文 書に含まれる全文を対象とした検索」という意味で使用される。 (Wikipediaより) !50
用語 • インデックス 検索エンジンが検索に使用するデータの保存先 • ドキュメント(文書) ‒ 検索エンジンに保存されたデータ • フィールド ‒ ドキュメントに含まれる属性 • クエリ ‒ 検索条件、検索式 !51
用語 • スキーマ ‒ ドキュメントの構造を定義するもの • ターム(Term)、トークン(Token) ‒ インデックスのキーになる単語(文字列) ‒ 文章を一定の法則で区切った単語 ‒ 単語だけでなく、単語の位置なども含む !52
ドキュメントの登録 !53 1 カツオはサザエの弟 2 サザエはワカメの姉 ドキュメントの登録
ドキュメントの登録 !54 1 カツオはサザエの弟 2 サザエはワカメの姉 1 カツオ は サザエ の 弟 2 サザエ は ワカメ の 姉 ドキュメントの登録 単語に分割
ドキュメントの登録 !55 1 カツオはサザエの弟 2 サザエはワカメの姉 1 カツオ は サザエ の 弟 2 サザエ は ワカメ の 姉 カツオ 1 の 1 2 弟 1 サザエ 1 2 は 1 2 姉 2 ワカメ 2 ドキュメントの登録 単語に分割 単語からidの配列が 引けるように
検索 カツオ !56 検索条件入力 サザエ カツオ 1 の 1 2 弟 1 サザエ 1 2 は 1 2 姉 2 ワカメ 2
検索 カツオ カツオ !57 検索条件入力 サザエ AND 検索条件のパース サザエ 検索クエリ化 カツオ 1 の 1 2 弟 1 サザエ 1 2 は 1 2 姉 2 ワカメ 2
検索 カツオ カツオ !58 検索条件入力 サザエ AND 検索条件のパース サザエ 検索クエリ化 カツオ 1 の 1 2 弟 1 サザエ 1 2 は 1 2 姉 2 ワカメ 2
検索 カツオ カツオ !59 検索条件入力 サザエ AND 検索条件のパース サザエ 検索クエリ化 カツオ 1 の 1 2 弟 1 サザエ 1 2 は 1 2 姉 2 ワカメ 2
検索 カツオ カツオ !60 検索条件入力 サザエ AND 検索条件のパース サザエ 検索クエリ化 カツオ 1 の 1 2 弟 1 サザエ 1 2 は 1 2 姉 2 ワカメ 2
検索 カツオ カツオ !61 検索条件入力 サザエ AND 検索条件のパース サザエ 検索クエリ化 カツオ 1 の 1 2 弟 1 サザエ 1 2 は 1 2 姉 2 ワカメ 2
検索 カツオ カツオ !62 検索条件入力 サザエ AND 検索条件のパース サザエ 検索クエリ化 カツオ 1 の 1 2 弟 1 サザエ 1 2 は 1 2 姉 2 ワカメ 2
単語の区切り方 • 英語の場合 I am speaking Introduction Elasticsearch. • 日本語の場合 私は入門Elasticsearchについて話している。 !63
単語の区切り方 • 英語の場合 I am speaking Introduction Elasticsearch. スペースが切れ目とわかる • 日本語の場合 私は入門Elasticsearchについて話している。 どこで区切ればよい? 64
N-Gramと形態素解析 • 転置インデックスのキーの作り方 ‒ 日本語は単語の切れ目がわからないので、転置インデックスのキーは 主に次の2つの手法で作成 • N-Gram ‒ N文字ずつ文章を区切る • 形態素解析 ‒ 辞書などを用いて意味のある単語で区切る !65
形態素解析 カツオはサザエの弟 カツオ は サザエ の 弟 • メリット: ‒ 意味のある単語の切れ目 品詞情報を元に追加処理が可能(語幹変換など) • デメリット: ‒ 新語(未知語)に弱い→辞書ベースの場合、辞書にない単語は検出不 能。 !66
N-Gram カツオはサザエの弟 カツ ツオ オは はサ • メリット: ‒ 未知語に対応可能 • デメリット: ‒ インデックス肥大化 ‒ 品詞情報に基づく処理が不可能 !67 サザ ザエ エの の弟
その他の機能
GEO さまざまな形式のデータで Geo検索可能 緯度経度、GeoHash、 GeoShape… elasticsearch
Ecosystem • Plugins ‒ プラグインによる機能の追加 • クライアントライブラリ !70 • Java, Ruby, python, php, perl, javascript, .NET • Scala, clojure, go
詳しく知りたい方は Elasticsearch - The Definitive guide http://www.elastic.co/guide/en/ elasticsearch/guide/current/index.html 71
!72
Kibana Window into the Elastic Stack 可視化と分析 地理空間 カスタマイズと レポートの共有 グラフ探索 Elastic Stackへの セキュアなアクセスと管理 カスタムAppsの作成 73
Kibana 6 !74
デモ データ投入から可視化まで !75
本格的に解析を行うには? !76
Elastic Stackの構成 Beats Log Files Elasticsearch Wire Data Instances Nodes Metrics !77 Kibana
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
!79
Logstash データ加工パイプライン 全ての形式、サイズとデータソー スの投入 パースと動的な データ変換 あらゆる出力に データ転送 安全で暗号化された データ入力 独自のパイプライン処理 の作成 200以上のプラグイン 80
Logstash in 10 seconds • ログ・データの収集・管理 • 収集、パース・加工、送出 • オープンソース:Apache License 2.0 • Ruby app (JRuby) !81
Logstash architecture Input Filter Output collect and split alter and enrich store and visualize ? !82 ?
設定 input { … } filter { … } output { … } 83
設定:input input { file { path => “/Users/johtani/sample/*_log” start_position => “beginning” } } 84
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
設定: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
パース 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/
設定: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
日付のパース {… “@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 … }
設定: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
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”:
設定: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
ユーザエージェントのパース “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”
設定:output output { elasticsearch { hosts => [“localhost”] index => “demo_access_log-%{+YYYY.MM.dd}” } } 94
さらに活用するには? !95
elasticsearch-hadoop D • • g • • !96 H PD ER • E ecd D CH D Ca FERC M DMS
!97
!98
!99
その他の使い方 !100
データの登録方法 !101 • Kibanaのサンプルデータ(6.4から) • LogstashでJDBC input • LogstashでCSV • Filebeatでアクセスログ • Metricbeatでメトリック • PacketbeatでMySQL/PostgreSQLのパケット解析
Kibanaのサンプルデータ(>= 6.4.0) !102
ワンクリックでデータ登録 !103
LogstashでJDBC Input Elasticsearch Kibana Instances Nodes Logstash Nodes Data Store !104
JDBC Input !105
LogstashでCSV Elasticsearch Kibana Instances Nodes Logstash Nodes CSV File !106
CSV filter !107
Filebeatでアクセスログ Beats Elasticsearch Log Files Instances Nodes !108 Kibana
Filebeatでアクセスログ !109 • 2つのElasticsearchプラグインをインストールしてElasticsearchを起動 • Filebeatのapache2モジュールを有効化 • modules.d/apache2.ymlにアクセスログのパスを設定 • setupコマンドを実行してからFilebeatを起動
Metricbeatでメトリック Beats Elasticsearch Kibana Instances Nodes Metrics
Metricbeatでメトリック !111 • Metricbeatのsystemモジュールを有効化 • setupコマンドを実行してからFilebeatを起動
PacketbeatでMySQL、PostgreSQLのパケット解析 Beats Elasticsearch Wire Data Instances Nodes !112 Kibana
参考文献 • Elasticsearch - The Definitive guide ‒ http://www.elastic.co/guide/en/elasticsearch/guide/current/ index.html • 書籍(日本語) !113 ‒ データ分析基盤構築入門 ‒ Elasticsearch実践ガイド
参考サイト • ユースケース • 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
Thank you! ● Web : https://www.elastic.co/jp/ ● Forums : https://discuss.elastic.co/ ● Twitter : @johtani
View Elastic Stack入門ウェビナー for インフラ勉強会 on Notist.
Dismiss
インフラ勉強会で発表した時のビデオと資料です。
Elasticが提供しているElastic Stackや、SaaSサービスの紹介です。