このリポジトリには、Cloud Native Observabilityで実施する内容が含まれています。

Dynatrace主催のハンズオンワークショップへ参加されている方には環境が自動で払い出されます。

事前準備

学習内容

この演習では、Kubernetes(Microk8s)を実行しているLinuxインスタンスにDynatrace Operatorをデプロイします。

Linuxターミナルへアクセス

Linuxインスタンスのターミナルにアクセスします。

Dynatrace Operatorのインストール

ブラウザを開き、DynatraceのGUIにアクセスしてください。

以下の手順で進めてください。

Deploy

Kubernetes / Openshiftのモニターページ内で、以下の手順を行います。

Deploy

Deploy

Deploy

Deploy

出力例

Deploy

インストールの確認

ディプロイメントステータスの表示をクリックすると、接続されているホストの状態を確認することができます。

下の画像のように、接続されたホストが表示されているはずです。

Deploy

⚠️ トラブルシューティングの手順

easytravelアプリケーションの再起動

様々なプロセスが自動的に検出されているのがわかりますが、Dynatraceはそれらを再起動するよう促します。これは、コードを変更せずに自動的に監視を行うために必要です。

以下のコマンドを実行して、easytravelのNamespacesに含まれるPodsを作り直します。

kubectl delete pods --all -n easytravel

Dynatraceにはリリース監視機能が組み込まれており、導入したアプリケーションのバージョンやステージ(名前空間)、プロダクトを判断することが可能です。

リリースの確認

メニューからオートメーション > リリースを開きます。

releases

これは、リリースインベントリ、リリースイベント、追跡された問題点、の概要を示しています。

各コンポーネントの詳細を見ると、それぞれのコンポーネントの追加メタデータが表示されます。 これにより、監視対象のコンポーネントのコンテキスト情報や、コンポーネントのライフサイクルおよび問題の追跡に関する情報を確認できます。

下の画像はnginx easytravel-www-\*\*\*を開いた例です。

releases-detail

リリースバージョン、ステージ、製品はKubernetesの以下と一致します。

k8s-describe

SLOを決定するためには、はじめにクリティカルユーザージャーニー(CUJ)を選ぶ必要があります。CUJとは、ユーザーにとって重要な体験、期待です。 そのため本来、CUJを決定するにはSREだけでなくビジネス部門にも参加してもらい決定する必要があります。

フロントエンドからのサービスフローの確認

ここでは、Dynatraceのサービスフローによりどのサービスがどれぐらいリクエストを受け付けているか確認し、そこからクリティカルユーザージャーニーを決定する方法について考えてみたいと思います。

基本的なサービスレベル目標(SLO)を設定していきます。Dynatraceが標準で監視しているメトリクスを用いることで簡単に、サービスレベル指標(SLI)を定義し、その閾値としてSLOを設定することができます。

SLOの作成 (EasytravelService)

以下の手順で進めてください。

basic-slo

ここでは、easyTravelアプリケーションのeasytravel-angular-frontendデプロイメント上で稼働しているEasytravelServiceに対する可用性に関するSLOを作成します。

  1. サービスレベル可用性ボタンをクリックします。
  2. この service-level availabilitySLO に名前付けで、このSLOに名前を付けます:EasytravelService Availability SLO
  3. メトリックを定義を開きます。メトリック名やメトリック式はデフォルトのままにしておきます。
  4. フィルターの定義を開きます。時間枠のフィルターは-1h(過去1時間)を指定します。
  5. エンティティ セレクターはtype("SERVICE"), tag("[KUBERNETES]app:easytravel-k8s"), tag("[KUBERNETES]type:angular-frontend"), webServiceName("EasytravelService")を入力し、プレビューをクリックします。エンティティが1つ表示されていることを確認します。
  6. 成功条件の追加を開きます。ターゲットを98%、警告を99%に設定します。
  7. 評価ボタンをクリックし、グラフが表示されることを確認します。
  8. 作成ボタンをクリックして、SLOを作成します。

basic-slo

サービスレベル目標が作成され、現在のステータスなどが確認できます。

basic-slo

SLOの作成 (JourneyService)

もう1つJourneyServiceに対する可用性に関するSLOを作成します。

サービスレベル目標のページを開き、新しいSLOの追加ボタンをクリックします。

  1. サービスレベル可用性ボタンをクリックします。
  2. この service-level availabilitySLO に名前付けで、このSLOに名前を付けます:JourneyService Availability SLO
  3. メトリックを定義を開きます。メトリック名やメトリック式はデフォルトのままにしておきます。
  4. フィルターの定義を開きます。時間枠のフィルターは-1h(過去1時間)を指定します。
  5. エンティティ セレクターはtype("SERVICE"), tag("[KUBERNETES]app:easytravel-k8s"), tag("[KUBERNETES]type:backend"), webServiceName("JourneyService")を入力し、プレビューをクリックします。エンティティが1つ表示されていることを確認します。
  6. 成功条件の追加を開きます。ターゲットを98%、警告を99%に設定します。
  7. 評価ボタンをクリックし、グラフが表示されることを確認します。
  8. 作成ボタンをクリックして、SLOを作成します。

SLO作成の確認

2つのサービス可用性に関するSLOがこれで定義できました。

basic-slo

Dynatraceでは、エラーバジェットやバーンレートに関するメトリクスも自動で生成されますので、ダッシュボードで管理を簡単に行うことができるようになります。

また、本ハンズオンには含まれておりませんがサービスのパフォーマンスやフロントエンドのユーザーエクスペリエンスなどもSLOとして定義することが可能です。

本セッションでは、カスタムメトリックを作成し、それに対するSLOの設定をしていきます。本手順により標準では提供されていない特定のリクエスト毎のSLOを設定することが可能になります。

カタログページのメトリック作成

カタログページへのリクエスト成功数のカスタムメトリックを作成します。s

requests

custom-metric

custom-metric

findJourneys用SLOの作成

カスタムメトリックを作成したので、その2つを使用したSLOを設定していきます。

  1. メニューからオートメーション > サービス レベル目標を開きます。
  2. 画面右上の新しいSLOの追加ボタンをクリックします。
  3. このSLOに名前付けに任意の名前を入力します(例:findJourneys Availability SLO
  4. メトリックを定義を開きます。メトリック式には(100)*(calc:service.findjourneyssuccesscount:splitBy():sum)/(calc:service.findjourneyscount:splitBy():sum)と入力します。
  5. フィルターの定義を開きます。時間枠のフィルターは-5m(過去5分間)を指定します。
  6. エンティティ セレクターは空白のままにします。
  7. 成功条件の追加はデフォルトのままにしておきます。
  8. 評価ボタンをクリックし、グラフが表示されることを確認します。
  9. 作成ボタンをクリックして、SLOを作成します。

slo

ここではダッシュボードにSLOウィジェットを作成し、監視する方法について説明します。

Dynatraceには、Kubernetes workload overviewReal User Monitoringなど複数のダッシュボードがあらかじめ用意されています。

新規ダッシュボードの作成

ここでは、既存のダッシュボードではなく

dashboard

SLOタイルの追加

dashboard

グラフ・ウィジェットの追加 - SLOステータスのグラフ表示

data-explorer

グラフ・ウィジェットの追加 - バーンレートのグラフ表示

dashboard

編集が完了したら、完了ボタンをクリックします。

dashboard

今回のハンズオンにおけるKubernetes環境の構築手順を掲載します。Kubernetesの環境としてはMicrok8Sを利用しており、Ubuntuホスト1台から試すことが可能です。 ハンズオン終了後に試してみたい方は以下の手順に従って、環境の構築を行うことが可能です。

Ubuntu環境の準備

AWS EC2などにUbuntu環境を用意します。OSバージョンは以下を参考にインスタンスサイズはt3.xlarge相当以上(ストレージ容量30GB)が推奨となります。 bash
$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.6 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.6 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

必要なパッケージのインストールやアップデートを実施します。

Microk8s環境の構築

以下のコマンドを実行し、microk8s環境を構築します。 bash
sudo snap install microk8s --classic --channel=1.27/stable
sudo snap alias microk8s.kubectl kubectl
mkdir -p ~/.kube
sudo microk8s.config > ~/.kube/config
sudo usermod -a -G microk8s $USER
sudo chown -R $USER ~/.kube

このタイミングで一度、シェルの再接続を実施します。 bash
microk8s.start
microk8s.enable dns
microk8s.enable hostpath-storage
microk8s.enable ingress
CLUSTER_SERVER=$(microk8s config | grep "server:" | sed 's/^.*server: //')
kubectl config set-cluster microk8s-cluster --insecure-skip-tls-verify=true --server="$CLUSTER_SERVER"

サンプルアプリのインストール

サンプルアプリケーション(easyTravel)を展開していきます。スクリプトはGithub上にありますので そちらを利用します。 bash
git clone https://github.com/sukatsu1222/easytravel-k8s.git
easytravel-k8s/deploy-easytravel.sh
easytravel-k8s//deploy-ingress.sh

しばらくするとPodsが起動し、ingress経由でアクセスができるようになります。 angular

ハンズオンワークショップへ参加された方へ

Dynatraceでは2週間のフリートライアルを実施可能です。ぜひもっと触りたいと思った方はぜひ以下のサイトからお申込みください。

フリートライアルの申し込み