>100 Views
March 11, 21
スライド概要
Elastic Stack を活用した Kubernetes のアプリ監視
https://event.cloudnativedays.jp/cndo2021/speaker_dashboard/speakers/941/
FPT ジャパン エグゼクティブエバンジェリスト 独立行政法人 国立印刷局 デジタル統括アドバイザー兼最高情報セキュリティアドバイザー Microsoft で13年間、テクニカルエバンジェリストとして .NET、C#、Visual Studio、Windows、iOS、Android、Microsoft Azure 等の開発者向け技術啓発活動 (DevRel) 。Dell、Accenture、Elastic、VMware 等での DevRel 後、2024年11月1日より現職で DevRel 活動を開始。NVIDIA との戦略的協業 AI GPU クラウド、Azure/AWS/GC 上の AI &データ関連サービスのマーケティング、プリセールス、教育、関連新規サービス開発。元内閣官房 IT 総合戦略室 政府 CIO 補佐官(兼務)、元デジタル庁 ソリューションアーキテクト(兼務)。
Elastic オブザーバビリティを 活⽤した Kubernetes のアプリ監視 鈴⽊ 章太郎 Elastic テクニカルプロダクトマーケティングマネージャー/エバンジェリスト 内閣官房 IT 総合戦略室 政府 CIO 補佐官
Shotaro Suzuki Twitter : @shosuz Elastic Technical Product Marketing Manager/Evangelist 内閣官房 IT 総合戦略室 政府 CIO 補佐官 元 Microsoft Technical Evangelist
Elastic 概要
3 Solutions, 1 Stack, Deploy Anywhere 3つのソリューション Elastic エンタープライズサーチ Elastic オブザーバビリティ Elastic セキュリティ 可視化 & 管理 Kibana Elastic スタックで実現 Beats 豊富なデプロイ選択肢 蓄積、検索、分析 Elasticsearch Logstash Elastic Cloud Elastic Cloud Enterprise SaaS (AWS/Azure/GCP) IaaS (クラウド & オンプレ) Elastic Cloud on Kubernetes Kubernetes (クラウド & オンプレ) 収集
Kubernetes 監視における課題
Kubernetes の課題 Dev Ops Infrastructure Container Runtime
Kubernetes のログとメトリック、トレースを組み合わせる ● ● ● コマンド1つで Kubernetes のアプリからログをストリーミング可能 テレメトリーのインフラデータから Prometheus のメトリック、Jaeger のトレースまで収集し、オープンソースの Elastic APM エージェントで分散トレーシングを実施可能 事前設定済みの Kibana ダッシュボードですぐに確認でき、Metricsアプリで横断的に検索できる
Kubernetes サービスの変化を把握する ● ● ● MetricbeatとFilebeatの⾃動 探知機能 で、環境のあらゆる変化 を把握できる モジュールを追加したり、パスを記録 するプロセスは⾃動化され、 Docker や Kubernetes の API フックを使って監視設定が動的に 調整される さらにメタデータが付記されることに より、すべてのデータの出所を把握 できる
Kubernetes に Elastic Observability を適⽤したサンプル MySQL APM packetbeat metricbeat filebeat Elastic Search Service (Elastic Cloud) or Azure Kubernetes Service Elastic Cloud on Kubernetes (ECK) 9
Elastic Cloud on Azure と サンプルアプリのデプロイ
Kubernetes クラスターのセットアップとデモアプリのデプロイ https://www.elastic.co/blog/kubernetes-observability-tutorial-k8s-cluster-setup-demo-app-deployment
GitHubのレポジトリ: https://github.com/michaelhyatt/k8s-o11y-workshop
Elastic Cloud デプロイ (Elastic & 各 Marketplace) Elastic https://www.elastic.co/jp/ AWS https://aws.amazon.com/marketplace/ Azure https://portal.azure.com/#create/hub GCP https://console.cloud.google.com/marketplace
Elastic Cloud on Azure デプロイ # Get credentials for create_secrets.sh # - cloud_id, cloud_auth, apm_url, apm_token https://github.com/michaelhyatt/k8s-o11yworkshop/tree/cc6095210180f8526a9fdc518cf9 e3894b9ea9d0#elastic-cloud https://www.elastic.co/jp/
Secrets の設定、Beats のセットアップ # create_secrets.sh を更新して実⾏する $HOME/k8s-o11y-workshop/install/create_secrets.sh ./create_secrets.sh # metricbeat と filebeat を動かしてセットアップする kubectl create -n kube-system -f metricbeat/metricbeat-setup.yml kubectl create -n kube-system -f filebeat/filebeat-setup.yml # 完了状況をウォッチする (completed になれば OK) kubectl get pods --namespace=kube-system
Demo Secrets の設定、Beats のセットアップ
Kubernetes ログの監視
Kubernetes のログを収集 Deployment options Node 1 Node 2 Node n Filebeat Filebeat Filebeat DaemonSet Filebeat
Kubernetes ログの集約
./filebeat modules enable kubernetes
-
クラスターレベルのログ
サービスレベルのログ (例︓nginxのログ)
-
-
Auto-discovery
アプリのログ
全てコンテナのログを tail
add_kubernetes_metadata でログをエンリッチ
各イベントは下記の情報が追加される
-
Pod Name
Pod UID
Namespace
Labels
processors:
- add_kubernetes_metadata:
host: <host_name>
kube_config: ${HOME}/.kube/config
メタデータプロセッサー イベントにメタデータを追加してログ、メトリックス、トレースを関連付け add_cloud_metadata add_docker_metadata add_kubernetes_metadata • cloud.availability_zone • docker.container.id • kubernetes.pod.name • cloud.region • docker.container.image • kubernetes.namespace • cloud.instance_id • docker.container.name • kubernetes.labels • cloud.machine_type • docker.container.labels • kubernetes.annotations • cloud.project_id • kubernetes.container.name • cloud.provider • kubernetes.container.image
Demo Filebeat と Metricbeat のデプロイと ログ監視
Kubernetes メトリクスの監視
Kubernetes のメトリックスを収集 Deployment options Node 1 Node 2 Node n Metricbeat DaemonSet Metricbeat Metricbeat Metricbeat
Kubernetes メトリックスの集約 ./metricbeat modules enable kubernetes - Kubernetes モジュール pod と service の監視 - - メトリックスのソース - - Cluster、 pod、 container のメトリックス Auto-discovery によるアプリメトリックス Kubelet (heapster, cAdvisor) kube-state-metrics apiserver controller-manager scheduler proxy Prometheus module (beta) ⼀元的な Kibana UI
Kubernetes インベントリのビュー Kubernetes クラスターの俯瞰図
Kubernetes ダッシュボード Metricset 毎のダッシュボード
Metricbeat Autodiscover 動的なターゲットも残さずデータ収集する - - - コンテナ上でアプリを実⾏していると、 監視対象が動的になる Autodiscover により、設定の変化 にも柔軟に対応可能になる Template を指定する事で Autodiscover はコンテナの起動時 から監視ができる Node 1 Logs Nginx Metrics Elasticsearch
ヒントベース auto-discovery
-
-
Metricbeat はヒントを元にコンテナから取得す
べき情報を判断する
設定も⾃動で反映
-
-
次の⽂字列で始まる Pod の annotation か
Docker ラベルを元に hint を探す
9 種類のヒント
-
hints.enabled: true
Logs, Metrics, Modules
co.elastic.metrics
-
metricbeat.autodiscover:
providers:
- type: kubernetes
co.elastic.metrics/module
co.elastic.metrics/hosts
co.elastic.metrics/metricsets
co.elastic.metrics/raw
...
annotations:
co.elastic.metrics/module: prometheus
co.elastic.metrics/metricsets: collector
co.elastic.metrics/hosts: '${data.host}:9090'
co.elastic.metrics/period: 1m
Kubernetes アプリケーションパフォーマンスの監視
APM Logs + Metrics + APM の統合 オープンソース ⾔語&エージェント Java, C#, Go, Node.js, Python, Ruby, RUM (React, Vue.js, Angular) 専⽤の UI 合理化された APM ワークフロー 分散トレーシング インデックス 他データと関連付ける Elastic stack の機能をフル活⽤
アプリ(MySQL, nginx, petclinic)のデプロイと Autodiscovery # Deploy MySQL DB kubectl create -f mysql/mysql.yml # Deploy petclinic and nginx kubectl create -f petclinic/petclinic.yml kubectl create -f nginx/nginx.yml # Observe the application components in Running state kubectl get pods kubectl get services
Demo アプリ(MySQL, nginx, Petclinic) のデプロイ
Prometheus メトリックを活⽤する ● ● ● ● ● MetricbeatのPrometheusモジュールでメトリックを捕捉、シッピング可能 /metrics エンドポイントを使⽤するか、Prometheus Federation API を使って、Prometheus サーバーに接続 収集済みのメトリックをプルすることにより、Prometheus が収集するメトリックを補⾜できる Prometheus エクスポーターを直接 Metricbeat に接続し、ゲートウェイをプッシュする⽅法もある ※ 詳しくは、Elastic StackとPrometheusメトリックに関するドキュメントをご覧ください。
まとめ • • • • • • Filebeat & Metricbeat を使⽤してアプリケーションと Kubernetes のログとメトリックを収集 すぐにシステムとインフラストラクチャの監視を開始できる Elastic Cloud で Elasticsearch Service の無料トライアルにサインアップ 稼働したら、稼働時間モニタリングを使⽤してホストの可⽤性を監視 Elastic APM を使⽤してホストで実⾏されているアプリケーションを計測 新しいメトリックスクラスターと完全に統合された、完全に監視可能なシステム
リソース • サンプルソリューション Github レポジトリ ‒ • https://github.com/michaelhyatt/k8s-o11y-workshop 関連ブログ ‒ ‒ ‒ https://www.elastic.co/blog/kubernetes-observability-tutorial-k8s-logmonitoring-and-analysis-elastic-stack https://www.elastic.co/blog/kubernetes-observability-tutorial-k8smetrics-collection-and-analysis https://www.elastic.co/blog/kubernetes-observability-tutorial-k8smonitoring-application-performance-with-elastic-apm
Thank you for your attention!