PR CENTER

뉴스룸     |     료실

mobile background

PR CENTER

[zabbix] Server-Client(Power Edge R450)-Disk, PSU 상태수집 설정

관리자
2026-03-09
조회수 34

0. 환경 / 목표 요약

  • Client서버: Dell PowerEdge R450 (OS: CentOS 7.9)
  • RAID: PERC H755 Front (RAID-1, SAS HDD 2개)
  • 목표
    1. Dell OMSA(OM-SrvAdmin) 설치
    2. omreport 로 PSU 이중화 / 디스크 상태 확인
    3. Zabbix에서 HPE 서버와 같은 키 이름으로 모니터링
      • PSU: psu.health[1], psu.health[2]
      • 디스크: pdisk.* (summary / health / discovery 등)
    4. 재부팅 후에도 OMSA dataeng 자동 기동


1. OMSA 설치

1-1. OMSA 패키지 복사

NMS 서버에서 LDAP_DB#3로 push 방식으로 복사.


# NMS 서버에서
scp OM-SrvAdmin-Dell-Web-LX-10.1.0.0-4561.RHEL7.x86_64_A00.tar.gz osk@10.10.119.45:/home/osk/

LDAP_DB#3에서 root로 로그인 후:


su -
cd /opt
mkdir -p dell_omsa_10.1
mv /home/osk/OM-SrvAdmin-Dell-Web-LX-10.1.0.0-4561.RHEL7.x86_64_A00.tar.gz dell_omsa_10.1/
cd dell_omsa_10.1
tar xzf OM-SrvAdmin-Dell-Web-LX-10.1.0.0-4561.RHEL7.x86_64_A00.tar.gz
# docs, linux, RPM-GPG-KEY, setup.sh 등 생성


1-2. 필수 패키지 설치

yum install -y pciutils


※pciutils 설치 없이 omsa 바로 설치시 에러 내용 (pciutils의존이라 설치해야 한다.)

Installing the selected packages.


warning: srvadmin-deng-10.1.0.0-4561.18274.el7.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID 34d8786f: NOKEY

error: Failed dependencies:

        pciutils is needed by srvadmin-omilcore-10.1.0.0-4561.18274.el7.x86_64


 -   Installation of some of the packages have failed.

 -   Please refer to 'readme_ins.txt' file for more details.

 -   The readme_ins.txt can be found in srvadmin/docs/readme folder


1-3. OMSA 설치(스토리지 중심)

cd /opt/dell_omsa_10.1/linux/supportscripts
./srvadmin-install.sh --storage

설치 후 omreport 위치 확인:


find /opt -maxdepth 4 -name omreport 2>/dev/null
# /opt/dell/srvadmin/bin/omreport
# /opt/dell/srvadmin/sbin/omreport

(원하면 root PATH에 추가)


echo 'export PATH=$PATH:/opt/dell/srvadmin/bin:/opt/dell/srvadmin/sbin' >> /root/.bash_profile


2. OMSA dataeng 서비스 자동 기동

2-1. 최초 상태 확인

systemctl status dataeng
# Loaded: masked (/dev/null; bad)
# Active: inactive (dead)


2-2. 마스크 해제 + 수동 기동

systemctl unmask dataeng
systemctl daemon-reload
systemctl start dataeng
systemctl status dataeng
# Active: active (exited)  (SysV 스크립트 방식이라 이렇게 나오는 게 정상)


2-3. 재부팅 시 자동 시작 설정 (root crontab)

dataeng 가 SysV 스크립트라 systemctl enable 이 매끄럽지 않아서, @reboot 크론으로 처리.


crontab -e   # root 계정 기준

맨 아래에 한 줄 추가:


@reboot /etc/rc.d/init.d/dataeng start >/var/log/dataeng-autostart.log 2>&1

crond 가 enable 상태인지 확인:


systemctl enable crond
systemctl start crond
systemctl status crond


3. 서버 측 Zabbix 설정 (스크립트/유저파라미터/sudoers)

3-1. 스크립트 디렉터리 생성

mkdir -p /etc/zabbix/scripts
cd /etc/zabbix/scripts


3-2. PSU 상태 스크립트 psu_health.sh

cat > /etc/zabbix/scripts/psu_health.sh << 'EOF'
#!/usr/bin/env bash
# Dell OMSA PSU 상태 조회 (간단 버전)
# psu_health.sh 1 -> 첫 번째 PSU 상태
#   psu_health.sh 2 -> 두 번째 PSU 상태

set -euo pipefail
export LC_ALL=C

PSU_NUM="${1:-1}"
OMREPORT=${OMREPORT:-/opt/dell/srvadmin/bin/omreport}

STATUS="$(
sudo -n "$OMREPORT" chassis pwrsupplies -fmt ssv 2>/dev/null | \
awk -F';' -v num="$PSU_NUM" '
      NF < 2 { next }  # 헤더/공백 라인 스킵

# 첫 번째 필드가 숫자(0,1,2,...)인 줄만 PSU로 취급
$1 ~ /^[0-9]+$/ {
i++
if (i == num) {
gsub(/^[ \t]+|[ \t]+$/, "", $2)
print $2
found=1
exit
}
    }

END {
if (!found) print "NotPresent"
}
'
)"# 트리거/템플릿이 대문자 "OK" 기준이므로 대문자로 변환
STATUS=$(echo "$STATUS" | tr '[:lower:]' '[:upper:]')

echo "${STATUS:-NOTPRESENT}"
EOF

chmod 750 /etc/zabbix/scripts/psu_health.sh
chown root:zabbix /etc/zabbix/scripts/psu_health.sh

결과 예: OK, NOTPRESENT 등.


3-3. 디스크 상태 스크립트 pdisk_health.sh

cat > /etc/zabbix/scripts/pdisk_health.sh << 'EOF'
#!/usr/bin/env bash
# Dell OMSA(omreport) 기반 PD(물리 디스크) 상태 수집
#
# 사용:
# pdisk_health.sh discovery -> LLD JSON ({#PDID}, {#PDSTATE})
# pdisk_health.sh state <ID> -> 해당 PD 상태 (Online/Failed/Ready...)
#   pdisk_health.sh summary          -> "pd=0:1:0:Online,0:1:1:Online,..." 한 줄

set -euo pipefail
export LC_ALL=C

OMREPORT=${OMREPORT:-/opt/dell/srvadmin/bin/omreport}
CTL=${CTL:-0}   # 단일 컨트롤러 환경 가정

pd_lines() {
# omreport storage pdisk controller=<CTL> 출력에서
# ID : 0:1:0
# State : Online
# 구조만 추출 -> "0:1:0 Online"
sudo -n "$OMREPORT" storage pdisk controller="$CTL" 2>/dev/null | \
awk '
BEGIN { id=""; state="" }
/^ID[[:space:]]*:/ {
sub(/^[^:]*:[[:space:]]*/, "", $0)
gsub(/^[[:space:]]+|[[:space:]]+$/, "", $0)
id = $0
}
/^State[[:space:]]*:/ {
sub(/^[^:]*:[[:space:]]*/, "", $0)
gsub(/^[[:space:]]+|[[:space:]]+$/, "", $0)
state = $0
if (id != "") {
print id, state
id=""; state=""
}
}
'}

case "${1:-}" in
discovery)
echo -n '{ "data":['
first=1
while read -r slot state; do
[ -z "$slot" ] && continue
if [ $first -eq 0 ]; then echo -n ','; fi
first=0
printf '{ "{#PDID}":"%s", "{#PDSTATE}":"%s" }' "$slot" "$state"
done < <(pd_lines)
echo '] }'
;;
state)
pd="${2:?ID 형식 필요 예: 0:1:0}"
pd_lines | awk -v k="$pd" '
$1==k { print $2; found=1; exit }
END { if (!found) print "UNKNOWN" }
';;
summary|*)
echo "pd=$(pd_lines | awk '{ printf "%s:%s,", $1, $2 }' | sed "s/,$//")"
;;
esac
EOF

chmod 750 /etc/zabbix/scripts/pdisk_health.sh
chown root:zabbix /etc/zabbix/scripts/pdisk_health.sh


3-4. sudoers 설정

cat > /etc/sudoers.d/zabbix-agent << 'EOF'
Defaults:zabbix !requiretty
Defaults:zabbix secure_path=/usr/sbin:/usr/bin:/sbin:/bin:/opt/dell/srvadmin/bin:/opt/dell/srvadmin/sbin

# ── 공통: 프로세스/CPU 수집 ─────────────────────────────
zabbix ALL=(ALL) NOPASSWD: /usr/bin/ps
zabbix ALL=(ALL) NOPASSWD: /usr/bin/pgrep

# ── Dell 전용: OMSA omreport + Zabbix 스크립트 ──────────
zabbix ALL=(ALL) NOPASSWD: /opt/dell/srvadmin/bin/omreport
zabbix ALL=(ALL) NOPASSWD: /etc/zabbix/scripts/psu_health.sh
zabbix ALL=(ALL) NOPASSWD: /etc/zabbix/scripts/pdisk_health.sh

# ── 공통: nft 카운터(필요한 서버에만 사용) ─────────────
zabbix ALL=(ALL) NOPASSWD: /usr/sbin/nft list counter inet netmon host_in
zabbix ALL=(ALL) NOPASSWD: /usr/sbin/nft list counter inet netmon host_out
EOF

visudo -c -f /etc/sudoers.d/zabbix-agent   # 문법 체크


3-5. UserParameter 설정

cd /etc/zabbix/zabbix_agentd.d

PSU용


cat > userparameter_psu.conf << 'EOF'
UserParameter=psu.health[*],/etc/zabbix/scripts/psu_health.sh $1
EOF

디스크용


cat > pdisk.conf << 'EOF'
# 물리 디스크 LLD
UserParameter=pdisk.discovery,sudo -n /etc/zabbix/scripts/pdisk_health.sh discovery

# 특정 디스크 상태
UserParameter=pdisk.state[*],sudo -n /etc/zabbix/scripts/pdisk_health.sh state "$1"

# 요약 문자열 (예: pd=0:1:0:Online,0:1:1:Online)
UserParameter=pdisk.summary,sudo -n /etc/zabbix/scripts/pdisk_health.sh summary
EOF


3-6. Zabbix Agent 재시작 및 서버 측 테스트

systemctl restart zabbix-agent
systemctl status zabbix-agent

서버에서 직접 확인:


# PSU
sudo -u zabbix /etc/zabbix/scripts/psu_health.sh 1
sudo -u zabbix /etc/zabbix/scripts/psu_health.sh 2

# 디스크
sudo -u zabbix /etc/zabbix/scripts/pdisk_health.sh summary
sudo -u zabbix /etc/zabbix/scripts/pdisk_health.sh state 0:1:0


Zabbix 서버(NMS)에서 원격 테스트:

zabbix_get -s 10.10.119.45 -k 'psu.health[1]'
zabbix_get -s 10.10.119.45 -k 'psu.health[2]'
zabbix_get -s 10.10.119.45 -k 'pdisk.summary'


4. Zabbix UI 설정 (템플릿/아이템/트리거/대시보드)

이 부분은 HPE용 템플릿을 복제해서 Dell용으로 수정하는 방식.

d8635c8811cb7.png


4-1. 값 매핑 (공통)

  1. 설정 → 값 매핑
  1. 디스크 상태 값 매핑 생성 또는 기존 사용
    • 이름: 디스크 상태
    • 값:
      • 0 ⇒ OK
      • 1 ⇒ Fail

PSU는 문자열 그대로(OK, NOTPRESENT) 사용하므로 값 매핑 없이도 됨.


4-2. Dell용 템플릿 복제

  1. 설정 → 템플릿 에서 기존 HPE 템플릿(예: Template_db_custom) 선택
  1. 우측 상단 복제(클론)
  2. 새 이름: 예) Template_db_custom_dell
  3. 저장

이후 설정은 전부 이 Dell 템플릿에서 진행.


4-3. 디스크 마스터 아이템 pdisk.summary

Dell 템플릿에서:

  1. 아이템 탭 → 기존 Storcli PD Summary 아이템을 열어
    • 이름: PD Summary (원하는 이름)
    • 키: pdisk.summary 로 변경
    • 유형: ZABBIX 에이전트
    • 데이터형: 텍스트
    • 갱신 간격: 1m (권장)
  1. 저장


4-4. 디스크 의존 아이템 pdisk.health

같은 템플릿에서:

  1. 기존 storcli.pd.health 의존 아이템이 있으면 삭제
  2. 새 의존 아이템 생성
    • 이름: 디스크 상태
    • 유형: 의존 아이템
    • 키: pdisk.health
    • 마스터 아이템: 방금 만든 PD Summary (pdisk.summary)
    • 데이터형: 수치(unsigned)
    • 값 매핑: 디스크 상태 선택
  1. 보존하기 전의 처리(전처리) 탭에 정규식/JS 추가
    (기존 HPE 전처리가 있으면 그대로 복붙, Dell 결과값 Online 기준으로 수정)

예: 정규표현식 1단계로 “모든 디스크가 Online 이면 0, 아니면 1” 로 만드는 방법

  • 전처리 단계 추가:
    • 이름: 정규표현식
    • 파라미터:

      (?s).*pd=[0-9:]+:Online(,[0-9:]+:Online)*.*
    • 실패 시 사용자 정의 값: Set value to → 1
  • 그 다음 단계에서 상수 값 0 으로 초기화해 두었다면(기존 HPE 방식)
    실제 결과는:
    • 문자열이 위 정규식과 매치되면 → 0 (OK)
    • 매치 안 되면 → 1 (Fail)

(환경마다 기존 전처리 구성이 조금씩 다를 수 있어서, 지금 쓰는 HPE 템플릿의 storcli.pd.health 전처리 구성을 그대로 따라가는 게 가장 안전함)


4-5. 디스크 트리거

Dell 템플릿에서:

  1. 트리거 → 새 트리거
  1. 값 입력
    • 이름: DISK 비정상
    • 심각도: Warning 등
    • 표현식:

      {Template_db_custom_dell:pdisk.health.last()}=1

      (조금 더 보수적으로 하고 싶으면 min(5m)=1 로 변경)
  2. 저장


4-6. PSU 아이템 / 트리거 (Dell도 HPE와 공통 키 사용)

Dell 템플릿 또는 호스트에서:

아이템

  • PSU 1
    • 유형: ZABBIX 에이전트
    • 키: psu.health[1]
    • 데이터형: 문자
    • 갱신 간격: 예) 5m
  • PSU 2
    • 키: psu.health[2]
    • 나머지 동일

트리거

  • PSU 1 비정상

    {Template_db_custom_dell:psu.health[1].last()}<>"OK"
  • PSU 2 비정상

    {Template_db_custom_dell:psu.health[2].last()}<>"OK"

스크립트에서 이미 OK 대문자로 변환하기 때문에 이 표현식 그대로 사용 가능.

단 PSU가 1개짜리 서버에선 NOTPRESENT 를 정상으로 보려면

iregexp("^(OK|NOTPRESENT)$")=0 같은 패턴으로 바꾸면 된다.


4-7. 템플릿을 Dell 서버에 연결

  1. 설정 → 호스트 → Client 서버 선택
  1. 템플릿 탭
    • 기존 HPE 템플릿(Template_db_custom) 연결되어 있으면 Unlink and clear 또는 제거
    • 새 Template_db_custom_dell 추가
  2. 저장

1~2분 정도 지나면:

  • 호스트 최신 데이터에서
    • psu.health[1], psu.health[2] → OK
    • pdisk.health → 0 (값 매핑으로는 OK)
  • 대시보드에서는
    • PS1 / PS2 / DISK 열 모두 OK 표시
    • 장애 발생 시:
      • PSU 이상 → PSU 1 비정상, PSU 2 비정상 트리거 알람
      • 디스크 이상 → DISK 비정상 트리거 알람


                                                                                                                                                                                    ⭐발표자 : 박태진님 



0 0

페이지 바로가기

@2024 K2SYSTEMS. All rights reserved.

HOME       |       ABOUT US       |       SOLUTION       |       PR CENTER       |       CONTACT       |       인재채용       |       kakao i cloud 고객센터  

@2024 K2SYSTEMS. All rights reserved.