3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

IBM MQ入門:コンテナで動かすハンズオン 4. 応用編 APMツール(Instana)によるMQとLibertyの監視

Last updated at Posted at 2025-12-12

1. この章について

この記事は、IBM MQに関するハンズオン資料シリーズの一部です。

まだ「はじめに」の記事をご覧になっていない方は、まずそちらからご確認ください。

本ハンズオンはこの章のみの内容で独立して実施可能ですが、より詳細な理解を得たい場合は初級編から進めることを推奨します。

この章の位置付け

この章では、RHEL上のPodmanで動くIBM MQとIBM WebSphere Libertyを、Instanaで監視します。

  • このハンズオンによってできるようになること
    • RHEL上でIBM MQとWebSphere Libertyを動作させる
    • Instanaを使ってMQのメトリクスを収集・監視する
  • このハンズオンの目的
    • APMツール(Instana)によって、MQをどのように監視することができるかを知る
  • 対象者の前提条件
    • IBM MQの基礎を知っていること
    • Linuxの基本操作が可能なこと

前提となる環境

本資料では、以下の内容を前提の環境としています。

このハンズオンでは、Instanaのライセンスが必要となります。

本ハンズオンではIBM Cloud上のRHELを使用してIBM MQやLibertyを動作させますが、これらはmacやWindowsのローカルPCからも実行は可能です。
(ただし動作検証は行なっておりません。適宜読み替えながら手順を実行してください。)

本資料の環境 バージョン
Red Hat Enterprise Linux (IBM Cloud) release 9.6、ディスク300GB, 4vCPU 16GB
Instana (SaaS) Release 1.0.310

また、手順の中で以下のツールをインストールして使用します。

本資料の環境 バージョン
Podman version 5.4.0
git version 2.47.3
Apache Maven 3.6.3 (Red Hat 3.6.3-22)

2. ハンズオンの全体像

image.png

3. 環境へのアクセスとツールのインストール

以下のコマンドで、ポートフォワーディングを行いながらRHELのVMに接続します。

ssh -i <IDENTITY_FILE> -p <SSH_PORT> \
    -L 9080:localhost:9080 -L 9445:localhost:9445 \
    <Username>@<Public IP>

パッケージの更新を行います。

sudo yum check-update
sudo yum update -y

Podman のインストールを行います。

sudo dnf install -y podman
podman --version

Gitをインストールします。

sudo dnf install -y git
git --version

Mavenをインストールします。

sudo dnf install -y maven
mvn -version

4. MQのセットアップ

まずはコンテナ間でメッセージのやり取りを行うために、カスタムネットワークを作成します。

podman network create mq-network

IBM MQ イメージの取得を行います。

podman pull icr.io/ibm-messaging/mq:latest

取得したイメージを確認します。

podman images

例:

[itzuser@itzvsi-691000cdb4-4mkdcu5q ~]$ podman images
REPOSITORY               TAG         IMAGE ID      CREATED      SIZE
icr.io/ibm-messaging/mq  latest      8d9977e72b3f  2 weeks ago  967 MB

QM1を作成します。

<your-image-id> にはmqのイメージIDを使用します。(上記例であれば8d9977e72b3f

podman run --env LICENSE=accept --env MQ_QMGR_NAME=QM1 --volume qm1data:/mnt/mqm --publish 1414:1414 --publish 9443:9443 --detach --env MQ_APP_USER=app --env MQ_APP_PASSWORD=passw0rd --env MQ_ADMIN_USER=admin --env MQ_ADMIN_PASSWORD=passw0rd --name QM1 --network mq-network <your-image-id>

QM2を作成します。

podman run --env LICENSE=accept --env MQ_QMGR_NAME=QM2 --volume qm2data:/mnt/mqm --publish 1415:1414 --publish 9444:9443 --detach --env MQ_APP_USER=app --env MQ_APP_PASSWORD=passw0rd --env MQ_ADMIN_USER=admin --env MQ_ADMIN_PASSWORD=passw0rd --name QM2 --network mq-network <your-image-id>

コンテナの稼働状況を確認します。

podman ps

例:

CONTAINER ID  IMAGE                           COMMAND     CREATED         STATUS         PORTS                                                               NAMES
a1c6349f4b45  icr.io/ibm-messaging/mq:latest              46 seconds ago  Up 46 seconds  0.0.0.0:1414->1414/tcp, 0.0.0.0:9443->9443/tcp, 9157/tcp, 9415/tcp  QM1
199c5ebbfd04  icr.io/ibm-messaging/mq:latest              11 seconds ago  Up 12 seconds  0.0.0.0:1415->1414/tcp, 0.0.0.0:9444->9443/tcp, 9157/tcp, 9415/tcp  QM2

QM1の各種設定

QM1のコンテナにログインします。

podman exec -it QM1 bash

QM1のキューマネージャーに対して設定を行うため、runmqsc コマンドで対話モードに入ります。

runmqsc

対話モードに入ったら、QM2上のキューを参照するためのリモートキューREMOTE.Q.1 を作成します。

define qremote(REMOTE.Q.1) rname(DEV.QUEUE.2) rqmname(QM2) xmitq(TRANS.Q.1)

次に、QM1でTRANS.Q.1という名前のトランスミッションキューを作成します。

以下のコマンドを実行してください。

define qlocal(TRANS.Q.1) usage(xmitq)

QM1toQM2というチャネルの定義をQM1側で行います。

以下のコマンドを実行してください。

define channel(QM1toQM2) chltype(SDR) conname('QM2(1414)') xmitq(TRANS.Q.1)

作成したチャンネルを確認します。

display channel(QM1toQM2)

以下のようにチャネルの設定が表示されることを確認してください。

AMQ8414I: Display Channel details.
   CHANNEL(QM1TOQM2)                       CHLTYPE(SDR)
   ALTDATE(2025-11-26)                     ALTTIME(00.35.42)
   BATCHHB(0)                              BATCHINT(0)
   BATCHLIM(5000)                          BATCHSZ(50)
   CERTLABL( )                             COMPHDR(NONE)
   COMPMSG(NONE)                           CONNAME(QM2(1414))
   CONVERT(NO)                             DESCR( )
   DISCINT(6000)                           HBINT(300)
   KAINT(AUTO)                             LOCLADDR( )
   LONGRTY(999999999)                      LONGTMR(1200)
   MAXMSGL(4194304)                        MCANAME( )
   MCATYPE(PROCESS)                        MCAUSER( )
   MODENAME( )                             MONCHL(QMGR)
   MSGDATA( )                              MSGEXIT( )
   NPMSPEED(FAST)                          PASSWORD( )
   PROPCTL(COMPAT)                         RCVDATA( )
   RCVEXIT( )                              RESETSEQ(NO)
   SCYDATA( )                              SCYEXIT( )
   SENDDATA( )                             SENDEXIT( )
   SEQWRAP(999999999)                      SHORTRTY(10)
   SHORTTMR(60)                            SSLCIPH( )
   SSLPEER( )                              STATCHL(QMGR)
   TPNAME( )                               TRPTYPE(TCP)
   USEDLQ(YES)                             USERID( )
   XMITQ(TRANS.Q.1)

認証や権限に関連するコマンドを実行します。複数行をまとめて入力可能です。

本番環境では、通信のセキュリティを確保するためTLS(SSL)による暗号化を必ず設定してください。

本手順はハンズオン目的のため、TLSを使用しない簡易設定となっています。

* --- 認証方式(今回は簡易設定のまま) ---
ALTER AUTHINFO(DEV.AUTHINFO) AUTHTYPE(IDPWOS) CHCKCLNT(NONE)
REFRESH SECURITY TYPE(CONNAUTH)

* --- アプリ用チャネル(DEV.APP.SVRCONN) ---
* アプリケーションはこのチャネルを利用し、MQ ユーザー app として動作する
ALTER CHANNEL('DEV.APP.SVRCONN') CHLTYPE(SVRCONN) MCAUSER('app')

* 任意の IP から DEV.APP.SVRCONN への接続を許可し、MCAUSER を使用
SET CHLAUTH('DEV.APP.SVRCONN') TYPE(ADDRESSMAP) ADDRESS('*') USERSRC(CHANNEL) ACTION(REPLACE)

* --- Instana 用チャネル(INSTANA.SVRCONN) ---
* Instana はこのチャネルのみを利用し、MQ ユーザー instana として動作する
DEFINE CHANNEL('INSTANA.SVRCONN') CHLTYPE(SVRCONN) TRPTYPE(TCP) MCAUSER('instana')

SET CHLAUTH('INSTANA.SVRCONN') TYPE(ADDRESSMAP) ADDRESS('*') USERSRC(CHANNEL) ACTION(REPLACE)
* --- QMGR への基本接続権限 ---
SET AUTHREC OBJTYPE(QMGR) PRINCIPAL('app') AUTHADD(CONNECT)

* --- アプリが利用するキューの権限 ---
SET AUTHREC PROFILE('REMOTE.Q.1') PRINCIPAL('app') OBJTYPE(QUEUE) +
  AUTHADD(PUT, INQ, DSP)

SET AUTHREC PROFILE('TRANS.Q.1') PRINCIPAL('app') OBJTYPE(QUEUE) +
  AUTHADD(PUT, GET, INQ, DSP)

SET AUTHREC PROFILE('DEV.QUEUE.1') PRINCIPAL('app') OBJTYPE(QUEUE) +
  AUTHADD(PUT, GET, BROWSE, INQ, DSP)

* --- QMGR への基本接続権限 ---
SET AUTHREC PRINCIPAL('instana') OBJTYPE(QMGR) +
  AUTHADD(CONNECT, INQ, DSP)

* --- PCF コマンド実行用(SYSTEM.ADMIN.COMMAND.QUEUE) ---
SET AUTHREC PROFILE('SYSTEM.ADMIN.COMMAND.QUEUE') PRINCIPAL('instana') +
  OBJTYPE(QUEUE) AUTHADD(PUT, INQ, DSP, CHG)

* --- 応答メッセージ用の動的キュー(SYSTEM.DEFAULT.MODEL.QUEUE) ---
SET AUTHREC PROFILE('SYSTEM.DEFAULT.MODEL.QUEUE') PRINCIPAL('instana') +
  OBJTYPE(QUEUE) AUTHADD(GET, DSP)

* --- 統計キュー(SYSTEM.ADMIN.STATISTICS.QUEUE) ---
SET AUTHREC PROFILE('SYSTEM.ADMIN.STATISTICS.QUEUE') PRINCIPAL('instana') +
  OBJTYPE(QUEUE) AUTHADD(GET, INQ, DSP, CHG)

* --- イベントキュー ---
SET AUTHREC PROFILE('SYSTEM.ADMIN.QMGR.EVENT') PRINCIPAL('instana') +
  OBJTYPE(QUEUE) AUTHADD(GET, INQ, DSP, CHG)
SET AUTHREC PROFILE('SYSTEM.ADMIN.PERFM.EVENT') PRINCIPAL('instana') +
  OBJTYPE(QUEUE) AUTHADD(GET, INQ, DSP, CHG)
SET AUTHREC PROFILE('SYSTEM.ADMIN.CHANNEL.EVENT') PRINCIPAL('instana') +
  OBJTYPE(QUEUE) AUTHADD(GET, INQ, DSP, CHG)

* --- 各種オブジェクトへの参照系権限(読み取り専用) ---
SET AUTHREC PROFILE('**') PRINCIPAL('instana') OBJTYPE(QUEUE)    AUTHADD(DSP, INQ)
SET AUTHREC PROFILE('**') PRINCIPAL('instana') OBJTYPE(CHANNEL)  AUTHADD(DSP)
SET AUTHREC PROFILE('**') PRINCIPAL('instana') OBJTYPE(LISTENER) AUTHADD(DSP)
SET AUTHREC PROFILE('**') PRINCIPAL('instana') OBJTYPE(TOPIC)    AUTHADD(DSP)

* SYSTEM.* キュー全体に DSP/CHG/GET を許可
SET AUTHREC PROFILE('SYSTEM.**') PRINCIPAL('instana') OBJTYPE(QUEUE) +
  AUTHADD(DSP, INQ, GET, CHG)

* (今回は TRANS.Q.1 に CHG を追加)
SET AUTHREC PROFILE('TRANS.Q.1') PRINCIPAL('instana') OBJTYPE(QUEUE) +
  AUTHADD(DSP, CHG, GET, INQ)

* CLNTCONN オブジェクトの表示を許可(SYSTEM.DEF.CLNTCONN など)
SET AUTHREC PROFILE('**') PRINCIPAL('instana') OBJTYPE(CLNTCONN) +
  AUTHADD(DSP)

* ユーザー定義キュー(DEV.*)にも統計リセット等ができるようにする
SET AUTHREC PROFILE('DEV.**') PRINCIPAL('instana') OBJTYPE(QUEUE) +
  AUTHADD(DSP, INQ, GET, CHG)

* システム系キュー全体(SYSTEM.**)にも統計リセット等を許可
SET AUTHREC PROFILE('SYSTEM.**') PRINCIPAL('instana') OBJTYPE(QUEUE) +
  AUTHADD(DSP, INQ, GET, CHG)

* CLNTCONN オブジェクトの表示(SYSTEM.DEF.CLNTCONN など)
SET AUTHREC PROFILE('**') PRINCIPAL('instana') OBJTYPE(CLNTCONN) +
  AUTHADD(DSP)

* --- 統計・監視の有効化(QMGRレベル) ---
ALTER QMGR STATQ(ON)
ALTER QMGR STATMQI(ON)
ALTER QMGR MONQ(MEDIUM)
ALTER QMGR MONCHL(MEDIUM)

ALTER QMGR STATINT(60)

REFRESH SECURITY TYPE(AUTHSERV)

対話モードを終了します。endと入力してEnterを押してください。

この際、No commands have a syntax error.と表示されることを確認してください。

QM1のコンテナから抜けます。

exit

QM2の各種設定

次に、QM2側で設定を行なっていきます。

QM2のコンテナに入ります。

podman exec -it QM2 bash

QM2の対話モードに入ります。

runmqsc

以下のコマンドを実行して、QM1toQM2の受信側の設定を行います。

define channel(QM1toQM2) chltype(RCVR)

次に、以下のコマンドを実行します。

SET CHLAUTH(QM1toQM2) TYPE(ADDRESSMAP) ADDRESS(*) USERSRC(CHANNEL) ACTION(REPLACE)

このコマンドは、チャネル認証レコードの設定を行なっています。

IPアドレスに基づく認証マッピング(ADDRESSMAP)で、ADDRESS(*) によりすべての IPアドレスからの接続を許可しています。

今回はデモのため全てのアドレスを許可していますが、実際の業務では厳密にセキュリティを設定する必要があります。

以下のコマンドを実行し、設定した項目が反映されていることを確認してください。

display channel(QM1toQM2)

CHLTYPE(RCVR) が表示されることを確認します。

AMQ8414I: Display Channel details.
   CHANNEL(QM1TOQM2)                       CHLTYPE(RCVR)
   ALTDATE(2025-07-09)                     ALTTIME(04.36.20)
   BATCHSZ(50)                             CERTLABL( )
   COMPHDR(NONE)                           COMPMSG(NONE)
   DESCR( )                                HBINT(300)
   KAINT(AUTO)                             MAXMSGL(4194304)
   MCAUSER( )                              MONCHL(QMGR)
   MRDATA( )                               MREXIT( )
   MRRTY(10)                               MRTMR(1000)
   MSGDATA( )                              MSGEXIT( )
   NPMSPEED(FAST)                          PUTAUT(DEF)
   RCVDATA( )                              RCVEXIT( )
   RESETSEQ(NO)                            SCYDATA( )
   SCYEXIT( )                              SENDDATA( )
   SENDEXIT( )                             SEQWRAP(999999999)
   SSLCAUTH(REQUIRED)                      SSLCIPH( )
   SSLPEER( )                              STATCHL(QMGR)
   TRPTYPE(TCP)                            USEDLQ(YES)

認証や権限に関連するコマンドを実行します。複数行を一気に入力可能です。

(こちらもQM1と同様に、本番環境ではTLS設定を行うことを推奨します。)

* --- 認証方式(今回は簡易設定のまま) ---
ALTER AUTHINFO(DEV.AUTHINFO) AUTHTYPE(IDPWOS) CHCKCLNT(NONE)
REFRESH SECURITY TYPE(CONNAUTH)

* --- アプリ用チャネル(DEV.APP.SVRCONN) ---
* アプリケーションはこのチャネルを利用し、MQ ユーザー app として動作する
ALTER CHANNEL('DEV.APP.SVRCONN') CHLTYPE(SVRCONN) MCAUSER('app')

* 任意の IP から DEV.APP.SVRCONN への接続を許可し、MCAUSER を使用
SET CHLAUTH('DEV.APP.SVRCONN') TYPE(ADDRESSMAP) ADDRESS('*') USERSRC(CHANNEL) ACTION(REPLACE)

* --- Instana 用チャネル(INSTANA.SVRCONN) ---
* Instana はこのチャネルのみを利用し、MQ ユーザー instana として動作する
DEFINE CHANNEL('INSTANA.SVRCONN') CHLTYPE(SVRCONN) TRPTYPE(TCP) MCAUSER('instana')

SET CHLAUTH('INSTANA.SVRCONN') TYPE(ADDRESSMAP) ADDRESS('*') USERSRC(CHANNEL) ACTION(REPLACE)
* --- QMGR への基本接続権限 ---
SET AUTHREC OBJTYPE(QMGR) PRINCIPAL('app') AUTHADD(CONNECT)


* --- QMGR への基本接続権限 ---
SET AUTHREC PRINCIPAL('instana') OBJTYPE(QMGR) +
  AUTHADD(CONNECT, INQ, DSP)

* --- PCF コマンド実行用(SYSTEM.ADMIN.COMMAND.QUEUE) ---
SET AUTHREC PROFILE('SYSTEM.ADMIN.COMMAND.QUEUE') PRINCIPAL('instana') +
  OBJTYPE(QUEUE) AUTHADD(PUT, INQ, DSP, CHG)

* --- 応答メッセージ用の動的キュー(SYSTEM.DEFAULT.MODEL.QUEUE) ---
SET AUTHREC PROFILE('SYSTEM.DEFAULT.MODEL.QUEUE') PRINCIPAL('instana') +
  OBJTYPE(QUEUE) AUTHADD(GET, DSP)

* --- 統計キュー(SYSTEM.ADMIN.STATISTICS.QUEUE) ---
SET AUTHREC PROFILE('SYSTEM.ADMIN.STATISTICS.QUEUE') PRINCIPAL('instana') +
  OBJTYPE(QUEUE) AUTHADD(GET, INQ, DSP, CHG)

* --- イベントキュー ---
SET AUTHREC PROFILE('SYSTEM.ADMIN.QMGR.EVENT') PRINCIPAL('instana') +
  OBJTYPE(QUEUE) AUTHADD(GET, INQ, DSP, CHG)
SET AUTHREC PROFILE('SYSTEM.ADMIN.PERFM.EVENT') PRINCIPAL('instana') +
  OBJTYPE(QUEUE) AUTHADD(GET, INQ, DSP, CHG)
SET AUTHREC PROFILE('SYSTEM.ADMIN.CHANNEL.EVENT') PRINCIPAL('instana') +
  OBJTYPE(QUEUE) AUTHADD(GET, INQ, DSP, CHG)

* --- 各種オブジェクトへの参照系権限(読み取り専用) ---
SET AUTHREC PROFILE('**') PRINCIPAL('instana') OBJTYPE(QUEUE)    AUTHADD(DSP, INQ)
SET AUTHREC PROFILE('**') PRINCIPAL('instana') OBJTYPE(CHANNEL)  AUTHADD(DSP)
SET AUTHREC PROFILE('**') PRINCIPAL('instana') OBJTYPE(LISTENER) AUTHADD(DSP)
SET AUTHREC PROFILE('**') PRINCIPAL('instana') OBJTYPE(TOPIC)    AUTHADD(DSP)

* SYSTEM.* キュー全体に DSP/CHG/GET を許可
SET AUTHREC PROFILE('SYSTEM.**') PRINCIPAL('instana') OBJTYPE(QUEUE) +
  AUTHADD(DSP, INQ, GET, CHG)

* CLNTCONN オブジェクトの表示を許可(SYSTEM.DEF.CLNTCONN など)
SET AUTHREC PROFILE('**') PRINCIPAL('instana') OBJTYPE(CLNTCONN) +
  AUTHADD(DSP)

* ユーザー定義キュー(DEV.*)にも統計リセット等ができるようにする
SET AUTHREC PROFILE('DEV.**') PRINCIPAL('instana') OBJTYPE(QUEUE) +
  AUTHADD(DSP, INQ, GET, CHG)

* システム系キュー全体(SYSTEM.**)にも統計リセット等を許可
SET AUTHREC PROFILE('SYSTEM.**') PRINCIPAL('instana') OBJTYPE(QUEUE) +
  AUTHADD(DSP, INQ, GET, CHG)

* CLNTCONN オブジェクトの表示(SYSTEM.DEF.CLNTCONN など)
SET AUTHREC PROFILE('**') PRINCIPAL('instana') OBJTYPE(CLNTCONN) +
  AUTHADD(DSP)

* --- 統計・監視の有効化(QMGRレベル) ---
ALTER QMGR STATQ(ON)
ALTER QMGR STATMQI(ON)
ALTER QMGR MONQ(MEDIUM)
ALTER QMGR MONCHL(MEDIUM)

ALTER QMGR STATINT(60)

REFRESH SECURITY TYPE(AUTHSERV)

No commands have a syntax error.と表示されることを確認します。

対話モードを終了します。endと入力してEnterを押してください。

QM2のコンテナから抜けます。

exit

QM1 でチャネルを開始

QM1のコンテナに入ります。再度、先ほどのPodに戻ります。

podman exec -it QM1 bash

QM1の対話モードに入ります。

runmqsc

チャネルQM1toQM2を起動します。

start channel(QM1toQM2)

チャネルの現在の状態を表示します。

display chstatus(QM1toQM2)

以下のように、STATUS(RUNNING)となっていることを確認してください。

AMQ8417I: Display Channel Status details.
   CHANNEL(QM1TOQM2)                       CHLTYPE(SDR)
   CONNAME(10.89.0.24(1414))               CURRENT
   RQMNAME(QM2)                            STATUS(RUNNING)
   SUBSTATE(MQGET)                         XMITQ(TRANS.Q.1)

対話モードを終了します。endと入力してEnterを押してください。

QM1のコンテナから抜けます。

exit

5. Libertyアプリケーションのデプロイと操作

ホームディレクトリに(移動していない場合は)移動します。

cd ~

作成済みのLibertyアプリケーションをcloneします。

git clone https://github.com/ktgrryt/mqapp-jms

取得したアプリケーションのディレクトリに移動します。

cd mqapp-jms

Mavenでパッケージングを実行します。

mvn package

BUILD SUCCESS が表示されたら成功です。

PodmanでLibertyアプリのイメージをビルドします。

podman build . --platform linux/x86_64 -t mqapp:1

作成したイメージを確認します。

podman images

例:

REPOSITORY                   TAG                            IMAGE ID      CREATED            SIZE
localhost/mqapp              1                              1a0dbf4b312b  About an hour ago  972 MB
icr.io/appcafe/open-liberty  kernel-slim-java17-openj9-ubi  b310bb17f7b2  7 days ago         756 MB
icr.io/ibm-messaging/mq      latest                         8d9977e72b3f  2 weeks ago        967 MB

Libertyアプリをコンテナで起動します。

podman run --name mqapp -d -p 9080:9080 -p 9445:9445 --network mq-network mqapp:1

ポートフォワーディングにより、以下のURLからVM上のLibertyアプリにアクセス可能です。

http://localhost:9080/mqapp/

Libertyアプリからキューマネージャーに対してメッセージが送受信できることを確認してみましょう。

送信先キューがローカルキューになっていることを確認して、適当なメッセージを入力して送信ボタンをクリックします。

問題なくメッセージが送信されることを確認します。
image.png

受信するキューがローカルキューになっていることを確認し、受信ボタンをクリックします。

先ほど送信したキューが問題なく受信できていることを確認します。
image.png

次に、送信先キューをリモートキューに変更して、適当なメッセージを送信します。

問題なくメッセージが送信されることを確認してください。

何度かメッセージを送受信して、MQの挙動を確認します。

ローカルキューにメッセージが0件の状態で受信しようとした場合は、エラーが表示されるようになっています。

6. Instanaの導入と設定

次に、RHELの環境にInstanaエージェントの導入を行います。

Instanaにアクセスし、左のメニューからエージェントとコレクターをクリックします。

image.png

エージェントのインストールをクリックします。
image.png

linuxで検索し、One-linerを選択します。

(macまたはwindowsで実施している場合は、読み替えてください。)

image.png

「インストールしてサービスとして開始(SystemD ベースのシステムでのみサポート)」にチェックを入れて、コマンドをコピーします。

image.png

コマンドを実行し、適宜yを押します。

Instanaエージェントの設定ファイル configuration.yaml にIBM MQプラグインの設定を追加します。

sudo vi /opt/instana/agent/etc/instana/configuration.yaml

以下の項目を追記してください。

com.instana.plugin.ibmmq:
  enabled: true
  poll_rate: 60
  queueManagers:
    QM1:
      host: "127.0.0.1"
      port: "1414"
      channel: "INSTANA.SVRCONN"
      username: "instana"
    QM2:
      host: "127.0.0.1"
      port: "1415"
      channel: "INSTANA.SVRCONN"
      username: "instana"
com.instana.tracing:
  ibm-mq:
    trace-correlation: true

設定を反映させるため、Libertyのpodを再起動します。

podman stop mqapp
podman start mqapp

7. InstanaによるMQとLibertyの監視

Libertyアプリ上で以下の操作を行います。

  • エラーが表示されるまで受信ボタンを押す
  • ローカルキューに適当なメッセージを5つ送信する
  • リモートキューにも適当なメッセージを1つ送信する

image.png

その後、Instanaにアクセスして、インフラストラクチャーの画面に移動します。

ホスト名を入力して、出てきた図形をクリックします。

この際、画面右上の時間設定が「過去1時間」など直近のものになっているか確認してください。
image.png

下にスクロールし、IBM MQキュー・マネージャーからQM1をクリックし、QM1のダッシュボードを開きます。

このページで、QM1から取得されるデータを確認してみましょう。
image.png

キュー数から現在の深さの列をクリックし、になるようにソートすると、DEV.QUEUE.1の現在の深さに先ほど送信したメッセージ数が反映されていることが確認できます。
image.png

DEV.QUEUE.1をクリックすると以下の画面に遷移し、滞留しているメッセージの経過時刻など、このキューから取得できる情報を確認できます。
image.png

次に、インフラストラクチャーの画面からWebSphere Libertyサーバー→WebSphere #defaultServerをクリックし、サービス→DefaultServerをクリックします。
image.png

この画面では、Libertyアプリのエラー率、エンドポイントごとの呼び出し時間などが確認できます。

先ほどLibertyアプリで発生させた受信エラーもここから確認できます。
image.png

GET/mqappはLibertyアプリへのgetリクエスト、POST/...はそれぞれLibertyアプリからQM1へのメッセージ送信に関するエンドポイントです。
image.png

呼び出しをクリックし、「分析で表示」を押します。
image.png

表示された画面でHttp statusが200のバーをクリックし、POST /mqapp/api/sendlocalをクリックします。

呼び出しの画面では、ローカルキューへのメッセージ送信におけるタイムラインが確認できます。
image.png

また、WebSphere #defaultServerのダッシュボード画面でフロータブをクリックすると、どのエンドポイントに対してメッセージが流れているか確認できます。
image.png

Instanaは、IBM MQから収集したメトリクスに基づいてアラートを発生させることができます。

例えば、キュー内の最古メッセージの経過時間が設定したしきい値を超えていないかを監視し、問題が検知された場合は通知を送ることが可能です。(参考)

8. 分散トレーシングの導入

今回のように、LibertyとMQを使用したアプリでは同期通信と非同期通信が混在しています。

Instanaでは分散トレーシングという仕組みによって、このつながりを1本のTraceに統合することが可能です。

InstanaエージェントとMQが同一ホスト上に存在する場合はこちらの手順で設定が可能ですが、今回の場合はPodmanコンテナ上でMQが動作しているため、いくつか追加の手順が必要となります。

IBM MQ Tracing user exitパッケージの導入

Instanaのライセンスを持っているユーザーで、IBMドキュメントからIBM MQ Tracing user exitパッケージをダウンロードします。

以下のリンクを参照し、アーティファクトリーのアドレスをコピーします。

https://www.ibm.com/docs/ja/instana-observability/1.0.309?topic=mq-tracing#downloading-ibm-mq-tracing-user-exit-for-on-premises-ibm-mq

コピーしたURLとInstanaのエージェントキーを使用して、RHELホスト上にファイルをダウンロードします。

cd ~
curl -u _:<InstanaAgentKey> -O <ArtifactoryURL>

tar.gzファイルがダウンロードされるので、ファイルを解凍します。

gunzip instana-ibmmq-tracing-userexit-*.tar.gz
tar -xvf instana-ibmmq-tracing-userexit-*.tar

展開されたディレクトリに移動し、.tar.gz から.tarに展開します。

cd ~/ibm-mq-tracing-exits-*
gunzip ibm-mq-tracing-exits_xLinux_64bit.tar.gz

展開された .tar が存在するかを確認します。

ls ibm-mq-tracing-exits_xLinux_64bit.tar

QM1/QM2コンテナへファイルをコピーします。

cd ~
podman cp ibm-mq-tracing-exits-*/ibm-mq-tracing-exits_xLinux_64bit.tar QM1:/var/mqm/exits64/
podman cp ibm-mq-tracing-exits-*/ibm-mq-tracing-exits_xLinux_64bit.tar QM2:/var/mqm/exits64/

QM1/QM2で.tarファイルを展開して、元のファイルを削除します。

podman exec QM1 sh -lc '
  cd /var/mqm/exits64 && \
  tar -xvf ibm-mq-tracing-exits_xLinux_64bit.tar && \
  rm ibm-mq-tracing-exits_xLinux_64bit.tar
'
```bash
podman exec QM2 sh -lc '
  cd /var/mqm/exits64 && \
  tar -xvf ibm-mq-tracing-exits_xLinux_64bit.tar && \
  rm ibm-mq-tracing-exits_xLinux_64bit.tar
'

mqtracingexit.conf の編集

コンテナ内にviが入っていないため、ホスト側にファイルを移動してから編集する必要があります。

cd ~
podman cp QM1:/var/mqm/exits64/mqtracingexit.conf ./mqtracingexit_QM1.conf
podman cp QM2:/var/mqm/exits64/mqtracingexit.conf ./mqtracingexit_QM2.conf

これにより、RHELホスト上のカレントディレクトリに以下のファイルがコピーされます。

  • mqtracingexit_QM1.conf
  • mqtracingexit_QM2.conf

QM1向け設定ファイルを編集します。

vi mqtracingexit_QM1.conf

コメントアウトを外して、以下のように設定を書き換えます。

INSTANA_AGENT_HOST="host.containers.internal"
HOST_ALIAS="127.0.0.1"

QM2も同様の設定を行います。

vi mqtracingexit_QM2.conf

コメントアウトを外して以下のように書き換えます。

INSTANA_AGENT_HOST="host.containers.internal" 
HOST_ALIAS="127.0.0.1"

設定したファイルをコンテナに戻します。

podman cp mqtracingexit_QM1.conf QM1:/var/mqm/exits64/mqtracingexit.conf
podman cp mqtracingexit_QM2.conf QM2:/var/mqm/exits64/mqtracingexit.conf

MQ API Exit の有効化(mqs.ini)

IBM MQにAPI Exitを登録・有効化します。
先ほどの手順と同様に、ファイルをホストにコピーして編集を行います。

podman cp QM1:/var/mqm/mqs.ini ./mqs.ini.original
cp mqs.ini.original mqs.ini
vi mqs.ini

iniファイルの最後に以下の内容を追加します。

ApiExitCommon:
  Sequence=100
  Function=EntryPoint
  Module=/var/mqm/exits64/mqtracingexit
  Name=TracingApiExit

編集した mqs.ini をコンテナ側に戻します。

podman cp mqs.ini QM1:/var/mqm/mqs.ini

QM2でも同様の手順を実行します。

podman cp QM2:/var/mqm/mqs.ini ./mqs.ini.qm2.original
cp mqs.ini.qm2.original mqs.ini.qm2
vi mqs.ini.qm2

iniファイルの最後に以下の内容を追加します。

ApiExitCommon:
  Sequence=100
  Function=EntryPoint
  Module=/var/mqm/exits64/mqtracingexit
  Name=TracingApiExit

編集した mqs.ini.qm2 をコンテナ側に戻します。

podman cp mqs.ini.qm2 QM2:/var/mqm/mqs.ini

設定を読ませるために、QM1 / QM2 を再起動します。

podman exec QM1 /opt/mqm/bin/endmqm QM1
podman exec QM1 /opt/mqm/bin/strmqm QM1
podman exec QM2 /opt/mqm/bin/endmqm QM2
podman exec QM2 /opt/mqm/bin/strmqm QM2

設定が完了すると、分散トレーシングによって一連の処理をまとめて確認することができます。

以下のグラフでは、Libertyアプリ上で「送信」ボタンが押されたことでDEV.QUEUE.1に送信されたメッセージが、「受信」ボタンによって表示されるまでの一連の処理にかかった時間が表示されています。

画面右側からは、メッセージに付与されているタグの情報が確認できます。
image.png

さらに詳しい情報をお探しの方へ

IBMの最新情報、イベント情報、さらに役立つ資料は、以下のIBM Communityでも発信・格納されています。

最新のトレンドや有益な情報をチェックするために、ぜひご覧ください!

  • WebSphere: IBM Community - WebSphere

    WebSphere関連の最新情報やディスカッション、イベント情報、技術資料を公開中!

  • ELM (Engineering Lifecycle Management): IBM Community - ELM

    ELMに関する最新のイベント情報、ナレッジ共有、便利なドキュメントをチェック!

  • Integration: IBM Community - Integration

    Integrationに関する最新のイベント情報、ナレッジ共有、便利なドキュメントをチェック!

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?