DynatraceでMonacoを使って設定をバックアップ・リストア(Configuration as Code)
概要📝
設定をコード化して管理することを、Configuration as Codeと呼びます
オブザーバビリティツールであるDynatraceで、設定をバックアップ・リストアするオプションとして、MonacoとTerraformがあります
今回はDynatrace純正のツールで、Dynatraceサポートの対象であるMonacoによるバックアップ・リストアの手順について解説します
対象読者🔖
- Dynatraceの初級者
- よくわからないけど興味がある方
ゴール🔥
下記を理解している状態
- Monaco自体のインストール
- APIを叩くためのDynatrace Accees Tokenの理解
- MonacoのProjectやManifestなどの基本用語理解
- Monaco CLI
Download
によるバックアップ - Monaco CLI
Deploy
によるリストア
コスト💰
Monacoを使用することによる直接のコストはありません
関連リンク📎
- Dynatrace Configuration as Code via Monaco - Dynatrace Docs
- Dynatrace Monaco CLI command reference - Dynatrace Docs
- Monaco基本用語など
- Monacoインストール手順など
- APIを叩くのに必要な権限など
- 最初のデプロイを行う手順
- Monacoで管理できる設定のリスト
- Monaco CLIのハードウェア要件
前提🏫
MonacoとTerraformの比較
MonacoとTerraformの比較です
今回はDynatrace純正のツールで、Dynatraceサポートの対象であるMonacoによるバックアップ・リストアの手順について解説します
使用技術 | サポート会社 | 追加課金 | メリット | デメリット |
---|---|---|---|---|
Monaco | Dynatrace | - | Dynatrace純正でDynatraceのサポート対象 Dynatrace専用なのでシンプルな構造 |
Dynatrace専用のツール |
Terraform | HashiCorp | ○(プランによる) | AWSなど様々なプロバイダーに対応している | Dynatrace社からの直接サポートがない |
Monacoの主要な用途
- 誤って設定が失われることを想定して、定期バックアップをとる
- 上記が実際に起こった際に、リストアして回復する
- 一時的・実験的に、一部の設定値を変更して、その部分をロールバックする
- 変更した箇所やリストアしたい箇所の確認作業を行う
など
新規項目の設定については、MonancoからのデプロイよりもDynatrace画面UIからの設定が推奨されているようです
おそらく、基本的に新規設定や設定変更などは、画面UI上から行う運用が多いと思います
Monaco基本用語
ドキュメント→Monaco基本用語など
とりあえずわかっておくべきなのは、ProjectとManifestです
Project
プロジェクトは、API 構成を論理的にグループ化するために使用されるディレクトリ (フォルダー) です。
Downloadコマンドでバックアップする際は、基本プロジェクトは気にしないです
Deployコマンドでリストアする際には、Projectと呼ばれるディレクトリを指定して、その配下にある設定ファイルをいっぺんにデプロイします
Manifest
デプロイメント マニフェストは、Dynatrace Monaco CLI にどのプロジェクトをデプロイするか、そして正確にどこにデプロイするかを指示する YAML ファイルです。 Dynatrace Monaco CLI が何をデプロイするかを認識するには、マニフェスト ファイルが存在する必要があります。
要するに、下記を指示するためのファイルです
- どのDynatrace Environmentからダウンロード・デプロイするか
- どのProjectをデプロイするか
手順 - 初期設定👓
Monacoのインストール
下記ドキュメントに従って、Monacoをインストールしてください
Monacoインストール手順など
インストールしてパスを通したら、下記のコマンドでMonacoが有効化されていることを確認
monaco version
monacoのversionが表示されればOK
Access Tokenの発行
Access token
APIを叩くのに必要な権限など
補足💡Personal Access Tokenを管理者が有効化している場合には使用可能ですので、必要に応じてこちらでもよいと思います
Admin権限を持っているユーザーで、Dynatrace画面からAccess tokenを作成
Dynatrace Top > 検索窓にAccess token
> 設定-Integration-Access tokens > To create an access token go to Access tokensのリンクをクリック
新規トークンの生成
から、Download・Deploy用のトークンを生成します
権限を分けない場合は、Deploy用のみ生成すればDownloadも可能です
Access token生成に必要な権限
Access token生成にはAdmin権限が必要とドキュメントに記載がありますが、Dynatraceには「Admin」という名前の権限はありません
サポートへ問い合わせたところ、下記の権限を持って入れば良いそうです
これはデフォルトで用意されているすべてのGroupです
Account manager
Account viewer
Confidential data admin
Default group with all users
Deployment admin
Finance admin
Log viewer
Monitoring admin
Monitoring viewer
Security admin
Download用トークンの権限例
Access problem and event feed, metrics, and topology
Read configuration
Read settings
Read network zones
Read SLO
Deploy用トークンの権限例
一度現状の設定を読み込んでから、書き込みを行っているようなので、Read権限も必要です
Access problem and event feed, metrics, and topology
Read configuration
Read settings
Read network zones
Read SLO
Write configuration
Write settings
Write SLO
トークンを生成時にのみトークンシークレットが表示されるので、忘れずにコピーしておいてください
Monaco用ディレクトリの作成
例として下記のように作成してみましょう
manifest.yamlは現状は空で問題ないです
Monaco/
download/
manifest.yaml
restore/
manifest.yaml
手順 - バックアップ(Downloadコマンド)👓
Download用のManifestファイルを用意する
Monaco/download/manifest.yamlを下記のように記載
manifestVersion: 1.0
projects:
environmentGroups:
- name: dev
environments:
- name: dev
url:
value: https://your_env_id.live.dynatrace.com
auth:
token:
name: readToken
your_env_idは、DynatraceのあるEnvironmentへアクセスする際のURLです
readTokenはあとで使用する環境変数の名前です
コマンド実行
Manifestファイルのディレクトリへ移動
cd path_to_your/Monaco/download
環境変数に、先ほどコピーしたトークンシークレットを代入
download用のトークンを環境変数に入れます
$env:readToken="YourTokenValue"
downloadコマンドを実行
monaco download -m manifest.yaml -e dev
上記だと、権限の範囲で取得可能なすべてのファイルを、現在のディレクトリ配下にダウンロードします
その他に利用可能なオプションはこちら
実行結果の確認
下記のようにダウンロードされます
project_dev配下に、設定項目ごとのjsonファイルとconfing.yamlがダウンロードされています
Monaco/
download/
manifest.yaml
logs/
download_yyyy_mm_dd_hhmmss/
project_dev/
builtinalerting.plofile/
xxx.json
config.yaml
...
一部バックアップをおすすめしない理由
-a
や-s
の引数を使うと、指定した設定項目のみを一部バックアップすることができます
しかし、これは使いづらくおすすめしません
このあと行うリストアにおいて、たとえばdashboardのリストアを行う場合、依存関係のある別の設定項目と一緒にデプロイする必要があります
依存関係のある設定項目が欠けていると、一部しかリストアされなかったり、リストアができなかったりすることがあります
依存関係をあらかじめ間違いなく把握しておけばいいのですが、全部バックアップのみを行っておく方が無難だと思います
手順 - リストア(deployコマンド)👓
Deploy用のManifestファイルを用意する
Monaco/download/manifest.yamlを下記のように記載
manifestVersion: 1.0
projects:
- name: restore_dashboard_20240524
path: ./restore_dashboard_20240524
environmentGroups:
- name: dev
environments:
- name: dev
url:
value: https://your_env_id.live.dynatrace.com
auth:
token:
name: writeToken
リストア用のProject(ディレクトリ)にリストアしたい設定項目を入れる
今回はあるダッシュボードを誤って削除してしまったという想定でやってみます
同じように行う方は、まず現状のバックアップをとったうえで、ダッシュボードクラシック画面のダッシュボードをひとつ削除してみてください(あとでリストアしますが、テスト用のものだと安全です)
dashboardのconfig.yamlを見ると、下記のように書いてあります
経験則からいくとparameters
以下の、configType: calculated-metrics-application-web
が依存関係のある設定項目ファイルです
configs:
- id: xxxxxxx-fd41-4392-be2c-f5c95c5042c8
config:
name: New dashboard (Jan 19, 2024 17:54:13)
parameters:
calculatedmetricsapplicationweb__calcappswebeasytravelbookingsrevenue__id:
configId: calc:apps.web.easytravel.bookingsrevenue
configType: calculated-metrics-application-web
property: id
type: reference
...
...
なので、今回は下記のようにリストア用のprojectを構成します
つまり、リストアしたい時点のバックアップからdashboard
とcalculated-metrics-application-web
をコピーしてくるということです
その配下にはもちろん、jsonとconfig.yamlが入っています
Monaco/
restore/
manifest.yaml
restore_dashboard_20240524/
dashboard/
calculated-metrics-application-web/
コマンド実行
Manifestファイルのディレクトリへ移動
cd path_to_your/Monaco/restore
環境変数に、先ほどコピーしたトークンシークレットを代入
deploy用のトークンを環境変数に入れます
$env:writeToken="YourTokenValue"
dry runモードでdeployコマンドを実行
monaco deploy manifest.yaml -p restore_dashboard_20240524 -d
logs配下のerrorログを見て、エラーが出ていないことを確認してください
たとえば、依存関係のあるファイルが一緒にデプロイされていない場合、そこに一緒にデプロイすべき項目がエラーとして記載されています
dry runでエラーログが空になってからdeployを実行したほうが、デプロイの失敗や一部だけデプロイされるといった事態を避けることができます
dry runでエラーログが空になってから、deployコマンドを実行
monaco deploy manifest.yaml -p restore_dashboard_20240524
実行結果の確認
今回はあるダッシュボードを誤って削除してしまったという想定でしたので、コマンド実行前にDynatraceのダッシュボードクラシックで削除したダッシュボードが、リストアされていることを確認してください
さいごに
何か気づきがあった場合は、更新いたします
Discussion