Contenu connexe Similaire à Realizling Dapr Observability Using Elastic Stack (20) Plus de Shotaro Suzuki (20) Realizling Dapr Observability Using Elastic Stack1. Elastic Stack で Daprのオブザーバビリティ
(観測可能性)を実現
鈴⽊ 章太郎
Elastic テクニカルプロダクトマーケティングマネージャー/エバンジェリスト
内閣官房 IT 総合戦略室 政府 CIO 補佐官
2. ⾃⼰紹介
鈴⽊ 章太郎
Elastic テクニカルプロダクトマーケティングマネージャー/
エバンジェリスト
内閣官房 IT 総合戦略室 政府 CIO 補佐官
2003年マイクロソフト⼊社。公共営業部⾨の担当アーキテクトとして .NET
の技術啓発活動に従事。
2006年開発者向けマーケティング部⾨に異動、テクニカルエバンジェリストと
して Windows/iOS/Android や Microsoft Azure の開発者向け
技術啓発活動を10年にわたり担当。
⽇本マイクロソフト退社後は、Dell、Accenture 等を経て、2020年6⽉
からは Elastic で開発者向け技術啓発活動に携わる。
2019年4⽉〜 内閣官房 IT 総合戦略室 政府 CIO 補佐官。
3. 1. Elastic 概要
2. Observability(可観測性)とは
3. Dapr の Observability コンポーネント群と
Elastic による Dapr Observability 実現
4. まとめ
アジェンダ
5. 3 億 5,000 万以上のダウンロード、
12,000 以上の企業での採⽤
40 カ国以上で 2,000 ⼈の従業員
IPO 2018, NYSE: “ESTC”
2012 年設⽴
Elastic 会社概要
Distributed by design
About Elastic
世界の #1 データベース検索エンジン
(DB-Engines)
6. 3 Solutions, 1 Stack, Deploy Anywhere
Elastic スタックで実現
Kibana
Elasticsearch
Beats Logstash
Elastic エンタープライズサーチ Elastic セキュリティ
Elastic オブザーバビリティ
3 つのソリューション
SaaS
(AWS/Azure/GCP)
IaaS
(クラウド & オンプレ)
Elastic Cloud
on Kubernetes
Elastic Cloud Elastic Cloud
Enterprise
豊富なデプロイ選択肢
Kubernetes
(クラウド & オンプレ)
蓄積、検索、分析
可視化 & 管理
収集
8. 膨⼤なデータ処理とリアルタイム性を要求
される配⾞マッチング検索で Elastic を活⽤
1 秒あたりのデータ投⼊件数︓ 85 万から 130 万メッセージ
1 ⽇あたりのデータ投⼊量︓ 12 TB
1 秒あたりのドキュメント スキャン︓1 億から 40 億のドキュメント数
データサイズ︓ 1 PB
クラスター サイズ︓ 700 台の Elasticsearch
インジェスション パイプライン︓100 + Data パイプライン ジョブ
2018 年 4 ⽉の Qcon での Uber 様 講演より
https://www.infoq.com/presentations/uber-elasticsearch-clusters/
9. なぜ Elasticsearch なのか︖
• 企業では主にリレーショナル データベースを使⽤して
データを格納
• テーブルを簡単に結合し必要なデータベースからこのデータを取得できる
• しかし、時間の経過とともに、データベースとテーブルが肥⼤化して、数百万のデータセットを
含む⼤規模なデータベースになると、操作を実⾏できなくなる
• ⼀⽅、Elasticsearch は、数百万のドキュメントを数秒で簡単に検索できる
• Elasticsearch は柔軟で強⼒、オープンでフリーな
分散型リアルタイム検索及び分析エンジン
• Elasticsearch はドキュメントベースのデータベースでデータを JSON 形式で保存(⾮正
規化)
• Elasticsearch は、アプリケーションの強⼒な検索ツールとして使⽤できる
• インデックス、ドキュメント、フィールド等を作成し、データを Elasticsearch にプッシュで、検
索の準備が整う
• Elasticsearch の 2 つのユニークで重要な機能
• ⽔平スケール
• ⾼可⽤性
Elasticsearch
10. Elasticsearch の概念
インデックス・ドキュメント・フィールド
• Elasticsearch は分散ドキュメント
ストア
• 保存されるデータの最⼩単位が
ドキュメント
• ドキュメントは、フィールドと呼ばれる
複数の属性を持つ
• インデックスはドキュメントの集合
Elasticsearch
の概念
具体例
SQL Server,
MySQL,
postgreSQL
等
インデックス
書籍データが格納
される場所
テーブル
ドキュメント 書籍データ レコード
フィールド
書籍タイトル、著者、
ISBN、出版⽇、等
カラム
https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
• RESTful Web サービスの設計原則に従って設計
• HTTP メソッドを使って CRUD による⼀通りのドキュメント操作が可能
11. CQRS(コマンドクエリー責任分離)との関係
• 「コマンド クエリ責務分離 (CQRS)パターンは、データ ストアの読み取り操作と更新操作を分離します。 アプリケーション内に
CQRS を実装すると、そのパフォーマンス、スケーラビリティ、セキュリティが最⼤化される場合があります。 CQRS への移⾏によって⽣
まれる柔軟性により、システムは時間の経過と共にさらに進化し、更新コマンドでドメインレベルのマージ競合が発⽣することを防ぐこと
ができます。」
• Elasticsearch はこのアーキテクチャに極めて整合性⾼い
https://docs.microsoft.com/ja-jp/azure/architecture/patterns/cqrs
17. 可視化 → 気付き(洞察)を得る
• データ内に存在するパターン
の探索と分析: 任意のレベ
ルへのドリルダウンが可能
• Elasticsearch の強⼒
な 分析機能を活⽤
洞察の発⾒ カスタマイズと共有
• 棒グラフ、折れ線グラフ や散
布図、マップ、ヒストグラムの
作成
• ダッシュボードを共有し、
運⽤ワークフローに組み込み
• 組込み可能なアーキテク チャ:
• ダッシュボードや可視化をアプリとして作成
• セッション管理、ユーザー ロール、
セキュリティ統合
アプリ構築向け
UX プラットフォーム
28. Dapr の Observability とは
• Dapr API をすべてのサービス間コールと pub/sub メッセージングに使⽤することで、アプリケーションを意識した
⾃動観測が実現できる
• Daprの Sidecar が設定ファイルに基づいてトレースを⾏うため、観測のための追加のコードは必要ない
https://github.com/dapr
#CNDT2020
• Dapr は W3C trace context や
OpenTelemetry のような標準に準拠
• Zipkin プロトコルを使⽤してトレースを出⼒。
これをサポートするあらゆるツールと統合可能
• OpenTelemetry Collector を使⽤して、他
のモニタリングツールと統合することもできる
• W3C trace context との互換性により、
Dapr は trace context 管理に柔軟性を付
与。これにより、アプリケーションの外部で⽣成さ
れた trace context を受け⼊れたり、送信処
理を追加することで trace context を外部に
伝播したりできる
30. Dapr の Observability
Dapr Sidecar からサービスのメトリクス、ログ、トレースを収集
コントロールプレーンのサービス(Dapr Placement, etc.)は現状メトリクスとログのみを提供
Application Dapr Sidecar
Metrics
Tracing
Logging
Dashboard
は テンプレートが
提供されている
#CNDT2020
https://docs.microsoft.com/ja-jp/dotnet/architecture/dapr-for-net-developers/observability
代表的な構成例
31. トレースのために Dapr を設定する
#CNDT2020
• Dapr の設定では YAML 形式の設定ファイルにトレースのサンプルレート(Dapr は確率的サンプリングを使⽤)
とトレース収集のためのエンドポイント URL を設定
• Dapr アプリケーションをデプロイすると、上記の設定が使⽤される
• 例えば Kubernetes のデプロイでは、Dapr アノテーションの dapr.io/config がアプリケーションに関連付けられ
る設定を定義 (Dapr アプリケーションの Kubernetes へのデプロイについての詳細はこちら)
apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
name: myconfig
namespace: default
spec:
tracing:
samplingRate: "1"
zipkin:
endpointAddress: "http://..."
32. 分散トレーシング、OpenTracing と Elastic APM -1
#CNDT2020
マイクロサービスの世界
• 多様なサービストポロジーの健全性とパフォーマンスに対する可視性は、
問題の根本原因を迅速に判断し、全体的な信頼性と効率性を向上
させるためにきわめて重要
• そのために役⽴つのが分散トレーシング
• トレーシングは可観測性の3本の柱の1つに
過ぎない
• 3本の柱とは、ロギング、メトリック、トレーシング
• Elastic Stack は可観測性の3つの柱すべて
に対応する統合プラットフォーム
33. 分散トレーシング、OpenTracing と Elastic APM -2
#CNDT2020
Elastic APM での分散トレーシング
• Zipkin や Jaeger など、他にも⼈気のあるオープンソーストレーサーがある
• マイクロサービスの世界では、ポリグロット(多⾔語)プログラミングやポリグロットパーシステンスのような概念が普及しており、今後
は「ポリグロットトレーシング」がより⼀般的になっていく
• 独⽴、分離といったマイクロサービスの性質により、異なるサービスの責任者は異なるトレーシングシステムを使⽤する可能性あり
• Elastic APM は、Elastic Stack 上に構築された
アプリケーションパフォーマンス監視システム
• Elastic APM は分散トレーシングをサポート
34. 分散トレーシング、OpenTracing と Elastic APM -3
#CNDT2020
開発者にとっての課題
• さまざまなトレーシングシステムが利⽤できるため、開発者はまさに課題に直⾯
• 結局のところ、トレーサーはアプリケーションコード内に存在
• ⼀般的な課題には次のようなものがある︓
• どのトレーシングシステムを使うか︖
• トレーサーを変更したい場合はどうなるか︖ソースコード全体を変更したくはない
• 異なるトレーサーを使⽤している可能性のある共有ライブラリについてはどうすればよいか︖
• サードパーティのサービスが異なるトレーサーを使⽤している場合はどうなるか︖
• 当然のことながら、これらの懸念事項に対処するには標準化が必要
• アーキテクチャ⾯から包括的に分散トレーシングについて検討し、
• そして、分散トレーシングの「最⾼の状態」を達成するために何が必要かについて理解する必
要がある
35. 分散トレーシング、OpenTracing と Elastic APM -4
#CNDT2020 33 https://bit.ly/32uqZKc
分散トレーシングのアーキテクチャコンポーネント
• 最新のソフトウェアシステムは、いくつかの⾼レベルのコンポーネントに分解される
• それらは通常、異なる組織によって設計および開発され、次のような異なるランタイム環境で実⾏される。
• 独⾃のアプリケーションコードとサービス
• 共有されたライブラリとサービス
• 外部サービス
• そのようなシステムを分散トレーシングで包括的かつ統合的に監視するためには、4つのアーキテクチャコンポーネントが必要
• 標準化された分散トレーシング API
• トレーシングコンテキストの標準化された
定義と伝達
• トレーシングデータの標準化された定義
• 相互運⽤可能なトレーサー
36. 分散トレーシング、OpenTracing と Elastic APM -5
#CNDT2020
OpenTracing の仕様
現在の状態
1. OpenTracing APIはAPIの標準セットを提供する
2. トレーシングコンテキストの標準化された定義はまだない
3. トレーシングデータの標準化された定義はまだない
4. トレーサーはランタイム互換性がない
Jaeger︓
uber-trace-id︓118c6c15301b9b3b3:56e66177e6e55a91:18c6c15301b9b3b3:1
Elastic APM︓
elastic-apm-traceparent:00-f109f092a7d869fb4615784bacefcfd7-5bf936f4fcde3af0-01
OpenTracing データモデル それらの全体像
37. 分散トレーシング、OpenTracing と Elastic APM -6
#CNDT2020
Elastic APM による現在の他のトレーサーとの連携⽅法
• さまざまなトレーシングシステムが利⽤できるため、開発者はまさに課題に直⾯
• 結局のところ、トレーサーはアプリケーションコード内に存在
• ⼀般的な課題には次のようなものがある︓
• どのトレーシングシステムを使うか︖
• トレーサーを変更したい場合はどうなるか︖ソースコード全体を変更したくはない
• 異なるトレーサーを使⽤している可能性のある共有ライブラリについてはどうすればよいか︖
• サードパーティのサービスが異なるトレーサーを使⽤している場合はどうなるか︖
• 当然のことながら、これらの懸念事項に対処するには標準化が必要
• アーキテクチャ⾯から包括的に分散トレーシングについて検討し、
• そして、分散トレーシングの「最⾼の状態」を達成するために何が必要かについて理解する必
要がある
38. 分散トレーシング、OpenTracing と Elastic APM -7
#CNDT2020
Elastic APM による現在の他のトレーサーとの連携⽅法
1. Elasticsearch を他のトレーサー向けのスケーラブルなバックエンドデータストアとして使⽤
2. Elastic OpenTracing ブリッジ
2-2 Jaeger を Elastic OpenTracing ブリッジに置き換え︓
2-1 Jaeger による最初の実装︓
import io.opentracing.Scope;
import io.opentracing.Tracer;
import io.jaegertracing.Configuration;
import io.jaegertracing.internal.JaegerTracer;
...
private void sayHello(String helloTo) {
Configuration config = ...
Tracer tracer = config.getTracer();
try (Scope scope = tracer.buildSpan("say-
hello").startActive(true)) {
scope.span().setTag("hello-to", helloTo);
}
...
}
import io.opentracing.Scope;
import io.opentracing.Tracer;
import co.elastic.apm.opentracing.ElasticApmTracer;
...
private void sayHello(String helloTo) {
Tracer tracer = new ElasticApmTracer();
try (Scope scope = tracer.buildSpan("say-
hello").startActive(true)) {
scope.span().setTag("hello-to", helloTo);
}
...
}
• このシンプルな変更によって、その他のトレーシングコードを変更することなく、トレーシングデータを正常に Elastic APM に送信
• これこそが OpenTracing の⼒
39. 分散トレーシング、OpenTracing と Elastic APM -8
#CNDT2020
Elastic APM リアルユーザー監視
• ユーザーがブラウザで何かをクリックした瞬間にトレース情報を得ることができる
• このトレース情報はパフォーマンスの側⾯からアプリケーションのリアルユーザーエクスペリエンスを表す
• Elastic APMリアルユーザー監視(RUM)はその情報を転送する⽅法(W3Cの標準化を待たず)
• RUM JS Agent はフレームワークに依存しない
• JavaScript ベースの任意のフロントエンドアプリケーション (React、Vue.js、Angular 等) で使⽤可能
40. Dapr の Observability
Dapr Sidecar からサービスのメトリクス、ログ、トレースを収集
コントロールプレーンのサービス(Dapr Placement, etc.)は現状メトリクスとログのみを提供
完全に Elastic Observability で置換する
#CNDT2020 33 https://bit.ly/32uqZKc
https://docs.microsoft.com/ja-jp/dotnet/architecture/dapr-for-net-developers/observability
application Dapr Sidecar
Metrics
Tracing
Logging
Dashboard は
テンプレートが提供
されている
33
41. Elastic と Google Cloud を⽤いた
オブザーバビリティ(可観測性)
参考アーキテクチャ
Serverless
Cloud
Function
Operations
Cloud
Pub/Sub
Logstash
App
Engine
Compute
Engine
Kubernetes
Engine
Others
Filebeat
Cloud
Storage VPC Flow
Logs
Custom
Logs
Elastic Cloud
Filebeat or
Functionbeat
Filebeat or
Functionbeat
42. Elastic による検索、展開、管理が簡単
• Azure ポータル内での Elasticsearch の
デプロイの表⽰と管理が可能
• ログの取り込みプロセスを⾃動化し、数回
のクリックで環境を迅速に監視可能
• 既に使⽤されている Microsoft Azure
サービスに検索機能と可視化機能を簡単
に追加
• Azure コンソールと Elastic コンソール間
のシングルサインオン (SSO) による認証の
合理化
• 展開を管理するのではなくインサイトに集中
43. 仕組み
● マイクロソフトはミドルウェアを使⽤して、マーケットプレースの
オファーとクラウド API と統合された Azure の API を提供
● Azure のお客様は、Elastic Cloud (アカウント、デプロイ)
で必要なオブジェクトを作成するネイティブの
Elasticsearch リソースを作成
● Azure ユーザーは、⾃分の Azure アカウントを使⽤して、
Kibana とクラウド コンソールに SSO を使⽤できる
● 請求は、「従来の」マーケットプレイスと同様で、マーケットプ
レイスサブスクリプションを介して発⽣
●
Azure にネイティブに統合
された Elastic
Elastic Cloud
Choice &
Simplicity
44. 統合
● サブスクリプションおよびリソース イベントの Azure プラット
フォームログを簡単に収集するネイティブ統合
● Elastic VM 拡張機能を使⽤して仮想マシンのログとメト
リックを簡単に収集できるように統合
○ お客様は VM 拡張機能を有効にする
○ Elastic は Agent と Beats を設定し、システムログ
とメトリックのストリーミングを開始する
○ 顧客は Fleet 経由で Agent を管理できる
● Azure Private Link をサポート (クローズド ベータ)
● 更に追加予定︕︕
Azure にネイティブに統合
された Elastic
Elastic Cloud
Choice &
Simplicity
45. Elastic と Microsoft Azure を⽤いた
オブザーバビリティ(可観測性)
参考アーキテクチャ
Serverless
Azure
Functions
Azure
Monitor
Event Grid
Filebeat
or
Functionbeat
Logstash
App
Service
Azure VM Kubernetes
Service
Others
Filebeat
Blob
Storage
Filebeat
Or
Functionbeat
VM Flow
Logs
Custom
Logs
Azure
DevOps
46. eShop on Dapr アーキテクチャー
https://docs.microsoft.com/ja-jp/dotnet/architecture/dapr-for-net-developers/reference-application
47. Twitter-Sentiment-Processor
Azure Cognitive Services と連携してツイートの感情分析を⾏うデモ
• ローカル開発 → クラウドサービス連携 → Kubernetes デプロイ、で実際の開発をイメージした段階的なデモ
• Go, C#, Node.js のそれぞれで作成されたサービスが協調してアプリケーションを構成
https://github.com/dapr/samples/tree/master/twitter-sentiment-processor
#CNDT2020
https://www.youtube.com/watch?v=qejiWzy5etA
51. リソース
公式ドキュメント
https://www.elastic.co/guide/index.html
Elastic APM Agent
https://www.elastic.co/guide/en/apm/agent/index.html
分散トレーシング、OpenTracing と Elastic APM
https://www.elastic.co/jp/blog/distributed-tracing-opentracing-and-elastic-apm
Elastic + Grafana Labsのパートナーシップに基づき、Grafana Elasticsearchオフィシャルプラグインが登場
https://www.elastic.co/jp/blog/elastic-and-grafana-labs-partner-on-the-official-grafana-elasticsearch-plugin
サンプルソリューション GitHub レポジトリ
https://github.com/michaelhyatt/k8s-o11y-workshop
関連ブログ
https://www.elastic.co/jp/blog/kubernetes-observability-tutorial-k8s-cluster-setup-demo-app-deployment
https://www.elastic.co/blog/kubernetes-observability-tutorial-k8s-log-monitoring-and-analysis-elastic-stack
https://www.elastic.co/blog/kubernetes-observability-tutorial-k8s-metrics-collection-and-analysis
https://www.elastic.co/blog/kubernetes-observability-tutorial-k8s-monitoring-application-performance-with-elastic-apm
53. Elastic on Microsoft Azure:
インテグレーション強化による価値の創出
https://www.elastic.co/jp/webinars/elastic-on-microsoft-azure-accelerate-time-to-value-with-enhanced-integration
54. Elastic 7.13 Update ダイジェスト版(6/24)
https://www.meetup.com/ja-JP/Tokyo-Elastic-Fantastics/events/278466633/
今回のWebinarの詳細は以下の通りです。
==========================
=====================
■開催⽇時
6/24(⽊)19:30〜21:00
■内容
登壇
1. ⽇本マイクロソフト 惣道 哲也さん
2. Elastic 鈴⽊章太郎さん
3. 募集中
==========================
=====================
以上