콘텐츠로 이동

IBM i/AS400

·


IBM i/AS400 수집기는 IBM i Access ODBC Driver를 통해 원격으로 Db2 for i SQL Services에 접근하여, IBM i의 시스템, 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.sample을 복사한 뒤 ibm_i.conf로 이름을 바꿉니다. 예시는 다음과 같습니다:

[[inputs.external]]
  daemon = true
  name   = "ibm_i"
  cmd    = "/usr/local/datakit/externals/ibm_i"

  ## 선거를 활성화하려면 true로 설정합니다.
  election = true

  args = [
    "--interval", "60s",
    "--host", "<ibm-i-host>",
    "--username", "DKUSER",

    ## 선택 사항: odbcinst.ini에 등록된 IBM i Access ODBC 드라이버 이름.
    # "--driver", "IBM i Access ODBC Driver 64-bit",

    ## 선택 사항: host/username/password/driver 대신 원시 ODBC 연결 문자열을 사용합니다.
    # "--dsn", "Driver={IBM i Access ODBC Driver 64-bit};System=<ibm-i-host>;UID=DKUSER;PWD=<password>;",

    ## 선택 사항: 쿼리 및 타임아웃 설정.
    # "--query-timeout", "30s",
    # "--job-query-timeout", "240s",
    # "--system-mq-query-timeout", "80s",
    # "--severity-threshold", "50",

    ## 필요에 따라 이 인자를 반복해서 추가합니다.
    ## --query를 지정하지 않으면 모든 기본 쿼리가 활성화됩니다.
    ## 대규모 시스템에서는 기본 쿼리부터 시작하고, Job 상세 쿼리는
    ## 필요할 때만 활성화하는 것을 권장합니다.
    # "--query", "disk_usage",
    # "--query", "cpu_usage",
    # "--query", "memory_info",
    # "--query", "subsystem",
    # "--query", "job_queue",

    ## 대상 부하를 줄이기 위해 message_queue_info를 선택한 큐로 제한합니다.
    # "--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로 관심 있는 큐만 제한하는 것이 좋습니다. 예를 들어 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

태그 및 필드 설명
asp_number
(tag)
ASP 번호.
host
(tag)
IBM i 호스트 이름 또는 연결 주소.
job_active_status
(tag)
활성 Job 상태.
job_id
(tag)
IBM i Job 식별자.
job_name
(tag)
IBM i Job 이름.
job_queue_library
(tag)
Job queue 라이브러리.
job_queue_name
(tag)
Job queue 이름.
job_queue_status
(tag)
Job queue 상태.
job_status
(tag)
IBM i Job 상태.
job_user
(tag)
IBM i Job 사용자.
memory_pool_name
(tag)
Job에서 사용하는 Memory pool 이름.
message_queue_library
(tag)
Message queue 라이브러리.
message_queue_name
(tag)
Message queue 이름.
partition_id
(tag)
IBM i 파티션 ID.
pool_name
(tag)
Memory pool 이름.
resource_name
(tag)
디스크 리소스 이름. IBM i 7.3 이상에서 사용 가능.
serial_number
(tag)
디스크 시리얼 번호.
subsystem_name
(tag)
Subsystem 이름.
unit_number
(tag)
디스크 유닛 번호.
unit_type
(tag)
디스크 유닛 유형.
asp_io_requests_per_s 초당 IO 요청 수. 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 queue에서 보낸 시간.
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 queue의 전체 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 Message queue의 전체 메시지 수.
Type: int | (gauge)
Unit: count
Tagged by: message_queue_library, message_queue_name
pool_defined_size 정의된 pool 크기.
Type: float | (gauge)
Unit: digital,MB
Tagged by: pool_name, subsystem_name
pool_reserved_size 예약된 pool 크기.
Type: float | (gauge)
Unit: digital,MB
Tagged by: pool_name, subsystem_name
pool_size 현재 pool 크기.
Type: float | (gauge)
Unit: digital,MB
Tagged by: pool_name, subsystem_name
subsystem_active Subsystem이 활성 상태인지 여부입니다. 활성은 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

태그 및 필드 설명
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에 연결 또는 쿼리 오류가 있는지.

문서 평가

이 페이지가 도움이 되었나요?