Tanzu Application PlatformのApplication Live Viewでワークロードの状態を確認する

前回、[こちらの記事](https://qiita.com/ipppppei/items/96861ab398114f393367)でTanzu Java Web Appのデプロイまでは実施した。
今回の記事はその続きとして、デプロイしたアプリの状態をApplication Live Viewという機能でTAPのGUIから見てみる。
公式ドキュメント的にはカタログの利用は[この辺り](https://docs.vmware.com/en/VMware-Tanzu-Application-Platform/1.6/tap/getting-started-deploy-first-app.html#add-your-application-to-tanzu-developer-portal-software-catalog-5)で、可視化周りは[この辺り](https://docs.vmware.com/en/VMware-Tanzu-Application-Platform/1.6/tap/tap-gui-plugins-runtime-resource-visibility.html)となる。

## Application Live Viewとは
[Application Live View](https://docs.vmware.com/en/VMware-Tanzu-Application-Platform/1.6/tap/tap-gui-plugins-app-live-view.html)とはアプリケーションのワークロードをGUI上で表示してくれる。
対応しているのがSpring Boot、Spring Cloud Gateway、Steeltoeと限られているのは残念だが、これらのアプリケーションであればユーザ側で何か作り込みをしなくても、様々なメトリクスなどを見ることが出来る。

## Application Live Viewを試す
ここからは[こちらの記事](https://qiita.com/ipppppei/items/96861ab398114f393367)の続きとなるため、TAP構築後にTanzu Java Web Appがデプロイされていることを前提とする。

### カタログへの登録
ワークロードの可視化を行うにあたり、アプリのカタログを登録する。
カタログはApplication Acceleratorからアプリの雛形を入手した場合、`catalog/catalog-info.yaml`に格納されている。
カタログの登録前にGitリポジトリ（ここではGitea）を連携させる必要がある。
連携しない場合、Tanzu Developer Portalでカタログを利用しようとすると、以下のエラーが出て先に進めない。
```json
{"error":{"name":"InputError","message":"Error: Unable to read url, NotAllowedError: Reading from 'https://gitea.10.220.157.170.sslip.io/bn_user/tanzu-java-web-app/src/branch/main/catalog/catalog-info.yaml' is not allowed. You may need to configure an integration for the target host, or add it to the configured list of allowed hosts at 'backend.reading.allow'"},"request":{"method":"POST","url":"/locations?dryRun=true"},"response":{"statusCode":400}}
```
そのため、[こちら](https://docs.vmware.com/en/VMware-Tanzu-Application-Platform/1.6/tap/tap-gui-integrations.html#add-a-gitbased-provider-integration-that-isnt-github-1)を参考にtap-values.yamlを編集してGitのドメインを設定して連携させる。なお、証明書もないとエラーが出るのでGiteaの証明書も合わせて追加で設定する。
GiteaをHelmでインストールしている場合、以下で取得できる。
```sh
kubectl get secret -n gitea gitea.10.220.157.170.sslip.io-tls  -o jsonpath={.data."ca\.crt"}  | base64 -d
```
tap-values.yamlを以下のように編集する。
なお、ドキュメントにAcceleratorsのページが壊れるから`acc-server.accelerator-system.svc.cluster.local`を書くようなWorkaroundが書かれていたので、こちらも素直に従って記載する。
```diff
--- tap-values.yaml.noapp-config	2023-09-14 09:23:39.769145132 +0000
+++ tap-values.yaml	2023-09-14 09:55:23.080883110 +0000
@@ -55,8 +55,32 @@
       type: LoadBalancer

 tap_gui:
+  ca_cert_data: |
+    -----BEGIN CERTIFICATE-----
+    MIIDETCCAfmgAwIBAgIQKjFwuHR53a5LTIYtjsU7mDANBgkqhkiG9w0BAQsFADAT
+    ：（省略）
+    biMGOi7AV0sO3nT0/hhHcOg8UrfQ
+    -----END CERTIFICATE-----
   metadataStoreAutoconfiguration: true
   app_config:
+    backend:
+      reading:
+        allow:
+        - host: 'gitea.10.220.157.170.sslip.io'
+        - host: acc-server.accelerator-system.svc.cluster.local
     auth:
       allowGuestAccess: true
```
設定を反映する。
```
tanzu package installed update tap --values-file tap-values.yaml -n tap-install
```

Homeから`REGISTER ENTITY`をクリックする。
![1694673371540.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/8a33fc6a-6099-a4f2-4fa9-2ac7e6ad9bcb.png)
Repository URLにはTanzu Java Web Appのcatalog-info.yamlのRawでのパス(例：[https://gitea.10.220.157.170.sslip.io/bn_user/tanzu-java-web-app/raw/branch/main/catalog/catalog-info.yaml](https://gitea.10.220.157.170.sslip.io/bn_user/tanzu-java-web-app/raw/branch/main/catalog/catalog-info.yaml))を設定する。
![1694685823215.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/25d501bb-ed56-3f0d-306d-9db726f5e59b.png)

`ANALYZE`をクリックし、`IMPORT`をクリックする。
Homeに戻ると、`tanzu-java-web-app`が追加されていることが分かる。
![1694685904614.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/43383cf8-1ce6-d32c-dc3e-0e638b76199a.png)

### ワークロードの可視化
Tanzu Java Web AppはKnativeで動くため、ワークロードを発生させるために定期的にアクセスしておく。
```
watch -n 5 curl https://tanzu-java-web-app.tap-demo.tap.10.220.157.170.sslip.io  -k
```
この状態で、先程のHomeから`tanzu-java-web-app`をクリックし、`Runtime Resources`をクリックすると、アプリのKubernetesリソースが表示される。
![1694687511424.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/4c279dbe-3c3a-863a-5672-8794df978e3f.png)
`Kind`が`Pod`のものをクリックすると、このような画面となる。
![1694687585395.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/7f9377e9-5715-1908-a3fc-2ceabd23200b.png)
`VIEW POD LOGS`からPodのログが、`VIEW .YAML`からYAMLが確認できる。ログをkubectlなしで見れるのは開発者にとっては嬉しい機能だと思う。
下の`Live View`に行って、Memoryを選択すると、CPU・メモリの使用量も表示される。
![1694687701686.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/5096a62e-32b0-b344-f722-50993c71241a.png)
ガベージコレクションに関する情報も表示できる。
![1694687748571.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/67016a6e-0416-9b1c-01f7-3570ad7a1a10.png)
表示可能な項目は以下となっている。
- Details
- Health
- Environment
- Log Levels
- Threads
- Memory
- Request Mappings
- HTTP Exchanges
- Caches
- Configuration Properties
- Conditions
- Scheduled Tasks
- Beans
- Metrics
- Actuator

特別な作り込みをせずにこのような各種情報が取れるのはありがたく、Developerの学習コストも不要という点もDeveloperにはオススメしやすそうだ。