InstanaでIBM Workload Schedulerをモニタリング

おはようございます。こんにちは。こんばんは。
[Instana Observability Advent Calendar](https://qiita.com/advent-calendar/2023/instana) に参加します。14日目は、日頃私が業務で携わっているIBM Workload Scheduler という製品をInstanaでどうモニタリングできるのか試してみた結果について書きたいと思います。
IBMのいちパッケージソフト(IWS）をInstanaで監視したらどんなふうに見えるのか、少しでも参考になりましたら幸いです。
ちなみにこのIWS、ベースはWebSphere Application Server Liberty, IBM Db2をベースとしております。「WAS Liberty やIBM Db2をInstanaでモニタリングするとどう見えるのか？」という観点でも参考になれば幸いです。

# IBM Workload Scheduler とモニタリング
Instana Observability Advent Calendarをご覧になっている皆様は Instana のことはよくご存知のことと思いますが、IBM Workload Scheduler（以下IWS） をご存知ない方もいらっしゃるかと思いますので、簡単に紹介させていただきます。
IWSはIBMが提供するジョブスケジューラーです。主に夜間バッチなどを自動実行するために使用されています。ログ退避やバックアップ以外にも、業務アプリケーションに関連するバッチ処理の自動実行に使われるケースが多く、IWSの不具合や停止がお客様の業務停止に直結することがあります。
そこでIWSプロセスの稼働状況やIWSで自動実行されるジョブのステータスを監視ツールを使ってモニタリングすることが一般的です。（ジョブのステータス監視は、IWSがジョブステータスを書き出すログを監視することで実現。）

今回は Instana で IWS をどのようにモニタリングできるのか試してみます。

# 検証環境
- IWS 10.2 (RHEL 9)、Db2 11.5（RHEL 8、IWS用のリポジトリとして使用）
- Instana Build 263 (SaaS)

# IWSインフラのモニタリング
まずは IWSサーバーの基盤メトリック等をモニタリングできるようにします。

## Instana Agent 導入と設定
監視対象とするIWS Server と IWS DBサーバーに Instana Agentを導入します。（Instana Agent の導入は超簡単なので省略します！）
DBサーバーにはDb2が入っているので、インスタンスやDBの情報も取得できるように configuration.yaml で適切に設定します。
```
com.instana.plugin.db2:
  # Local monitoring configuration
  local: # multiple local configurations supported
    - instance: 'db2inst1'
      port: '50000'
      user: 'db2inst1'
      password: 'password'
      databases:
        - 'TWS'
        - 'DWC'
```
これでIWSサーバーの基盤メトリックが取得できるようになります。
また、IWSは WAS Liberty と Db2をベースとした製品なので、WAS Liberty や Db2に関連する情報も取得できるようになります。

## 「インフラストラクチャー」で見るIWSサーバー群
早速 Instana の「インフラストラクチャー」ページで IWSサーバー群がどう見えるのかみてみます。
IWSサーバーでは、IWSとDWC（IWSのGUI表示用のコンポーネント）が動いています。IWSとDWCそれぞれのWebSphere Liberty サーバーが検出されていることがわかります。
![スクリーンショット 2023-12-12 19.47.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135603/9a60be15-5d7c-df00-a26b-4122c8730938.png)

WebSphere Liberty サーバーのダッシュボードを開いてみます。スレッド・プールやデータベース接続プールの情報を参照できます。（WebSphere Liberty について取得可能な詳しいメトリックは[こちら](https://www.ibm.com/docs/ja/instana-observability/current?topic=technologies-monitoring-websphere-liberty "Monitoring WebSphere Liberty")ご参照。）
![スクリーンショット 2023-12-12 20.02.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135603/80c41e6e-2ff4-bf1b-f43b-bcc75b62a055.png)

マップに戻り、IWS DBサーバーを見てみます。こちらのサーバーにはIWSで使用するデータを保管するためのDBが動いています。
Db2インスタンスが検出され、DWCとIWSそれぞれで使用するデータベースも検出されています。
![スクリーンショット 2023-12-12 19.32.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135603/7c55320a-4609-6b55-0dd4-e5e6c59525af.png)

Instana Agentによって検出されたTWS DBのダッシュボードを開いてみると、TWS DBのメトリックを確認できます。テーブルスペースの使用率やログ使用率、データベース構成パラメーターまで、さまざまなメトリックを取得できます。（Db2 について取得可能な詳しいメトリックは[こちら](https://www.ibm.com/docs/ja/instana-observability/current?topic=technologies-monitoring-db2 "Monitoring IBM Db2") ご参照。）

![スクリーンショット 2023-12-12 19.54.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135603/994b56be-4459-58b1-2437-38c2dbdd8ca2.png)

かなり詳細な情報をInstanaのUIで参照できることがわかりました。
IWSの動作に問題がある場合、ベースとなっている WebSphere Liberty や Db2の観点でもトラブルシューティングが必要となる場合がありますが、WebSphere Liberty や Db2の有識者の方に「この画面見て！」と言えばもしかしたら個々のサーバーにログインせずとも問題の原因を特定できるかもしれません。（希望的観測）

## IWSプロセスの監視
IWS用のセンサーが用意されているわけではないため、IWSプロセス（Websphere Libery, Db2プロセスを除く）をInstanaが自動的に検知して監視することは残念ながらできません。
ただしInstana Agentの設定により個別プロセスの監視は可能です。今回は検証していませんが、mailman, batchmanなどの重要プロセスは個別設定で監視できそうです。


# アプリケーション・モニタリング
IWSは WebSphere Liberty を実行環境とするアプリケーションでもあります。また、バックエンドデータベースとして、Db2を使用しています。IWS を一つのアプリケーションとしてモニタリングしてみます。

## アプリケーション・パースペクティブの作成
Instana で IWS のアプリケーション・パースペクティブを作成し、アプリケーションとして IWSをモニタリングできるようにします。

- アプリケーションの種類はなんでも良いのですが、今回は「サービスまたはエンドポイント」が適切かと思ったのでこちらを選択しました。
![スクリーンショット 2023-12-12 20.33.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135603/e6b544e2-f73d-b8dc-84b9-f528abe776bd.png)

- フィルターとしてAgentに指定したゾーン名（IWS）を設定します。
![スクリーンショット 2023-12-12 20.34.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135603/7d842529-b66c-b328-e892-5cdbbf2c4360.png)

- 「アプリケーション・パースペクティブ名」に IBM Workload Scheduler と指定し、「作成」ボタンをクリックします。
![スクリーンショット 2023-12-12 20.34.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135603/9c19ab24-3802-3445-bbbc-1b929737b9ff.png)

- 作成したアプリケーション・パースペクティブのダッシュボードが表示され、しばらくするとデータが表示され始めます。
![スクリーンショット 2023-12-12 20.38.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135603/1b6dff76-9322-91ac-d832-0cb01ee52fa7.png)

## 「アプリケーション」で見る IWS 
- 「IBM Workload Scheduler」アプリケーションのダッシュボードを開きます。
![スクリーンショット 2023-12-12 20.57.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135603/7a6f514a-768b-91d4-82db-73c359505fd9.png)

- 各種メトリックが表示されます。
![スクリーンショット 2023-12-12 20.57.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135603/88fb8451-10cd-387a-eb5a-908668eb446d.png)

- 依存関係タブを開いてみます。IWSアプリケーションのトレースを自動的に取得しているので、DWCからIWSに接続し、さらにIWSがTWS DBに接続している様子がわかります。
これが見えたからと言って多くの方々にとっては「ふーん」レベルの情報かと思いますが、元々のIWSの仕組みをある程度は知っている者としては、「これトレースから拾って勝手に描画してくれるんだ、素晴らしい！」と思いました。
![スクリーンショット 2023-12-12 21.01.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135603/f2715e90-fa40-621e-3620-217c1087a80a.png)

- 依存関係マップからIWS DB（画面表示上はTWS DB）のダッシュボードを表示すると、今度は IWS DBに対する呼び出し数などの情報が表示されます。待ち時間順にステートメントなども表示してくれるので、なんらかIWS DBの読み取りが遅い時などにどのステートメントが遅いのかなども確認できそうです。
![スクリーンショット 2023-12-12 21.10.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135603/6f4391ba-97f6-d6d1-b435-56732336a936.png)

Instana Agentを導入して簡単な設定をするだけでここまで見れるなんて、素敵です。
オブザーバビリティ万歳！Instana 万歳！

# IWSのWebサイトモニタリング
IWSを使用する場合、ユーザーはブラウザでIWSサーバーへアクセスし、ジョブを登録したりジョブの実行結果などを確認します。Webアプリケーションの一種です。ということで Webサイトモニタリングの対象とすることも可能です。

## IWSをWebサイトモニタリングの対象とする
- IWSを監視対象のWebサイトとして登録します。
![スクリーンショット 2023-12-12 21.21.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135603/03ec7727-20bd-49d1-c29c-47627fe300c6.png)

- InstanaのWebサイト追加画面で表示されるトラッキング・スクリプトをコピーし、IWSのWebページに埋め込みます。
![スクリーンショット 2023-12-12 21.22.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135603/0650fed2-0a03-d8a9-4fcb-78f09a9cfad6.png)

- IWSサーバー上のファイル（"DWC導入ディレクトリ"/usr/servers/dwcServer/apps/DWC.ear/Console.war/dashboard/index.jsp）にスクリプトを追記します。
こんな感じで埋め込みました。(URLとKeyはマスクしています。）
```
<html xml:lang="en-us" lang="en-us">
  <head>
    <base target="_top">    
    <title>Dynamic Workload Console</title>
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta charset="utf-8" />
    <script defer src="dashboard/jsonlint.js"></script>
    <script type="text/javascript">
        DWCdebugMode = false;
        var WD={};
    </script>
    <script>
      (function(s,t,a,n){s[t]||(s[t]=a,n=s[a]=function(){n.q.push(arguments)},
      n.q=[],n.v=2,n.l=1*new Date)})(window,"InstanaEumObject","ineum");
    
      ineum('reportingUrl', 'https://xxx-xxx-saas.instana.io');
      ineum('key', 'xxxxxxxxxxxxxxxxxxxxxxx');
      ineum('trackSessions');
    </script>
    <script defer crossorigin="anonymous" src="https://eum.instana.io/eum.min.js"></script>
    <%@include file="./index.html" %>
</head>

```

## Webサイトモニタリングで見るIWS

- 「Webサイトおよびモバイル・アプリケーション」で先程登録した「IBM Workload Scheduler UI」を表示します。
![スクリーンショット 2023-12-12 21.41.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135603/43f9c9db-1f4e-1023-4777-7515e3f710f6.png)

- IWS UIのページ・ビュー、JSエラー、onLoad時間などがグラフ表示されています。
いち運用管理ツールのUIは多少ロードに時間がかかったとしても大きな問題となることは少ないので、ここまで監視することはないかもしれませんが、一応こういうこともできますということで。
![スクリーンショット 2023-12-12 21.42.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135603/2dd1fbfe-b8f2-33e2-2482-544e0327a61c.png)


# IWS固有メトリックのモニタリング
IWSを監視するための専用センサーが用意されているわけではないので、「Instana Agentを導入するだけでIWSの監視を即始められます！」とはならないのですが、IWSとInstanaそれぞれで少し設定を行うことで、IWS固有のメトリックをInstanaで収集・可視化することは可能です。

IWS固有メトリックとは、例えば次のようなメトリックです。
- ジョブのステータス（正常終了・異常終了など）
- IWSサーバーおよびエージェントのステータス
- DBへの接続状況

どのようなものが参照できるのか見てみます。

## IWS固有メトリックの公開

IWSのV10.1以降では Instana などのモニタリングツールで稼働状況を収集・可視化できるように各種メトリックを公開しています。このメトリックをInstanaなどのモニタリングツールで取得できるようにするためにIWS側でメトリックを公開するよう設定します。

手順は[こちら](https://www.ibm.com/docs/en/workload-automation/10.2.0?topic=scheduler-exposing-metrics-monitor-your-workload "Exposing Metrics to Monitor Your Workload")を参照しながら実施します。

- IWSサーバーへログインします。以降の手順は全て root権限で実施します。


- IWSサーバーの設定ファイルが保存されているディレクトリーへ移動します。

```
cd /opt/wa/TWSDATA/usr/servers/engineServer/configDropins/overrides
```

- prometheus.xml というファイルを作成し、以下の内容を記載し、保存します。
```
<server>
  <featureManager>
      <feature>mpMetrics-4.0</feature>
      <feature>cdi-3.0</feature>
  </featureManager>

  <mpMetrics authentication="false" />

</server>
```

- IWSサーバー(WebSphere Liberty)を再起動します。
```
su - wauser
conman "stopappserver ;wait"
conman "startappserver ;wait"
```

- メトリックが公開されていることを確認します。下記のURLへアクセスします。
https://＜IWSサーバーホスト名またはIP＞:31116/metrics
このような形でメトリックが参照できればOKです。

![スクリーンショット 2023-11-10 14.59.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135603/f7cdc6a5-b227-b6fa-736f-a2c4294fc1ce.png)

## Instana Agentによるメトリック取得設定
IWSサーバーに導入したInstana Agentの configuration.yaml ファイルに、IWSのメトリックを取得するための設定をします。

- 下記を configuration.yaml に追記します。

```
com.instana.plugin.prometheus:
  # Global (all) endpoints username/password configuration (optional)
  username: ''
  password: ''
  customMetricSources: # list metric sources
  - url: 'https://localhost:31116/metrics'
    username: 'wauser'                             # endpoint specific username/password configuration
    password: 'password'
```

- メトリックをInstana Agentで取得できているかどうか確認します。「インフラストラクチャー」にてIWS Serverを選択し、サーバーの概要に「Prometheusアプリケーション」として、configuration.yaml ファイルに設定した "https://localhost:31116/metrics" が表示されていることを確認します。（画面左下）
![スクリーンショット 2023-12-12 22.44.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135603/9d5ac8ac-0a6b-9155-410c-18a2bcdd2d08.png)

- 前の画面で https://localhost:31116/metrics リンクをクリックし、さらに「ダッシュボードを開く」をクリックします。
![スクリーンショット 2023-12-12 22.45.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135603/9f3d975c-7bdc-fb5e-f089-23dff2183add.png)

- 次の画面のように 「Prometheus カスタム・メトリック」が表示されていればOKです。
![スクリーンショット 2023-12-12 22.46.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135603/05b009ad-c584-ad08-fc4e-3a0afb5614a1.png)


## InstanaへのIWSダッシュボードのインポート
IWSをモニターするためのInstanaカスタムダッシュボードが、IWSプラグインを公開しているサイトにて提供されています。このカスタムダッシュボードをインポートしてカスタマイズすることで、IWSメトリックをInstana UIで可視化できます。

- カスタムダッシュボードを[こちら](https://www.yourautomationhub.io/detail/instanadashboard "Instana Dashboad")からダウンロードします。

![スクリーンショット 2023-12-12 22.03.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135603/2dcb656b-8d01-5bce-2d07-765e629f4749.png)

- IWS Dashboardを作成します。
![スクリーンショット 2023-12-12 22.05.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135603/67417de5-b3a9-73ce-a5f2-3e67de48030e.png)
![スクリーンショット 2023-12-12 22.05.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135603/52d59801-f58c-e6dc-ee4b-6161afa1fefe.png)

- 画面右上の「…」メニューから「JSONとして編集」を選択します。
![スクリーンショット 2023-12-12 22.08.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135603/8c8edde7-175c-7b4b-b189-b0e6130a3dc6.png)

- 「ダッシュボードの編集」ダイアログで、ダウンロードしたカスタムダッシュボードの内容をペーストしますが、ここで注意が必要です。ダイアログが開いた時に表示されるjsonの 「"Widgets":[],」以降の部分のみ差し替えます。全て差し替えてしまうと、以降の手順でダッシュボードへの変更を保存できません。
![スクリーンショット 2023-12-12 22.17.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135603/fc4baf5a-8203-2f99-38d8-2e5b0f5fde54.png)

- 差し替え後はこのような感じです。ハイライトしている部分以降が差し替えた部分です。「確認」ボタンをクリックしてダッシュボードをインポートします。
![スクリーンショット 2023-12-12 22.17.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135603/20243463-0c8f-12ea-20a9-97eedaa27212.png)

- ダッシュボードがインポートされ、ご覧のように表示されます。ここで忘れずに画面左上の「変更の保存」をクリックしましょう。（保存し忘れてしまうのはInstanaユーザーあるある）
![スクリーンショット 2023-12-12 22.13.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135603/52eab175-ae96-006b-f4c5-3528c5f89e70.png)

- サンプルのダッシュボードをインポートしたのみではメトリックを表示できないものもあるので、それぞれのWidgetを編集して監視対象のIWSのデータを表示できるようにします。なお、検証環境では、Widgetで参照するメトリックが取得できておらず、美しいダッシュボードとはならなかったため、サンプル画像の掲載とさせていただきます。（ごめんなさい）
![instana-blog-10_orig.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135603/6f028480-5a45-4f5d-745e-d6ef1cb7bf33.png)
出典：[Workload Automation Observability: Infrastructure and Metrics Monitoring with Instana](https://www.workloadautomation-community.com/blogs/workload-automation-observability-infrastructure-and-metrics-monitoring-with-instana)

IWS Agentの接続状況を概要レベルで表示したりジョブの状況をパイチャート形式で表示できるようですが、そこからさらに接続に問題のあるエージェントを判別したり、異常のあるジョブを特定するためにはIWSのUIを併用する必要がありそうです。使い方としてはIWS環境の健全性を概要レベルで掴んで、詳細はIWSのUI等で確認するといったところでしょうか。
個々のジョブ・ステータスの通知は従来のログ監視や、IWSのイベント・ルールでの個別通知を組み合わせる必要があるでしょう。

# まとめ
今回はIBM Workload Scheduler という製品を、Instanaでどのようにモニタリングできるのかをご紹介しました。
インフラストラクチャー視点でのモニタリング、アプリケーション視点でのモニタリングでは、これまでなかなか可視化することが難しかったIWSの内部の状況を把握できそうということがわかりました。IWSの動作に不具合がある場合のトラブルシューティングには大いに役立ちそうです。そこはやはりオブザーバビリティを提供するInstanaならではと感じます。
一方でIWSのダッシュボードについては、少し物足りないかなぁというのが個人の感想です。
リンクできてないIWS Agentや異常のあるジョブを特定できるところまでInstanaの画面で特定できると嬉しいなと思いました。
本記事は以上です。