【ハンズオン】Instanaでカスタムダッシュボードを作成してみる

## はじめに
IBM Observability Instanaは、APM(Application Performance Management)およびObservabilityを実現するIBMソリューションです。 <br>
今回はこの中の1機能である「カスタムダッシュボード」を作成してみたいと思います。


## イントロダクション
以下にこのハンズオンの概要を示します：
- **目的**: Instanaのカスタムダッシュボード機能の概要、使いどころについて学ぶ。
- **対象**: Instanaのユーザー様、これからInstanaの導入を検討されている方。
- **前提条件**: 
    - Instanaのアプリケーション・モニタリングやイベント機能など、基本的な機能について理解していること。
    - SLO監視の概要が分かること。
- **所要時間**：20分
## カスタムダッシュボード機能とは？<br>
### 概要
Instana標準装備のダッシュボード(アプリケーション・モニタリング、インフラストラクチャ・モニタリング、Webサイト・モニタリング etc...)をカスタマイズして、自分好みのダッシュボードを作成できる機能です。

Instana には、以下の3つのカスタム・ダッシュボード・オプションが用意されています。<br>
<カスタムダッシュ・ボードオプション>
- Instanaで取得したデータをベースにカスタム・ダッシュボードを作成する。(今回のハンズオン対象はこちら)。
- Grafana プラグインを活用して、より高度なダッシュボードを作成する。
- REST APIを用いてダッシュボードを作成。
### カスタム・ダッシュボードの構成要素
1つのカスタム・ダッシュボードの中に複数のウィジェットを持つことができます。ウィジェットとは、以下キャプチャ内のグラフや表、1つ1つのことを指しています。「Orders」「Web vs Mobile Interactions」「Page Load」 など、それぞれが「ウィジェット」になります。

![CustomDashboard.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492942/d7cc639f-1d44-42b6-ceb2-74ca7318c71e.png)

### カスタム・ダッシュボードの使いどころ
以下のようなケースでカスタム・ダッシュボードをお使いいただけます。

- システムの全体感やビジネス/システム関連のKPI*に焦点を当てて監視したい。
    - *例：Webサイトにおけるコンバージョン率、システムの稼働率など。
- 特定のデータに、より迅速にアクセスできるようにしたい。

## カスタム・ダッシュボードの作成
今回は"Qoute Of the Day"と呼ばれるサンプルアプリケーションのカスタム・ダッシュボードを一緒に作ってみましょう。

#### 1. Instana環境へのアクセス<br>
お手元のInstana環境にアクセスし、TOPページを開きます。<br>
#### 2. カスタムダッシュボードの作成<br>
画面左上の「Instana ▼」というプルダウンをクリックします。「新規ダッシュボードの作成」画面が開くので、任意のダッシュボード名を付けてください。今回は「<ご自身の苗字>_dashboard」(例：furukawa_dashboard)」という名前にします。最後に「作成」ボタンをクリックしてください。
<br><img width="1128" alt="Screenshot 2024-06-02 at 16 44 43" src="https://github.com/Airi-Furukawa/Instana-HandsOn-QotD/assets/96098068/8c1c05b2-9af1-468f-94ad-842aa610ea2c"><br>
<img width="1128" alt="Screenshot 2024-06-02 at 16 46 43" src="https://github.com/Airi-Furukawa/Instana-HandsOn-QotD/assets/96098068/f9c9f4c2-2b36-46be-b46d-b86f511a35ba"><br>
#### 3. 以下のような空のダッシュボードが作成されます。<br>
<img width="1491" alt="Screenshot 2024-06-09 at 13 45 06" src="https://github.com/Airi-Furukawa/Instana-HandsOn-QotD/assets/96098068/bca736d9-a14f-4146-a4a6-f59ec59d782c"><br>
#### 4. ウィジェットの作成<br>
ダッシュボードの中に「ウィジェット」を追加していきます。画面右上の「+ ウィジェットの追加」ボタンをクリックしてください。<img width="1504" alt="Screenshot 2024-06-08 at 11 58 30" src="https://github.com/Airi-Furukawa/Instana-HandsOn-QotD/assets/96098068/fd802583-d874-4938-8d2d-a3a72dc47459"><br>
#### 5. ウィジェットの種類を選択/作成します。今回は以下3つのウィジェットを作成してみます。
- 「SLOウィジェット」: SLO監視のためのウィジェットを作成します。
- 「グラフ：円」: 今回は「Instanaで検知されたイベントの総数およびその内訳を表示するグラフ」を作成します。
- 「グラフ：時系列」: 今回は「アプリケーション性能に問題があるサービスTOP5」を表示するグラフを作成します。
#### 6. 「SLO ウィジェット」の作成
##### 1. 手順5の「ウィジェットの追加」画面の左メニューから「SLO」を選択し、「次へ」をクリックします。<img width="1488" alt="Screenshot 2024-06-09 at 13 51 49" src="https://github.com/Airi-Furukawa/Instana-HandsOn-QotD/assets/96098068/c4a2f27b-1217-437d-8867-97d684221381"><br>
##### 2. 「SLOの構成」セクションで以下の項目を設定します。<br>
入力必須項目を記入していきます。以下、3つ目の「サービス・レベル指標」が未登録の場合は、こちらを先に登録することをお勧めします。***必須項目2つ目の`アプリケーション・パースペクティブ：qotd`を入力した後***、手順6-3に進んでください。(当該項目を設定して始めて「SLI管理」ボタンが活性化されます。)
- SLOタイプ：アプリケーション
    - InstanaにWebサイト/アプリケーションいずれも登録済みの場合のみ、この欄が表示されます。片方しか登録していない場合は、この欄は表示されないので、無視して次の項目に進みます。
- アプリケーション・パースペクティブ：qotd
- サービス・レベル指標：デフォルトで使用できる指標がないので、まずは指標(SLI)を作成します。SLI作成については次の手順6-3で後述します。 
- SLO ターゲット：99.99%
- 時間枠：動的時間枠
- ウィジェット名：「<ご自身の苗字>_SLOウィジェット」(例：furukawa_SLOウィジェット)
<img width="1128" alt="Screenshot 2024-06-02 at 16 57 06" src="https://github.com/Airi-Furukawa/Instana-HandsOn-QotD/assets/96098068/639c662b-3805-4593-bad2-ae2ae9845333"><br>
##### 3. SLIを作成します。<br>
「ウィジェットの追加 - SLO」画面の「サービス・レベル指標」欄にある「SLI管理」ボタンをクリックします。<img width="1504" alt="Screenshot 2024-06-08 at 12 04 56" src="https://github.com/Airi-Furukawa/Instana-HandsOn-QotD/assets/96098068/dc5a0c3f-e163-4f51-8b33-d5cf440de125">
##### 4. 「SLI管理」画面右上の「+ SLIの作成」ボタンをクリックし、必要項目を入力します。<img width="1504" alt="Screenshot 2024-06-08 at 12 06 31" src="https://github.com/Airi-Furukawa/Instana-HandsOn-QotD/assets/96098068/0774dc25-d44d-47f0-ad53-dba18ead6db3">
以下の値を設定します。<br>
**「SLI カスタマイズ」セクション** <br>
-  名前：「<ご自身の苗字>-apicall-success-rate」(例:furukawa-apicall-success-rate)
-  タイプ：「イベントベース」<br>
**「SLI エンティティー」セクション**<br>
- 境界：インバウンドの呼び出し
- 非表示の呼び出し：デフォルトのまま<img width="1194" alt="Screenshot 2024-06-09 at 16 52 09" src="https://github.com/Airi-Furukawa/Instana-HandsOn-QotD/assets/96098068/4e9af8e0-afc3-4585-9f7c-fcf9bab4e739">
- 「良好なイベント」セクション：「+ フィルターの追加」を選択し、以下を入力してください。
  - フィルター：「HTTP」 > 「Status」　> 「200」
- 「不良イベント」セクション：「+ フィルターの追加」を選択し、以下を入力してください。
  - フィルター：「HTTP」 > 「Status」　> 「500」
<img width="1254" alt="Screenshot 2024-06-08 at 13 06 18" src="https://github.com/Airi-Furukawa/Instana-HandsOn-QotD/assets/96098068/2feddb6e-7c6a-48c0-9d84-0cf02dedea2a"><br>
##### 3. 最後に「作成」をクリックします。これでSLIの登録が完了です.<br>
##### 4. 手順6-2「SLOの構成」セクションに戻り、残りの必須項目もガイドに従って入力してください。入力後、設定に問題がないことを確認し「作成」を押してください。<img width="1362" alt="Screenshot 2024-06-08 at 13 13 45" src="https://github.com/Airi-Furukawa/Instana-HandsOn-QotD/assets/96098068/d50262c5-91d0-4e4a-a514-22a5dfe3a78e">
##### 5. 無事、SLOウィジェットが作成されました。
<img width="1478" alt="Screenshot 2024-06-08 at 13 15 18" src="https://github.com/Airi-Furukawa/Instana-HandsOn-QotD/assets/96098068/c289b832-4592-47af-9a8e-b9844bfbdcd6">

Note
------
その1. 以下に各種設定項目の概要を記載します。
- SLOタイプ：Instanaで設定した「アプリケーション(アプリケーション・パースペクティブ)に対してSLO監視するのか、あるいは「Webサイト」に対してSLO監視をするのかを決めます。前者の場合、エンドユーザのインターネット接続不良など、エンドユーザ側の環境依存の問題は除外してSLOが測定されます。後者の場合、エンドユーザのインターネット接続不要など、アプリケーション提供者側から制御できない問題も数値に反映されてしまいますが、より正確なSLOを把握することができます。<br>
- アプリケーション・パースペクティブ（or Webサイト）：どのアプリケーション・パースペクティブ or Webサイトに対してSLO監視を行うかを定義します。<br>
- サービス・レベル指標：SLIはSLO達成のための指標です。例えば、レスポンスタイムxx秒以内、エラー率0.05%以内などといった指標を定義、設定します。<br>
- SLO ターゲット：SLOの数値そのものです。例えば、SLAが99.95%の場合は、SLOは99.99%などと設定します。一般的にSLAよりもSLOを高めに設定します。<br>
- 時間枠：次の3種類があります。
    - 「動的時間枠」
    - 「ローリング時間枠」
    - 「固定時間間隔」<br>
<br>
その2. Instanaで定義できるSLIの種類<br>
InstanaのSLIは、Instanaで定義された「Webサイト」あるいは「アプリケーション・パースペクティブ」に対して作成できます。また、「イベントベース」「時間ベース」の2種類のSLIタイプを選択できます。整理すると以下です。<br>
- 「Webサイト」用 SLI
  - イベントベース：指定したスコープに対するリクエストの成功/失敗件数などを計測します。<br>
  - 例：HTTPステータスコード2xxもしくは5xxの件数を計測。
  - 時間ベース：当該Webアプリケーションの「ビーコン・エラー率」「ビーコン期間」を計測します。
- 「アプリケーション・パースペクティブ」用 SLI
  -  イベントベース：当該アプリケーション・パーペクティブのHTTPリクエストの成功/失敗件数などを計測します。
  - 例：ステータスコード2xxもしくは5xxの件数を計測します。
  - 時間ベース：当該アプリケーション・パーペクティブの「待ち時間」「呼び出し数(リクエスト数)」「エラー率」「エラーのある呼び出し数(リクエスト数)を計測します。<br>     
-----<br>

#### 7. 「グラフ：円」ウィジェットの作成<br>
##### 1. 「<苗字>-Dashborad」画面右上の「＋ ウィジェットの追加」ボタンをクリックします。遷移先の画面の左メニューから「グラフ:円」を選択し、「次へ」をクリックします。<img width="1128" alt="Screenshot 2024-06-02 at 17 23 39" src="https://github.com/Airi-Furukawa/Instana-HandsOn-QotD/assets/96098068/219ac944-1e75-4387-99e9-9c1b955fe147"><br>
##### 2. 以下の項目を設定します。今回のハンズオンでは、以下の設定値を利用します。<br>
**「データ・セット」セクション** (1つ目)<br>
  - データ・ソース：イベント
  - データ・セット > 照会：「event.severity:warning」「event.severity:critical」
  - メトリック：イベント数(デフォルトのまま)
  - 集約：個別の数(デフォルトのまま)
  - 名前：「苗字-イベント数」
  - その他の項目はデフォルトの設定値で構いません。<img width="1196" alt="Screenshot 2024-06-08 at 14 00 04" src="https://github.com/Airi-Furukawa/Instana-HandsOn-QotD/assets/96098068/ca6288c9-cf7d-4b7a-b288-e267c9e52a0c">
**「データ・セット」セクション** (2つ目)<br>  グラフ表示したときの、グラフの色を設定します。今回はデフォルトの色のままにします。<br>
**「データ・表示」セクション** (3つ目)<br>フォーマッター：表示形式を選択します。今回は「数値：例：42」を選択します。<br>**「ウィジェット名」セクション**(4つ目)<br>
名前：任意の名前を付与します。今回は「<苗字>-イベント総数と内訳」とします。<img width="1478" alt="Screenshot 2024-06-08 at 13 23 02" src="https://github.com/Airi-Furukawa/Instana-HandsOn-QotD/assets/96098068/f3be4f5f-d138-4aab-b040-0407c6ba8fd3"><br>
**「プレビュー」セクション** (4つ目)<br>今回作成する円グラフのプレビューを確認します。問題なければ「作成」をクリックしてください。<br>*該当するデータがない場合は「表示可能なデータがありません」と表示されますが、無視して続けてください。<br><br>
##### 3. ダッシュボード画面左上の「変更の保存」をクリックしてください。 (忘れがちなので忘れずに！)
<img width="1423" alt="Screenshot 2024-06-08 at 13 52 26" src="https://github.com/Airi-Furukawa/Instana-HandsOn-QotD/assets/96098068/df436bdc-cbfd-4db5-9757-0ee0dd40df94">
<br>
<br>
「グラフ：円」ウィジェット(Instanaで検知されたイベントの総数およびその内訳に関するグラフ)の作成が完了です。

:::info
**Tips**：データが表示されない場合は、画面右上の「タイムスパン」を変更することで表示される場合があります。（そのタイムスパン内でイベントが発生していればデータが表示されます。）これは手順6-2の「時間枠」で「動的時間枠」を設定しているためです。
:::
#### 8. 「グラフ：時系列」ウィジェットの作成<br>
##### 1. 「<苗字>-Dashborad」画面右上の「＋ ウィジェットの追加」ボタンをクリックします。遷移先の画面の左メニューから「グラフ:時系列」を選択し、「次へ」をクリックします。
<img width="1022" alt="Screenshot 2024-06-02 at 17 36 35" src="https://github.com/Airi-Furukawa/Instana-HandsOn-QotD/assets/96098068/4970b083-39da-4ff9-9e86-e51c0ab2fb79"><br>
##### 2. 以下の項目を設定します。今回のハンズオンでは、以下の設定値を利用します。<br>
**「データ・セット」セクション** (1つ目)
- データ・ソース：「アプリケーション(トレースと呼び出し)
- メトリック：「待ち時間」
- 集約：「99パーセンタイル」
- フィルター：「Kubernetes > Namespace > qotd」
- グループ:「グループの追加」> 「Service > Name > qotd」
- タイムシフト：off(デフォルトのまま)
- 潜在的な問題：off(デフォルトのまま)
<img width="1202" alt="Screenshot 2024-06-08 at 13 47 26" src="https://github.com/Airi-Furukawa/Instana-HandsOn-QotD/assets/96098068/4c456c0c-9008-4b26-874f-adf7943c31f1"><br>
**「軸の構成」セクション** (2つ目)
- グラフ：「待ち時間」
- フォーマッター：「待ち時間。例：< 1ミリ秒」
- 最小：ブランクでOK（自動で調整されます。）
- 最大：ブランクでOK（自動で調整されます。）<img width="1202" alt="Screenshot 2024-06-08 at 13 49 15" src="https://github.com/Airi-Furukawa/Instana-HandsOn-QotD/assets/96098068/67c923e7-1c06-47af-a81f-4aded9043672"><br>
**「ウィジェット名」セクション** (3つ目)
名前：任意の名前を付与します。今回は「<苗字>-アプリケーション性能に問題があるサービスTOP5」とします。<br>
**「プレビュー」セクション** (4つ目)<br>今回作成する折れ線グラフのプレビューを確認します。問題なければ、「作成」をクリックしてください。
<img width="1202" alt="Screenshot 2024-06-08 at 13 47 47" src="https://github.com/Airi-Furukawa/Instana-HandsOn-QotD/assets/96098068/96f0f477-746b-44da-8528-0775c354979a"><br>
##### 3. ダッシュボード画面左上の「変更の保存」をクリックしてください。 (忘れがちなので忘れずに！)<img width="1423" alt="Screenshot 2024-06-08 at 13 52 26" src="https://github.com/Airi-Furukawa/Instana-HandsOn-QotD/assets/96098068/df436bdc-cbfd-4db5-9757-0ee0dd40df94">
<br>
<br>
これで「グラフ：時系列」ウィジェット(アプリケーション性能に問題があるサービスTOP5に関するグラフ)の作成が完了です。
<br>
<br>
<br>
3つ全てのウィジェットの作成が完了しました。今回のカスタムダッシュボード作成はこれでおわりですが、他にも色々なダッシュボードが作成できるので、ぜひトライしてみてください！