IBM API ConnectをInstanaで観測するために

# はじめに
IBM API Connectはエンタープライズ向けAPI管理製品です。
Instanaはシステムの可観測性のための自動化された可観測性基盤製品です。
API ConnectをInstanaで監視するための基本的な構成を行います。

# 前提・環境
- Red Hat OpenShift Kubernetes Service 4.10(IBM CloudのROKSを利用)
- API Connect v10.0.5.0 (Cloud Pak for Integrationを利用)
- SaaS版のInstana（社内用なので、もしかすると一般向けと画面が異なるところなどあるかもしれません）

今回は、[IBM TechZone](https://techzone.ibm.com/environments)からIBM Cloudに検証環境を払い出しています。TechZoneはIBM Solutionのトライアル環境で、利用方法は参考リンクをご参照ください。

API ConnectはCloud Pak for Integration（CP4I)に含まれるため、該当環境を払い出しますが、払い出し方法詳細は本記事の主旨ではないため割愛します（また別途書くかもしれません）。

# TL;DR
1. ROKSクラスターにInstanaのAgentを導入
1. API Connect用にAutoTrace Webhookを導入
1. 開発者ポータル用にDrupalのInstanaモジュールを有効化
1. Instanaのダッシュボードを構成

# 詳細手順
1. ROKSクラスターにInstanaのAgentを導入します。Operatorも利用可能ですが、今回はHelm使用してみました。Operatorの場合は参考リンクをご参照ください。
    1-1. OpenShiftクラスターにログインしておきます。tokenとserverはお使いの環境に合わせて指定します。
    ```
    oc login --token=sha256~xxxx --server=https://xxx:yyy
    ```
    
    1-2. Instana Agent用のProjectを作成します。
    ```
	oc new-project instana-agent
    Now using project "instana-agent" on server xxx
    （省略）
    ```
    
    1-3. Security Context Constraintの設定でinstana-agentのサービスアカウントにpriviledged権限を付与します。
    ```
    $ oc adm policy add-scc-to-user privileged -z instana-agent -n instana-agent        
    clusterrole.rbac.authorization.k8s.io/system:openshift:scc:privileged added: "instana-agent"
    ```
   
     1-4. Instana Agentを導入します。keyとendpointHostとcluster.nameはお使いの環境に合わせて指定します。InstanaダッシュボードのInstalling Instana AgentsでOpenShiftを選択するとコマンド引数及びkeyなどの情報が入手できるので基本的にこちらからコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129662/672246fd-d1ab-74fd-fa66-95e84547c5c5.png)

    ```
    $ helm install instana-agent --namespace instana-agent --repo https://agents.instana.io/helm --set openshift=true --set agent.key=xxxx --set agent.endpointHost=xxxx-saas.instana.io --set cluster.name=xxxx instana-agent
    NAME: instana-agent
    LAST DEPLOYED: Wed Nov 16 11:44:22 2022
    NAMESPACE: instana-agent
    STATUS: deployed
    REVISION: 1
    TEST SUITE: None
    （省略）
    ```
    
    1-5. Instana Agentが起動していることを確認します。
    ```
    $ oc get all -n instana-agent
    NAME                      READY   STATUS    RESTARTS   AGE
    pod/instana-agent-mj9mf   2/2     Running   0          4h14m
    pod/instana-agent-w8wxm   2/2     Running   0          4h14m
    pod/instana-agent-wb7jz   2/2     Running   0          4h14m
    pod/instana-agent-wbdkc   2/2     Running   0          4h14m
    pod/instana-agent-wq2w4   2/2     Running   0          4h14m


    NAME                           DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
    daemonset.apps/instana-agent   5         5         5       5            5           <none>          4h14m
     ```

1. AutoTrace Webhookを導入
    2-1. 同様にHelmで導入。passwordはお使いの環境に合わせて、上述のダッシュボードに記載されているdownloadKeyを指定します。
    ```
    $ helm install --create-namespace --namespace instana-autotrace-webhook instana-autotrace-webhook --repo https://agents.instana.io/helm instana-autotrace-webhook --set webhook.imagePullCredentials.password=xxx --set openshift.enabled=true
    NAME: instana-autotrace-webhook
    LAST DEPLOYED: Wed Nov 16 18:38:46 2022
    NAMESPACE: instana-autotrace-webhook
    STATUS: deployed
    REVISION: 1
    TEST SUITE: None
    NOTES:
    The Instana AutoTrace WebHook is installed.
    （省略）
    ```
    
    2-2. AutoTrace Webhookが導入されたことを確認します。
    ```
    $ oc get pods -n instana-autotrace-webhook
    NAME                                         READY   STATUS    RESTARTS   AGE
    instana-autotrace-webhook-859fb8fb57-nh9wp   1/1     Running   0          64s
    ```

1. API Connect関連のDeploymentをリスタート
    3-1.以下のDeploymentをリスタートします。
    ```
    $ oc rollout restart deployment/apic-insta-11cf53f-analytics-proxy -n cp4i
    deployment.apps/apic-insta-11cf53f-analytics-proxy restarted

    $ oc rollout restart deployment/apic-insta-11cf53f-apim -n cp4i
    deployment.apps/apic-insta-11cf53f-apim restarted

    $ oc rollout restart deployment/apic-insta-11cf53f-juhu -n cp4i
    deployment.apps/apic-insta-11cf53f-juhu restarted

    $ oc rollout restart deployment/apic-insta-11cf53f-ldap -n cp4i
    deployment.apps/apic-insta-11cf53f-ldap restarted

    $ oc rollout restart deployment/apic-insta-11cf53f-lur -n cp4i
    deployment.apps/apic-insta-11cf53f-lur restarted

    $ oc rollout restart deployment/apic-insta-11cf53f-portal-proxy -n cp4i
    deployment.apps/apic-insta-11cf53f-portal-proxy restarted

    $ oc rollout restart deployment/apic-insta-11cf53f-taskmanager -n cp4i
    deployment.apps/apic-insta-11cf53f-taskmanager restarted

    $ oc rollout restart deployment/apic-insta-11cf53f-ui -n cp4i
    deployment.apps/apic-insta-11cf53f-ui restarted

    ```

    3-2. APIC関連PodにAutoTrace Webhookが反映されTrueが返ることを確認します。
    ```
    $ oc get pods apic-instana-mgmt-apim-77b9f74dbd-5tfpr -n cp4i -o jsonpath='{.metadata.labels.instana-autotrace-applied}'
    true
    ```
    
1. Instanaのダッシュボードを構成（Application）
    4-1. Applicationから「New Application Perspective」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129662/ca5707f2-18d2-23bf-440c-4310913d1c40.png)
    4-2. 今回はOpenShift環境なので、Kubernetes or Containerを選択します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129662/08564369-b688-c296-c418-1ca33154926b.png)
    4-3. クラスター名などでフィルターします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129662/d97ab46b-4273-c74f-2787-9ab5c146bf7c.png)
    4-4. Perspective名をつけ、今回はAll Callsを選択して内部間通信も監視対象にして、Createします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129662/8ab13a66-1264-46dc-8a72-6b0703ca9a62.png)
    4-5.ダッシュボードが完成です。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129662/7f99b48c-e8ff-fafd-62df-db6c33e1e213.png)

1. 次にAPI Connect提供の開発者ポータルサイトも監視対象にします。開発者ポータルはDrupalベースで、Instanaモジュールが提供されているので有効化します。
    5-1. 開発者ポータルにadminでログインしておきます。
    5-2. ExtendメニューからモジュールのListを出すと、以下のようにInstana EUMモジュールが見つかるので、チェックを入れて下にあるEnableボタンをクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129662/d0456185-d07b-5a65-b0d6-d06d3fc9a753.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129662/3cfbada4-7ee3-f059-1477-95e010bdf0d7.png)
    
    5-3.しばらく時間がかかりますが、以下のように成功メッセージが出ます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129662/4be7b92e-63d6-c705-d970-d415c7b4f016.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129662/bb908561-347f-2eaa-3d07-595bedea0874.png)
    
    5-4. InstanaからWebsiteを追加して接続情報のreportingUrlとkeyを入手します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129662/0f045ea2-c0d3-014a-994d-ea5ba65c31af.png)

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129662/2af340f8-3b96-56fa-83cb-83c36a0525c1.png)

    5-5. モジュールにInstanaの接続設定を入れて保存します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129662/db3f665b-8162-5c74-7764-78df8c4f1dad.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129662/fb3993c8-a189-2cbc-e987-765dcaac7b13.png)


1. 開発者ポータルサイト監視用のInstanaのダッシュボードが完成です。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129662/587448f5-fe79-0928-7205-ae848fb38648.png)

以上でAPI Connect環境をInstanaで監視するための基本設定を行いました。

# 参考
- https://qiita.com/norikokt/items/c02b0a5f5591acb88092
- https://qiita.com/norikokt/items/a41447befe48e51d6ba6
- https://qiita.com/M_Beach/items/37eb0eec0f9e2ab81ca8
- https://github.com/ibm-apiconnect/devportal/tree/master/instana_eum
- https://community.ibm.com/community/user/integration/blogs/chris-dudley1/2021/10/20/monitor-your-developer-portal-with-instana
- https://www.ibm.com/docs/en/instana-observability/current?topic=technologies-monitoring-api-connect
- https://www.ibm.com/docs/en/instana-observability/current?topic=requirements-installing-host-agent-kubernetes#install-by-using-the-helm-chart