¿ù°£ Àα⠰Խù°

°Ô½Ã¹° 1,378°Ç
   
Log_monitoring.sh
±Û¾´ÀÌ : ÃÖ°í°ü¸®ÀÚ ³¯Â¥ : 2025-01-07 (È­) 11:46 Á¶È¸ : 13
±ÛÁÖ¼Ò :
                                
#!/bin/bash

# Telegram API Á¤º¸
BOT_TOKEN="XXXXXXXXXXXXXXX"
CHAT_IDS=("9XXXXX" "516XXXXX")


# Ű¿öµå ¼³Á¤ (ÄÞ¸¶·Î ±¸ºÐ)
KEYWORDS=("i/o error" \
   "ovs is dead" \
   "reset adapter" \
   "segfault at" \
   "Instance rollback" \
   "Adapter removed" \
   "exception Emask" \
   "Switch connection timeout" \
   "The process should not have died" \
   "unable to handle page fault for address" \
   "unable to handle kernel NULL pointe" \
   "timeout policy" \
   "OVS is down" \
   "Out of memory" \
   "Killed process" \
   "Failed to communicate with the switch" \
   "neighbor table overflow!" \
   "IO_PAGE_FAULT" \
   "protection fault" \
   "failed to assign" \
   "database was removed" \
   "can't for" ) 


# ·Î±× ÆÄÀÏ °æ·Î
LOG_FILE="/var/log/syslog"

# Áߺ¹ ¾Ë¸² Á¦ÇÑ ½Ã°£(ÃÊ)
ALERT_INTERVAL=30

# Àӽà ÆÄÀÏ °æ·Î (Ű¿öµåº° ¾Ë¸² »óÅ ÀúÀå)
TEMP_FILE="/tmp/telegram_alert_keywords.tmp"


# Telegram ¸Þ½ÃÁö Àü¼Û ÇÔ¼ö
send_telegram_message() {
    local message="$1"
    for chat_id in "${CHAT_IDS[@]}"; do
        curl -s -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
            -d chat_id="${chat_id}" \
            -d text="${message}" > /dev/null
    done
}

# Áߺ¹ ¸Þ½ÃÁö Á¦ÇÑ ÇÔ¼ö
should_send_alert() {
    local message="$1"
    local current_time
    current_time=$(date +%s)

    if [ ! -f "$TEMP_FILE" ]; then
        touch "$TEMP_FILE"
    fi

    # ¸Þ½ÃÁöº° ½Ã°£ È®ÀÎ
    if grep -qF "$message" "$TEMP_FILE"; then
        last_sent_time=$(grep -F "$message" "$TEMP_FILE" | awk '{print $1}')
        if (( current_time - last_sent_time < ALERT_INTERVAL )); then
            return 1  # Á¦ÇÑ ½Ã°£ ³»
        else
            # Á¦ÇÑ ½Ã°£ Ãʰú, °»½Å
            sed -i "/$message/d" "$TEMP_FILE"
        fi
    fi

    # »õ ±â·Ï Ãß°¡
    echo "$current_time $message" >> "$TEMP_FILE"
    return 0  # ¾Ë¸² Àü¼Û °¡´É
}

# ·Î±× ÆÄÀÏ ¸ð´ÏÅ͸µ
tail -F "$LOG_FILE" |egrep -v "pcieport|containment event|guest rIP|nrpe|rsyslog|snmp|kvm_set_msr_common" | while read -r line; do
    for sentence in "${KEYWORDS[@]}"; do
        if [[ "$line" == *"$sentence"* ]]; then
            if should_send_alert "$sentence"; then
message="[`hostname`] $line"
                send_telegram_message "$message"
            fi
            break
        fi
    done
done


# ln -sf /etc/init.d/logmon /etc/rc3.d/S01logmon
# service enable logmon


# cat > /etc/init.d/logmon
#!/bin/bash SERVICE_NAME="LogMonService"
COMMAND="/root/interval_test_logalarm.sh"
LOG_FILE="/var/log/${SERVICE_NAME}.log"
PID_FILE="/var/run/${SERVICE_NAME}.pid" start() {
if [ -f "$PID_FILE" ] && kill -0 "$(cat "$PID_FILE")" > /dev/null 2>&1; then
echo "$SERVICE_NAME is already running with PID $(cat "$PID_FILE")."
exit 1
fi echo "Starting $SERVICE_NAME..."
nohup $COMMAND > "$LOG_FILE" 2>&1 &
echo $! > "$PID_FILE"
echo "$SERVICE_NAME started with PID $(cat "$PID_FILE")."
} stop() {
if [ -f "$PID_FILE" ] && kill -0 "$(cat "$PID_FILE")" > /dev/null 2>&1; then
echo "Stopping $SERVICE_NAME..."
#kill "$(cat "$PID_FILE")"
kill -9 $(ps aux |grep interval |grep -v grep |awk '{print $2}')
rm -f "$PID_FILE"
echo "$SERVICE_NAME stopped."
else
echo "$SERVICE_NAME is not running."
fi
} status() {
if [ -f "$PID_FILE" ] && kill -0 "$(cat "$PID_FILE")" > /dev/null 2>&1; then
echo "$SERVICE_NAME is running with PID $(cat "$PID_FILE")."
else
echo "$SERVICE_NAME is not running."
fi
} restart() {
stop
sleep 1
start
} case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
status)
status
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
;;
esac





À̸§ ÆÐ½º¿öµå
ºñ¹Ð±Û (üũÇÏ¸é ±Û¾´À̸¸ ³»¿ëÀ» È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù.)
¿ÞÂÊÀÇ ±ÛÀÚ¸¦ ÀÔ·ÂÇϼ¼¿ä.
   

 



 
»çÀÌÆ®¸í : ¸ðÁö¸®³× | ´ëÇ¥ : À̰æÇö | °³ÀÎÄ¿¹Â´ÏƼ : ·©Å°´åÄÄ ¿î¿µÃ¼Á¦(OS) | °æ±âµµ ¼º³²½Ã ºÐ´ç±¸ | ÀüÀÚ¿ìÆí : mojily°ñ¹ðÀÌchonnom.com Copyright ¨Ï www.chonnom.com www.kyunghyun.net www.mojily.net. All rights reserved.