このリポジトリには、Cloud Native Observabilityで実施する内容が含まれています。
Dynatrace主催のハンズオンワークショップへ参加されている方には環境が自動で払い出されます。
この演習では、Kubernetes(Microk8s)を実行しているLinuxインスタンスにDynatrace Operatorをデプロイします。
Linuxインスタンスのターミナルにアクセスします。
ブラウザを開き、DynatraceのGUIにアクセスしてください。
以下の手順で進めてください。
Kubernetes / Openshiftのモニターページ内で、以下の手順を行います。
k8s
vim dynakube.yaml
などを実行し、dynakube.yamlファイルを貼り付けます。出力例
ディプロイメントステータスの表示をクリックすると、接続されているホストの状態を確認することができます。
下の画像のように、接続されたホストが表示されているはずです。
様々なプロセスが自動的に検出されているのがわかりますが、Dynatraceはそれらを再起動するよう促します。これは、コードを変更せずに自動的に監視を行うために必要です。
以下のコマンドを実行して、easytravelのNamespacesに含まれるPodsを作り直します。
kubectl delete pods --all -n easytravel
Dynatraceにはリリース監視機能が組み込まれており、導入したアプリケーションのバージョンやステージ(名前空間)、プロダクトを判断することが可能です。
メニューからオートメーション > リリースを開きます。
これは、リリースインベントリ、リリースイベント、追跡された問題点、の概要を示しています。
各コンポーネントの詳細を見ると、それぞれのコンポーネントの追加メタデータが表示されます。 これにより、監視対象のコンポーネントのコンテキスト情報や、コンポーネントのライフサイクルおよび問題の追跡に関する情報を確認できます。
下の画像はnginx easytravel-www-\*\*\*
を開いた例です。
リリースバージョン、ステージ、製品はKubernetesの以下と一致します。
app.kubernetes.io/version
Namespace
app.kubernetes.io/part-of
SLOを決定するためには、はじめにクリティカルユーザージャーニー(CUJ)を選ぶ必要があります。CUJとは、ユーザーにとって重要な体験、期待です。 そのため本来、CUJを決定するにはSREだけでなくビジネス部門にも参加してもらい決定する必要があります。
ここでは、Dynatraceのサービスフローによりどのサービスがどれぐらいリクエストを受け付けているか確認し、そこからクリティカルユーザージャーニーを決定する方法について考えてみたいと思います。
基本的なサービスレベル目標(SLO)を設定していきます。Dynatraceが標準で監視しているメトリクスを用いることで簡単に、サービスレベル指標(SLI)を定義し、その閾値としてSLOを設定することができます。
以下の手順で進めてください。
ここでは、easyTravelアプリケーションのeasytravel-angular-frontend
デプロイメント上で稼働しているEasytravelService
に対する可用性に関するSLOを作成します。
EasytravelService Availability SLO
-1h
(過去1時間)を指定します。type("SERVICE"), tag("[KUBERNETES]app:easytravel-k8s"), tag("[KUBERNETES]type:angular-frontend"), webServiceName("EasytravelService")
を入力し、プレビューをクリックします。エンティティが1つ表示されていることを確認します。98
%、警告を99
%に設定します。サービスレベル目標が作成され、現在のステータスなどが確認できます。
もう1つJourneyService
に対する可用性に関するSLOを作成します。
サービスレベル目標のページを開き、新しいSLOの追加ボタンをクリックします。
JourneyService Availability SLO
-1h
(過去1時間)を指定します。type("SERVICE"), tag("[KUBERNETES]app:easytravel-k8s"), tag("[KUBERNETES]type:backend"), webServiceName("JourneyService")
を入力し、プレビューをクリックします。エンティティが1つ表示されていることを確認します。98
%、警告を99
%に設定します。2つのサービス可用性に関するSLOがこれで定義できました。
Dynatraceでは、エラーバジェットやバーンレートに関するメトリクスも自動で生成されますので、ダッシュボードで管理を簡単に行うことができるようになります。
また、本ハンズオンには含まれておりませんがサービスのパフォーマンスやフロントエンドのユーザーエクスペリエンスなどもSLOとして定義することが可能です。
本セッションでは、カスタムメトリックを作成し、それに対するSLOの設定をしていきます。本手順により標準では提供されていない特定のリクエスト毎のSLOを設定することが可能になります。
カタログページへのリクエスト成功数のカスタムメトリックを作成します。s
JourneyService
サービスをクリックします。findjourneyscount
を入力し、メトリックの作成ボタンをクリックします。findjourneyssuccesscount
を入力し、メトリックの作成ボタンをクリックします。カスタムメトリックを作成したので、その2つを使用したSLOを設定していきます。
findJourneys Availability SLO
)(100)*(calc:service.findjourneyssuccesscount:splitBy():sum)/(calc:service.findjourneyscount:splitBy():sum)
と入力します。-5m
(過去5分間)を指定します。ここではダッシュボードにSLOウィジェットを作成し、監視する方法について説明します。
Dynatraceには、Kubernetes workload overviewやReal User Monitoringなど複数のダッシュボードがあらかじめ用意されています。
ここでは、既存のダッシュボードではなく
SRE向けダッシュボード
)を入力し、作成をクリックします。slo
と入力することでサービスレベル目標タイルだけが表示されます。EasytravelService Availability SLO
を選択します。JourneyService Availability SLO
とfindJourneys Availability SLO
も追加します。func:slo
と入力し、EasytravelService Availability SLO
を選びます。90, 100
と入力し、しきい値に以下の値を入力します。 99
98
0
EasytravelService Availability SLO
に変更します。99, 100
と入力し、しきい値に以下の値を入力します。 99.99
99.98
0
func:slo.errorBudgetBurnRate
と入力し、Error budget burn rate - EasytravelService Availability SLO
を選びます。EasytravelService Error budget burn rate
などに変更し、完了をクリックします。編集が完了したら、完了ボタンをクリックします。
今回のハンズオンにおけるKubernetes環境の構築手順を掲載します。Kubernetesの環境としてはMicrok8Sを利用しており、Ubuntuホスト1台から試すことが可能です。 ハンズオン終了後に試してみたい方は以下の手順に従って、環境の構築を行うことが可能です。
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環境を構築します。 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経由でアクセスができるようになります。
Dynatraceでは2週間のフリートライアルを実施可能です。ぜひもっと触りたいと思った方はぜひ以下のサイトからお申込みください。