0
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?

DynatraceAdvent Calendar 2024

Day 6

[Dynatrace] Dynatrace の Extension を使ってみよう(IBM WebSphere Liberty編)

Posted at

12月4日に続き、Advent Calendarに参加してみる

最近、いろいろとIBM WebSphere Libertyのモニタリングについて調べることがあり、今回このテーマでブログを書くことにしました。DynatraceのOneAgentは、Javaのアプリであればコードを一切変更せずに、フルスタックの監視(サーバサイドの監視やWebアプリケーションの監視)を始めることができます。Javaのアプリケーションはありとあらゆるところで動いていると思いますが、大きな企業などではSIerさんが中心となってJavaアプリを作り、運用することが多いと思います。大手SIerさんの中で、IBMさんがその役割を担っている場合、Javaアプリケーションのプラットフォームとして、IBM WebSphere Libertyがよく使われていると思います(私見です)。今回はこのプラットフォーム上で動くサンプルのJavaアプリケーションのパフォーマンスメトリクスをJMX経由で取得する方法をまとめようと思います。

Extension、って何?

DynatraceはOneAgentと呼ばれるエージェント経由で、インフラからWebアプリケーションに至るまでの全ての情報を収集します。このシナリオの前提は、OneAgentがホストにインストールできることが条件になります。しかしながら、実際の監視の現場では、OneAgentがインストール出来ない環境もあると思います。そのようなケースでも、監視対象のデータが収集できるようにするための、Dynatraceのソリューションのことを「Extension」と呼びます。Extensionには2種類あり、

  • Dynatrace社が提供するもの
    • Dynatrace Hubから自由にダウンロードできます(ただし、データの収集には相応のライセンスが必要)
  • 自由に自分で作成できるもの
    • ユーザが自由にExtensionを作成することができ、それらは「Custom Extension」と呼ばれます(ただし、データの収集には相応のライセンスが必要)

今回は、前者のカテゴリーに属する「IBM WebSphere Liberty」のWebパフォーマンスメトリクスを取得するExtensionを紹介しようと思います。

IBM WebSphere Liberty Extensionで取得できるデータとWebSphere側の事前準備

このExtensionを使うと取得できるメトリクスは、全部で「14」個あります。

  • Servlet (2)
    • Request count
    • Response time
  • Request timing (3)
    • Active requests
    • Slow requests
    • Hung requests
  • Thread pool (2)
    • Active threads
    • Pool size
  • JVM (7)
    • JVM Heap size
    • JVM Heap available
    • JVM Heap used
    • JVM CPU usage
    • JVM Garbage collection
    • JVM Garbage collection time
    • JVM uptime
      image.png

これらのデータは、ホストにインストールされた OneAgnet のEEC(Extension Execustion Controller)を介して、JavaのJMXインターフェイス経由で取得されます。そのため、事前にEECの機能がOneAgentがインストールされたホスト上で有効になっているか確認しましょう。下記の場合、"docker" というホストのSettingsでEECを有効にしています。
image.png

先ほど説明した IBM WebSphere liberty のメトリクスに関する詳細情報は、IBM社のWebSphere libertyのヘルプガイドに細かく記載されていますので、合わせて確認しましょう(リンクを埋め込んでおきました)。

あと、これらのデータ収集は、JavaのJMXインターフェイスを介して行われるため、WebSphereのJavaアプリを立ち上げる際に server.xmlファイルの <feature> セクションで JMXとローカルで接続できる localConnector-1.0 Feature を有効にしておく必要があります。この内容についても、IBM社のWebSphereの "Connecting to Liberty by using JMX" ガイドを見るとよいと思います。

さらに、個別にWebSphere libertyの14個のメトリクスを取得するためには、追加で下記2つの Feature も <feature>に追加しておく必要があります。IBM社のマニュアルを読むと、monitor-1.0が定義されていれば14個全てのメトリクスが取れそうですが、テストしたところ明示的に requestTimging-1.0を追加しておかないと、Request timing のメトリクスは取れませんでした。。。以下、私のテスト環境の server.xml の抜粋です。

<server description="Sample Liberty server">

  <featureManager>
      <feature>microProfile-3.3</feature>
      <feature>localConnector-1.0</feature>  <<<< これ
      <feature>monitor-1.0</feature>  <<<< これ
      <feature>requestTiming-1.0</feature>  <<<< これ
  </featureManager>

IBM WebSphere liberty extension のインストール

では、ここからDynatrace側のExtensionインストールに関するパートになります。順番にみていきましょう。

  1. Extensionのインストール
    まずは、自身のテナント(もしくは、ManagedのEnvironment)の Infrastructure Observability > Extensions に飛び、右上の Add to environmentをボタンをクリックし、当該Extensionをインストールします。
    image.png
  2. Extensionの設定の投入
    Extensionのインストールが終わったら、設定を投入しましょう。Versionsと書かれたセクションの右側にあるAdd monitoring configurationをクリックします。
    image.png
    次のページに遷移すると、どのホストで動いているOneAgent経由で IBM WebSphere Libertyのメトリクスを取るか、候補が現れますので自分が取りたい対象のホストをクリックします。その際、一番右側に表示される Extension Execusion ControllerEnabled になっていることを確認して下さい。ここでは「podman」というホストを選択しています。で、「Next step」をクリックします。
    image.png
    そうすると設定した内容が、JSONファイルで表示されます。ここはその表示のみのページですので、そのまま「Next step」ボタンをクリックして、次のページに移動します。
    image.png
    このページでは、Extesionに名称を設定するだけです。分かりやすい名称を付けてください。ここでは「IBM WebSphere Liberty for Podman」と入力しています。画面青枠部分が取得対象のメトリクスになりますが、ここで全てのメトリクスグループに「チェック」が入っていることを確認しておきましょう(デフォルトで全てにチェックが入っています)。終わったら、Extensionの設定を有効化する「Activate」ボタンをクリックします。
    image.png
    そうすると、最初の設定画面に戻り、今投入した設定がOneAgent側に伝わりその間は「Status」が Pending と表示されています。その処理が終わり、データが取れるようになると OK に変わります。しばらくここで待ちましょう(画面は自動更新されないため、適宜ブラウザのリロードボタンをクリックして、画面を再ロードして下さい)。
    image.png
    しばらくして、ブラウザをリロードすると、このようにStatusが「OK」に変わります。こうなったら、データ取得OKという状態です。
    image.png
  3. トラブルシューティング
    もしステータスが「Pending」状態の場合は、OneAgentのJavaのcode modueleのログを確認してみて下さい。デフォルトでは、/var/log/dynatrace/oneagent/java 配下にあります。ファイル名はJavaアプリを起動する際の IBM WebSphere Liberty server nameやPIDに依存するため、これと全く同じという訳ではありませんので、ご注意ください。
ubuntu@podman:/var/log/dynatrace/oneagent/java$ ls -la
total 68
drwxrwxrwt  2 101000 ubuntu  4096 Dec  6 09:57 .
drwxrwxrwt 13 root   dtuser  4096 Dec  6 09:57 ..
-rw-------  1 101000 ubuntu 61410 Dec  6 12:58 ruxitagent_WebSphere_Liberty_defaultServer_1.0.log

このログに対して、検索を行い「Installing」という文字列が出ていれば、このExtensionが正しくインストールされている状態です。もし、「Uninstalling」という文字列も同時にあった場合は、上手くいっていない状態なのでサポートチケットを上げてください。2行目のログが今回のインストール作業で表示されたものです。

ubuntu@podman:/var/log/dynatrace/oneagent/java$ sudo less ruxitagent_WebSphere_Liberty_defaultServer_1.0.log | grep Installing
2024-12-06 01:03:47.563 UTC [00000021] info    [java  ] [metrics   ] Installing monitoring config of JMX extension 'com.dynatrace.extension.jmx-ws-liberty' (version 2.0.0)        
2024-12-06 03:58:45.439 UTC [00000021] info    [java  ] [metrics   ] Installing monitoring config of JMX extension 'com.dynatrace.extension.jmx-ws-liberty' (version 2.0.0) 

JMXメトリクスの確認

  1. WebSphere Libertyのメトリクス取得状況の確認
    実際にJMX経由でLibertyのメトリクスが取得できているか、Dynatraceの「Metrics」を開いて確認しましょう。Tag=JMXでフィルタ可能です。ここで14個のメトリクスが表示されれば完璧です。
    image.png
  2. ダッシュボードとプロセスグループインスタンスでの取得メトリクスを確認
    Extensionをインストールすると、デフォルトで関連するメトリクスを表示するダッシュボードも合わせてインストールされます(ここで言うダッシュボードは、Dashboard Classicです)いいですね、ダッシュボードも、OKです。
    image.png
  3. ホスト配下のプロセス画面での確認
    プロセス画面では、直接今回取得したLibertyのメトリクスは見えません。プロセス名の右側にある「...」をクリックして、「Metrics and logs analysys」に飛んでください。
    image.png
    ここをクリックすると、プロセスのUnified Viewに飛ぶことができ、ここで今回のExtensionを通じて取得したメトリクスがキレイに描画される実装になっています。
    image.png
    パチパチ、お疲れ様でした。

まとめ

いかがだったでしょうか?DynatraceのOneAgentはとてもパワフルで、Javaアプリであれば自動的にフルスタック監視が始められ、JVMの情報もすべて吸い上げてくれます。それだけでも十分すごいのですが、やはりプロダクト独自の内部メトリクス(今回の場合であれば、IBM WebSphere Liberty内のパフォーマンスメトリクス)も活用したうえで性能をきちんと把握したいというニーズもあります。このようなニーズにお応えすべく、Dynatraceでは誰もが簡単に使えるExtensionと呼ばれるシステムを持ち合わせていますので、是非活用してみてください!!

参考情報

今回の検証で使用したアプリ情報をまとめておきます。

  • OS
    • Ubuntu 24.04
ubuntu@podman:~/Scalable-web-app-liberty$ cat /etc/os-release 
PRETTY_NAME="Ubuntu 24.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.1 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo
ubuntu@podman:~/Scalable-web-app-liberty$
  • Javaアプリ
    • https://github.com/IBM-Cloud/Scalable-web-app-liberty
    • Dockerファイルを編集し、OpenLiberty.ioからイメージをダウンロードするのではなく、icr.ioから websphere-libertyイメージをダウンロードして、コンテナを build しました
ubuntu@podman:~/Scalable-web-app-liberty$ cat Dockerfile
# Package the application as a war file
FROM docker.io/maven:3.6.3-ibmjava-8-alpine AS builder
LABEL maintainer="IBM Java Engineering at IBM Cloud"
COPY pom.xml ./
COPY src src/
RUN mvn clean package

# Copy the war file over to the open liberty image
#FROM openliberty/open-liberty:kernel-java8-openj9-ubi
FROM icr.io/appcafe/websphere-liberty:kernel-java8-openj9-ubi  <<< ここ

COPY --from=builder --chown=1001:0 src/main/liberty/config/ /config/
COPY --from=builder --chown=1001:0 target/*.war /config/apps/

RUN configure.sh
ubuntu@podman:~/Scalable-web-app-liberty$
  • Container
    • Podman
    • runtime = crun
ubuntu@podman:~/Scalable-web-app-liberty$ podman version
Client:       Podman Engine
Version:      4.9.3
API Version:  4.9.3
Go Version:   go1.22.2
Built:        Thu Jan  1 09:00:00 1970
OS/Arch:      linux/amd64
ubuntu@podman:~/Scalable-web-app-liberty$

まだ、Dynatraceを触ったことがない方、このブログを見てやってみたいと思われた方は、下記フリートライアルにてお試し下さい。↓↓↓

Dynatraceフリートライアル → https://www.dynatrace.com/ja/trial/

0
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
0
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?