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?

Open Liberty 25 + MicroProfile Metrics 監視ガイド - Zabbix設定マニュアル(IBM Bobと作成)

Last updated at Posted at 2025-12-20

Open Liberty 25 + MicroProfile Metrics 監視ガイド - Zabbix設定マニュアル

前提条件

  • Zabbix Server 5.0以上
  • ホスト登録済み(Raspberry Pi)
  • Zabbix Agent動作中
  • Open Liberty 25.0.0.12でmpMetrics-5.0有効
  • Java 25以上(IBM Semeru Runtime 25 (OpenJ9) 推奨)

Javaランタイムについて:

  • Open Liberty 25は、IBM Semeru Runtime 25 (OpenJ9)での動作を推奨します
  • OpenJDK 25やその他のJava 25互換ランタイムでも動作しますが、IBM Semeru Runtimeが最適化されています
  • IBM Semeru Runtimeは無料で利用可能です(ダウンロード

なぜMicroProfile Metricsを使うのか

MicroProfile Metricsを選択する理由

Open Libertyの監視には複数の方法がありますが、MicroProfile Metricsを推奨する理由は以下の通りです:

1. 設定が簡単

  • ✅ server.xmlに1行追加するだけで有効化
  • ✅ 追加のソフトウェアインストール不要
  • ✅ アプリケーションコードの変更不要
  • ✅ Zabbix HTTP Agentで直接取得可能

他の方法との比較:

  • JMX監視: JMXポート開放、認証設定、Zabbix Java Gateway必須
  • APMツール: 有料ライセンス、エージェントインストール、設定が複雑
  • ログ監視: リアルタイム性に欠ける、ログ解析の負荷が高い

2. 業界標準の形式

  • ✅ Prometheus形式(業界標準)
  • ✅ 他のツール(Grafana、Prometheusなど)でも利用可能
  • ✅ MicroProfile仕様に準拠(ベンダーロックインなし)

メリット:

  • 将来的に監視ツールを変更しても、メトリクス形式は変わらない
  • 他のMicroProfile対応サーバー(Quarkus、Helidonなど)でも同じ方法で監視可能

3. 軽量で高パフォーマンス

  • ✅ HTTPエンドポイントで公開(オーバーヘッド最小)
  • ✅ メトリクス取得時のみリソース消費
  • ✅ アプリケーションパフォーマンスへの影響が少ない

他の方法との比較:

  • JMX: 常時接続が必要、メモリ消費が大きい
  • APMツール: エージェントが常駐、CPU/メモリ消費が大きい

4. 無料で利用可能

  • ✅ Open Libertyに標準搭載
  • ✅ 追加ライセンス不要
  • ✅ Zabbixも無料(オープンソース)

コスト比較:

  • MicroProfile Metrics + Zabbix: 完全無料
  • APMツール: 月額数万円~数十万円
  • 商用監視ツール: 初期費用 + 年間保守費用

5. 十分な監視項目

  • ✅ JVMメモリ(ヒープ、GC)
  • ✅ CPU使用率
  • ✅ スレッド数
  • ✅ アプリケーションメトリクス(リクエスト数、セッション数)

実用性:

  • 多くのアプリケーションで必要な監視項目をカバー
  • 問題の早期発見と対応が可能
  • パフォーマンスチューニングに必要な情報を提供

他の方法ではダメな理由

JMX監視の課題

  • 設定が複雑: JMXポート開放、SSL設定、認証設定が必要
  • セキュリティリスク: JMXポートの公開はセキュリティ上のリスク
  • 追加コンポーネント: Zabbix Java Gatewayが必須
  • ネットワーク負荷: 常時接続が必要

ログ監視の課題

  • リアルタイム性の欠如: ログ出力後に解析するため遅延が発生
  • ログ量の問題: 大量のログは解析負荷が高い
  • 数値メトリクスの取得困難: メモリ使用量などの数値を取得しにくい
  • トレンド分析が困難: 時系列データの蓄積と分析が難しい

APMツールの課題

  • コストが高い: 商用ツールは高額なライセンス費用
  • オーバーヘッド: エージェントが常駐し、リソースを消費
  • ベンダーロックイン: 特定ツールに依存
  • 学習コスト: ツール固有の操作方法を習得する必要

各監視項目を使う大きなメリット

1. ヒープメモリ監視

メリット:

  • 💡 OutOfMemoryError の予防: メモリ不足による障害を事前に検知
  • 💡 メモリリークの早期発見: 徐々にメモリが増加する問題を発見
  • 💡 適切なヒープサイズの決定: 実際の使用量からチューニング可能

実例:

  • ヒープ使用率が90%を超えたらアラート → GC頻発やOOMを回避
  • 長期トレンドでメモリリークを発見 → アプリケーション修正

2. GC(ガベージコレクション)監視

メリット:

  • 💡 パフォーマンス劣化の検知: GC頻発によるレスポンス遅延を発見
  • 💡 GCチューニングの判断材料: GCアルゴリズムやパラメータの最適化
  • 💡 メモリ設定の妥当性確認: ヒープサイズが適切かを判断

実例:

  • GC実行回数が急増 → メモリ不足の兆候、ヒープサイズ増加を検討
  • GC時間が長い → アプリケーションの一時停止、GCアルゴリズム変更を検討

3. CPU使用率監視

メリット:

  • 💡 高負荷の検知: CPU使用率が高い状態を早期発見
  • 💡 スケーリングの判断: サーバー追加やスケールアップの判断材料
  • 💡 無限ループやデッドロックの検知: 異常なCPU使用を発見

実例:

  • CPU使用率が80%以上 → サーバー追加やコード最適化を検討
  • CPU使用率が常に100% → 無限ループやデッドロックの可能性

4. スレッド数監視

メリット:

  • 💡 スレッドリークの検知: スレッドが増え続ける問題を発見
  • 💡 デッドロックの早期発見: スレッド数の異常増加を検知
  • 💡 スレッドプール設定の最適化: 適切なスレッド数を決定

実例:

  • スレッド数が200以上 → スレッドリークやデッドロックの可能性
  • スレッド数が急増 → 高負荷状態、スケーリングを検討

5. リクエスト数/セッション数監視

メリット:

  • 💡 トラフィックパターンの把握: ピーク時間帯の特定
  • 💡 キャパシティプランニング: サーバー増強の判断材料
  • 💡 異常トラフィックの検知: DDoS攻撃や不正アクセスの発見

実例:

  • リクエスト数が急増 → マーケティングキャンペーンの効果、サーバー増強を検討
  • セッション数が異常に多い → セッションリークやセッション管理の問題

まとめ

MicroProfile Metrics + Zabbixの組み合わせは:

  • ✅ 設定が簡単(数分で完了)
  • ✅ 無料で利用可能
  • ✅ 業界標準の形式
  • ✅ 軽量で高パフォーマンス
  • ✅ 実用的な監視項目をカバー

このドキュメントで実現できること:

  • アプリケーションの健全性を常時監視
  • 問題の早期発見と対応
  • パフォーマンスチューニングの判断材料
  • 障害の予防と迅速な復旧

方法1: 外部スクリプトを使用

ステップ1: Zabbix Web UIにログイン

  1. ブラウザでZabbix Web UIにアクセス
  2. 管理者アカウントでログイン

ステップ2: ホストの設定画面を開く

  1. ConfigurationHosts をクリック
  2. 登録したRaspberry Piのホスト名をクリック
  3. Items タブをクリック
  4. 右上の Create item ボタンをクリック

ステップ3: 監視アイテムの作成

アイテム1: JVMヒープメモリ使用量

Name: Open Liberty - Heap Memory Used
Type: External check
Key: openliberty.metrics[localhost,8080,memory_usedHeap_bytes]
Type of information: Numeric (float)
Units: B
Update interval: 1m
History storage period: 90d
Trend storage period: 365d
Description: JVM heap memory currently in use

設定手順:

  1. Name: Open Liberty - Heap Memory Used と入力
  2. Type: ドロップダウンから External check を選択
  3. Key: openliberty.metrics[localhost,8080,memory_usedHeap_bytes] と入力
  4. Type of information: Numeric (float) を選択
  5. Units: B と入力(バイト)
  6. Update interval: 1m と入力
  7. Add ボタンをクリック

アイテム2: スレッド数

Name: Open Liberty - Thread Count
Type: External check
Key: openliberty.metrics[localhost,8080,thread_count]
Type of information: Numeric (unsigned)
Update interval: 1m
Description: Current number of live threads

アイテム3: CPU負荷

Name: Open Liberty - CPU Load Average
Type: External check
Key: openliberty.metrics[localhost,8080,cpu_systemLoadAverage]
Type of information: Numeric (float)
Update interval: 1m
Description: System load average for the last minute

アイテム4: GC実行回数(Copy)

Name: Open Liberty - GC Total (Copy)
Type: External check
Key: openliberty.metrics[localhost,8080,gc_total]
Type of information: Numeric (unsigned)
Update interval: 1m
Applications: Java
Description: Total number of garbage collections

注意: gc_totalは複数の値を返すため、最初の値のみ取得されます。

アイテム5: JVM稼働時間

Name: Open Liberty - JVM Uptime
Type: External check
Key: openliberty.metrics[localhost,8080,jvm_uptime_seconds]
Type of information: Numeric (float)
Units: s
Update interval: 5m
Description: Time since JVM started

アイテム6: ヒープメモリ使用率

Name: Open Liberty - Heap Utilization
Type: External check
Key: openliberty.metrics[localhost,8080,memory_heapUtilization_percent]
Type of information: Numeric (float)
Units: %
Update interval: 1m
Description: Percentage of maximum heap memory in use

アイテム7: アクティブスレッド数

Name: Open Liberty - Active Threads
Type: External check
Key: openliberty.metrics[localhost,8080,threadpool_activeThreads]
Type of information: Numeric (unsigned)
Update interval: 1m
Description: Number of threads running tasks

アイテム8: サーブレットリクエスト総数(累積値)

Name: Open Liberty - Servlet Requests Total
Type: External check
Key: openliberty.metrics[localhost,8080,servlet_request_total]
Type of information: Numeric (unsigned)
Update interval: 1m
Applications: Web
Description: Total number of servlet requests (cumulative counter)

注意: このメトリクスは累積カウンターです。リクエスト/秒を監視するには、以下の計算アイテムを追加してください。

アイテム8-2: サーブレットリクエスト/秒(Dependent item + Preprocessing)

Name: Open Liberty - Servlet Requests per Second
Type: Dependent item
Key: openliberty.servlet_requests_rate
Master item: Open Liberty - Servlet Requests Total
Type of information: Numeric (float)
Units: rps
Preprocessing steps:
  1. Change per second

設定手順:

  1. Name: Open Liberty - Servlet Requests per Second と入力
  2. Type: Dependent item を選択
  3. Key: openliberty.servlet_requests_rate と入力
  4. Master item: Open Liberty - Servlet Requests Total を選択
  5. Type of information: Numeric (float) を選択
  6. Units: rps と入力(requests per second)
  7. Preprocessing タブをクリック
  8. Add をクリックして以下を追加:
    • Type: Change per second を選択
  9. Add ボタンをクリック

この方法の利点:

  • Zabbix 5.0以降で動作
  • 追加のHTTPリクエスト不要(Master itemのデータを再利用)
  • リアルタイムのトラフィック量を把握できる
  • 負荷の増減を視覚的に確認できる
  • アラート設定に適している(例: 100 rps以上で警告)

rps(requests per second)の値の意味:

  • 0.1 rps: 10秒に1リクエスト(低トラフィック)
  • 1 rps: 1秒に1リクエスト(通常のテスト環境)
  • 10 rps: 1秒に10リクエスト(軽い負荷)
  • 100 rps: 1秒に100リクエスト(中程度の負荷)
  • 1000+ rps: 1秒に1000リクエスト以上(高負荷)

注意:

  • 開発環境やテスト環境では、rpsが1未満(例: 0.1や0.5)になることは正常です
  • これは「数秒に1回程度のリクエスト」を意味し、手動テストや低頻度のAPIコールでは一般的な値です
  • 本番環境では、アプリケーションの規模に応じて適切な閾値を設定してください

アイテム9: アクティブセッション数

Name: Open Liberty - Active Sessions
Type: External check
Key: openliberty.metrics[localhost,8080,session_activeSessions]
Type of information: Numeric (unsigned)
Update interval: 1m
Applications: Web
Description: Number of concurrently active sessions

アイテム10: プロセスCPU使用率

Name: Open Liberty - Process CPU Usage
Type: External check
Key: openliberty.metrics[localhost,8080,cpu_processCpuLoad_percent]
Type of information: Numeric (float)
Units: %
Update interval: 1m
Description: Recent CPU usage for the JVM process

#### アイテム11: デーモンスレッド数

Name: Open Liberty - Thread Daemon Count
Type: External check
Key: openliberty.metrics[localhost,8080,thread_daemon_count]
Type of information: Numeric (unsigned)
Update interval: 5m
Applications: Java
Description: Number of daemon threads


#### アイテム12: 最大スレッド数

Name: Open Liberty - Max Thread Count
Type: External check
Key: openliberty.metrics[localhost,8080,thread_max_count]
Type of information: Numeric (unsigned)
Update interval: 10m
Applications: Java
Description: Peak number of live threads since JVM start


#### アイテム13: スレッドプールサイズ

Name: Open Liberty - Thread Pool Size
Type: External check
Key: openliberty.metrics[localhost,8080,threadpool_size]
Type of information: Numeric (unsigned)
Update interval: 5m
Applications: Java
Description: Current size of the thread pool


#### アイテム14: GC実行時間

Name: Open Liberty - GC Time
Type: External check
Key: openliberty.metrics[localhost,8080,gc_time_seconds]
Type of information: Numeric (float)
Units: s
Update interval: 1m
Applications: Java
Description: Total time spent in garbage collection


#### アイテム15: 最大ヒープメモリ

Name: Open Liberty - Max Heap
Type: External check
Key: openliberty.metrics[localhost,8080,memory_maxHeap_bytes]
Type of information: Numeric (float)
Units: B
Update interval: 10m
Applications: Java
Description: Maximum heap memory that can be used


#### アイテム16: コミット済みヒープメモリ

Name: Open Liberty - Committed Heap
Type: External check
Key: openliberty.metrics[localhost,8080,memory_committedHeap_bytes]
Type of information: Numeric (float)
Units: B
Update interval: 5m
Applications: Java
Description: Amount of heap memory committed for JVM to use


#### アイテム17: ロード済みクラス数

Name: Open Liberty - Loaded Classes
Type: External check
Key: openliberty.metrics[localhost,8080,classloader_loadedClasses_count]
Type of information: Numeric (unsigned)
Update interval: 10m
Applications: Java
Description: Number of classes currently loaded in the JVM


#### アイテム18: 利用可能CPU数

Name: Open Liberty - Available Processors
Type: External check
Key: openliberty.metrics[localhost,8080,cpu_availableProcessors]
Type of information: Numeric (unsigned)
Update interval: 1h
Applications: Java
Description: Number of processors available to the JVM


#### アイテム19: セッション作成総数

Name: Open Liberty - Session Create Total
Type: External check
Key: openliberty.metrics[localhost,8080,session_create_total]
Type of information: Numeric (unsigned)
Update interval: 5m
Applications: Web
Description: Total number of sessions created


#### アイテム20: ライブセッション数

Name: Open Liberty - Live Sessions
Type: External check
Key: openliberty.metrics[localhost,8080,session_liveSessions]
Type of information: Numeric (unsigned)
Update interval: 1m
Applications: Web
Description: Number of currently live sessions


## 方法2: HTTP Agentを使用(Zabbix 5.0以降)【推奨】

Zabbix 5.0以降では、HTTP Agentを使ってPrometheusメトリクスを直接取得できます。
外部スクリプト不要で、Web UIだけで設定が完結するため、**最も推奨される方法**です。

### HTTP Agentの利点

- ✅ **外部スクリプト不要**: Zabbix Serverから直接HTTPリクエスト
- ✅ **設定が簡単**: Web UIで全て完結
- ✅ **保守性が高い**: 設定変更が容易
- ✅ **セキュリティ**: 認証やHTTPSにも対応
- ✅ **柔軟性**: 正規表現で自由にデータ抽出

### 事前準備

1. **Configuration** → **Hosts** → 対象ホストをクリック
2. **Items** タブをクリック
3. **Create item** ボタンをクリック

### HTTP Agentアイテムの作成例(全10項目)

#### ヒープメモリ使用量(HTTP Agent版)

Name: Open Liberty - Heap Memory Used (HTTP)
Type: HTTP agent
Key: openliberty.http.memory_usedHeap_bytes
URL: http://192.168.200.102:8080/metrics
Request type: GET
Retrieve mode: Body
Request body type: Raw data
Required status codes: 200
Follow redirects: Yes
Retrieve mode: Body
Type of information: Numeric (float)
Units: B
Update interval: 1m
Preprocessing steps:

  1. Regular expression: memory_usedHeap_bytes{[^}]*} (\S+)
    Output: \1
  2. Custom multiplier: 1

**設定手順:**
1. **Name**: `Open Liberty - Heap Memory Used (HTTP)` と入力
2. **Type**: `HTTP agent` を選択
3. **Key**: `openliberty.http.memory_usedHeap_bytes` と入力
4. **URL**: `http://192.168.200.102:8080/metrics` と入力
5. **Request type**: `GET` を選択
6. **Retrieve mode**: `Body` を選択
7. **Required status codes**: `200` と入力
8. **Type of information**: `Numeric (float)` を選択
9. **Units**: `B` と入力
10. **Preprocessing** タブをクリック
11. **Add** をクリックして以下を追加:
    - **Type**: `Regular expression`
    - **Parameters**: 
      - Pattern: `memory_usedHeap_bytes\{[^}]*\} (\S+)`
      - Output: `\1`
12. **Add** ボタンをクリック
#### スレッド数(HTTP Agent版)

Name: Open Liberty - Thread Count (HTTP)
Type: HTTP agent
Key: openliberty.http.thread_count
URL: http://192.168.200.102:8080/metrics
Request type: GET
Retrieve mode: Body
Required status codes: 200
Type of information: Numeric (unsigned)
Update interval: 1m
Preprocessing steps:

  1. Regular expression: thread_count{[^}]*} (\S+)
    Output: \1

**設定手順:**
1. **Name**: `Open Liberty - Thread Count (HTTP)` と入力
2. **Type**: `HTTP agent` を選択
3. **Key**: `openliberty.http.thread_count` と入力
4. **URL**: `http://192.168.200.102:8080/metrics` と入力
5. **Type of information**: `Numeric (unsigned)` を選択
6. **Preprocessing** タブで正規表現を追加:
   - Pattern: `thread_count\{[^}]*\} (\S+)`
   - Output: `\1`

#### CPU負荷(HTTP Agent版)

Name: Open Liberty - CPU Load Average (HTTP)
Type: HTTP agent
Key: openliberty.http.cpu_systemLoadAverage
URL: http://192.168.200.102:8080/metrics
Request type: GET
Retrieve mode: Body
Required status codes: 200
Type of information: Numeric (float)
Update interval: 1m
Preprocessing steps:

  1. Regular expression: cpu_systemLoadAverage{[^}]*} (\S+)
    Output: \1

**設定手順:**
1. **Name**: `Open Liberty - CPU Load Average (HTTP)` と入力
2. **Type**: `HTTP agent` を選択
3. **Key**: `openliberty.http.cpu_systemLoadAverage` と入力
4. **URL**: `http://192.168.200.102:8080/metrics` と入力(ホストのIPアドレスに変更)
5. **Request type**: `GET` を選択
6. **Retrieve mode**: `Body` を選択
7. **Required status codes**: `200` と入力
8. **Type of information**: `Numeric (float)` を選択
9. **Update interval**: `1m` と入力
10. **Preprocessing** タブをクリック
11. **Add** をクリックして以下を追加:
    - **Type**: `Regular expression`
    - **Parameters**:
      - Pattern: `cpu_systemLoadAverage\{[^}]*\} (\S+)`
      - Output: `\1`
12. **Add** ボタンをクリック

#### ヒープメモリ使用率(HTTP Agent版)

Name: Open Liberty - Heap Utilization (HTTP)
Type: HTTP agent
Key: openliberty.http.memory_heapUtilization_percent
URL: http://192.168.200.102:8080/metrics
Request type: GET
Retrieve mode: Body
Required status codes: 200
Type of information: Numeric (float)
Units: %
Update interval: 1m
Preprocessing steps:

  1. Regular expression: memory_heapUtilization_percent{[^}]*} (\S+)
    Output: \1

**設定手順:**
1. **Name**: `Open Liberty - Heap Utilization (HTTP)` と入力
2. **Type**: `HTTP agent` を選択
3. **Key**: `openliberty.http.memory_heapUtilization_percent` と入力
4. **URL**: `http://192.168.200.102:8080/metrics` と入力
5. **Type of information**: `Numeric (float)` を選択
6. **Units**: `%` と入力
7. **Preprocessing** タブで正規表現を追加:
   - Pattern: `memory_heapUtilization_percent\{[^}]*\} (\S+)`
   - Output: `\1`

#### アクティブスレッド数(HTTP Agent版)

Name: Open Liberty - Active Threads (HTTP)
Type: HTTP agent
Key: openliberty.http.threadpool_activeThreads
URL: http://192.168.200.102:8080/metrics
Request type: GET
Retrieve mode: Body
Required status codes: 200
Type of information: Numeric (unsigned)
Update interval: 1m
Preprocessing steps:

  1. Regular expression: threadpool_activeThreads{[^}]*} (\S+)
    Output: \1

**設定手順:**
1. **Name**: `Open Liberty - Active Threads (HTTP)` と入力
2. **Type**: `HTTP agent` を選択
3. **Key**: `openliberty.http.threadpool_activeThreads` と入力
4. **URL**: `http://192.168.200.102:8080/metrics` と入力(ホストのIPアドレスに変更)
5. **Request type**: `GET` を選択
6. **Retrieve mode**: `Body` を選択
7. **Required status codes**: `200` と入力
8. **Type of information**: `Numeric (unsigned)` を選択
9. **Update interval**: `1m` と入力
10. **Preprocessing** タブをクリック
11. **Add** をクリックして以下を追加:
    - **Type**: `Regular expression`
    - **Parameters**:
      - Pattern: `threadpool_activeThreads\{[^}]*\} (\S+)`
      - Output: `\1`
12. **Add** ボタンをクリック

#### GC実行回数(HTTP Agent版)

**実際のメトリクス形式:**

gc_total{mp_scope="base",name="Copy",} 374.0
gc_total{mp_scope="base",name="MarkSweepCompact",} 3.0


Name: Open Liberty - GC Total Copy (HTTP)
Type: HTTP agent
Key: openliberty.http.gc_total_copy
URL: http://192.168.200.102:8080/metrics
Request type: GET
Retrieve mode: Body
Required status codes: 200
Type of information: Numeric (unsigned)
Update interval: 1m
Applications: Java
Preprocessing steps:

  1. Regular expression: gc_total{mp_scope="base",name="Copy",} (\S+)
    Output: \1
    Description: Total number of Copy garbage collections

**設定手順:**
1. **Name**: `Open Liberty - GC Total Copy (HTTP)` と入力
2. **Type**: `HTTP agent` を選択
3. **Key**: `openliberty.http.gc_total_copy` と入力
4. **URL**: `http://192.168.200.102:8080/metrics` と入力(ホストのIPアドレスに変更)
5. **Request type**: `GET` を選択
6. **Retrieve mode**: `Body` を選択
7. **Required status codes**: `200` と入力
8. **Type of information**: `Numeric (unsigned)` を選択
9. **Update interval**: `1m` と入力
10. **Applications**: `Java` を選択または作成
11. **Preprocessing** タブをクリック
12. **Add** をクリックして以下を追加:
    - **Type**: `Regular expression`
    - **Parameters**:
      - Pattern: `gc_total\{mp_scope="base",name="Copy",\} (\S+)`
      - Output: `\1`
13. **Description**: `Total number of Copy garbage collections` と入力
14. **Add** ボタンをクリック

**重要なポイント:**
- メトリクス名に `base_` プレフィックスは**付きません**
- `mp_scope="base"` という属性が含まれています
- カンマとスペースの後に閉じ括弧 `,}` があります
- GCタイプは `Copy` と `MarkSweepCompact` の2種類があります
- `Copy` は Young Generation GC(頻繁に実行)
- `MarkSweepCompact` は Old Generation GC(まれに実行)

**オプション: MarkSweepCompact GCも監視する場合:**

Name: Open Liberty - GC Total MarkSweepCompact (HTTP)
Key: openliberty.http.gc_total_marksweep
Pattern: gc_total{mp_scope="base",name="MarkSweepCompact",} (\S+)


#### JVM稼働時間(HTTP Agent版)

Name: Open Liberty - JVM Uptime (HTTP)
Type: HTTP agent
Key: openliberty.http.jvm_uptime_seconds
URL: http://192.168.200.102:8080/metrics
Request type: GET
Retrieve mode: Body
Required status codes: 200
Type of information: Numeric (float)
Units: s
Update interval: 5m
Preprocessing steps:

  1. Regular expression: jvm_uptime_seconds{[^}]*} (\S+)
    Output: \1

**設定手順:**
1. **Name**: `Open Liberty - JVM Uptime (HTTP)` と入力
2. **Type**: `HTTP agent` を選択
3. **Key**: `openliberty.http.jvm_uptime_seconds` と入力
4. **URL**: `http://192.168.200.102:8080/metrics` と入力(ホストのIPアドレスに変更)
5. **Request type**: `GET` を選択
6. **Retrieve mode**: `Body` を選択
7. **Required status codes**: `200` と入力
8. **Type of information**: `Numeric (float)` を選択
9. **Units**: `s` と入力
10. **Update interval**: `5m` と入力(稼働時間は頻繁に更新する必要がないため)
11. **Preprocessing** タブをクリック
12. **Add** をクリックして以下を追加:
    - **Type**: `Regular expression`
    - **Parameters**:
      - Pattern: `jvm_uptime_seconds\{[^}]*\} (\S+)`
      - Output: `\1`
13. **Add** ボタンをクリック

#### プロセスCPU使用率(HTTP Agent版)

Name: Open Liberty - Process CPU Usage (HTTP)
Type: HTTP agent
Key: openliberty.http.cpu_processCpuLoad_percent
URL: http://192.168.200.102:8080/metrics
Request type: GET
Retrieve mode: Body
Required status codes: 200
Type of information: Numeric (float)
Units: %
Update interval: 1m
Preprocessing steps:

  1. Regular expression: cpu_processCpuLoad_percent{[^}]*} (\S+)
    Output: \1
  2. Custom multiplier: 100

**設定手順:**
1. **Name**: `Open Liberty - Process CPU Usage (HTTP)` と入力
2. **Type**: `HTTP agent` を選択
3. **Key**: `openliberty.http.cpu_processCpuLoad_percent` と入力
4. **URL**: `http://192.168.200.102:8080/metrics` と入力
5. **Request type**: `GET` を選択
6. **Retrieve mode**: `Body` を選択
7. **Required status codes**: `200` と入力
8. **Type of information**: `Numeric (float)` を選択
9. **Units**: `%` と入力
10. **Update interval**: `1m` と入力
11. **Preprocessing** タブをクリック
12. **Add** をクリックして以下を追加:
    - **Type**: `Regular expression`
    - **Parameters**:
      - Pattern: `cpu_processCpuLoad_percent\{[^}]*\} (\S+)`
      - Output: `\1`
13. 再度 **Add** をクリックして以下を追加:
    - **Type**: `Custom multiplier`
    - **Parameters**: `100`
    - **説明**: メトリクスは0-1の範囲で返されるため、100倍してパーセント表示にします
14. **Add** ボタンをクリック

#### サーブレットリクエスト総数(HTTP Agent版)- 累積値

Name: Open Liberty - Servlet Requests Total (HTTP)
Type: HTTP agent
Key: openliberty.http.servlet_request_total
URL: http://192.168.200.102:8080/metrics
Request type: GET
Retrieve mode: Body
Required status codes: 200
Type of information: Numeric (unsigned)
Update interval: 1m
Applications: Web
Preprocessing steps:

  1. Regular expression: servlet_request_total{[^}]*} (\S+)
    Output: \1
    Description: Total number of servlet requests (cumulative counter)

**設定手順:**
1. **Name**: `Open Liberty - Servlet Requests Total (HTTP)` と入力
2. **Type**: `HTTP agent` を選択
3. **Key**: `openliberty.http.servlet_request_total` と入力
4. **URL**: `http://192.168.200.102:8080/metrics` と入力(ホストのIPアドレスに変更)
5. **Request type**: `GET` を選択
6. **Retrieve mode**: `Body` を選択
7. **Required status codes**: `200` と入力
8. **Type of information**: `Numeric (unsigned)` を選択
9. **Update interval**: `1m` と入力
10. **Applications**: `Web` を選択または作成
11. **Preprocessing** タブをクリック
12. **Add** をクリックして以下を追加:
    - **Type**: `Regular expression`
    - **Parameters**:
      - Pattern: `servlet_request_total\{[^}]*\} (\S+)`
      - Output: `\1`
13. **Description**: `Total number of servlet requests (cumulative counter)` と入力
14. **Add** ボタンをクリック

**注意**: このメトリクスは累積カウンターです。リクエスト/秒を監視するには、以下の計算アイテムを追加してください。

#### サーブレットリクエスト/秒(HTTP Agent版 - Dependent item)

Name: Open Liberty - Servlet Requests per Second (HTTP)
Type: Dependent item
Key: openliberty.http.servlet_requests_rate
Master item: Open Liberty - Servlet Requests Total (HTTP)
Type of information: Numeric (float)
Units: rps
Applications: Web
Preprocessing steps:

  1. Change per second
    Description: Servlet request rate per second

**設定手順:**
1. **Name**: `Open Liberty - Servlet Requests per Second (HTTP)` と入力
2. **Type**: `Dependent item` を選択
3. **Key**: `openliberty.http.servlet_requests_rate` と入力
4. **Master item**: `Open Liberty - Servlet Requests Total (HTTP)` を選択
5. **Type of information**: `Numeric (float)` を選択
6. **Units**: `rps` と入力(requests per second)
7. **Applications**: `Web` を選択
8. **Preprocessing** タブをクリック
9. **Add** をクリックして以下を追加:
   - **Type**: `Change per second` を選択
10. **Description**: `Servlet request rate per second` と入力
11. **Add** ボタンをクリック

**この方法の利点:**
- Zabbix 5.0以降で動作
- 追加のHTTPリクエスト不要(Master itemのデータを再利用)
- リアルタイムのトラフィック量を把握できる
- 負荷の増減を視覚的に確認できる
- アラート設定に適している(例: 100 rps以上で警告)
- グラフで時系列のトラフィックパターンを分析できる

**rps(requests per second)の値の意味:**
- **0.01 rps**: 100秒に1リクエスト(ほぼ無負荷)
- **0.1 rps**: 10秒に1リクエスト(低トラフィック)
- **1 rps**: 1秒に1リクエスト(通常のテスト環境)
- **10 rps**: 1秒に10リクエスト(軽い負荷)
- **100 rps**: 1秒に100リクエスト(中程度の負荷)
- **1000+ rps**: 1秒に1000リクエスト以上(高負荷)

**注意**:
- **rpsが1未満は正常です**: 開発環境やテスト環境では、rpsが0.1や0.5などの値になることは一般的です
- これは「数秒に1回程度のリクエスト」を意味し、手動テストや低頻度のAPIコールでは正常な動作です
- 例: rps=0.5 は「2秒に1回のリクエスト」を意味します
- 本番環境では、アプリケーションの規模に応じて適切な閾値を設定してください
- センサーAPIのような定期的なデータ取得では、rpsが低い値になるのは想定通りです

#### アクティブセッション数(HTTP Agent版)

Name: Open Liberty - Active Sessions (HTTP)
Type: HTTP agent
Key: openliberty.http.session_activeSessions
URL: http://192.168.200.102:8080/metrics
Request type: GET
Retrieve mode: Body
Required status codes: 200
Type of information: Numeric (unsigned)
Update interval: 1m
Applications: Web
Preprocessing steps:

  1. Regular expression: session_activeSessions{[^}]*} (\S+)
    Output: \1

**設定手順:**
1. **Name**: `Open Liberty - Active Sessions (HTTP)` と入力
2. **Type**: `HTTP agent` を選択
3. **Key**: `openliberty.http.session_activeSessions` と入力
4. **URL**: `http://192.168.200.102:8080/metrics` と入力(ホストのIPアドレスに変更)
5. **Request type**: `GET` を選択
6. **Retrieve mode**: `Body` を選択
7. **Required status codes**: `200` と入力
8. **Type of information**: `Numeric (unsigned)` を選択
9. **Update interval**: `1m` と入力
10. **Applications**: `Web` を選択または作成
11. **Preprocessing** タブをクリック
12. **Add** をクリックして以下を追加:
    - **Type**: `Regular expression`
    - **Parameters**:
      - Pattern: `session_activeSessions\{[^}]*\} (\S+)`
      - Output: `\1`

#### スレッドプールサイズ(HTTP Agent版)

Name: Open Liberty - Thread Pool Size (HTTP)
Type: HTTP agent
Key: openliberty.http.threadpool_size
URL: http://192.168.200.102:8080/metrics
Request type: GET
Retrieve mode: Body
Required status codes: 200
Type of information: Numeric (unsigned)
Update interval: 5m
Applications: Java
Preprocessing steps:

  1. Regular expression: threadpool_size{[^}]*} (\S+)
    Output: \1

**設定手順:**
1. **Name**: `Open Liberty - Thread Pool Size (HTTP)` と入力
2. **Type**: `HTTP agent` を選択
3. **Key**: `openliberty.http.threadpool_size` と入力
4. **URL**: `http://192.168.200.102:8080/metrics` と入力(ホストのIPアドレスに変更)
5. **Request type**: `GET` を選択
6. **Retrieve mode**: `Body` を選択
7. **Required status codes**: `200` と入力
8. **Type of information**: `Numeric (unsigned)` を選択
9. **Update interval**: `5m` と入力
10. **Applications**: `Java` を選択または作成
11. **Preprocessing** タブをクリック
12. **Add** をクリックして以下を追加:
    - **Type**: `Regular expression`
    - **Parameters**:
      - Pattern: `threadpool_size\{[^}]*\} (\S+)`
      - Output: `\1`
13. **Add** ボタンをクリック

#### GC実行時間(HTTP Agent版)

**実際のメトリクス形式:**

gc_time_seconds{mp_scope="base",name="Copy",} 12.147
gc_time_seconds{mp_scope="base",name="MarkSweepCompact",} 1.968


Name: Open Liberty - GC Time Copy (HTTP)
Type: HTTP agent
Key: openliberty.http.gc_time_seconds_copy
URL: http://192.168.200.102:8080/metrics
Request type: GET
Retrieve mode: Body
Required status codes: 200
Type of information: Numeric (float)
Units: s
Update interval: 1m
Applications: Java
Preprocessing steps:

  1. Regular expression: gc_time_seconds{mp_scope="base",name="Copy",} (\S+)
    Output: \1
    Description: Time spent in Copy garbage collection

**設定手順:**
1. **Name**: `Open Liberty - GC Time Copy (HTTP)` と入力
2. **Type**: `HTTP agent` を選択
3. **Key**: `openliberty.http.gc_time_seconds_copy` と入力
4. **URL**: `http://192.168.200.102:8080/metrics` と入力(ホストのIPアドレスに変更)
5. **Request type**: `GET` を選択
6. **Retrieve mode**: `Body` を選択
7. **Required status codes**: `200` と入力
8. **Type of information**: `Numeric (float)` を選択
9. **Units**: `s` と入力
10. **Update interval**: `1m` と入力
11. **Applications**: `Java` を選択または作成
12. **Preprocessing** タブをクリック
13. **Add** をクリックして以下を追加:
    - **Type**: `Regular expression`
    - **Parameters**:
      - Pattern: `gc_time_seconds\{mp_scope="base",name="Copy",\} (\S+)`
      - Output: `\1`
14. **Description**: `Time spent in Copy garbage collection` と入力
15. **Add** ボタンをクリック

**重要なポイント:**
- メトリクス名に `base_` プレフィックスは**付きません**
- `mp_scope="base"` という属性が含まれています
- カンマとスペースの後に閉じ括弧 `,}` があります
- GCタイプは `Copy` と `MarkSweepCompact` の2種類があります

**オプション: MarkSweepCompact GCも監視する場合:**

Name: Open Liberty - GC Time MarkSweepCompact (HTTP)
Key: openliberty.http.gc_time_seconds_marksweep
Pattern: gc_time_seconds{mp_scope="base",name="MarkSweepCompact",} (\S+)


**設定手順:**
1. **Name**: `Open Liberty - GC Time (HTTP)` と入力
2. **Type**: `HTTP agent` を選択
3. **Key**: `openliberty.http.gc_time_seconds` と入力
4. **URL**: `http://192.168.200.102:8080/metrics` と入力(ホストのIPアドレスに変更)
5. **Request type**: `GET` を選択
6. **Retrieve mode**: `Body` を選択
7. **Required status codes**: `200` と入力
8. **Type of information**: `Numeric (float)` を選択
9. **Units**: `s` と入力
10. **Update interval**: `1m` と入力
11. **Applications**: `Java` を選択または作成
12. **Preprocessing** タブをクリック
13. **Add** をクリックして以下を追加:
    - **Type**: `Regular expression`
    - **Parameters**:
      - Pattern: `gc_time_seconds\{gc="Copy"[^}]*\} (\S+)`
      - Output: `\1`
14. **Description**: `Total time spent in garbage collection (Copy GC)` と入力

**トラブルシューティング: GCメトリクスが「Not supported」になる場合**

GCメトリクスが取得できない場合、以下を確認してください:

1. **メトリクス名の確認**
```bash
# Raspberry Piで実際のメトリクス名を確認
curl http://192.168.200.102:8080/metrics | grep -i gc

# 実際の出力例:
# gc_total{mp_scope="base",name="Copy",} 374.0
# gc_total{mp_scope="base",name="MarkSweepCompact",} 3.0
# gc_time_seconds{mp_scope="base",name="Copy",} 12.147
# gc_time_seconds{mp_scope="base",name="MarkSweepCompact",} 1.968
  1. 正規表現パターンの修正

Open Liberty 25のMicroProfile Metrics 5.0では、以下の形式になります:

  • メトリクス名: gc_total または gc_time_secondsbase_ プレフィックスなし)
  • 属性: mp_scope="base" が含まれる
  • GCタイプ: name="Copy" または name="MarkSweepCompact"

正しい正規表現パターン:

# GC Total (Copy)
Pattern: gc_total\{mp_scope="base",name="Copy",\} (\S+)
Output: \1

# GC Time (Copy)
Pattern: gc_time_seconds\{mp_scope="base",name="Copy",\} (\S+)
Output: \1

# GC Total (MarkSweepCompact)
Pattern: gc_total\{mp_scope="base",name="MarkSweepCompact",\} (\S+)
Output: \1

# GC Time (MarkSweepCompact)
Pattern: gc_time_seconds\{mp_scope="base",name="MarkSweepCompact",\} (\S+)
Output: \1

重要なポイント:

  • メトリクス名に base_ プレフィックスは付きません
  • mp_scope="base" という属性が含まれます
  • カンマとスペースの後に閉じ括弧: ,}
  • バックスラッシュで閉じ括弧をエスケープ: \}

アイテムの再設定手順:

  1. 該当アイテムを開く
  2. Preprocessing タブをクリック
  3. 正規表現パターンを上記の正しいパターンに変更
  4. Test ボタンで動作確認
  5. Update をクリック

テスト方法:

  1. curl http://192.168.200.102:8080/metrics | grep gc の出力をコピー

  2. Zabbixのアイテム設定画面で Test をクリック

  3. コピーした出力を貼り付けて、正規表現が正しく動作するか確認

  4. 値が正しく抽出されることを確認してから保存

  5. Add ボタンをクリック

最大ヒープメモリ(HTTP Agent版)

Name: Open Liberty - Max Heap (HTTP)
Type: HTTP agent
Key: openliberty.http.memory_maxHeap_bytes
URL: http://192.168.200.102:8080/metrics
Request type: GET
Retrieve mode: Body
Required status codes: 200
Type of information: Numeric (float)
Units: B
Update interval: 10m
Applications: Java
Preprocessing steps:
  1. Regular expression: memory_maxHeap_bytes\{[^}]*\} (\S+)
     Output: \1

設定手順:

  1. Name: Open Liberty - Max Heap (HTTP) と入力
  2. Type: HTTP agent を選択
  3. Key: openliberty.http.memory_maxHeap_bytes と入力
  4. URL: http://192.168.200.102:8080/metrics と入力(ホストのIPアドレスに変更)
  5. Request type: GET を選択
  6. Retrieve mode: Body を選択
  7. Required status codes: 200 と入力
  8. Type of information: Numeric (float) を選択
  9. Units: B と入力
  10. Update interval: 10m と入力(最大値は変わらないため頻繁に取得不要)
  11. Applications: Java を選択または作成
  12. Preprocessing タブをクリック
  13. Add をクリックして以下を追加:
    • Type: Regular expression
    • Parameters:
      • Pattern: memory_maxHeap_bytes\{[^}]*\} (\S+)
      • Output: \1
  14. Add ボタンをクリック

コミット済みヒープメモリ(HTTP Agent版)

Name: Open Liberty - Committed Heap (HTTP)
Type: HTTP agent
Key: openliberty.http.memory_committedHeap_bytes
URL: http://192.168.200.102:8080/metrics
Request type: GET
Retrieve mode: Body
Required status codes: 200
Type of information: Numeric (float)
Units: B
Update interval: 5m
Applications: Java
Preprocessing steps:
  1. Regular expression: memory_committedHeap_bytes\{[^}]*\} (\S+)
     Output: \1

設定手順:

  1. Name: Open Liberty - Committed Heap (HTTP) と入力
  2. Type: HTTP agent を選択
  3. Key: openliberty.http.memory_committedHeap_bytes と入力
  4. URL: http://192.168.200.102:8080/metrics と入力(ホストのIPアドレスに変更)
  5. Request type: GET を選択
  6. Retrieve mode: Body を選択
  7. Required status codes: 200 と入力
  8. Type of information: Numeric (float) を選択
  9. Units: B と入力
  10. Update interval: 5m と入力
  11. Applications: Java を選択または作成
  12. Preprocessing タブをクリック
  13. Add をクリックして以下を追加:
    • Type: Regular expression
    • Parameters:
      • Pattern: memory_committedHeap_bytes\{[^}]*\} (\S+)
      • Output: \1
  14. Add ボタンをクリック

デーモンスレッド数(HTTP Agent版)

Name: Open Liberty - Daemon Thread Count (HTTP)
Type: HTTP agent
Key: openliberty.http.thread_daemon_count
URL: http://192.168.200.102:8080/metrics
Request type: GET
Retrieve mode: Body
Required status codes: 200
Type of information: Numeric (unsigned)
Update interval: 5m
Applications: Java
Preprocessing steps:
  1. Regular expression: thread_daemon_count\{[^}]*\} (\S+)
     Output: \1

設定手順:

  1. Name: Open Liberty - Daemon Thread Count (HTTP) と入力
  2. Type: HTTP agent を選択
  3. Key: openliberty.http.thread_daemon_count と入力
  4. URL: http://192.168.200.102:8080/metrics と入力(ホストのIPアドレスに変更)
  5. Request type: GET を選択
  6. Retrieve mode: Body を選択
  7. Required status codes: 200 と入力
  8. Type of information: Numeric (unsigned) を選択
  9. Update interval: 5m と入力
  10. Applications: Java を選択または作成
  11. Preprocessing タブをクリック
  12. Add をクリックして以下を追加:
    • Type: Regular expression
    • Parameters:
      • Pattern: thread_daemon_count\{[^}]*\} (\S+)
      • Output: \1
  13. Add ボタンをクリック

最大スレッド数(HTTP Agent版)

Name: Open Liberty - Max Thread Count (HTTP)
Type: HTTP agent
Key: openliberty.http.thread_max_count
URL: http://192.168.200.102:8080/metrics
Request type: GET
Retrieve mode: Body
Required status codes: 200
Type of information: Numeric (unsigned)
Update interval: 10m
Applications: Java
Preprocessing steps:
  1. Regular expression: thread_max_count\{[^}]*\} (\S+)
     Output: \1

設定手順:

  1. Name: Open Liberty - Max Thread Count (HTTP) と入力
  2. Type: HTTP agent を選択
  3. Key: openliberty.http.thread_max_count と入力
  4. URL: http://192.168.200.102:8080/metrics と入力(ホストのIPアドレスに変更)
  5. Request type: GET を選択
  6. Retrieve mode: Body を選択
  7. Required status codes: 200 と入力
  8. Type of information: Numeric (unsigned) を選択
  9. Update interval: 10m と入力
  10. Applications: Java を選択または作成
  11. Preprocessing タブをクリック
  12. Add をクリックして以下を追加:
    • Type: Regular expression
    • Parameters:
      • Pattern: thread_max_count\{[^}]*\} (\S+)
      • Output: \1
  13. Add ボタンをクリック

ロード済みクラス数(HTTP Agent版)

Name: Open Liberty - Loaded Classes (HTTP)
Type: HTTP agent
Key: openliberty.http.classloader_loadedClasses_count
URL: http://192.168.200.102:8080/metrics
Request type: GET
Retrieve mode: Body
Required status codes: 200
Type of information: Numeric (unsigned)
Update interval: 10m
Applications: Java
Preprocessing steps:
  1. Regular expression: classloader_loadedClasses_count\{[^}]*\} (\S+)
     Output: \1

設定手順:

  1. Name: Open Liberty - Loaded Classes (HTTP) と入力
  2. Type: HTTP agent を選択
  3. Key: openliberty.http.classloader_loadedClasses_count と入力
  4. URL: http://192.168.200.102:8080/metrics と入力(ホストのIPアドレスに変更)
  5. Request type: GET を選択
  6. Retrieve mode: Body を選択
  7. Required status codes: 200 と入力
  8. Type of information: Numeric (unsigned) を選択
  9. Update interval: 10m と入力
  10. Applications: Java を選択または作成
  11. Preprocessing タブをクリック
  12. Add をクリックして以下を追加:
    • Type: Regular expression
    • Parameters:
      • Pattern: classloader_loadedClasses_count\{[^}]*\} (\S+)
      • Output: \1
  13. Add ボタンをクリック

利用可能CPU数(HTTP Agent版)

Name: Open Liberty - Available Processors (HTTP)
Type: HTTP agent
Key: openliberty.http.cpu_availableProcessors
URL: http://192.168.200.102:8080/metrics
Request type: GET
Retrieve mode: Body
Required status codes: 200
Type of information: Numeric (unsigned)
Update interval: 1h
Applications: Java
Preprocessing steps:
  1. Regular expression: cpu_availableProcessors\{[^}]*\} (\S+)
     Output: \1

設定手順:

  1. Name: Open Liberty - Available Processors (HTTP) と入力
  2. Type: HTTP agent を選択
  3. Key: openliberty.http.cpu_availableProcessors と入力
  4. URL: http://192.168.200.102:8080/metrics と入力(ホストのIPアドレスに変更)
  5. Request type: GET を選択
  6. Retrieve mode: Body を選択
  7. Required status codes: 200 と入力
  8. Type of information: Numeric (unsigned) を選択
  9. Update interval: 1h と入力(CPU数は変わらないため1時間に1回で十分)
  10. Applications: Java を選択または作成
  11. Preprocessing タブをクリック
  12. Add をクリックして以下を追加:
    • Type: Regular expression
    • Parameters:
      • Pattern: cpu_availableProcessors\{[^}]*\} (\S+)
      • Output: \1
  13. Add ボタンをクリック

セッション作成総数(HTTP Agent版)

Name: Open Liberty - Session Create Total (HTTP)
Type: HTTP agent
Key: openliberty.http.session_create_total
URL: http://192.168.200.102:8080/metrics
Request type: GET
Retrieve mode: Body
Required status codes: 200
Type of information: Numeric (unsigned)
Update interval: 5m
Applications: Web
Preprocessing steps:
  1. Regular expression: session_create_total\{[^}]*\} (\S+)
     Output: \1

設定手順:

  1. Name: Open Liberty - Session Create Total (HTTP) と入力
  2. Type: HTTP agent を選択
  3. Key: openliberty.http.session_create_total と入力
  4. URL: http://192.168.200.102:8080/metrics と入力(ホストのIPアドレスに変更)
  5. Request type: GET を選択
  6. Retrieve mode: Body を選択
  7. Required status codes: 200 と入力
  8. Type of information: Numeric (unsigned) を選択
  9. Update interval: 5m と入力
  10. Applications: Web を選択または作成
  11. Preprocessing タブをクリック
  12. Add をクリックして以下を追加:
    • Type: Regular expression
    • Parameters:
      • Pattern: session_create_total\{[^}]*\} (\S+)
      • Output: \1
  13. Add ボタンをクリック

ライブセッション数(HTTP Agent版)

Name: Open Liberty - Live Sessions (HTTP)
Type: HTTP agent
Key: openliberty.http.session_liveSessions
URL: http://192.168.200.102:8080/metrics
Request type: GET
Retrieve mode: Body
Required status codes: 200
Type of information: Numeric (unsigned)
Update interval: 1m
Applications: Web
Preprocessing steps:
  1. Regular expression: session_liveSessions\{[^}]*\} (\S+)
     Output: \1

設定手順:

  1. Name: Open Liberty - Live Sessions (HTTP) と入力

  2. Type: HTTP agent を選択

  3. Key: openliberty.http.session_liveSessions と入力

  4. URL: http://192.168.200.102:8080/metrics と入力(ホストのIPアドレスに変更)

  5. Request type: GET を選択

  6. Retrieve mode: Body を選択

  7. Required status codes: 200 と入力

  8. Type of information: Numeric (unsigned) を選択

  9. Update interval: 1m と入力

  10. Applications: Web を選択または作成

  11. Preprocessing タブをクリック

  12. Add をクリックして以下を追加:

    • Type: Regular expression
    • Parameters:
      • Pattern: session_liveSessions\{[^}]*\} (\S+)
      • Output: \1
  13. Add ボタンをクリック

  14. Add ボタンをクリック

HTTP Agent使用時の注意点

  1. URLの設定: 各ホストのIPアドレスまたはホスト名に合わせて変更してください
  2. 正規表現のパターン: Prometheusメトリクスの形式に合わせて調整が必要な場合があります
  3. パフォーマンス: HTTP Agentは各アイテムごとにHTTPリクエストを送信するため、多数のアイテムを設定する場合は更新間隔を調整してください
  4. エラーハンドリング: メトリクスが存在しない場合、アイテムが「Not supported」になる可能性があります

HTTP Agent vs 外部スクリプト

項目 HTTP Agent 外部スクリプト
設定の容易さ Web UIで完結 スクリプト配置が必要
パフォーマンス アイテムごとにHTTPリクエスト 1回のリクエストで複数取得可能
柔軟性 正規表現で抽出 スクリプトで自由に処理
保守性 設定変更が容易 スクリプト修正が必要
推奨用途 少数のメトリクス 多数のメトリクス

トリガーの設定

監視アイテムに対してアラートトリガーを設定します。

方法1: ホストに直接トリガーを設定

トリガー1: ヒープメモリ使用率が高い

Name: Open Liberty - High Heap Memory Usage
Expression: last(/ホスト名/openliberty.metrics[localhost,8080,memory_heapUtilization_percent])>90
Severity: Warning
Description: JVM heap memory usage is above 90%

設定手順:

  1. ホストの Triggers タブをクリック
  2. Create trigger をクリック
  3. Name: Open Liberty - High Heap Memory Usage と入力
  4. Severity: Warning を選択
  5. ExpressionAdd をクリック
  6. Item: Open Liberty - Heap Utilization を選択
  7. Function: last() を選択
  8. Result: >90 と入力
  9. Insert をクリック
  10. Add をクリック

トリガー2: スレッド数が異常に多い

Name: Open Liberty - High Thread Count
Expression: last(/ホスト名/openliberty.metrics[localhost,8080,thread_count])>200
Severity: Average
Description: Thread count exceeded 200

トリガー3: CPU使用率が高い

Name: Open Liberty - High CPU Usage
Expression: avg(/ホスト名/openliberty.metrics[localhost,8080,cpu_processCpuLoad_percent],5m)>80
Severity: Warning
Description: Process CPU usage is above 80% for 5 minutes

トリガー4: JVMが再起動された

Name: Open Liberty - JVM Restarted
Expression: last(/ホスト名/openliberty.metrics[localhost,8080,jvm_uptime_seconds])<300
Severity: Information
Description: JVM uptime is less than 5 minutes (possible restart)

方法2: HTTP Agentアイテムにトリガーを設定

HTTP Agentで作成したアイテムに対してトリガーを設定します。

トリガー1: ヒープメモリ使用率が高い(HTTP Agent版)

Name: Open Liberty - High Heap Memory Usage (HTTP)
Expression: last(/ホスト名/openliberty.http.memory_heapUtilization_percent)>90
Severity: Warning
Description: JVM heap memory usage is above 90%

設定手順:

  1. ホストの Triggers タブをクリック
  2. Create trigger をクリック
  3. Name: Open Liberty - High Heap Memory Usage (HTTP) と入力
  4. Severity: Warning を選択
  5. ExpressionAdd をクリック
  6. Item: Open Liberty - Heap Utilization (HTTP) を選択
  7. Function: last() を選択
  8. Result: >90 と入力
  9. Insert をクリック
  10. Add をクリック

トリガー2: スレッド数が異常に多い(HTTP Agent版)

Name: Open Liberty - High Thread Count (HTTP)
Expression: last(/ホスト名/openliberty.http.thread_count)>200
Severity: Average
Description: Thread count exceeded 200

トリガー3: CPU使用率が高い(HTTP Agent版)

Name: Open Liberty - High CPU Usage (HTTP)
Expression: avg(/ホスト名/openliberty.http.cpu_processCpuLoad_percent,5m)>80
Severity: Warning
Description: Process CPU usage is above 80% for 5 minutes

トリガー4: サーブレットリクエスト率が高い(HTTP Agent版)

Name: Open Liberty - High Request Rate (HTTP)
Expression: last(/ホスト名/openliberty.http.servlet_requests_rate)>100
Severity: Warning
Description: Servlet request rate exceeded 100 requests per second

設定手順:

  1. ホストの Triggers タブをクリック
  2. Create trigger をクリック
  3. Name: Open Liberty - High Request Rate (HTTP) と入力
  4. Severity: Warning を選択
  5. ExpressionAdd をクリック
  6. Item: Open Liberty - Servlet Requests per Second (HTTP) を選択
  7. Function: last() を選択
  8. Result: >100 と入力
  9. Insert をクリック
  10. Add をクリック

注意: 閾値(100 rps)は環境に応じて調整してください。開発環境では10 rps程度が適切な場合もあります。

トリガー5: アクティブセッション数が多い(HTTP Agent版)

Name: Open Liberty - High Active Sessions (HTTP)
Expression: last(/ホスト名/openliberty.http.session_activeSessions)>50
Severity: Average
Description: Active session count exceeded 50

グラフの作成

方法1: ホストに直接グラフを作成

グラフ1: メモリ使用状況

  1. ホストの Graphs タブをクリック
  2. Create graph をクリック
  3. Name: Open Liberty - Memory Usage と入力
  4. Items セクションで Add をクリック
  5. 以下のアイテムを追加:
    • Open Liberty - Heap Memory Used
    • Open Liberty - Heap Utilization
  6. Add をクリック

グラフ2: スレッド統計

Name: Open Liberty - Thread Statistics
Items:
  - Open Liberty - Thread Count
  - Open Liberty - Active Threads
  - Open Liberty - Thread Daemon Count

グラフ3: CPU使用率

Name: Open Liberty - CPU Usage
Items:
  - Open Liberty - Process CPU Usage
  - Open Liberty - CPU Load Average

グラフ4: サーブレットリクエスト/秒

Name: Open Liberty - Servlet Request Rate
Items:
  - Open Liberty - Servlet Requests per Second (HTTP)
Y axis MIN value: Fixed (1)
Y axis MAX value: Calculated

設定手順:

  1. ホストの Graphs タブをクリック
  2. Create graph をクリック
  3. Name: Open Liberty - Servlet Request Rate と入力
  4. Width: 900 と入力
  5. Height: 200 と入力
  6. Y axis MIN value: Fixed を選択し、1 と入力
    • 重要: これにより、Y軸が1 rps以上に固定され、低トラフィック時でもグラフのラベルが安定します
  7. Y axis MAX value: Calculated を選択(自動調整)
  8. Items セクションで Add をクリック
  9. 以下のアイテムを追加:
    • Open Liberty - Servlet Requests per Second (HTTP) (青色)
  10. Y axis: Left を選択
  11. Add をクリック

グラフ設定のポイント:

  • Y軸の最小値を1に固定することで、低トラフィック時(0.1〜1 rps未満)でもY軸のラベルが動かず安定します
  • 1 rps未満の値は表示されますが、Y軸は1から始まるため視認性が向上します
  • 最大値は自動計算により、高トラフィック時にも対応できます

このグラフで確認できること:

  • リアルタイムのトラフィック量(低トラフィックでも視覚化)
  • ピーク時間帯の特定
  • 異常なトラフィック増加の検知
  • 負荷パターンの分析

方法2: HTTP Agentアイテムでグラフを作成

HTTP Agentで作成したアイテムを使用してグラフを作成します。

グラフ1: メモリ使用状況(HTTP Agent版)

Name: Open Liberty - Memory Usage (HTTP)
Width: 900
Height: 200
Graph type: Normal
Show legend: Yes
Items:
  - Open Liberty - Heap Memory Used (HTTP) (青色、左Y軸)
  - Open Liberty - Max Heap (HTTP) (赤色、左Y軸)
  - Open Liberty - Heap Utilization (HTTP) (緑色、右Y軸、%)

設定手順:

  1. ホストの Graphs タブをクリック
  2. Create graph をクリック
  3. Name: Open Liberty - Memory Usage (HTTP) と入力
  4. Width: 900 と入力
  5. Height: 200 と入力
  6. Items セクションで Add をクリック
  7. 以下のアイテムを追加:
    • Open Liberty - Heap Memory Used (HTTP) (青色、左Y軸)
    • Open Liberty - Max Heap (HTTP) (赤色、左Y軸)
    • Open Liberty - Heap Utilization (HTTP) (緑色、右Y軸)
  8. Add をクリック

グラフ2: スレッド統計(HTTP Agent版)

Name: Open Liberty - Thread Statistics (HTTP)
Width: 900
Height: 200
Items:
  - Open Liberty - Thread Count (HTTP) (緑色)
  - Open Liberty - Active Threads (HTTP) (青色)
  - Open Liberty - Daemon Thread Count (HTTP) (黄色)

設定手順:

  1. ホストの Graphs タブをクリック
  2. Create graph をクリック
  3. Name: Open Liberty - Thread Statistics (HTTP) と入力
  4. Width: 900 と入力
  5. Height: 200 と入力
  6. Items セクションで Add をクリック
  7. 上記3つのアイテムを追加し、それぞれ色を設定
  8. Add をクリック

グラフ3: CPU使用率(HTTP Agent版)

Name: Open Liberty - CPU Usage (HTTP)
Width: 900
Height: 200
Items:
  - Open Liberty - Process CPU Usage (HTTP) (赤色、%)
  - Open Liberty - CPU Load Average (HTTP) (青色)

設定手順:

  1. ホストの Graphs タブをクリック
  2. Create graph をクリック
  3. Name: Open Liberty - CPU Usage (HTTP) と入力
  4. Width: 900 と入力
  5. Height: 200 と入力
  6. Items セクションで Add をクリック
  7. 以下のアイテムを追加:
    • Open Liberty - Process CPU Usage (HTTP) (赤色)
    • Open Liberty - CPU Load Average (HTTP) (青色)
  8. Add をクリック

グラフ4: GC統計(HTTP Agent版)

Name: Open Liberty - Garbage Collection (HTTP)
Width: 900
Height: 200
Items:
  - Open Liberty - GC Total Copy (HTTP) (緑色)
  - Open Liberty - GC Total MarkSweepCompact (HTTP) (青色)
  - Open Liberty - GC Time Copy (HTTP) (オレンジ色、右Y軸)
  - Open Liberty - GC Time MarkSweepCompact (HTTP) (赤色、右Y軸)

設定手順:

  1. ホストの Graphs タブをクリック
  2. Create graph をクリック
  3. Name: Open Liberty - Garbage Collection (HTTP) と入力
  4. Width: 900 と入力
  5. Height: 200 と入力
  6. Items セクションで Add をクリック
  7. GC回数のアイテムを左Y軸、GC時間のアイテムを右Y軸に設定
  8. Add をクリック

グラフ5: サーブレットリクエスト/秒(HTTP Agent版)

Name: Open Liberty - Servlet Request Rate (HTTP)
Width: 900
Height: 200
Y axis MIN value: Fixed (1)
Y axis MAX value: Calculated
Items:
  - Open Liberty - Servlet Requests per Second (HTTP) (青色)

設定手順:

  1. ホストの Graphs タブをクリック
  2. Create graph をクリック
  3. Name: Open Liberty - Servlet Request Rate (HTTP) と入力
  4. Width: 900 と入力
  5. Height: 200 と入力
  6. Y axis MIN value: Fixed を選択し、1 と入力
  7. Y axis MAX value: Calculated を選択
  8. Items セクションで Add をクリック
  9. Open Liberty - Servlet Requests per Second (HTTP) を選択し、青色に設定
  10. Add をクリック

グラフ6: セッション統計(HTTP Agent版)

Name: Open Liberty - Session Statistics (HTTP)
Width: 900
Height: 200
Items:
  - Open Liberty - Active Sessions (HTTP) (青色)
  - Open Liberty - Session Create Total (HTTP) (緑色)

設定手順:

  1. ホストの Graphs タブをクリック
  2. Create graph をクリック
  3. Name: Open Liberty - Session Statistics (HTTP) と入力
  4. Width: 900 と入力
  5. Height: 200 と入力
  6. Items セクションで Add をクリック
  7. 上記2つのアイテムを追加し、それぞれ色を設定
  8. Add をクリック

ダッシュボードの作成

Items:

  • Open Liberty - GC Total Copy (HTTP) (緑色)
  • Open Liberty - GC Time Copy (HTTP) (オレンジ色)

**設定手順:**
1. **Name**: `Open Liberty - Garbage Collection (Copy GC)` と入力
2. **Width**: `900` と入力
3. **Height**: `200` と入力
4. **Items** セクションで **Add** をクリック
5. 以下のアイテムを追加:
   - `Open Liberty - GC Total Copy (HTTP)` (緑色)
   - `Open Liberty - GC Time Copy (HTTP)` (オレンジ色)
6. **Add** をクリック

**注意**:
- Copy GC(Young Generation GC)の統計を表示します
- MarkSweepCompact GC(Old Generation GC)も監視したい場合は、別のグラフを作成してください

## ダッシュボードの作成

1. **Monitoring** → **Dashboard** をクリック
2. **Create dashboard** をクリック
3. **Name**: `Open Liberty Monitoring` と入力
4. **Add widget** をクリック

### ウィジェット1: メモリ使用率ゲージ

Type: Gauge
Name: Heap Memory Usage
Item: Open Liberty - Heap Utilization
Min: 0
Max: 100
Thresholds:

  • 0-70: Green
  • 70-90: Yellow
  • 90-100: Red

### ウィジェット2: グラフ

Type: Graph (classic)
Name: Memory Trend
Graph: Open Liberty - Memory Usage
Time period: Last 1 hour


### ウィジェット3: 最新データ

Type: Item value
Items:

  • Open Liberty - Thread Count
  • Open Liberty - Active Sessions
  • Open Liberty - JVM Uptime
  • Open Liberty - CPU Load Average

## 監視アイテム一覧(全29種類)

### 必須監視項目(優先度: 高)


## Open Liberty監視の選択肢

Open Libertyの監視には、MicroProfile Metrics以外にも複数の選択肢があります。

### 1. MicroProfile Metrics(本ドキュメントの方法)

**利点:**
- ✅ 標準化されたメトリクス形式(Prometheus互換)
- ✅ HTTP経由で簡単にアクセス可能
- ✅ Zabbix HTTP Agentで直接取得可能
- ✅ 外部ツール不要

**欠点:**
- ❌ 基本メトリクスのみ(詳細なJVM情報は限定的)
- ❌ カスタマイズには追加実装が必要

**推奨用途:** 標準的な監視、軽量な監視、複数サーバーの統一監視

### 2. JMX(Java Management Extensions)

**利点:**
- ✅ 非常に詳細なJVM情報を取得可能
- ✅ リアルタイムでのメモリダンプ、スレッドダンプ取得
- ✅ 動的な設定変更が可能
- ✅ 標準的なJava監視方法

**欠点:**
- ❌ 設定が複雑(JMXポート開放、認証設定など)
- ❌ ネットワークセキュリティの考慮が必要
- ❌ Zabbix JMX監視の設定が必要

**設定例:**

```xml
<!-- server.xml にJMX設定を追加 -->
<featureManager>
    <feature>restConnector-2.0</feature>
</featureManager>

<quickStartSecurity userName="admin" userPassword="adminpwd"/>

<keyStore id="defaultKeyStore" password="Liberty"/>

Zabbix設定:

  • Zabbix Java Gatewayを使用
  • JMX interfaceをホストに追加
  • JMX監視テンプレートを適用

推奨用途: 詳細なJVM分析、トラブルシューティング、本番環境の深い監視

3. ログ監視

利点:

  • ✅ エラーや例外の詳細情報を取得
  • ✅ ビジネスロジックのイベント監視
  • ✅ 監査ログの追跡

欠点:

  • ❌ リアルタイム性に欠ける
  • ❌ ログ量が多いと処理負荷が高い

Zabbix設定例:

# Zabbix Agent設定ファイルに追加
# /etc/zabbix/zabbix_agentd.conf

# ERRORログの出現回数
UserParameter=liberty.log.error.count,grep -c "ERROR" /home/libertyuser/wlp/usr/servers/sensorServer/logs/messages.log

# OutOfMemoryErrorの検知
UserParameter=liberty.log.oom.check,grep -c "OutOfMemoryError" /home/libertyuser/wlp/usr/servers/sensorServer/logs/messages.log

# 最新のERRORログ
UserParameter=liberty.log.error.latest,grep "ERROR" /home/libertyuser/wlp/usr/servers/sensorServer/logs/messages.log | tail -1

推奨用途: エラー検知、異常パターンの発見、セキュリティ監査

4. APM(Application Performance Monitoring)ツール

選択肢:

  • Elastic APM: Open Libertyエージェントで統合可能
  • Prometheus + Grafana: MicroProfile Metricsと連携
  • Dynatrace: 商用APM、自動計装
  • New Relic: 商用APM、詳細な分析

利点:

  • ✅ トランザクショントレーシング
  • ✅ 分散トレーシング(マイクロサービス環境)
  • ✅ 自動的なボトルネック検出
  • ✅ 美しいダッシュボード

欠点:

  • ❌ 追加のエージェントやライブラリが必要
  • ❌ 商用ツールはコストがかかる
  • ❌ パフォーマンスオーバーヘッド

推奨用途: マイクロサービス環境、複雑なアプリケーション、パフォーマンス最適化

5. カスタムメトリクス(MicroProfile Metrics拡張)

実装例:

import org.eclipse.microprofile.metrics.annotation.Counted;
import org.eclipse.microprofile.metrics.annotation.Timed;
import org.eclipse.microprofile.metrics.MetricRegistry;
import org.eclipse.microprofile.metrics.annotation.RegistryType;

@Path("/api")
public class SensorResource {
    
    @Inject
    @RegistryType(type = MetricRegistry.Type.APPLICATION)
    MetricRegistry registry;
    
    @GET
    @Path("/temperature")
    @Counted(name = "temperature_requests_total", 
             description = "Total temperature API requests")
    @Timed(name = "temperature_request_duration", 
           description = "Temperature API request duration")
    public Response getTemperature() {
        // ビジネスロジック
        
        // カスタムメトリクスの記録
        registry.counter("sensor.read.success").inc();
        
        return Response.ok(data).build();
    }
}

利点:

  • ✅ ビジネスメトリクスを直接監視
  • ✅ アプリケーション固有の情報を取得
  • ✅ MicroProfile Metricsと統合

欠点:

  • ❌ コード変更が必要
  • ❌ 開発工数がかかる

推奨用途: ビジネスKPI監視、アプリケーション固有の監視

6. OS/インフラレベルの監視(Zabbix Agent)

標準的なZabbix Agent監視:

  • CPU使用率
  • メモリ使用率
  • ディスク使用率
  • ネットワークトラフィック
  • プロセス監視

利点:

  • ✅ Zabbixの標準機能
  • ✅ 設定が簡単
  • ✅ 軽量

推奨用途: 基本的なインフラ監視(必須)

推奨される監視戦略

最小構成(開発/テスト環境)

  1. MicroProfile Metrics(本ドキュメントの方法)
  2. Zabbix Agent(OS基本監視)

標準構成(本番環境)

  1. MicroProfile Metrics(アプリケーション監視)
  2. Zabbix Agent(OS基本監視)
  3. ログ監視(エラー検知)

高度な構成(大規模本番環境)

  1. MicroProfile Metrics(基本監視)
  2. JMX(詳細なJVM監視)
  3. Zabbix Agent(OS監視)
  4. ログ監視(エラー・セキュリティ)
  5. APMツール(パフォーマンス分析)
  6. カスタムメトリクス(ビジネスKPI)

比較表

監視方法 設定難易度 情報量 リアルタイム性 コスト 推奨度
MicroProfile Metrics 無料 ⭐⭐⭐
JMX 無料 ⭐⭐
ログ監視 無料 ⭐⭐
APMツール 非常に高 有料/無料 ⭐⭐
カスタムメトリクス カスタム 無料
Zabbix Agent 無料 ⭐⭐⭐

結論

本ドキュメントのMicroProfile Metrics + Zabbix HTTP Agent方式は:

  • ✅ 設定が簡単
  • ✅ 外部ツール不要
  • ✅ 標準化されたメトリクス
  • ✅ 無料
  • ✅ ほとんどのユースケースに対応

より詳細な監視が必要な場合は、JMXやAPMツールの追加を検討してください。

アイテム名 Key 説明
Heap Memory Used memory_usedHeap_bytes 使用中ヒープメモリ
Heap Utilization memory_heapUtilization_percent ヒープ使用率
Thread Count thread_count スレッド数
CPU Load Average cpu_systemLoadAverage システム負荷
Process CPU Usage cpu_processCpuLoad_percent プロセスCPU使用率
GC Total gc_total GC実行回数
JVM Uptime jvm_uptime_seconds JVM稼働時間

推奨監視項目(優先度: 中)

アイテム名 Key 説明
Active Threads threadpool_activeThreads アクティブスレッド数
Thread Pool Size threadpool_size スレッドプールサイズ
Servlet Requests servlet_request_total リクエスト総数
Active Sessions session_activeSessions アクティブセッション数
GC Time gc_time_seconds GC実行時間
Max Heap memory_maxHeap_bytes 最大ヒープメモリ
Committed Heap memory_committedHeap_bytes コミット済みヒープ

オプション監視項目(優先度: 低)

アイテム名 Key 説明
Daemon Thread Count thread_daemon_count デーモンスレッド数
Max Thread Count thread_max_count 最大スレッド数
Loaded Classes classloader_loadedClasses_count ロード済みクラス数
Available Processors cpu_availableProcessors 利用可能CPU数
Session Create Total session_create_total セッション作成総数
Live Sessions session_liveSessions ライブセッション数

トラブルシューティング

問題1: アイテムが「Not supported」になる

原因: 外部スクリプトが実行できない

解決策:

# Raspberry Piで確認
sudo ls -la /usr/lib/zabbix/externalscripts/openliberty_metrics.sh
sudo chmod +x /usr/lib/zabbix/externalscripts/openliberty_metrics.sh

# 手動実行テスト
/usr/lib/zabbix/externalscripts/openliberty_metrics.sh localhost 8080 memory_usedHeap_bytes

# Zabbix Agentのログ確認
sudo tail -f /var/log/zabbix/zabbix_agentd.log

問題2: 値が取得できない

原因: Open Libertyのメトリクスエンドポイントにアクセスできない

解決策:

# Raspberry Piで確認
curl http://localhost:8080/metrics | grep memory_usedHeap_bytes

# Open Libertyのログ確認
tail -f /home/libertyuser/wlp/usr/servers/sensorServer/logs/messages.log

問題3: HTTP Agentで正規表現が動作しない

原因: Prometheus形式のパースが正しくない

解決策:
Preprocessing stepの正規表現を以下のように修正:

Pattern: memory_usedHeap_bytes\{[^}]*\}\s+(\S+)
Output: \1

ベストプラクティス

  1. 更新間隔の設定

    • 重要なメトリクス(メモリ、CPU): 1分
    • 一般的なメトリクス: 5分
    • 統計情報: 10分
  2. データ保持期間

    • History: 90日
    • Trends: 365日
  3. アラート閾値

    • ヒープ使用率: Warning 80%, Critical 90%
    • スレッド数: Warning 150, Critical 200
    • CPU使用率: Warning 70%, Critical 85%
  4. 監視の優先順位

    • 最優先: メモリ、CPU、スレッド
    • 次点: GC、セッション、リクエスト
    • 参考: クラスローダー、稼働時間

Javaアプリ/インフラ監視で追加すべき項目

Open Libertyの監視に加えて、以下の監視項目を追加することで、より包括的な監視が可能になります。

1. OS/インフラレベルの監視

必須項目

  • ディスク使用率: ログやデータの蓄積を監視
    • / (ルートパーティション)
    • /var/log (ログディレクトリ)
    • アプリケーションデータディレクトリ
  • ディスクI/O: 読み書き速度、IOPS
  • ネットワークトラフィック: 受信/送信バイト数
  • システムメモリ: 空きメモリ、スワップ使用量
  • システムCPU: アイドル率、I/O待ち時間
  • プロセス数: 実行中のプロセス数

推奨項目

  • ファイルディスクリプタ: 開いているファイル数
  • TCP接続数: ESTABLISHED、TIME_WAIT状態の接続数
  • ロードアベレージ: 1分、5分、15分の平均
  • システム稼働時間: サーバーの再起動検知

2. Javaプロセス固有の監視

JVMレベル

  • 非ヒープメモリ: Metaspace、Code Cache使用量
  • ダイレクトバッファメモリ: NIOバッファの使用量
  • JITコンパイル: コンパイル時間、コンパイル数
  • クラスローディング: ロード/アンロード数

GC詳細監視

  • GC頻度: 各GCタイプの実行頻度
  • GC停止時間: Stop-the-World時間
  • GCオーバーヘッド: GC時間の割合
  • メモリプール: Eden、Survivor、Old領域の使用率

3. アプリケーションレベルの監視

パフォーマンス

  • レスポンスタイム: APIエンドポイント別の応答時間
  • エラー率: HTTPステータスコード別のエラー数
  • スループット: 処理済みリクエスト数
  • 同時接続数: アクティブな接続数

ビジネスメトリクス

  • センサーデータ取得成功率: センサーAPIの成功/失敗率
  • データ更新頻度: センサーデータの更新間隔
  • 異常値検知: センサー値の異常パターン

4. ログ監視

重要ログの監視

  • ERRORログ: エラーログの出現頻度
  • WARNINGログ: 警告ログのパターン
  • 例外スタックトレース: 特定の例外の発生
  • OutOfMemoryError: メモリ不足エラー

ログファイルサイズ

  • messages.log: Open Libertyのメインログ
  • trace.log: トレースログ(有効な場合)
  • ffdc/: First Failure Data Captureログ

5. データベース監視(該当する場合)

  • 接続プール: アクティブ/アイドル接続数
  • クエリ実行時間: スロークエリの検知
  • デッドロック: デッドロック発生回数
  • トランザクション: コミット/ロールバック数

6. 外部依存サービス監視

センサーハードウェア

  • センサー応答時間: I2C/SPIデバイスの応答
  • センサーエラー率: 読み取り失敗率
  • センサー値の範囲: 異常値の検知

参考: Traditional WebSphere Application Serverとの比較

Traditional WAS(v8.5/v9.0)での監視方法

Traditional WebSphere Application Serverでは、以下の方法で監視を行っていました。

1. PMI(Performance Monitoring Infrastructure)

Traditional WASの標準監視方法:

<!-- server.xml または wsadmin経由で設定 -->
<pmi enabled="true" statisticSet="extended"/>

特徴:

  • WebSphere独自の監視フレームワーク
  • 非常に詳細なメトリクス(数百種類)
  • wsadminスクリプトまたはAdminコンソールで設定
  • Tivoli Performance Viewer(TPV)で可視化

Zabbixとの統合:

  • JMX経由でPMIメトリクスを取得
  • カスタムスクリプトでPerfServletから取得
  • 設定が複雑で専門知識が必要

2. JMX(Java Management Extensions)

Traditional WASでの設定:

# wsadmin経由でJMXを有効化
wsadmin -lang jython -c "AdminTask.configureJMXConnector('[-connectorSecurity enabled]')"

特徴:

  • 標準的なJava監視方法
  • MBeanを通じて詳細情報を取得
  • Zabbix Java Gatewayで監視可能
  • ネットワークポート開放が必要(デフォルト: 9043)

Zabbixとの統合:

  • Zabbix Java Gatewayを使用
  • JMX監視テンプレートを適用
  • 認証設定が必要

3. ログ監視

Traditional WASのログファイル:

/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/logs/server1/
├── SystemOut.log
├── SystemErr.log
├── native_stderr.log
└── native_stdout.log

Zabbixとの統合:

  • Zabbix Agentのログ監視機能
  • カスタムUserParameterでログ解析
  • 外部スクリプトでログパース

4. Tivoli Monitoring(商用)

IBM提供の監視ソリューション:

  • WebSphere専用の監視エージェント
  • 自動的にメトリクスを収集
  • 高機能だが高コスト
  • 設定・運用が複雑

Open Liberty + MicroProfile Metricsとの比較

項目 Traditional WAS Open Liberty + MicroProfile
監視方法 PMI + JMX MicroProfile Metrics + JMX
設定難易度 高(wsadmin、AdminConsole) 低(server.xml、HTTP)
メトリクス形式 独自形式 Prometheus標準形式
Zabbix統合 複雑(JMX Gateway必須) 簡単(HTTP Agent)
外部ツール 必要(Java Gateway) 不要(HTTP直接取得)
標準化 WebSphere独自 業界標準(MicroProfile)
軽量性 重い 軽い
学習コスト 高い 低い
ポータビリティ WebSphere専用 他のMicroProfile実装でも動作

Traditional WASで監視していた主要メトリクス

1. JVMメトリクス(PMI経由)

JVM.HeapSize
JVM.UsedMemory
JVM.FreeMemory
JVM.ProcessCpuUsage

Open Libertyでの対応:

  • memory_usedHeap_bytes - ヒープメモリ使用量
  • memory_heapUtilization_percent - ヒープ使用率
  • cpu_processCpuLoad_percent - CPU使用率

2. スレッドプールメトリクス(PMI経由)

ThreadPool.ActiveCount
ThreadPool.PoolSize
ThreadPool.PercentMaxed

Open Libertyでの対応:

  • threadpool_activeThreads - アクティブスレッド数
  • threadpool_size - スレッドプールサイズ
  • thread_count - 総スレッド数

3. サーブレットメトリクス(PMI経由)

Servlet.RequestCount
Servlet.ResponseTime
Servlet.ErrorCount

Open Libertyでの対応:

  • servlet_request_total - リクエスト総数
  • カスタムメトリクスで応答時間を実装可能

4. セッションメトリクス(PMI経由)

Session.ActiveCount
Session.CreateCount
Session.InvalidatedCount

Open Libertyでの対応:

  • session_activeSessions - アクティブセッション数
  • session_create_total - セッション作成総数
  • session_liveSessions - ライブセッション数

5. GCメトリクス(PMI経由)

GC.Count
GC.Time

Open Libertyでの対応:

  • gc_total - GC実行回数
  • gc_time_seconds - GC実行時間

Traditional WASからの移行における監視の変化

改善点

  1. 設定の簡素化

    • Traditional WAS: wsadminスクリプト、AdminConsole、複雑なXML設定
    • Open Liberty: server.xmlに1行追加するだけ
  2. 標準化

    • Traditional WAS: WebSphere独自のPMI形式
    • Open Liberty: Prometheus標準形式(業界標準)
  3. Zabbix統合の容易さ

    • Traditional WAS: JMX Gateway必須、複雑な設定
    • Open Liberty: HTTP Agentで直接取得、設定簡単
  4. 軽量化

    • Traditional WAS: PMIのオーバーヘッドが大きい
    • Open Liberty: 軽量なメトリクス収集
  5. ポータビリティ

    • Traditional WAS: WebSphere専用
    • Open Liberty: 他のMicroProfile実装(Quarkus、Helidonなど)でも同じ方法で監視可能

注意点

  1. メトリクスの粒度

    • Traditional WASのPMIは非常に詳細(数百種類)
    • MicroProfile Metricsは基本的なメトリクスのみ
    • 詳細な監視が必要な場合はJMXやカスタムメトリクスを追加
  2. 既存の監視スクリプト

    • Traditional WAS用のwsadminスクリプトは使用不可
    • 新しいHTTP/REST APIベースのスクリプトに書き換えが必要
  3. Tivoli Monitoringからの移行

    • Tivoli Monitoring使用していた場合、Zabbixへの移行が必要
    • メトリクス名のマッピングが必要

結論

Traditional WASでは:

  • PMI + JMXで監視(設定複雑、WebSphere専用)
  • Zabbix統合には Java Gateway必須
  • 専門知識が必要

Open Liberty + MicroProfile Metricsでは:

  • HTTP経由で簡単に監視(設定簡単、業界標準)
  • Zabbix HTTP Agentで直接取得
  • 学習コストが低い

移行のメリット:

  • ✅ 設定が大幅に簡素化

MicroProfile Metricsで監視できなくなる項目

Traditional WASのPMIで監視できていたが、MicroProfile Metrics(基本メトリクス)では標準では提供されない項目のリストです。

1. データソース/JDBCメトリクス

Traditional WASで監視できていた項目:

ConnectionPool.FreePoolSize          - 空きコネクション数
ConnectionPool.PoolSize              - プールサイズ
ConnectionPool.WaitTime              - 接続待ち時間
ConnectionPool.PercentUsed           - 使用率
ConnectionPool.CreateCount           - 作成数
ConnectionPool.CloseCount            - クローズ数
ConnectionPool.WaitingThreadCount    - 待機スレッド数
ConnectionPool.FaultCount            - エラー数
JDBC.ExecuteTime                     - SQL実行時間
JDBC.ExecuteCount                    - SQL実行回数

MicroProfile Metricsでの対応:

  • ❌ 標準メトリクスには含まれない
  • ✅ カスタムメトリクスで実装可能
  • ✅ JMX経由で取得可能

2. EJBメトリクス

Traditional WASで監視できていた項目:

EJB.MethodCallCount                  - メソッド呼び出し回数
EJB.MethodResponseTime               - メソッド応答時間
EJB.PoolSize                         - EJBプールサイズ
EJB.CreateCount                      - EJB作成数
EJB.RemoveCount                      - EJB削除数
EJB.ActivationTime                   - アクティベーション時間
EJB.PassivationTime                  - パッシベーション時間
EJB.ReadyCount                       - Ready状態のEJB数

MicroProfile Metricsでの対応:

  • ❌ 標準メトリクスには含まれない
  • ✅ カスタムメトリクスで実装可能(@Timed@Countedアノテーション)

3. JMSメトリクス

Traditional WASで監視できていた項目:

JMS.MessageCount                     - メッセージ数
JMS.PendingMessageCount              - 保留メッセージ数
JMS.ExpiredMessageCount              - 期限切れメッセージ数
JMS.ConsumerCount                    - コンシューマー数
JMS.ProducerCount                    - プロデューサー数
JMS.QueueDepth                       - キュー深度

MicroProfile Metricsでの対応:

  • ❌ 標準メトリクスには含まれない
  • ✅ カスタムメトリクスで実装可能
  • ✅ JMX経由で取得可能

4. トランザクションメトリクス

Traditional WASで監視できていた項目:

Transaction.ActiveCount              - アクティブトランザクション数
Transaction.CommittedCount           - コミット数
Transaction.RolledbackCount          - ロールバック数
Transaction.TimeoutCount             - タイムアウト数
Transaction.Duration                 - トランザクション時間

MicroProfile Metricsでの対応:

  • ❌ 標準メトリクスには含まれない
  • ✅ カスタムメトリクスで実装可能

5. Webコンテナ詳細メトリクス

Traditional WASで監視できていた項目:

WebContainer.ResponseTime            - 応答時間(詳細)
WebContainer.ErrorCount              - エラー数(HTTPステータス別)
WebContainer.ConcurrentRequests      - 同時リクエスト数
WebContainer.AsyncRequestCount       - 非同期リクエスト数

MicroProfile Metricsでの対応:

  • ⚠️ 一部のみ提供(servlet_request_total)
  • ✅ カスタムメトリクスで詳細を実装可能

6. ORB(Object Request Broker)メトリクス

Traditional WASで監視できていた項目:

ORB.RequestCount                     - リクエスト数
ORB.ResponseTime                     - 応答時間
ORB.ConnectionCount                  - 接続数

MicroProfile Metricsでの対応:

  • ❌ 標準メトリクスには含まれない
  • ⚠️ Open LibertyではORBサポートが限定的

7. キャッシュメトリクス

Traditional WASで監視できていた項目:

Cache.HitCount                       - キャッシュヒット数
Cache.MissCount                      - キャッシュミス数
Cache.Size                           - キャッシュサイズ
Cache.EvictionCount                  - 退避数

MicroProfile Metricsでの対応:

  • ❌ 標準メトリクスには含まれない
  • ✅ カスタムメトリクスで実装可能

8. ワークロードマネージメントメトリクス

Traditional WASで監視できていた項目:

WLM.RequestCount                     - リクエスト数
WLM.ResponseTime                     - 応答時間
WLM.RoutingDecisions                 - ルーティング決定数

MicroProfile Metricsでの対応:

  • ❌ 標準メトリクスには含まれない
  • ⚠️ Open LibertyではWLM機能なし

9. メモリリーク検出メトリクス

Traditional WASで監視できていた項目:

MemoryLeak.SuspectedLeaks            - 疑わしいリーク数
MemoryLeak.LeakSize                  - リークサイズ

MicroProfile Metricsでの対応:

  • ❌ 標準メトリクスには含まれない
  • ✅ JMXのメモリプール監視で代替可能

監視できなくなる項目の対応策

対応策1: カスタムメトリクスの実装

import org.eclipse.microprofile.metrics.annotation.Counted;
import org.eclipse.microprofile.metrics.annotation.Timed;
import org.eclipse.microprofile.metrics.MetricRegistry;

@ApplicationScoped
public class DatabaseMetrics {
    
    @Inject
    @RegistryType(type = MetricRegistry.Type.APPLICATION)
    MetricRegistry registry;
    
    @Inject
    DataSource dataSource;
    
    @Scheduled(every = "30s")
    public void recordConnectionPoolMetrics() {
        // コネクションプール情報を取得
        int activeConnections = getActiveConnections();
        int idleConnections = getIdleConnections();
        
        // カスタムメトリクスとして記録
        registry.gauge("db_pool_active_connections", () -> activeConnections);
        registry.gauge("db_pool_idle_connections", () -> idleConnections);
    }
}

対応策2: JMX監視の併用

# Zabbix JMX監視を追加
# JMX経由でデータソース、トランザクションなどの詳細情報を取得

対応策3: APMツールの導入

  • Elastic APM
  • Dynatrace
  • New Relic

これらのツールは、コネクションプール、トランザクション、SQLクエリなどを自動的に監視します。

監視できなくなる項目の影響度評価

カテゴリ 影響度 代替手段 推奨対応
データソース/JDBC カスタムメトリクス、JMX 必須
EJB カスタムメトリクス 使用している場合は必須
JMS カスタムメトリクス、JMX 使用している場合は必須
トランザクション カスタムメトリクス 推奨
Webコンテナ詳細 カスタムメトリクス オプション
ORB - 不要(Open Libertyで非推奨)
キャッシュ カスタムメトリクス 使用している場合は推奨

カスタムメトリクス実装の具体的な操作手順

カスタムメトリクスを実装するための、ステップバイステップの操作手順です。

前提条件
  • Open Liberty 25.0.0.12がインストール済み
  • Mavenプロジェクトが作成済み
  • Java 25以上(IBM Semeru Runtime 25推奨)
  • IDEまたはテキストエディタ
操作手順: データソース監視の実装

ステップ1: プロジェクト構造の確認

sensor-api/
├── pom.xml
├── src/
│   └── main/
│       ├── java/
│       │   └── com/
│       │       └── example/
│       │           ├── api/
│       │           │   └── SensorResource.java
│       │           └── metrics/          ← 新規作成
│       │               ├── DataSourceMetrics.java
│       │               └── ConnectionPoolInfo.java
│       ├── resources/
│       └── webapp/
│           └── WEB-INF/
│               └── web.xml
└── target/

ステップ2: pom.xmlに依存関係を追加

# プロジェクトディレクトリに移動
cd /path/to/sensor-api

# pom.xmlを編集
vi pom.xml

以下を<dependencies>セクションに追加:

<dependencies>
    <!-- 既存の依存関係 -->
    
    <!-- MicroProfile Metrics API -->
    <dependency>
        <groupId>org.eclipse.microprofile.metrics</groupId>
        <artifactId>microprofile-metrics-api</artifactId>
        <version>5.0.0</version>
        <scope>provided</scope>
    </dependency>
    
    <!-- CDI API -->
    <dependency>
        <groupId>jakarta.enterprise</groupId>
        <artifactId>jakarta.enterprise.cdi-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
    
    <!-- Annotation API -->
    <dependency>
        <groupId>jakarta.annotation</groupId>
        <artifactId>jakarta.annotation-api</artifactId>
        <version>2.1.1</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

ステップ3: metricsパッケージを作成

# metricsディレクトリを作成
mkdir -p src/main/java/com/example/metrics

ステップ4: ConnectionPoolInfo.javaを作成

# ファイルを作成
vi src/main/java/com/example/metrics/ConnectionPoolInfo.java

以下の内容を貼り付け:

package com.example.metrics;

import javax.management.MBeanServer;
import javax.management.ObjectName;
import java.lang.management.ManagementFactory;
import java.util.Set;

public class ConnectionPoolInfo {
    
    private static final MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
    
    /**
     * データソースのアクティブコネクション数を取得
     */
    public static int getActiveConnections(String dataSourceName) {
        try {
            ObjectName pattern = new ObjectName(
                "WebSphere:type=ConnectionPoolStats,name=" + dataSourceName + ",*"
            );
            Set<ObjectName> names = mbs.queryNames(pattern, null);
            
            if (!names.isEmpty()) {
                ObjectName objectName = names.iterator().next();
                Integer value = (Integer) mbs.getAttribute(objectName, "InUseConnectionCount");
                return value != null ? value : 0;
            }
        } catch (Exception e) {
            System.err.println("Error getting active connections: " + e.getMessage());
        }
        return 0;
    }
    
    /**
     * データソースの空きコネクション数を取得
     */
    public static int getFreeConnections(String dataSourceName) {
        try {
            ObjectName pattern = new ObjectName(
                "WebSphere:type=ConnectionPoolStats,name=" + dataSourceName + ",*"
            );
            Set<ObjectName> names = mbs.queryNames(pattern, null);
            
            if (!names.isEmpty()) {
                ObjectName objectName = names.iterator().next();
                Integer value = (Integer) mbs.getAttribute(objectName, "FreeConnectionCount");
                return value != null ? value : 0;
            }
        } catch (Exception e) {
            System.err.println("Error getting free connections: " + e.getMessage());
        }
        return 0;
    }
    
    /**
     * データソースのプールサイズを取得
     */
    public static int getPoolSize(String dataSourceName) {
        try {
            ObjectName pattern = new ObjectName(
                "WebSphere:type=ConnectionPoolStats,name=" + dataSourceName + ",*"
            );
            Set<ObjectName> names = mbs.queryNames(pattern, null);
            
            if (!names.isEmpty()) {
                ObjectName objectName = names.iterator().next();
                Integer value = (Integer) mbs.getAttribute(objectName, "ManagedConnectionCount");
                return value != null ? value : 0;
            }
        } catch (Exception e) {
            System.err.println("Error getting pool size: " + e.getMessage());
        }
        return 0;
    }
    
    /**
     * データソースの待機スレッド数を取得
     */
    public static int getWaitingThreadCount(String dataSourceName) {
        try {
            ObjectName pattern = new ObjectName(
                "WebSphere:type=ConnectionPoolStats,name=" + dataSourceName + ",*"
            );
            Set<ObjectName> names = mbs.queryNames(pattern, null);
            
            if (!names.isEmpty()) {
                ObjectName objectName = names.iterator().next();
                Integer value = (Integer) mbs.getAttribute(objectName, "WaitingThreadCount");
                return value != null ? value : 0;
            }
        } catch (Exception e) {
            System.err.println("Error getting waiting thread count: " + e.getMessage());
        }
        return 0;
    }
}

ステップ5: DataSourceMetrics.javaを作成

# ファイルを作成
vi src/main/java/com/example/metrics/DataSourceMetrics.java

以下の内容を貼り付け:

package com.example.metrics;

import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import org.eclipse.microprofile.metrics.MetricRegistry;
import org.eclipse.microprofile.metrics.annotation.RegistryType;
import org.eclipse.microprofile.metrics.Gauge;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

@ApplicationScoped
public class DataSourceMetrics {
    
    @Inject
    @RegistryType(type = MetricRegistry.Type.APPLICATION)
    MetricRegistry registry;
    
    private ScheduledExecutorService scheduler;
    
    // データソース名(server.xmlのjndiNameに合わせる)
    private static final String DATASOURCE_NAME = "jdbc/myDataSource";
    
    // メトリクスの値を保持
    private volatile int activeConnections = 0;
    private volatile int idleConnections = 0;
    private volatile int totalConnections = 0;
    private volatile int waitingThreads = 0;
    private volatile double utilizationPercent = 0.0;
    
    @PostConstruct
    public void init() {
        // Gaugeメトリクスを登録
        registry.gauge("datasource_active_connections", 
            (Gauge<Integer>) () -> activeConnections,
            "Active database connections");
        
        registry.gauge("datasource_idle_connections", 
            (Gauge<Integer>) () -> idleConnections,
            "Idle database connections");
        
        registry.gauge("datasource_total_connections", 
            (Gauge<Integer>) () -> totalConnections,
            "Total database connections");
        
        registry.gauge("datasource_waiting_threads", 
            (Gauge<Integer>) () -> waitingThreads,
            "Threads waiting for database connection");
        
        registry.gauge("datasource_utilization_percent", 
            (Gauge<Double>) () -> utilizationPercent,
            "Database connection pool utilization percentage");
        
        // 30秒ごとにメトリクスを更新するスケジューラーを開始
        scheduler = Executors.newSingleThreadScheduledExecutor();
        scheduler.scheduleAtFixedRate(this::updateMetrics, 0, 30, TimeUnit.SECONDS);
        
        System.out.println("DataSourceMetrics initialized");
    }
    
    @PreDestroy
    public void destroy() {
        if (scheduler != null) {
            scheduler.shutdown();
        }
    }
    
    /**
     * メトリクスを更新
     */
    private void updateMetrics() {
        try {
            // JMX経由でコネクションプール情報を取得
            activeConnections = ConnectionPoolInfo.getActiveConnections(DATASOURCE_NAME);
            idleConnections = ConnectionPoolInfo.getFreeConnections(DATASOURCE_NAME);
            totalConnections = ConnectionPoolInfo.getPoolSize(DATASOURCE_NAME);
            waitingThreads = ConnectionPoolInfo.getWaitingThreadCount(DATASOURCE_NAME);
            
            // 使用率を計算
            if (totalConnections > 0) {
                utilizationPercent = (double) activeConnections / totalConnections * 100.0;
            } else {
                utilizationPercent = 0.0;
            }
            
            System.out.println(String.format(
                "DataSource Metrics - Active: %d, Idle: %d, Total: %d, Utilization: %.2f%%",
                activeConnections, idleConnections, totalConnections, utilizationPercent
            ));
            
        } catch (Exception e) {
            System.err.println("Error updating datasource metrics: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

ステップ6: プロジェクトをビルド

# Mavenでビルド
mvn clean package

# 成功すると target/sensor-api.war が生成される
ls -l target/sensor-api.war

ステップ7: WARファイルをデプロイ

# 既存のWARファイルをバックアップ
cp /home/libertyuser/wlp/usr/servers/sensorServer/apps/sensor-api.war \
   /home/libertyuser/wlp/usr/servers/sensorServer/apps/sensor-api.war.backup

# 新しいWARファイルをコピー
cp target/sensor-api.war /home/libertyuser/wlp/usr/servers/sensorServer/apps/

# Open Libertyを再起動
/home/libertyuser/wlp/bin/server stop sensorServer
/home/libertyuser/wlp/bin/server start sensorServer

ステップ8: メトリクスの確認

# アプリケーションメトリクスを確認
curl http://localhost:8080/metrics/application

# データソースメトリクスが表示されることを確認
curl http://localhost:8080/metrics/application | grep datasource

# 期待される出力:
# datasource_active_connections{mp_scope="application"} 2.0
# datasource_idle_connections{mp_scope="application"} 8.0
# datasource_total_connections{mp_scope="application"} 10.0
# datasource_utilization_percent{mp_scope="application"} 20.0
# datasource_waiting_threads{mp_scope="application"} 0.0

ステップ9: ログで動作確認

# Open Libertyのログを確認
tail -f /home/libertyuser/wlp/usr/servers/sensorServer/logs/messages.log

# 以下のようなログが30秒ごとに出力されることを確認:
# DataSource Metrics - Active: 2, Idle: 8, Total: 10, Utilization: 20.00%

ステップ10: Zabbixで監視設定

前述の「Zabbixでの監視設定」セクションに従って、HTTP Agentアイテムを作成します。

トラブルシューティング

問題1: メトリクスが表示されない

# アプリケーションが正しくデプロイされているか確認
curl http://localhost:8080/metrics/application

# DataSourceMetricsクラスが初期化されているか確認
grep "DataSourceMetrics initialized" /home/libertyuser/wlp/usr/servers/sensorServer/logs/messages.log

問題2: JMXでコネクションプール情報が取得できない

# JMX MBeanが登録されているか確認
# jconsoleまたはjmxterm を使用して確認

# データソース名が正しいか確認
grep "jndiName" /home/libertyuser/wlp/usr/servers/sensorServer/server.xml

問題3: ビルドエラー

# 依存関係を確認
mvn dependency:tree

# クリーンビルド
mvn clean install -U
まとめ

実装に必要な操作:

  1. ✅ pom.xmlに依存関係を追加(コピー&ペースト)
  2. ✅ 2つのJavaファイルを作成(コピー&ペースト)
  3. ✅ Mavenでビルド(1コマンド)
  4. ✅ WARファイルをデプロイ(コピー)
  5. ✅ Open Libertyを再起動(2コマンド)
  6. ✅ メトリクスを確認(curlコマンド)
  7. ✅ Zabbixで監視設定(Web UI操作)

所要時間:

  • 初回実装: 1-2時間
  • 2回目以降: 30分

スキルレベル:

  • Java基礎知識
  • Maven基礎知識
  • コピー&ペーストができればOK

これで、カスタムメトリクスの実装が完了します!

最も影響が大きい項目の監視実装ガイド

1. データソース/JDBCメトリクスの監視実装

最も影響が大きいデータソース監視を、Open Liberty環境で実装する具体的な方法です。

方法A: カスタムMicroProfile Metricsの実装(推奨)

ステップ1: 依存関係の追加

<!-- pom.xml -->
<dependency>
    <groupId>org.eclipse.microprofile.metrics</groupId>
    <artifactId>microprofile-metrics-api</artifactId>
    <version>5.0.0</version>
    <scope>provided</scope>
</dependency>

ステップ2: データソース監視クラスの作成

package com.example.metrics;

import javax.annotation.Resource;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
import org.eclipse.microprofile.metrics.MetricRegistry;
import org.eclipse.microprofile.metrics.annotation.RegistryType;
import io.smallrye.common.annotation.Scheduled;

@ApplicationScoped
public class DataSourceMetrics {
    
    @Resource(lookup = "jdbc/myDataSource")
    private DataSource dataSource;
    
    @Inject
    @RegistryType(type = MetricRegistry.Type.APPLICATION)
    MetricRegistry registry;
    
    // 30秒ごとにメトリクスを更新
    @Scheduled(every = "30s")
    public void updateMetrics() {
        try {
            // コネクションプール情報を取得
            int activeConnections = getActiveConnections();
            int idleConnections = getIdleConnections();
            int totalConnections = getTotalConnections();
            int waitingThreads = getWaitingThreads();
            
            // Gaugeメトリクスとして登録
            registry.gauge("datasource_active_connections", 
                () -> activeConnections,
                "Active database connections");
            
            registry.gauge("datasource_idle_connections", 
                () -> idleConnections,
                "Idle database connections");
            
            registry.gauge("datasource_total_connections", 
                () -> totalConnections,
                "Total database connections");
            
            registry.gauge("datasource_waiting_threads", 
                () -> waitingThreads,
                "Threads waiting for database connection");
            
            // 使用率を計算
            double utilizationPercent = (double) activeConnections / totalConnections * 100;
            registry.gauge("datasource_utilization_percent", 
                () -> utilizationPercent,
                "Database connection pool utilization percentage");
            
        } catch (Exception e) {
            // エラーハンドリング
            registry.counter("datasource_metrics_error").inc();
        }
    }
    
    private int getActiveConnections() {
        // Liberty固有のAPIまたはJMXで取得
        // 実装例は後述
        return 0;
    }
    
    private int getIdleConnections() {
        return 0;
    }
    
    private int getTotalConnections() {
        return 0;
    }
    
    private int getWaitingThreads() {
        return 0;
    }
}

ステップ3: JMX経由でコネクションプール情報を取得

import javax.management.MBeanServer;
import javax.management.ObjectName;
import java.lang.management.ManagementFactory;

public class ConnectionPoolInfo {
    
    private static final MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
    
    public static int getActiveConnections(String dataSourceName) {
        try {
            ObjectName objectName = new ObjectName(
                "WebSphere:type=ConnectionPoolStats,name=" + dataSourceName + ",*"
            );
            return (Integer) mbs.getAttribute(objectName, "NumConnectionsInUse");
        } catch (Exception e) {
            return -1;
        }
    }
    
    public static int getFreeConnections(String dataSourceName) {
        try {
            ObjectName objectName = new ObjectName(
                "WebSphere:type=ConnectionPoolStats,name=" + dataSourceName + ",*"
            );
            return (Integer) mbs.getAttribute(objectName, "NumFreeConnections");
        } catch (Exception e) {
            return -1;
        }
    }
    
    public static int getPoolSize(String dataSourceName) {
        try {
            ObjectName objectName = new ObjectName(
                "WebSphere:type=ConnectionPoolStats,name=" + dataSourceName + ",*"
            );
            return (Integer) mbs.getAttribute(objectName, "PoolSize");
        } catch (Exception e) {
            return -1;
        }
    }
    
    public static int getWaitingThreadCount(String dataSourceName) {
        try {
            ObjectName objectName = new ObjectName(
                "WebSphere:type=ConnectionPoolStats,name=" + dataSourceName + ",*"
            );
            return (Integer) mbs.getAttribute(objectName, "WaitingThreadCount");
        } catch (Exception e) {
            return -1;
        }
    }
}

ステップ4: server.xmlでデータソースを設定

<server>
    <featureManager>
        <feature>jdbc-4.3</feature>
        <feature>mpMetrics-5.0</feature>
    </featureManager>
    
    <dataSource id="myDataSource" jndiName="jdbc/myDataSource">
        <jdbcDriver libraryRef="PostgreSQLLib"/>
        <properties.postgresql 
            serverName="localhost" 
            portNumber="5432"
            databaseName="mydb"
            user="dbuser"
            password="dbpass"/>
        <connectionManager 
            maxPoolSize="50" 
            minPoolSize="10"
            connectionTimeout="30s"
            maxIdleTime="30m"
            reapTime="3m"/>
    </dataSource>
    
    <library id="PostgreSQLLib">
        <fileset dir="/path/to/jdbc/driver" includes="postgresql-*.jar"/>
    </library>
</server>

ステップ5: Zabbixでメトリクスを取得

# HTTP Agentアイテムの作成
Name: Open Liberty - DataSource Active Connections
Type: HTTP agent
Key: openliberty.http.datasource_active_connections
URL: http://192.168.200.102:8080/metrics/application
Preprocessing:
  Regular expression: datasource_active_connections\{[^}]*\} (\S+)
方法B: JMX監視の設定(詳細情報用)

ステップ1: server.xmlでJMXを有効化

<server>
    <featureManager>
        <feature>restConnector-2.0</feature>
    </featureManager>
    
    <quickStartSecurity userName="admin" userPassword="adminpwd"/>
    
    <keyStore id="defaultKeyStore" password="Liberty"/>
    
    <httpEndpoint id="defaultHttpEndpoint"
                  httpPort="9080"
                  httpsPort="9443">
        <tcpOptions soReuseAddr="true"/>
    </httpEndpoint>
</server>

ステップ2: Zabbix Java Gatewayの設定

# Zabbix Serverの設定ファイル
# /etc/zabbix/zabbix_server.conf

JavaGateway=127.0.0.1
JavaGatewayPort=10052
StartJavaPollers=5

ステップ3: ZabbixホストにJMX Interfaceを追加

  1. ConfigurationHosts → ホストをクリック
  2. Interfaces タブで AddJMX を選択
  3. IP address: 192.168.200.102
  4. Port: 9443
  5. Update をクリック

ステップ4: JMX監視アイテムの作成

Name: Open Liberty - DataSource Active Connections (JMX)
Type: JMX agent
Key: jmx["WebSphere:type=ConnectionPoolStats,name=jdbc/myDataSource","NumConnectionsInUse"]
JMX endpoint: service:jmx:rest://192.168.200.102:9443/IBMJMXConnectorREST
Username: admin
Password: adminpwd

2. トランザクションメトリクスの監視実装

カスタムメトリクスの実装:

package com.example.metrics;

import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.transaction.TransactionManager;
import org.eclipse.microprofile.metrics.MetricRegistry;
import org.eclipse.microprofile.metrics.annotation.RegistryType;
import io.smallrye.common.annotation.Scheduled;

@ApplicationScoped
public class TransactionMetrics {
    
    @Inject
    @RegistryType(type = MetricRegistry.Type.APPLICATION)
    MetricRegistry registry;
    
    private long committedCount = 0;
    private long rolledbackCount = 0;
    private long activeCount = 0;
    
    @Scheduled(every = "10s")
    public void updateMetrics() {
        try {
            // トランザクション情報を取得(JMX経由)
            activeCount = getActiveTransactionCount();
            
            registry.gauge("transaction_active_count", 
                () -> activeCount,
                "Active transaction count");
            
            registry.counter("transaction_committed_total", 
                "Total committed transactions");
            
            registry.counter("transaction_rolledback_total", 
                "Total rolled back transactions");
            
        } catch (Exception e) {
            registry.counter("transaction_metrics_error").inc();
        }
    }
    
    private long getActiveTransactionCount() {
        // JMX経由で取得
        return 0;
    }
}

3. Zabbixでの監視設定

データソース監視アイテム(5個):

  1. Active Connections
Name: Open Liberty - DataSource Active Connections
Key: openliberty.http.datasource_active_connections
Pattern: datasource_active_connections\{[^}]*\} (\S+)
  1. Idle Connections
Name: Open Liberty - DataSource Idle Connections
Key: openliberty.http.datasource_idle_connections
Pattern: datasource_idle_connections\{[^}]*\} (\S+)
  1. Total Connections
Name: Open Liberty - DataSource Total Connections
Key: openliberty.http.datasource_total_connections
Pattern: datasource_total_connections\{[^}]*\} (\S+)
  1. Utilization Percent
Name: Open Liberty - DataSource Utilization
Key: openliberty.http.datasource_utilization_percent
Pattern: datasource_utilization_percent\{[^}]*\} (\S+)
Units: %
  1. Waiting Threads
Name: Open Liberty - DataSource Waiting Threads
Key: openliberty.http.datasource_waiting_threads
Pattern: datasource_waiting_threads\{[^}]*\} (\S+)

トリガー設定:

Name: DataSource - High Utilization
Expression: last(/Host/openliberty.http.datasource_utilization_percent)>80
Severity: Warning

Name: DataSource - Critical Utilization
Expression: last(/Host/openliberty.http.datasource_utilization_percent)>90
Severity: High

Name: DataSource - Waiting Threads
Expression: last(/Host/openliberty.http.datasource_waiting_threads)>5
Severity: Average

グラフ設定:

Name: Open Liberty - DataSource Statistics
Items:
  - DataSource Active Connections (青色)
  - DataSource Idle Connections (緑色)
  - DataSource Waiting Threads (赤色)

4. 実装の優先順位

Phase 1(即座に実装):

  1. データソース監視(カスタムメトリクス)
    • Active/Idle/Total Connections
    • Utilization Percent

Phase 2(1週間以内):
2. データソース詳細監視

  • Waiting Threads
  • Connection Timeout Count
  1. トランザクション監視
    • Active/Committed/Rolledback Count

Phase 3(1ヶ月以内):
4. JMX監視の追加(詳細情報用)
5. APMツールの検討(大規模環境)

5. 動作確認

メトリクスの確認:

# カスタムメトリクスが公開されているか確認
curl http://localhost:8080/metrics/application | grep datasource

# 期待される出力:
# datasource_active_connections{mp_scope="application"} 5.0
# datasource_idle_connections{mp_scope="application"} 15.0
# datasource_total_connections{mp_scope="application"} 20.0
# datasource_utilization_percent{mp_scope="application"} 25.0

まとめ

最も影響が大きい項目の監視実装:

  1. データソース監視

    • カスタムMicroProfile Metricsで実装
    • JMX経由でコネクションプール情報を取得
    • Zabbix HTTP Agentで監視
  2. トランザクション監視

    • カスタムメトリクスで実装
    • JMX経由でトランザクション情報を取得
  3. 実装工数

    • データソース監視: 1-2日
    • トランザクション監視: 1日
    • Zabbix設定: 半日
  4. メンテナンス性

    • MicroProfile Metrics標準に準拠
    • 他のMicroProfile実装でも動作
    • Prometheusなど他の監視ツールでも利用可能

これで、Traditional WASのPMIで監視していた重要な項目を、Open Liberty環境でも監視できるようになります!

| WLM | 低 | - | 不要(Open Libertyで非対応) |
| メモリリーク検出 | 中 | JMX、APM | 推奨 |

実用的な対応方針

最小構成(基本的なアプリケーション)

  • MicroProfile Metrics基本メトリクスのみ
  • データソース監視はカスタムメトリクスで追加

標準構成(一般的な本番環境)

  • MicroProfile Metrics基本メトリクス
  • データソース監視(カスタムメトリクス)
  • トランザクション監視(カスタムメトリクス)
  • JMX監視(詳細情報用)

高度な構成(大規模本番環境)

  • MicroProfile Metrics基本メトリクス
  • 全カスタムメトリクス実装
  • JMX監視
  • APMツール導入

結論

MicroProfile Metricsで監視できなくなる主な項目:

  1. ❌ データソース/JDBCメトリクス(影響度: 高)
  2. ❌ EJBメトリクス(影響度: 中)
  3. ❌ JMSメトリクス(影響度: 中)
  4. ❌ トランザクション詳細メトリクス(影響度: 高)
  5. ❌ Webコンテナ詳細メトリクス(影響度: 低)

対応策:

  • ✅ カスタムメトリクスで実装(推奨)
  • ✅ JMX監視を併用
  • ✅ APMツールを導入(大規模環境)

重要:
MicroProfile Metricsは「基本的な監視」を提供します。Traditional WASのPMIのような「包括的な監視」が必要な場合は、カスタムメトリクスやJMXの併用が必須です。

ただし、多くのアプリケーションでは、MicroProfile Metricsの基本メトリクス + データソース監視のカスタムメトリクスで十分な場合が多いです。

  • ✅ 標準化されたメトリクス形式
  • ✅ 軽量で高速
  • ✅ 他のツール(Prometheus、Grafanaなど)とも連携可能

Traditional WASからOpen Libertyへの移行は、監視の観点からも大きなメリットがあります。

ネットワーク依存

  • 外部API可用性: 依存する外部サービスの死活監視
  • DNS解決時間: DNS応答時間
  • SSL証明書有効期限: 証明書の期限切れ警告

7. セキュリティ監視

  • ログイン試行: 失敗したログイン試行
  • 不正アクセス: 403/401エラーの頻度
  • 異常なトラフィックパターン: DDoS攻撃の兆候
  • ファイル改ざん: 重要ファイルの変更検知

8. Zabbix Agentの設定例

システムメトリクスの追加

# /etc/zabbix/zabbix_agentd.conf に追加

# カスタムメトリクス: ディスク使用率
UserParameter=disk.usage[*],df -h $1 | tail -1 | awk '{print $$5}' | sed 's/%//'

# カスタムメトリクス: プロセス数
UserParameter=proc.count,ps aux | wc -l

# カスタムメトリクス: TCP接続数
UserParameter=tcp.connections[*],netstat -an | grep $1 | wc -l

# カスタムメトリクス: ログエラー数
UserParameter=log.error.count,grep -c "ERROR" /home/libertyuser/wlp/usr/servers/sensorServer/logs/messages.log

9. 推奨アラート設定

緊急度: High

  • ヒープメモリ使用率 > 95%
  • ディスク使用率 > 90%
  • アプリケーションプロセス停止
  • OutOfMemoryError発生

緊急度: Average

  • ヒープメモリ使用率 > 80%
  • CPU使用率 > 80% (5分間継続)
  • GC時間 > 1秒
  • エラー率 > 5%

緊急度: Warning

  • ヒープメモリ使用率 > 70%
  • ディスク使用率 > 80%
  • レスポンスタイム > 3秒
  • スレッド数 > 150

10. 監視ダッシュボードの構成例

ダッシュボード1: システム概要

  • サーバー稼働時間
  • CPU/メモリ/ディスク使用率
  • ネットワークトラフィック
  • アクティブアラート

ダッシュボード2: Javaアプリケーション

  • ヒープメモリ使用状況
  • GC統計
  • スレッド数
  • リクエスト/秒

ダッシュボード3: ビジネスメトリクス

  • センサーデータ取得状況
  • API応答時間
  • エラー率
  • アクティブセッション数

実装の優先順位

  1. Phase 1(即座に実装)

    • OS基本メトリクス(CPU、メモリ、ディスク)
    • Open Liberty基本メトリクス(本ドキュメントの内容)
    • プロセス死活監視
  2. Phase 2(1週間以内)

    • GC詳細監視
    • ログ監視
    • アラート設定
  3. Phase 3(1ヶ月以内)

    • ビジネスメトリクス
    • 外部依存サービス監視
    • 包括的なダッシュボード

まとめ

Zabbixで Open Liberty 25を監視するには:

  1. 外部スクリプト方式(推奨)

    • シンプルで確実
    • Prometheus形式を直接パース
    • 29種類のメトリクスすべてに対応
  2. HTTP Agent方式

    • Zabbix 5.0以降で利用可能
    • 正規表現でメトリクスを抽出
    • より柔軟な設定が可能

参考: Open Liberty 25でmpMetrics-5.0を有効化する方法

このドキュメントの前提条件として、Open Liberty 25でmpMetrics-5.0機能が有効化されている必要があります。
以下の手順で有効化できます。

方法1: server.xmlで有効化(推奨)

Open Libertyのserver.xml設定ファイルにmpMetrics-5.0フィーチャーを追加します。

ファイルパス例:

/home/libertyuser/wlp/usr/servers/sensorServer/server.xml

設定内容:

<?xml version="1.0" encoding="UTF-8"?>
<server description="Sensor API Server">

    <!-- フィーチャーマネージャー -->
    <featureManager>
        <feature>restfulWS-3.1</feature>
        <feature>jsonb-3.0</feature>
        <feature>cdi-4.0</feature>
        <feature>mpMetrics-5.0</feature>  <!-- この行を追加 -->
    </featureManager>

    <!-- HTTPエンドポイント -->
    <httpEndpoint id="defaultHttpEndpoint"
                  httpPort="8080"
                  httpsPort="9443"
                  host="*" />

    <!-- Webアプリケーション -->
    <webApplication id="sensorAPI" 
                    location="sensor-api.war" 
                    contextRoot="/">
    </webApplication>

</server>

方法2: コマンドラインで確認

mpMetrics-5.0が有効化されているか確認するには:

# Open Libertyのログを確認
tail -f /home/libertyuser/wlp/usr/servers/sensorServer/logs/messages.log

# 以下のようなメッセージが表示されればOK
# [AUDIT   ] CWWKF0012I: The server installed the following features: [cdi-4.0, jsonb-3.0, mpMetrics-5.0, restfulWS-3.1].

方法3: メトリクスエンドポイントの確認

mpMetrics-5.0が正しく動作しているか確認:

# メトリクスエンドポイントにアクセス
curl http://localhost:8080/metrics

# または特定のメトリクスを確認
curl http://localhost:8080/metrics | grep memory_usedHeap_bytes

期待される出力例:

# TYPE base_memory_usedHeap_bytes gauge
# HELP base_memory_usedHeap_bytes Displays the amount of used heap memory in bytes.
base_memory_usedHeap_bytes 45678912.0

mpMetrics-5.0で利用可能なメトリクス

mpMetrics-5.0を有効化すると、以下のカテゴリのメトリクスが利用可能になります:

  1. Base Metrics(基本メトリクス)

    • JVMメモリ使用量
    • スレッド数
    • CPU使用率
    • GC統計
    • クラスローダー情報
  2. Vendor Metrics(ベンダー固有メトリクス)

    • スレッドプール統計
    • サーブレット統計
    • セッション管理
    • コネクションプール
  3. Application Metrics(アプリケーションメトリクス)

    • カスタムメトリクス(アプリケーションで定義)

メトリクスエンドポイントのURL

  • 全メトリクス: http://localhost:8080/metrics
  • Base メトリクスのみ: http://localhost:8080/metrics/base
  • Vendor メトリクスのみ: http://localhost:8080/metrics/vendor
  • Application メトリクスのみ: http://localhost:8080/metrics/application

トラブルシューティング

問題1: メトリクスエンドポイントにアクセスできない

原因: mpMetrics-5.0が有効化されていない

解決策:

# server.xmlを確認
cat /home/libertyuser/wlp/usr/servers/sensorServer/server.xml | grep mpMetrics

# フィーチャーが見つからない場合は追加
vi /home/libertyuser/wlp/usr/servers/sensorServer/server.xml

# サーバーを再起動
/home/libertyuser/wlp/bin/server stop sensorServer
/home/libertyuser/wlp/bin/server start sensorServer

問題2: 404 Not Foundエラー

原因: Open Libertyが起動していない、またはポートが異なる

解決策:

# サーバーの状態を確認
/home/libertyuser/wlp/bin/server status sensorServer

# ポートを確認
netstat -tuln | grep 8080

# ログを確認
tail -f /home/libertyuser/wlp/usr/servers/sensorServer/logs/messages.log

問題3: メトリクスが空または一部取得できない

原因: アプリケーションがまだ初期化されていない

解決策:

# アプリケーションに数回アクセスしてメトリクスを生成
curl http://localhost:8080/api/temperature

# その後メトリクスを確認
curl http://localhost:8080/metrics

参考リンク

Open Libertyのサポート

Open Libertyのサポートを受ける方法

Open Libertyはオープンソースプロジェクトですが、複数のサポートオプションがあります。

1. コミュニティサポート(無料)

Open Liberty公式コミュニティ

利用方法:

特徴:

  • ✅ 完全無料
  • ✅ コミュニティメンバーや開発者が回答
  • ✅ バグ報告や機能要望が可能
  • ⚠️ 回答時間は保証されない
  • ⚠️ 日本語サポートは限定的

推奨される使い方:

  • 技術的な質問や問題の共有
  • バグ報告(再現手順を明確に記載)
  • 機能要望の提案
  • ドキュメントの改善提案
日本語コミュニティ

利用方法:

  • Qiita(タグ: openliberty
  • Zenn(トピック: openliberty
  • 日本のJavaユーザーグループ

特徴:

  • ✅ 日本語で質問可能
  • ✅ 日本のユーザーコミュニティ
  • ⚠️ 回答者が限定的

2. IBM Support(有料)

Open LibertyはIBMが開発・メンテナンスしているため、IBMから商用サポートを受けることができます。

IBM WebSphere Liberty(商用版)

サポート内容:

  • ✅ 24時間365日のテクニカルサポート
  • ✅ 日本語サポート対応
  • ✅ SLA(Service Level Agreement)保証
  • ✅ セキュリティパッチの優先提供
  • ✅ パフォーマンスチューニング支援
  • ✅ 本番環境での問題解決支援

対象:

  • IBM WebSphere Liberty(商用版)のライセンス購入者
  • IBM Cloud上でWebSphere Libertyを使用している場合

サポートレベル:

  • Severity 1(重大): 1時間以内に初回応答
  • Severity 2(高): 2時間以内に初回応答
  • Severity 3(中): 4時間以内に初回応答
  • Severity 4(低): 1営業日以内に初回応答

料金:

  • ライセンス費用に含まれる(年間保守契約)
  • 詳細はIBM営業担当に問い合わせ

問い合わせ方法:

  1. IBM Support Portalにログイン
  2. ケースをオープン
  3. 製品: WebSphere Liberty
  4. 問題の詳細を記載
Red Hat OpenShift上のOpen Liberty

サポート内容:

  • ✅ Red Hatのサポート契約に含まれる
  • ✅ OpenShift上でのOpen Liberty運用サポート
  • ✅ コンテナ環境での問題解決

対象:

  • Red Hat OpenShiftのサブスクリプション契約者

問い合わせ方法:

3. サードパーティサポート

システムインテグレーター(SI)

多くのSIベンダーがOpen Libertyのサポートサービスを提供しています。

主なサービス:

  • 導入支援
  • 運用保守
  • トラブルシューティング
  • パフォーマンスチューニング
  • 移行支援(Traditional WAS → Open Liberty)

主なベンダー(日本):

  • 日本IBM
  • 富士通
  • NTTデータ
  • 日立製作所
  • NEC
  • その他多数のSIベンダー
コンサルティング会社

サービス内容:

  • アーキテクチャ設計支援
  • ベストプラクティスの提供
  • トレーニング
  • コードレビュー

サポートを受けるための準備

効果的な質問の仕方

必須情報:

  1. 環境情報

    • Open Libertyのバージョン(例: 25.0.0.12)
    • Java/JDKのバージョン(例: IBM Semeru Runtime 25 (OpenJ9))
    • OSとバージョン(例: Ubuntu 22.04)
    • デプロイ環境(例: Docker、Kubernetes、ベアメタル)
  2. 問題の詳細

    • 何をしようとしているか
    • 期待される動作
    • 実際の動作
    • エラーメッセージ(全文)
  3. 再現手順

    • 問題を再現するための具体的な手順
    • 最小限の再現コード(可能であれば)
  4. ログとスタックトレース

    • messages.logの関連部分
    • スタックトレース全文
    • console.logの出力

質問例(良い例):

【環境】
- Open Liberty: 25.0.0.12
- Java: IBM Semeru Runtime 25 (OpenJ9)
- OS: Ubuntu 22.04
- デプロイ: Docker

【問題】
mpMetrics-5.0を有効化しましたが、/metrics エンドポイントが404エラーになります。

【期待される動作】
http://localhost:9080/metrics にアクセスすると、メトリクスが表示される

【実際の動作】
404 Not Found エラーが返される

【server.xml】
<featureManager>
    <feature>mpMetrics-5.0</feature>
</featureManager>

【ログ】
[ERROR] CWWKF0001E: A feature definition could not be found for mpMetrics-5.0

【試したこと】
- サーバーを再起動
- server.xmlの構文を確認

サポートを受けやすくするためのベストプラクティス

  1. ドキュメントを先に確認

  2. 最新バージョンで確認

    • 可能であれば最新バージョンで問題を再現
    • 既知の問題が修正されている可能性
  3. 最小限の再現コードを作成

    • 問題を再現する最小限のコード
    • 不要な依存関係を削除
  4. ログレベルを上げる

    • トラブルシューティング時はTRACEレベルに設定
    • 関連するコンポーネントのログを収集

サポート契約が必要なケース

以下の場合は、商用サポート契約を検討することを推奨します:

本番環境での使用

  • 24時間365日のサポートが必要
  • SLA保証が必要
  • 迅速な問題解決が必要
  • セキュリティパッチの優先提供が必要

ミッションクリティカルなシステム

  • ダウンタイムが許されない
  • 金融、医療、公共インフラなど
  • コンプライアンス要件がある

大規模システム

  • 複数のサーバーを運用
  • 高トラフィック環境
  • 複雑なアーキテクチャ

移行プロジェクト

  • Traditional WASからの移行
  • 他のアプリケーションサーバーからの移行
  • 専門家のアドバイスが必要

コミュニティサポートで十分なケース

以下の場合は、無料のコミュニティサポートで十分です:

開発環境・テスト環境

  • 学習目的
  • プロトタイプ開発
  • 個人プロジェクト

小規模システム

  • 社内ツール
  • 低トラフィック環境
  • ダウンタイムが許容される

技術検証

  • POC(Proof of Concept)
  • 技術評価
  • ベンチマーク

まとめ

Open Libertyのサポートオプション:

サポート種類 費用 対応時間 日本語 SLA 推奨用途
コミュニティ 無料 不定 限定的 なし 開発・学習・小規模
IBM Support 有料 24/365 あり あり 本番・ミッションクリティカル
SI/コンサル 有料 契約次第 あり 契約次第 導入・移行・運用

推奨される選択:

  • 開発・テスト環境: コミュニティサポート
  • 本番環境(小規模): コミュニティサポート + SIの運用保守
  • 本番環境(大規模): IBM Support + SIの運用保守
  • ミッションクリティカル: IBM Support必須

これで、Open Libertyの監視設定とサポート体制が整います!

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?