コンテンツにスキップ

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 -j

システムで 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 を認識できることを確認します。

odbcinst -q -d

既定のドライバ名は IBM i Access ODBC Driver 64-bit です。 以下のコマンドでこのドライバを確認できます。

odbcinst -q -d -n "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 依存関係が正常に読み込めるかを確認します。

ldd /opt/ibm/iaccess/lib64/libcwbodbc.so
ldd /usr/local/datakit/externals/ibm_i

コレクタ設定

DataKit のインストールディレクトリにある conf.d/samples ディレクトリへ移動し、ibm_i.conf.sampleibm_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 は接続文字列の構築に使用されません。

args = [
  "--dsn", "DSN=IBMI;UID=DKUSER;PWD=<password>;",
]

パスワードが設定ファイルやコマンドラインに表示されるのを避けるため、環境変数でパスワードを渡すことを推奨します。

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 で 注目したいキューを制限することを推奨します。たとえば QSYSOPRQSYSMSG です。

--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 を追加します。

[IBMI]
Description=IBM i
Driver=IBM i Access ODBC Driver 64-bit
System=10.0.0.10

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

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 に接続エラーやクエリエラーがないか。

フィードバック

このページは役に立ちましたか?