IBM i/AS400
IBM i/AS400 コレクタは、IBM i Access ODBC Driver を介して Db2 for i SQL Services にリモートアクセスし、IBM i の system、ASP、Job、Memory Pool、Subsystem、Job Queue、Message Queue の各メトリクスを取得します。
検証済みバージョン:
- IBM i 7.4
設定¶
前提条件¶
ODBC 環境の設定¶
現在、このコレクタは Linux AMD64 ホストでの実行のみをサポートしています。
IBM i/AS400 コレクタは unixODBC を通じて IBM i Access ODBC Driver を読み込みます。コレクタが動作する Linux ホストにすでに unixODBC がインストールされ設定されている場合は、再インストールする必要はありません。
まず unixODBC とその設定ファイルの場所を確認します。
システムで odbcinst が見つからない場合は、ディストリビューションに応じて unixODBC をインストールします。
# Debian/Ubuntu
sudo apt-get update
sudo apt-get install -y unixodbc
# RHEL/Rocky Linux
sudo dnf install -y unixODBC
# SUSE Linux
sudo zypper install unixODBC
IBM i Access Client Solutions から、コレクタが動作するプラットフォーム向けの ACS Application Package をダウンロードし、パッケージの手順に従って IBM i Access ODBC Driver をインストールします。AMD64 パッケージを選択してください。ドライバおよびその動的ライブラリのアーキテクチャは、 コレクタの実行環境と一致している必要があります。
インストール後、unixODBC が IBM i Access ODBC Driver を認識できることを確認します。
既定のドライバ名は IBM i Access ODBC Driver 64-bit です。
以下のコマンドでこのドライバを確認できます。
ドライバが自動登録されない場合は、odbcinst -j に表示された場所にある
odbcinst.ini を編集してください。インストールパッケージによって動的ライブラリのパスは異なる場合がありますが、一般的な設定は次のとおりです。
[IBM i Access ODBC Driver 64-bit]
Description=IBM i Access for Linux 64-bit ODBC Driver
Driver=/opt/ibm/iaccess/lib64/libcwbodbc.so
Setup=/opt/ibm/iaccess/lib64/libcwbodbcs.so
Threading=0
DontDLClose=1
UsageCount=1
ドライバの動的ライブラリと、コレクタの ODBC 依存関係が正常に読み込めるかを確認します。
コレクタ設定¶
DataKit のインストールディレクトリにある conf.d/samples ディレクトリへ移動し、ibm_i.conf.sample を ibm_i.conf にコピーします。例は次のとおりです。
[[inputs.external]]
daemon = true
name = "ibm_i"
cmd = "/usr/local/datakit/externals/ibm_i"
## Set true to enable election.
election = true
args = [
"--interval", "60s",
"--host", "<ibm-i-host>",
"--username", "DKUSER",
## Optional: IBM i Access ODBC driver name registered in odbcinst.ini.
# "--driver", "IBM i Access ODBC Driver 64-bit",
## Optional: use a raw ODBC connection string instead of host/username/password/driver.
# "--dsn", "Driver={IBM i Access ODBC Driver 64-bit};System=<ibm-i-host>;UID=DKUSER;PWD=<password>;",
## Optional query and timeout settings.
# "--query-timeout", "30s",
# "--job-query-timeout", "240s",
# "--system-mq-query-timeout", "80s",
# "--severity-threshold", "50",
## Repeat these arguments as needed.
## When --query is omitted, all default queries are enabled.
## On large systems, start with base queries and enable job detail
## queries only when needed.
# "--query", "disk_usage",
# "--query", "cpu_usage",
# "--query", "memory_info",
# "--query", "subsystem",
# "--query", "job_queue",
## Limit message_queue_info to selected queues to reduce target load.
# "--message-queue", "QSYSOPR",
# "--message-queue", "QSYSMSG",
]
envs = [
"ENV_INPUT_IBM_I_PASSWORD=<password>",
"LD_LIBRARY_PATH=/opt/ibm/iaccess/lib64:$LD_LIBRARY_PATH",
]
[inputs.external.tags]
# some_tag = "some_value"
# more_tag = "some_other_value"
設定後、DataKit を再起動 してください。
現在は ConfigMap を使ってコレクタ設定を注入することで、コレクタを有効化できます。
また、--dsn で完全な ODBC connection string を渡すこともできます。--dsn を設定すると、--host、--username、--password、--driver は接続文字列の構築に使用されません。
パスワードが設定ファイルやコマンドラインに表示されるのを避けるため、環境変数でパスワードを渡すことを推奨します。
envs = [
"ENV_INPUT_IBM_I_PASSWORD=<password>",
"LD_LIBRARY_PATH=/opt/ibm/iaccess/lib64:$LD_LIBRARY_PATH",
]
パラメータ説明¶
| パラメータ | 説明 |
|---|---|
--dsn |
完全な ODBC connection string。設定されている場合は優先して使用されます |
--driver |
IBM i Access ODBC Driver の名称。既定値は IBM i Access ODBC Driver 64-bit |
--host |
IBM i ホストアドレス |
--username |
IBM i の収集用アカウント |
--password |
IBM i 収集用アカウントのパスワード。環境変数 ENV_INPUT_IBM_I_PASSWORD の使用を推奨します |
--interval |
メトリクス収集間隔。既定は 60s。すべてのクエリを有効にする場合は 60s 以上を推奨します |
--query-timeout |
通常クエリのタイムアウト。既定は 30s |
--job-query-timeout |
Job クエリのタイムアウト。既定は 240s |
--system-mq-query-timeout |
Message Queue クエリのタイムアウト。既定は 80s |
--query |
有効化するクエリを指定します。複数回設定可能。未設定時は既定の全クエリが有効になります |
--severity-threshold |
Message Queue の重大メッセージしきい値。既定は 50 |
--message-queue |
取得する Message Queue 名を制限します。複数回設定可能 |
--metric-enabled |
メトリクスを報告するかどうか。既定は true |
既定ではすべてのクエリが有効になります。Job の詳細クエリは Job ごとにメトリクスを生成するため、Job 数が多い IBM i では時系列が多くなります。本番環境では、まず基本クエリのみを有効にして負荷を確認し、その後必要に応じて Job 詳細を有効にしてください。
message_queue_info は既定ですべての Message Queue を問い合わせます。メッセージ量が多い環境では、--message-queue で
注目したいキューを制限することを推奨します。たとえば QSYSOPR、QSYSMSG です。
--query で指定できる値は次のとおりです。
disk_usage
cpu_usage
jobq_job_status
active_job_status
job_memory_usage
memory_info
subsystem
job_queue
message_queue_info
メトリクス¶
ibm_i¶
| Tags & Fields | Description |
|---|---|
| asp_number ( tag) |
ASP 番号。 |
| host ( tag) |
IBM i のホスト名または接続アドレス。 |
| job_active_status ( tag) |
アクティブな Job の状態。 |
| job_id ( tag) |
IBM i の Job ID。 |
| job_name ( tag) |
IBM i の Job 名。 |
| job_queue_library ( tag) |
Job キューのライブラリ。 |
| job_queue_name ( tag) |
Job キュー名。 |
| job_queue_status ( tag) |
Job キューの状態。 |
| job_status ( tag) |
IBM i の Job 状態。 |
| job_user ( tag) |
IBM i の Job ユーザー。 |
| memory_pool_name ( tag) |
Job が使用しているメモリープール名。 |
| message_queue_library ( tag) |
メッセージキューのライブラリ。 |
| message_queue_name ( tag) |
メッセージキュー名。 |
| partition_id ( tag) |
IBM i のパーティション ID。 |
| pool_name ( tag) |
メモリープール名。 |
| resource_name ( tag) |
ディスクリソース名。IBM i 7.3 以降で利用可能です。 |
| serial_number ( tag) |
ディスクのシリアル番号。 |
| subsystem_name ( tag) |
サブシステム名。 |
| unit_number ( tag) |
ディスクのユニット番号。 |
| unit_type ( tag) |
ディスクのユニット種別。 |
| asp_io_requests_per_s | 1 秒あたりの I/O 要求数。IBM i 7.3 以降で利用可能です。 Type: float | (gauge) Unit: throughput,reqps Tagged by: asp_number, resource_name, serial_number, unit_number, unit_type |
| asp_percent_busy | ディスクの使用率。IBM i 7.3 以降で利用可能です。 Type: float | (gauge) Unit: percent,percent Tagged by: asp_number, resource_name, serial_number, unit_number, unit_type |
| asp_percent_used | ディスクユニットの使用率。 Type: float | (gauge) Unit: percent,percent Tagged by: asp_number, serial_number, unit_number, unit_type |
| asp_unit_space_available | 利用可能なディスクユニット容量。 Type: int | (gauge) Unit: digital,B Tagged by: asp_number, serial_number, unit_number, unit_type |
| asp_unit_storage_capacity | ディスクユニット容量。 Type: int | (gauge) Unit: digital,B Tagged by: asp_number, serial_number, unit_number, unit_type |
| job_active_duration | Job のアクティブ継続時間。 Type: float | (gauge) Unit: time,s Tagged by: job_active_status, job_id, job_name, job_status, job_user, subsystem_name |
| job_cpu_usage | Job の CPU 使用量。 Type: float | (gauge) Unit: percent,percent Tagged by: job_active_status, job_id, job_name, job_status, job_user, subsystem_name |
| job_cpu_usage_pct | Job の CPU 使用率。 Type: float | (gauge) Unit: percent,percent Tagged by: job_active_status, job_id, job_name, job_status, job_user, subsystem_name |
| job_queue_duration | Job キュー内での滞在時間。 Type: float | (gauge) Unit: time,s Tagged by: job_id, job_name, job_queue_library, job_queue_name, job_queue_status, job_status, job_user, subsystem_name |
| job_queue_held_size | 保留中の Job 数。 Type: int | (gauge) Unit: count Tagged by: job_queue_name, job_queue_status, subsystem_name |
| job_queue_released_size | 解放済みの Job 数。 Type: int | (gauge) Unit: count Tagged by: job_queue_name, job_queue_status, subsystem_name |
| job_queue_scheduled_size | スケジュール済みの Job 数。 Type: int | (gauge) Unit: count Tagged by: job_queue_name, job_queue_status, subsystem_name |
| job_queue_size | Job キュー内の総 Job 数。 Type: int | (gauge) Unit: count Tagged by: job_queue_name, job_queue_status, subsystem_name |
| job_status_value | Job 状態のマーカー。返却された Job レコードは 1 に設定されます。 Type: int | (gauge) Unit: count Tagged by: job_active_status, job_id, job_name, job_queue_library, job_queue_name, job_queue_status, job_status, job_user, subsystem_name |
| job_temp_storage | Job が使用する一時ストレージ。 Type: int | (gauge) Unit: digital,MB Tagged by: job_active_status, job_id, job_name, job_user, memory_pool_name, subsystem_name |
| message_queue_critical_size | 設定されたしきい値以上の重大度を持つメッセージ数。 Type: int | (gauge) Unit: count Tagged by: message_queue_library, message_queue_name |
| message_queue_size | メッセージキュー内の総メッセージ数。 Type: int | (gauge) Unit: count Tagged by: message_queue_library, message_queue_name |
| pool_defined_size | 定義済みプールサイズ。 Type: float | (gauge) Unit: digital,MB Tagged by: pool_name, subsystem_name |
| pool_reserved_size | 予約済みプールサイズ。 Type: float | (gauge) Unit: digital,MB Tagged by: pool_name, subsystem_name |
| pool_size | 現在のプールサイズ。 Type: float | (gauge) Unit: digital,MB Tagged by: pool_name, subsystem_name |
| subsystem_active | サブシステムがアクティブかどうか。アクティブなら 1 です。 Type: int | (gauge) Unit: count Tagged by: subsystem_name |
| subsystem_active_jobs | 現在のアクティブ Job 数。 Type: int | (gauge) Unit: count Tagged by: subsystem_name |
| system_configured_cpus | 設定済み CPU 数。 Type: float | (gauge) Unit: count Tagged by: partition_id |
| system_cpu_usage | 平均 CPU 使用率。 Type: float | (gauge) Unit: percent,percent Tagged by: partition_id |
| system_current_cpu_capacity | 現在の CPU 容量。 Type: float | (gauge) Unit: count Tagged by: partition_id |
| system_normalized_cpu_usage | 正規化 CPU 使用率。 Type: float | (gauge) Unit: percent,percent Tagged by: partition_id |
| system_shared_cpu_usage | 共有 CPU 使用率。 Type: float | (gauge) Unit: percent,percent Tagged by: partition_id |
collector¶
| Tags & Fields | Description |
|---|---|
| instance ( tag) |
インスタンスのサーバーアドレス |
| job ( tag) |
インスタンスのサーバー名 |
| up | 前回の収集サイクルでコレクタが対象の取得に成功したかどうか。1 は true、0 は false です。 Type: int | (gauge) Unit: bool |
FAQ¶
ODBC を検証するには?¶
ODBC を個別に検証したい場合は、odbcinst -j に表示される
odbc.ini にテスト用 DSN を追加します。
その後、以下のコマンドを順に実行します。
odbcinst -j
odbcinst -q -d
ldd /opt/ibm/iaccess/lib64/libcwbodbc.so
isql -v IBMI DKUSER '<password>'
ドライバが登録済みであること、動的ライブラリの依存関係がそろっていること、そして isql で IBM i に正常に接続できることを確認してください。
IBM i 側で何を確認する必要がありますか?¶
IBM i では TCP/IP と Database Host Server を起動しておく必要があります。収集用アカウントには IBM i へのログイン権限と、Db2 for i SQL Services のクエリ実行権限が必要です。
メトリクスが取得できないのはなぜですか?¶
次の点を確認してください。
- DataKit ホストで unixODBC と IBM i Access ODBC Driver を読み込めるか。
odbcinst -q -dで設定済みのドライバ名が表示されるか。isqlで収集用アカウントを使って IBM i に接続できるか。- IBM i Database Host Server が起動しているか、またネットワークとファイアウォールでアクセスが許可されているか。
- 収集用アカウントに、本文で列挙した Db2 for i SQL Services へのアクセス権限があるか。
- [DataKit インストールディレクトリ]/externals/ibm_i.log に接続エラーやクエリエラーがないか。