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にログイン
- ブラウザでZabbix Web UIにアクセス
- 管理者アカウントでログイン
ステップ2: ホストの設定画面を開く
- Configuration → Hosts をクリック
- 登録したRaspberry Piのホスト名をクリック
- Items タブをクリック
- 右上の 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
設定手順:
-
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と入力 - 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
設定手順:
-
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と入力(requests per second) - Preprocessing タブをクリック
-
Add をクリックして以下を追加:
-
Type:
Change per secondを選択
-
Type:
- 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:
- Regular expression: memory_usedHeap_bytes{[^}]*} (\S+)
Output: \1 - 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:
- 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:
- 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:
- 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:
- 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:
- 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:
- 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:
- Regular expression: cpu_processCpuLoad_percent{[^}]*} (\S+)
Output: \1 - 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:
- 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:
- 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:
- 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:
- 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:
- 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
- 正規表現パターンの修正
Open Liberty 25のMicroProfile Metrics 5.0では、以下の形式になります:
- メトリクス名:
gc_totalまたはgc_time_seconds(base_プレフィックスなし) - 属性:
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"という属性が含まれます - カンマとスペースの後に閉じ括弧:
,} - バックスラッシュで閉じ括弧をエスケープ:
\}
アイテムの再設定手順:
- 該当アイテムを開く
- Preprocessing タブをクリック
- 正規表現パターンを上記の正しいパターンに変更
- Test ボタンで動作確認
- Update をクリック
テスト方法:
-
curl http://192.168.200.102:8080/metrics | grep gcの出力をコピー -
Zabbixのアイテム設定画面で Test をクリック
-
コピーした出力を貼り付けて、正規表現が正しく動作するか確認
-
値が正しく抽出されることを確認してから保存
-
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
設定手順:
-
Name:
Open Liberty - Max Heap (HTTP)と入力 -
Type:
HTTP agentを選択 -
Key:
openliberty.http.memory_maxHeap_bytesと入力 -
URL:
http://192.168.200.102:8080/metricsと入力(ホストのIPアドレスに変更) -
Request type:
GETを選択 -
Retrieve mode:
Bodyを選択 -
Required status codes:
200と入力 -
Type of information:
Numeric (float)を選択 -
Units:
Bと入力 -
Update interval:
10mと入力(最大値は変わらないため頻繁に取得不要) -
Applications:
Javaを選択または作成 - Preprocessing タブをクリック
-
Add をクリックして以下を追加:
-
Type:
Regular expression -
Parameters:
- Pattern:
memory_maxHeap_bytes\{[^}]*\} (\S+) - Output:
\1
- Pattern:
-
Type:
- 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
設定手順:
-
Name:
Open Liberty - Committed Heap (HTTP)と入力 -
Type:
HTTP agentを選択 -
Key:
openliberty.http.memory_committedHeap_bytesと入力 -
URL:
http://192.168.200.102:8080/metricsと入力(ホストのIPアドレスに変更) -
Request type:
GETを選択 -
Retrieve mode:
Bodyを選択 -
Required status codes:
200と入力 -
Type of information:
Numeric (float)を選択 -
Units:
Bと入力 -
Update interval:
5mと入力 -
Applications:
Javaを選択または作成 - Preprocessing タブをクリック
-
Add をクリックして以下を追加:
-
Type:
Regular expression -
Parameters:
- Pattern:
memory_committedHeap_bytes\{[^}]*\} (\S+) - Output:
\1
- Pattern:
-
Type:
- 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
設定手順:
-
Name:
Open Liberty - Daemon Thread Count (HTTP)と入力 -
Type:
HTTP agentを選択 -
Key:
openliberty.http.thread_daemon_countと入力 -
URL:
http://192.168.200.102:8080/metricsと入力(ホストのIPアドレスに変更) -
Request type:
GETを選択 -
Retrieve mode:
Bodyを選択 -
Required status codes:
200と入力 -
Type of information:
Numeric (unsigned)を選択 -
Update interval:
5mと入力 -
Applications:
Javaを選択または作成 - Preprocessing タブをクリック
-
Add をクリックして以下を追加:
-
Type:
Regular expression -
Parameters:
- Pattern:
thread_daemon_count\{[^}]*\} (\S+) - Output:
\1
- Pattern:
-
Type:
- 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
設定手順:
-
Name:
Open Liberty - Max Thread Count (HTTP)と入力 -
Type:
HTTP agentを選択 -
Key:
openliberty.http.thread_max_countと入力 -
URL:
http://192.168.200.102:8080/metricsと入力(ホストのIPアドレスに変更) -
Request type:
GETを選択 -
Retrieve mode:
Bodyを選択 -
Required status codes:
200と入力 -
Type of information:
Numeric (unsigned)を選択 -
Update interval:
10mと入力 -
Applications:
Javaを選択または作成 - Preprocessing タブをクリック
-
Add をクリックして以下を追加:
-
Type:
Regular expression -
Parameters:
- Pattern:
thread_max_count\{[^}]*\} (\S+) - Output:
\1
- Pattern:
-
Type:
- 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
設定手順:
-
Name:
Open Liberty - Loaded Classes (HTTP)と入力 -
Type:
HTTP agentを選択 -
Key:
openliberty.http.classloader_loadedClasses_countと入力 -
URL:
http://192.168.200.102:8080/metricsと入力(ホストのIPアドレスに変更) -
Request type:
GETを選択 -
Retrieve mode:
Bodyを選択 -
Required status codes:
200と入力 -
Type of information:
Numeric (unsigned)を選択 -
Update interval:
10mと入力 -
Applications:
Javaを選択または作成 - Preprocessing タブをクリック
-
Add をクリックして以下を追加:
-
Type:
Regular expression -
Parameters:
- Pattern:
classloader_loadedClasses_count\{[^}]*\} (\S+) - Output:
\1
- Pattern:
-
Type:
- 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
設定手順:
-
Name:
Open Liberty - Available Processors (HTTP)と入力 -
Type:
HTTP agentを選択 -
Key:
openliberty.http.cpu_availableProcessorsと入力 -
URL:
http://192.168.200.102:8080/metricsと入力(ホストのIPアドレスに変更) -
Request type:
GETを選択 -
Retrieve mode:
Bodyを選択 -
Required status codes:
200と入力 -
Type of information:
Numeric (unsigned)を選択 -
Update interval:
1hと入力(CPU数は変わらないため1時間に1回で十分) -
Applications:
Javaを選択または作成 - Preprocessing タブをクリック
-
Add をクリックして以下を追加:
-
Type:
Regular expression -
Parameters:
- Pattern:
cpu_availableProcessors\{[^}]*\} (\S+) - Output:
\1
- Pattern:
-
Type:
- 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
設定手順:
-
Name:
Open Liberty - Session Create Total (HTTP)と入力 -
Type:
HTTP agentを選択 -
Key:
openliberty.http.session_create_totalと入力 -
URL:
http://192.168.200.102:8080/metricsと入力(ホストのIPアドレスに変更) -
Request type:
GETを選択 -
Retrieve mode:
Bodyを選択 -
Required status codes:
200と入力 -
Type of information:
Numeric (unsigned)を選択 -
Update interval:
5mと入力 -
Applications:
Webを選択または作成 - Preprocessing タブをクリック
-
Add をクリックして以下を追加:
-
Type:
Regular expression -
Parameters:
- Pattern:
session_create_total\{[^}]*\} (\S+) - Output:
\1
- Pattern:
-
Type:
- 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
設定手順:
-
Name:
Open Liberty - Live Sessions (HTTP)と入力 -
Type:
HTTP agentを選択 -
Key:
openliberty.http.session_liveSessionsと入力 -
URL:
http://192.168.200.102:8080/metricsと入力(ホストのIPアドレスに変更) -
Request type:
GETを選択 -
Retrieve mode:
Bodyを選択 -
Required status codes:
200と入力 -
Type of information:
Numeric (unsigned)を選択 -
Update interval:
1mと入力 -
Applications:
Webを選択または作成 -
Preprocessing タブをクリック
-
Add をクリックして以下を追加:
-
Type:
Regular expression -
Parameters:
- Pattern:
session_liveSessions\{[^}]*\} (\S+) - Output:
\1
- Pattern:
-
Type:
-
Add ボタンをクリック
-
Add ボタンをクリック
HTTP Agent使用時の注意点
- URLの設定: 各ホストのIPアドレスまたはホスト名に合わせて変更してください
- 正規表現のパターン: Prometheusメトリクスの形式に合わせて調整が必要な場合があります
- パフォーマンス: HTTP Agentは各アイテムごとにHTTPリクエストを送信するため、多数のアイテムを設定する場合は更新間隔を調整してください
- エラーハンドリング: メトリクスが存在しない場合、アイテムが「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%
設定手順:
- ホストの Triggers タブをクリック
- Create trigger をクリック
-
Name:
Open Liberty - High Heap Memory Usageと入力 -
Severity:
Warningを選択 - Expression の Add をクリック
-
Item:
Open Liberty - Heap Utilizationを選択 -
Function:
last()を選択 -
Result:
>90と入力 - Insert をクリック
- 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%
設定手順:
- ホストの Triggers タブをクリック
- Create trigger をクリック
-
Name:
Open Liberty - High Heap Memory Usage (HTTP)と入力 -
Severity:
Warningを選択 - Expression の Add をクリック
-
Item:
Open Liberty - Heap Utilization (HTTP)を選択 -
Function:
last()を選択 -
Result:
>90と入力 - Insert をクリック
- 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
設定手順:
- ホストの Triggers タブをクリック
- Create trigger をクリック
-
Name:
Open Liberty - High Request Rate (HTTP)と入力 -
Severity:
Warningを選択 - Expression の Add をクリック
-
Item:
Open Liberty - Servlet Requests per Second (HTTP)を選択 -
Function:
last()を選択 -
Result:
>100と入力 - Insert をクリック
- 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: メモリ使用状況
- ホストの Graphs タブをクリック
- Create graph をクリック
-
Name:
Open Liberty - Memory Usageと入力 - Items セクションで Add をクリック
- 以下のアイテムを追加:
Open Liberty - Heap Memory UsedOpen Liberty - Heap Utilization
- 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
設定手順:
- ホストの Graphs タブをクリック
- Create graph をクリック
-
Name:
Open Liberty - Servlet Request Rateと入力 -
Width:
900と入力 -
Height:
200と入力 -
Y axis MIN value:
Fixedを選択し、1と入力- 重要: これにより、Y軸が1 rps以上に固定され、低トラフィック時でもグラフのラベルが安定します
-
Y axis MAX value:
Calculatedを選択(自動調整) - Items セクションで Add をクリック
- 以下のアイテムを追加:
-
Open Liberty - Servlet Requests per Second (HTTP)(青色)
-
-
Y axis:
Leftを選択 - 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軸、%)
設定手順:
- ホストの Graphs タブをクリック
- Create graph をクリック
-
Name:
Open Liberty - Memory Usage (HTTP)と入力 -
Width:
900と入力 -
Height:
200と入力 - Items セクションで Add をクリック
- 以下のアイテムを追加:
-
Open Liberty - Heap Memory Used (HTTP)(青色、左Y軸) -
Open Liberty - Max Heap (HTTP)(赤色、左Y軸) -
Open Liberty - Heap Utilization (HTTP)(緑色、右Y軸)
-
- 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) (黄色)
設定手順:
- ホストの Graphs タブをクリック
- Create graph をクリック
-
Name:
Open Liberty - Thread Statistics (HTTP)と入力 -
Width:
900と入力 -
Height:
200と入力 - Items セクションで Add をクリック
- 上記3つのアイテムを追加し、それぞれ色を設定
- 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) (青色)
設定手順:
- ホストの Graphs タブをクリック
- Create graph をクリック
-
Name:
Open Liberty - CPU Usage (HTTP)と入力 -
Width:
900と入力 -
Height:
200と入力 - Items セクションで Add をクリック
- 以下のアイテムを追加:
-
Open Liberty - Process CPU Usage (HTTP)(赤色) -
Open Liberty - CPU Load Average (HTTP)(青色)
-
- 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軸)
設定手順:
- ホストの Graphs タブをクリック
- Create graph をクリック
-
Name:
Open Liberty - Garbage Collection (HTTP)と入力 -
Width:
900と入力 -
Height:
200と入力 - Items セクションで Add をクリック
- GC回数のアイテムを左Y軸、GC時間のアイテムを右Y軸に設定
- 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) (青色)
設定手順:
- ホストの Graphs タブをクリック
- Create graph をクリック
-
Name:
Open Liberty - Servlet Request Rate (HTTP)と入力 -
Width:
900と入力 -
Height:
200と入力 -
Y axis MIN value:
Fixedを選択し、1と入力 -
Y axis MAX value:
Calculatedを選択 - Items セクションで Add をクリック
-
Open Liberty - Servlet Requests per Second (HTTP)を選択し、青色に設定 - 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) (緑色)
設定手順:
- ホストの Graphs タブをクリック
- Create graph をクリック
-
Name:
Open Liberty - Session Statistics (HTTP)と入力 -
Width:
900と入力 -
Height:
200と入力 - Items セクションで Add をクリック
- 上記2つのアイテムを追加し、それぞれ色を設定
- 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の標準機能
- ✅ 設定が簡単
- ✅ 軽量
推奨用途: 基本的なインフラ監視(必須)
推奨される監視戦略
最小構成(開発/テスト環境)
- MicroProfile Metrics(本ドキュメントの方法)
- Zabbix Agent(OS基本監視)
標準構成(本番環境)
- MicroProfile Metrics(アプリケーション監視)
- Zabbix Agent(OS基本監視)
- ログ監視(エラー検知)
高度な構成(大規模本番環境)
- MicroProfile Metrics(基本監視)
- JMX(詳細なJVM監視)
- Zabbix Agent(OS監視)
- ログ監視(エラー・セキュリティ)
- APMツール(パフォーマンス分析)
- カスタムメトリクス(ビジネス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
ベストプラクティス
-
更新間隔の設定
- 重要なメトリクス(メモリ、CPU): 1分
- 一般的なメトリクス: 5分
- 統計情報: 10分
-
データ保持期間
- History: 90日
- Trends: 365日
-
アラート閾値
- ヒープ使用率: Warning 80%, Critical 90%
- スレッド数: Warning 150, Critical 200
- CPU使用率: Warning 70%, Critical 85%
-
監視の優先順位
- 最優先: メモリ、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からの移行における監視の変化
改善点
-
設定の簡素化
- Traditional WAS: wsadminスクリプト、AdminConsole、複雑なXML設定
- Open Liberty: server.xmlに1行追加するだけ
-
標準化
- Traditional WAS: WebSphere独自のPMI形式
- Open Liberty: Prometheus標準形式(業界標準)
-
Zabbix統合の容易さ
- Traditional WAS: JMX Gateway必須、複雑な設定
- Open Liberty: HTTP Agentで直接取得、設定簡単
-
軽量化
- Traditional WAS: PMIのオーバーヘッドが大きい
- Open Liberty: 軽量なメトリクス収集
-
ポータビリティ
- Traditional WAS: WebSphere専用
- Open Liberty: 他のMicroProfile実装(Quarkus、Helidonなど)でも同じ方法で監視可能
注意点
-
メトリクスの粒度
- Traditional WASのPMIは非常に詳細(数百種類)
- MicroProfile Metricsは基本的なメトリクスのみ
- 詳細な監視が必要な場合はJMXやカスタムメトリクスを追加
-
既存の監視スクリプト
- Traditional WAS用のwsadminスクリプトは使用不可
- 新しいHTTP/REST APIベースのスクリプトに書き換えが必要
-
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での対応:
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
まとめ
実装に必要な操作:
- ✅ pom.xmlに依存関係を追加(コピー&ペースト)
- ✅ 2つのJavaファイルを作成(コピー&ペースト)
- ✅ Mavenでビルド(1コマンド)
- ✅ WARファイルをデプロイ(コピー)
- ✅ Open Libertyを再起動(2コマンド)
- ✅ メトリクスを確認(curlコマンド)
- ✅ 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を追加
- Configuration → Hosts → ホストをクリック
- Interfaces タブで Add → JMX を選択
- IP address:
192.168.200.102 - Port:
9443 - 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個):
- Active Connections
Name: Open Liberty - DataSource Active Connections
Key: openliberty.http.datasource_active_connections
Pattern: datasource_active_connections\{[^}]*\} (\S+)
- Idle Connections
Name: Open Liberty - DataSource Idle Connections
Key: openliberty.http.datasource_idle_connections
Pattern: datasource_idle_connections\{[^}]*\} (\S+)
- Total Connections
Name: Open Liberty - DataSource Total Connections
Key: openliberty.http.datasource_total_connections
Pattern: datasource_total_connections\{[^}]*\} (\S+)
- Utilization Percent
Name: Open Liberty - DataSource Utilization
Key: openliberty.http.datasource_utilization_percent
Pattern: datasource_utilization_percent\{[^}]*\} (\S+)
Units: %
- 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(即座に実装):
- データソース監視(カスタムメトリクス)
- Active/Idle/Total Connections
- Utilization Percent
Phase 2(1週間以内):
2. データソース詳細監視
- Waiting Threads
- Connection Timeout Count
- トランザクション監視
- 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
まとめ
最も影響が大きい項目の監視実装:
-
✅ データソース監視
- カスタムMicroProfile Metricsで実装
- JMX経由でコネクションプール情報を取得
- Zabbix HTTP Agentで監視
-
✅ トランザクション監視
- カスタムメトリクスで実装
- JMX経由でトランザクション情報を取得
-
✅ 実装工数
- データソース監視: 1-2日
- トランザクション監視: 1日
- Zabbix設定: 半日
-
✅ メンテナンス性
- 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で監視できなくなる主な項目:
- ❌ データソース/JDBCメトリクス(影響度: 高)
- ❌ EJBメトリクス(影響度: 中)
- ❌ JMSメトリクス(影響度: 中)
- ❌ トランザクション詳細メトリクス(影響度: 高)
- ❌ 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応答時間
- エラー率
- アクティブセッション数
実装の優先順位
-
Phase 1(即座に実装)
- OS基本メトリクス(CPU、メモリ、ディスク)
- Open Liberty基本メトリクス(本ドキュメントの内容)
- プロセス死活監視
-
Phase 2(1週間以内)
- GC詳細監視
- ログ監視
- アラート設定
-
Phase 3(1ヶ月以内)
- ビジネスメトリクス
- 外部依存サービス監視
- 包括的なダッシュボード
まとめ
Zabbixで Open Liberty 25を監視するには:
-
外部スクリプト方式(推奨)
- シンプルで確実
- Prometheus形式を直接パース
- 29種類のメトリクスすべてに対応
-
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を有効化すると、以下のカテゴリのメトリクスが利用可能になります:
-
Base Metrics(基本メトリクス)
- JVMメモリ使用量
- スレッド数
- CPU使用率
- GC統計
- クラスローダー情報
-
Vendor Metrics(ベンダー固有メトリクス)
- スレッドプール統計
- サーブレット統計
- セッション管理
- コネクションプール
-
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 MicroProfile Metrics 5.0 Documentation
- MicroProfile Metrics Specification
- Prometheus Exposition Format
Open Libertyのサポート
Open Libertyのサポートを受ける方法
Open Libertyはオープンソースプロジェクトですが、複数のサポートオプションがあります。
1. コミュニティサポート(無料)
Open Liberty公式コミュニティ
利用方法:
- Open Liberty公式サイト
- GitHub Issues
-
Stack Overflow(タグ:
open-liberty) - Gitter Chat
特徴:
- ✅ 完全無料
- ✅ コミュニティメンバーや開発者が回答
- ✅ バグ報告や機能要望が可能
- ⚠️ 回答時間は保証されない
- ⚠️ 日本語サポートは限定的
推奨される使い方:
- 技術的な質問や問題の共有
- バグ報告(再現手順を明確に記載)
- 機能要望の提案
- ドキュメントの改善提案
日本語コミュニティ
利用方法:
特徴:
- ✅ 日本語で質問可能
- ✅ 日本のユーザーコミュニティ
- ⚠️ 回答者が限定的
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営業担当に問い合わせ
問い合わせ方法:
- IBM Support Portalにログイン
- ケースをオープン
- 製品: WebSphere Liberty
- 問題の詳細を記載
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ベンダー
コンサルティング会社
サービス内容:
- アーキテクチャ設計支援
- ベストプラクティスの提供
- トレーニング
- コードレビュー
サポートを受けるための準備
効果的な質問の仕方
必須情報:
-
環境情報
- Open Libertyのバージョン(例: 25.0.0.12)
- Java/JDKのバージョン(例: IBM Semeru Runtime 25 (OpenJ9))
- OSとバージョン(例: Ubuntu 22.04)
- デプロイ環境(例: Docker、Kubernetes、ベアメタル)
-
問題の詳細
- 何をしようとしているか
- 期待される動作
- 実際の動作
- エラーメッセージ(全文)
-
再現手順
- 問題を再現するための具体的な手順
- 最小限の再現コード(可能であれば)
-
ログとスタックトレース
-
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の構文を確認
サポートを受けやすくするためのベストプラクティス
-
ドキュメントを先に確認
- Open Liberty公式ドキュメント
- MicroProfile仕様
- 既存のGitHub Issues
-
最新バージョンで確認
- 可能であれば最新バージョンで問題を再現
- 既知の問題が修正されている可能性
-
最小限の再現コードを作成
- 問題を再現する最小限のコード
- 不要な依存関係を削除
-
ログレベルを上げる
- トラブルシューティング時は
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の監視設定とサポート体制が整います!