[BMC/iDRAC] RACADM์„ ์ด์šฉํ•œ Lifecycle Log ์ˆ˜์ง‘ ๋ฐ ์ฒ˜๋ฆฌํ•˜๊ธฐ

2024. 12. 27. 09:52ยทHardware/BMC

 

์„œ๋ฒ„ ๊ด€๋ฆฌ์—์„œ ๋กœ๊ทธ ๋ชจ๋‹ˆํ„ฐ๋ง์€ ์‹œ์Šคํ…œ ์•ˆ์ •์„ฑ๊ณผ ๋ฌธ์ œ ํ•ด๊ฒฐ์˜ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.

ํšจ์œจ์ ์ธ ๋กœ๊ทธ ๋ชจ๋‹ˆํ„ฐ๋ง ํˆด์„ ์‚ฌ์šฉํ•˜๋ฉด ๋Œ€๋Ÿ‰์˜ ์„œ๋ฒ„ ๋กœ๊ทธ๋ฅผ ํ•œ๋ˆˆ์— ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๊ณ ,

์•Œ๋ฆผ ๊ธฐ๋Šฅ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ์‹ ์†ํžˆ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ, ๋น„์šฉ์ด๋‚˜ ํ™˜๊ฒฝ์ ์ธ ์ œ์•ฝ์œผ๋กœ ์ธํ•ด ์ด๋Ÿฌํ•œ ํˆด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ,

์ง์ ‘ ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ๋ถ„์„ํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ๋„ ์ข…์ข… ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

Dell ํ•˜๋“œ์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ iDRAC์— ์ ‘์†ํ•ด Lifecycle Log๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

 

  • ์›น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•œ ๋กœ๊ทธ ์ˆ˜์ง‘ 
    • iDRAC ์›น ์ธํ„ฐํŽ˜์ด์Šค์— ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค.
    • “Maintenance” ํƒญ์—์„œ “Lifecycle Log”๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    • Log Filter๋ฅผ ์„ค์ •ํ•˜๊ณ  ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค.

Lifecycle Log

iDRAC์—์„œ๋Š” ์ง๊ด€์ ์ธ ์›น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋กœ๊ทธ๋ฅผ ์‰ฝ๊ฒŒ ์ˆ˜์ง‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์„œ๋ฒ„ ์ˆ˜๊ฐ€ ๋งŽ์„ ๊ฒฝ์šฐ, ๊ฐ๊ฐ์˜ iDRAC์— ์ ‘์†ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์ด ๋งŽ์ด ์†Œ์š”๋˜๊ณ 

๋กœ๊ทธ๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ์ˆ˜์ง‘ํ•˜๊ณ  ๋ถ„์„ํ•˜๋Š” ๊ณผ์ • ๋˜ํ•œ ๋น„ํšจ์œจ์ ์ธ ์ž‘์—…์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์—ฌ๋Ÿฌ ์„œ๋ฒ„์˜ ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•ด์•ผ ํ•  ๊ฒฝ์šฐ RACADM ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด

CLI ํ™˜๊ฒฝ์—์„œ ์ผ๊ด„ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ, ์‹œ๊ฐ„๊ณผ ๋…ธ๋ ฅ์„ ํฌ๊ฒŒ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

  • RACADM install
    • Windows์šฉ Dell iDRAC ํˆด, v11.2.0.0
    • Linux์šฉ Dell iDRAC ํˆด, v11.2.0.0
 

[BMC/iDRAC] RACADM๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

์—…๋ฌด์ ์œผ๋กœ ํ•˜๋“œ์›จ์–ด๋ฅผ ์ ๊ฒ€ํ•˜๊ธฐ ์œ„ํ•ด BMC๋ฅผ ํ™œ์šฉํ•˜๋Š” ์ผ์ด ๋งŽ์Šต๋‹ˆ๋‹ค. BMC(Baseboard Management Controller)๋Š” ์„œ๋ฒ„์˜ ๋ฌผ๋ฆฌ์  ์ƒํƒœ๋ฅผ ์›๊ฒฉ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” ํ•˜๋“œ์›จ์–ด ๊ด€๋ฆฌ ์นฉ

endyd1567.tistory.com

 

  • RACADM์„ ํ†ตํ•œ ๋กœ๊ทธ ์ˆ˜์ง‘  
    • ์ ๊ฒ€ํ•  ์„œ๋ฒ„์˜ iDRAC IP์™€ ๋กœ๊ทธ์ธ ๊ณ„์ • ์ •๋ณด๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    • RACADM ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

# lclog

Lifecycle Log๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ช…๋ น์–ด

๋กœ๊ทธ ์กฐํšŒ, ์›๊ฒฉ ๋‚ด๋ณด๋‚ด๊ธฐ, ์ฃผ์„ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ

# racadm lclog view -i <number of records> -a <agent id> -c <category> 
# -s <severity> -b <sub-category> -q <sequence no> -n <number of records>
# -r <start timestamp> -e <end timestamp>

racadm -r 192.168.0.58 -u root -p calvin lclog view -s Warning -r "2024-11-01 00:00:00" -e "2024-12-01 23:59:59"

"lclog view" ๋ช…๋ น์–ด์˜ ์˜ต์…˜์œผ๋กœ ๋กœ๊ทธ์˜ ์‹ฌ๊ฐ๋„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•„ํ„ฐ๋งํ•˜๊ฑฐ๋‚˜

์‹œ์ž‘ ๋ฐ ์ข…๋ฃŒ ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ์ง€์ •ํ•˜์—ฌ ํŠน์ • ์‹œ๊ฐ„ ๋ฒ”์œ„์˜ ๋กœ๊ทธ ์กฐํšŒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

๋กœ๊ทธ ์กฐํšŒ ๊ฒฐ๊ณผ

์œ„ ๋ช…๋ น์–ด๋Š” 192.168.0.58 IP๋ฅผ ๊ฐ€์ง„ iDRAC์—์„œ Warning ์ˆ˜์ค€์˜ ๋กœ๊ทธ๋ฅผ
2024๋…„ 11์›” 1์ผ๋ถ€ํ„ฐ 12์›” 1์ผ๊นŒ์ง€ ์ˆ˜์ง‘ํ•˜๋Š” ์˜ˆ์ž…๋‹ˆ๋‹ค.

 

RACADM์€ ๋‹ค์ค‘ IP ์ฒ˜๋ฆฌ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ๋Œ€ํ•ด ๋ฐ˜๋ณต ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฅผ ์ž๋™ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

# racadm_get_lclog.sh

์ง€์ •๋œ ์‹œ๊ฐ„ ๋ฒ”์œ„์˜ ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ํ•„์š”์‹œ ํŒŒ์ผ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

๋”๋ณด๊ธฐ
#!/bin/bash

RACUSER="root"
RACPSWD="calvin"
log_output="false" # ๋กœ๊ทธ ์ €์žฅ ์—ฌ๋ถ€
log_base_dir="./LifeCycleLog" # ๊ธฐ๋ณธ ๋กœ๊ทธ ์ €์žฅ ๋””๋ ‰ํ† ๋ฆฌ
start_time=""
end_time=""
client_name=""

# Usage ์ถœ๋ ฅ ํ•จ์ˆ˜
usage() {
    echo "Usage: $0 [-h <iDRAC_IP> | -f <file_with_iDRAC_IPs>] [-r <start_time>] [-e <end_time>] [-c <client_name>]"
    echo "Options:"
    echo "  -h <iDRAC_IP>   Specify a single iDRAC IP address"
    echo "  -f <file>       Specify a file containing iDRAC IP addresses (one per line)"
    echo "  -r <start_time> Start time for logs in format 'yyyy-mm-dd HH:MM:SS'"
    echo "  -e <end_time>   End time for logs in format 'yyyy-mm-dd HH:MM:SS'"
    echo "  -c <client_name> Specify a client name for log directory"
    exit 1
}

# ๋กœ๊ทธ ์ €์žฅ ์—ฌ๋ถ€ ๋ฌป๊ธฐ
ask_log_saving() {
    read -p "Do you want to save logs? (y/n): " answer
    case $answer in
        [Yy]*) log_output="true" ;;
        [Nn]*) log_output="false" ;;
        *) echo "Invalid input. Defaulting to no log saving."; log_output="false" ;;
    esac
}

# ์˜ต์…˜ ์ฒ˜๋ฆฌ
while getopts "h:f:r:e:c:" opt; do
    case $opt in
        h)  # ๋‹จ์ผ iDRAC IP
            remote_idrac=$OPTARG
            ;;
        f)  # ํŒŒ์ผ ์ž…๋ ฅ
            ip_file=$OPTARG
            ;;
        r)  # ์‹œ์ž‘ ์‹œ๊ฐ„
            start_time=$OPTARG
            ;;
        e)  # ์ข…๋ฃŒ ์‹œ๊ฐ„
            end_time=$OPTARG
            ;;
        c)  # ํด๋ผ์ด์–ธํŠธ ์ด๋ฆ„
            client_name=$OPTARG
            ;;
        *)  # ์ž˜๋ชป๋œ ์˜ต์…˜
            usage
            ;;
    esac
done

# ์˜ต์…˜ ์œ ํšจ์„ฑ ๊ฒ€์ฆ
if [[ -z $remote_idrac && -z $ip_file ]]; then
    echo "Error: You must provide either -h or -f option."
    usage
fi

if [[ -n $remote_idrac && -n $ip_file ]]; then
    echo "Error: Options -h and -f cannot be used together."
    usage
fi

# ๋กœ๊ทธ ์ €์žฅ ์—ฌ๋ถ€ ํ™•์ธ
ask_log_saving

# ๋กœ๊ทธ ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ •
if [[ $log_output == "true" ]]; then
    if [[ -n $client_name ]]; then
        log_base_dir="${log_base_dir}/${client_name}"
    fi
    log_date_dir="${log_base_dir}/$(date +"%Y%m%d")"
    mkdir -p "$log_date_dir"
    echo "Logs will be saved in directory: $log_date_dir"
fi

# iDRAC ๋กœ๊ทธ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜
process_idrac_logs() {
    local ip=$1
    echo "Processing iDRAC: $ip"

    # ๋ช…๋ น์–ด ๊ตฌ์„ฑ
    if [[ -z $start_time && -z $end_time ]]; then
        cmd="racadm -r \"$ip\" -u \"$RACUSER\" -p \"$RACPSWD\" lclog view -s Critical,Warning"
    else
        cmd="racadm -r \"$ip\" -u \"$RACUSER\" -p \"$RACPSWD\" lclog view -s Critical,Warning -r \"$start_time\" -e \"$end_time\""
    fi

    # ๋กœ๊ทธ ์ €์žฅ ๊ฒฝ๋กœ ์ƒ์„ฑ
    if [[ $log_output == "true" ]]; then
        timestamp=$(date +"%H%M%S")
        log_file="${log_date_dir}/${ip}_${timestamp}.log"
        eval "$cmd" 2>&1 | tee "$log_file"
    else
        eval "$cmd"
    fi

    # ์ข…๋ฃŒ ์ฝ”๋“œ ํ™•์ธ
    if [[ $? -ne 0 ]]; then
        echo "Warning: Unable to connect to $ip. Skipping..."
        return 1
    fi
}

# ๋‹จ์ผ IP ์ฒ˜๋ฆฌ
if [[ -n $remote_idrac ]]; then
    # IP ํ˜•์‹ ํ™•์ธ
    if [[ ! $remote_idrac =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
        echo "Error: Invalid IP address format."
        exit 1
    fi
    process_idrac_logs "$remote_idrac"
fi

# ํŒŒ์ผ ๋‚ด IP ์ฒ˜๋ฆฌ
if [[ -n $ip_file ]]; then
    if [[ ! -f $ip_file ]]; then
        echo "Error: File '$ip_file' not found."
        exit 1
    fi

    while IFS= read -r ip || [[ -n $ip ]]; do
        # IP ํ˜•์‹ ํ™•์ธ
        if [[ ! $ip =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
            echo "Warning: Skipping invalid IP address '$ip'"
            continue
        fi
        process_idrac_logs "$ip"
    done < "$ip_file"
fi

 

์‹คํ–‰ ๊ฒฐ๊ณผ
๋‚ ์งœ๋ณ„ ๋กœ๊ทธ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ €์žฅ

์—ฌ๋Ÿฌ ์„œ๋ฒ„๋“ค์˜ Lifecycle Log๋ฅผ RACADM์„ ์ด์šฉํ•˜์—ฌ ์‰ฝ๊ฒŒ ํŒŒ์ผ๋กœ ์ €์žฅํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ด์ œ๋Š” ์ˆ˜์ง‘ํ•œ ๋กœ๊ทธ๋ฅผ ๋ถ„์„ํ•  ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค.

์ˆ˜์ง‘ํ•œ ๋กœ๊ทธ ์ค‘ ์ƒˆ๋กœ์šด ์ด๋ฒคํŠธ๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

ํ•œ ๋‹ฌ ์ „์— ์ˆ˜์ง‘ํ•œ ๋กœ๊ทธ์™€ ์ตœ๊ทผ ๋กœ๊ทธ๋ฅผ ๋น„๊ตํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์ขŒ) 20241116_log, ์šฐ)20241226_log

์ง์ ‘ ๋‘ ํŒŒ์ผ์„ ๋น„๊ตํ•˜๋ฉฐ ์ƒˆ๋กœ์šด ๋กœ๊ทธ๋ฅผ ์ฐพ์•„๋ด…์‹œ๋‹ค.

Message๋ฅผ ํ™•์ธํ•˜์—ฌ ์ค‘๋ณต๋œ ๋กœ๊ทธ์ธ์ง€ ์ƒˆ๋กญ๊ฒŒ ๋‚˜์˜จ ๋กœ๊ทธ์ธ์ง€ ํŒŒ์•…ํ•˜๋ ค๋ฉด ์‹œ๊ฐ„์ด ์ƒ๋‹นํžˆ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

๋˜ํ•œ, ์ž‘์—…ํ•˜๋Š” ๊ณผ์ •์—์„œ ์‹ค์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋กœ๊ทธ๋“ค์„ ์ง์ ‘ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ด๊ธฐ์— ์ด ๋˜ํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

# new_log_filter.py

๋กœ๊ทธ ํŒŒ์ผ์ด ์ €์žฅ๋œ ๋‘ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋น„๊ตํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฉ”์‹œ์ง€์™€ ์ค‘๋ณต ๋ฉ”์‹œ์ง€๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜ ์ฝ”๋“œ ์‹คํ–‰์€ ํŒŒ์ด์ฌ ์„ค์น˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋”๋ณด๊ธฐ
import os
import sys

# Parse the provided logs to extract the "Message" values and compare them.

def extract_messages_with_metadata(file_path):
    """Extracts 'Message' along with 'Severity' and 'Timestamp' values from a log file."""
    messages = set()
    metadata = {}
    with open(file_path, 'r', encoding='utf-8') as file:
        current_message = None
        current_severity = None
        current_timestamp = None
        for line in file:
            if line.strip().startswith("Message  "):
                key, value = line.split("=", 1)
                current_message = value.strip()
            elif line.strip().startswith("Severity"):
                key, value = line.split("=", 1)
                current_severity = value.strip()
            elif line.strip().startswith("Timestamp"):
                key, value = line.split("=", 1)
                current_timestamp = value.strip()

            if current_message:
                messages.add(current_message)
                metadata[current_message] = {
                    "Severity": current_severity,
                    "Timestamp": current_timestamp
                }
                current_message = None
                current_severity = None
                current_timestamp = None
    return messages, metadata

def find_logs_by_ip(directory1, directory2):
    """Finds and pairs logs by IP addresses between two directories."""
    logs_by_ip = {}
    for directory, index in zip([directory1, directory2], [0, 1]):
        for root, _, files in os.walk(directory):
            for file in files:
                if file.endswith(".log"):
                    ip = file.split("_")[0]  # Assuming IP is the first part of the filename
                    logs_by_ip.setdefault(ip, [None, None])[index] = os.path.join(root, file)
    return logs_by_ip

def process_logs(directory1_path, directory2_path):
    logs_by_ip = find_logs_by_ip(directory1_path, directory2_path)
    output_lines = []

    for ip, log_files in logs_by_ip.items():
        if not all(log_files):
            continue

        last_log_path, recent_log_path = log_files
        last_log_messages, last_log_metadata = extract_messages_with_metadata(last_log_path)
        recent_log_messages, recent_log_metadata = extract_messages_with_metadata(recent_log_path)

        new_messages = recent_log_messages - last_log_messages
        overlapping_messages = recent_log_messages & last_log_messages

        def format_messages(messages, metadata):
            sorted_messages = sorted(messages, key=lambda m: metadata[m]['Timestamp'], reverse=True)
            return "\n".join([
                f"{metadata[message]['Timestamp']} {metadata[message]['Severity']}: {message}"
                for message in sorted_messages
            ])

        output_lines.extend([
            f"\n\n-----------------------------------New Log Messages for {ip}-----------------------------------------", 
            "\n[New Warnings]", format_messages(
                [m for m in new_messages if recent_log_metadata[m]['Severity'] == 'Warning'], recent_log_metadata
            ),
            "\n[New Criticals]", format_messages(
                [m for m in new_messages if recent_log_metadata[m]['Severity'] == 'Critical'], recent_log_metadata
            ),
            f"\n\n-----------------------------------Last Log Messages for {ip}----------------------------------------",
            "\n[Last Warnings]", format_messages(
                [m for m in overlapping_messages if recent_log_metadata[m]['Severity'] == 'Warning'], recent_log_metadata
            ),
            "\n[Last Criticals]", format_messages(
                [m for m in overlapping_messages if recent_log_metadata[m]['Severity'] == 'Critical'], recent_log_metadata
            )
        ])

    return "\n".join(output_lines)

if __name__ == "__main__":
    if len(sys.argv) != 3:
        print("Usage: python new_log_filter.py <Last_directory_path> <New_directory_path>")
        print("Example: python new_log_filter.py 20241101 20241201")
        sys.exit(1)

    directory1_path, directory2_path = sys.argv[1], sys.argv[2]
    save_output = input("Do you want to save the output messages to a file? (y/n): ").strip().lower() in ["y", "yes"]

    result = process_logs(directory1_path, directory2_path)
    print(result)

    if save_output:
        output_file_path = os.path.join(directory2_path, "new_messages_output.txt")
        with open(output_file_path, 'w', encoding='utf-8') as output_file:
            output_file.write(result)
        print(f"Output saved to {output_file_path}")

์‹คํ–‰ ๊ฒฐ๊ณผ

๊ฐ IP ์ฃผ์†Œ์— ๋Œ€ํ•ด ์ƒˆ๋กœ์šด ๋กœ๊ทธ์™€ ์ค‘๋ณต๋œ ๋กœ๊ทธ๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์‹ฌ๊ฐ๋„(Warning, Critical) ๋ณ„๋กœ ๋‚˜๋‰˜์–ด ๋ฉ”์‹œ์ง€๊ฐ€ ์ •๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

 

cf)

๋กœ๊ทธ ๊ธฐ๊ฐ„์„ ์„ค์ •ํ•˜์ง€ ์•Š๊ณ  ๋ชจ๋“  ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•˜์—ฌ ๋น„๊ตํ•˜๋ฉด

๋ถˆํ•„์š”ํ•œ ๊ณผ๊ฑฐ ๋กœ๊ทธ๊ฐ€ ๋น„๊ต ๋Œ€์ƒ์— ํฌํ•จ๋˜์–ด ํ•œ๋ฒˆ ๋‚˜์˜จ ๋กœ๊ทธ๋“ค์€ ๋ชจ๋‘ Last Log๋กœ ํฌํ•จ์ด ๋ฉ๋‹ˆ๋‹ค.

๋น„๊ตํ•  ๋‘ ๋กœ๊ทธ ํŒŒ์ผ์˜ ๊ธฐ๊ฐ„์ด ๊ฒน์น˜์ง€ ์•Š๊ฒŒ ์„ค์ •ํ•ด์•ผ ์ •ํ™•ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 


RACADM ๋ช…๋ น์–ด์™€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋กœ๊ทธ ๋ชจ๋‹ˆํ„ฐ๋ง ํˆด ์—†์ด๋„

๋‹ค์ˆ˜์˜ ์„œ๋ฒ„์—์„œ ๋ฐœ์ƒํ•œ ๋กœ๊ทธ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ˆ˜์ง‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž๋™ํ™”๋ฅผ ํ†ตํ•ด ๋ฐ˜๋ณต ์ž‘์—…์„ ์ค„์ด๊ณ  ๋กœ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฉด,
ํˆด ์‚ฌ์šฉ ๋Œ€๋น„ ํฐ ๋น„์šฉ ์ ˆ๊ฐ๊ณผ ๋”๋ถˆ์–ด ์ง์ ‘ ๊ด€๋ฆฌ์˜ ์žฅ์ ๋„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

์ฐธ๊ณ ์ž๋ฃŒ

  • iDRAC 9 RACADM CLI Guide
  • iDRAC 8/7 RACADM CLI Guide
์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Hardware > BMC' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[BMC/iDRAC] RACADM๋ž€ ๋ฌด์—‡์ธ๊ฐ€?  (0) 2024.12.24
'Hardware/BMC' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [BMC/iDRAC] RACADM๋ž€ ๋ฌด์—‡์ธ๊ฐ€?
hello_u
hello_u
  • hello_u
    ๐Ÿ˜œ
    hello_u
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๐Ÿ˜œ (345)
      • Hardware (2)
        • BMC (2)
      • Spring (109)
        • Spring ์ž…๋ฌธ (20)
        • Spring ๊ธฐ๋ณธ (27)
        • Spring MVC (18)
        • Spring DB (22)
        • Spring JPA ๊ธฐ๋ณธ (16)
        • Spring JPA ํ™œ์šฉ (6)
      • Develop (27)
        • DB (8)
        • JAVA (4)
        • Web (2)
        • Python (7)
        • OSS (2)
        • Git (2)
        • API (2)
      • Algorithm (155)
        • CodeUp ๊ธฐ์ดˆ (44)
        • ํŒŒ์ด์ฌ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ (64)
        • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (4)
        • SWEA (30)
        • Softeer (10)
        • BOJ (2)
      • CS (9)
        • ์ปดํ“จํ„ฐ์ผ๋ฐ˜ (3)
        • ์šด์˜์ฒด์ œ (3)
        • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (0)
        • ์ •๋ณดํ†ต์‹  (1)
        • ์ž๋ฃŒ๊ตฌ์กฐ (1)
        • ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™ (1)
        • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด (0)
        • ์ตœ์‹  ๋””์ง€ํ„ธ, ์ผ๋ฐ˜์ƒ์‹ (0)
      • ์ž๊ฒฉ์ฆ (41)
        • ์ •๋ณด๋ณด์•ˆ๊ธฐ์‚ฌ (9)
        • ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ (22)
        • ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ 1๊ธ‰ (3)
        • SQLD (7)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
hello_u
[BMC/iDRAC] RACADM์„ ์ด์šฉํ•œ Lifecycle Log ์ˆ˜์ง‘ ๋ฐ ์ฒ˜๋ฆฌํ•˜๊ธฐ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”