์ธํ”„๋ผ

[SMTP] ์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค ๊ฒฝ๊ณ  ๋ฉ”์ผ ์ „์†ก ์„ค์ •ํ•˜๊ธฐ

THE NICOLE 2025. 1. 24. 13:40

์„œ๋ฒ„์—์„œ ๋””์Šคํฌ๊ฐ€ ๋ชจ๋‘ ์ฐจ๋Š” ๊ฒฝ์šฐ ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ชจ๋‘ ์ฐจ๋Š” ๊ฒฝ์šฐ (OOM์—๋Ÿฌ) ๊ฐ€ ์™•์™• ๋ฐœ์ƒํ•œ๋‹ค.

ํ˜„์žฌ ๋ฆฌ์†Œ์Šค ๋ชจ๋‹ˆํ„ฐ๋ง์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” Grafana ๋Œ€์‹œ๋ณด๋“œ์ด๋‹ค.

 

์œ„ ๋Œ€์‹œ๋ณด๋“œ๋กœ ๋งค์ผ๋งค์ผ ๊ทธ๋ผํŒŒ๋‚˜ ๋ชจ๋‹ˆํ„ฐ๋ง์€ ํ•˜๊ณ  ์žˆ์œผ๋‚˜, ๊ทธ๋ผํŒŒ๋‚˜๊ฐ€ ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ๋™๋ฃŒ๋“ค์„ ์œ„ํ•ด์„œ ํšŒ์‚ฌ ์‚ฌ๋‚ด ๋ฉ”์ผ๋กœ ๋ฆฌ์†Œ์Šค ๊ฒฝ๊ณ  ๋ฉ”์ผ์„ ๋ณด๋‚ด๋Š” ์„ค์ •์„ ํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.  Gmail SMTP๋ฅผ ์ด์šฉํ•˜์—ฌ ์ง„ํ–‰ํ–ˆ๋‹ค. 


1. Gmail SMTP ์„ค์ • ๋ฐ mailx ์„ค์น˜ 

Gmail SMTP ์„ค์ •์ด ํ•„์š”ํ•˜๋‹ค. ์•„๋ž˜ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ–ˆ๋‹ค. 

https://hyunmin1906.tistory.com/276

 

[Go] Google Gmail SMTP ์„ค์ • ๋ฐฉ๋ฒ• ๋ฐ ๋ฉ”์ผ ์ „์†ก

โ–  SMTP ๊ฐ„์ด ์šฐํŽธ ์ „์†ก ํ”„๋กœํ† ์ฝœ(Simple Mail Transfer Protocol)์˜ ์•ฝ์ž. ์ด๋ฉ”์ผ ์ „์†ก์— ์‚ฌ์šฉ๋˜๋Š” ๋„คํŠธ์›Œํฌ ํ”„๋กœํ† ์ฝœ์ด๋‹ค. ์ธํ„ฐ๋„ท์—์„œ ๋ฉ”์ผ ์ „์†ก์— ์‚ฌ์šฉ๋˜๋Š” ํ‘œ์ค€์ด๋‹ค. 1982๋…„ RFC821์—์„œ ํ‘œ์ค€ํ™”๋˜์–ด ํ˜„์žฌ

hyunmin1906.tistory.com

 

mailx ์„ค์น˜

CentOS 8์—์„œ mailx๋ฅผ ์„ค์น˜ํ–ˆ๋‹ค. 

sudo dnf install mailx

 

SMTP ์„ค์ • ํŒŒ์ผ ํŽธ์ง‘

/etc/mail.rc ํŒŒ์ผ์— Gmail SMTP ์„ค์ •์„ ์ถ”๊ฐ€ํ•ด์•ผํ•œ๋‹ค.

# Gmail SMTP ์„ค์ •
set smtp=smtp://smtp.gmail.com:587
set smtp-auth=login
set smtp-auth-user=sales.test@gmail.com    # Gmail ๊ณ„์ •
set smtp-auth-password=asdfasdfasdf        # Gmail ์•ฑ ๋น„๋ฐ€๋ฒˆํ˜ธ
set smtp-use-starttls
set from="sales.test@gmail.com"           # ๋ฐœ์‹  ์ด๋ฉ”์ผ
set ssl-verify=ignore                     # SSL ์ธ์ฆ ๋ฌด์‹œ (ํ•„์š” ์‹œ ์ถ”๊ฐ€)

 


2. ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰ ํ™•์ธ ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ

๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰์„ ํ™•์ธํ•˜๊ณ  ํŠน์ • ์ž„๊ณ„๊ฐ’ ์ด์ƒ์ผ ๋•Œ Gmail๋กœ ์•Œ๋ฆผ์„ ๋ณด๋‚ด๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

์Šคํฌ๋ฆฝํŠธ ์˜ˆ์ œ (disk_alert.sh)

cd /app/test/alarm
vim disk_alert.sh

 

๊ฐ„๋‹จํ•œ ๊ฒฝ๋กœ์— ๊ฐ„๋‹จํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค. 

#!/bin/bash

# ์„ค์ •
DISK_THRESHOLD=80                  # ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰ ์ž„๊ณ„๊ฐ’ (%)
MEMORY_THRESHOLD=90                # ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ž„๊ณ„๊ฐ’ (%)
EMAIL="sales.test@gmail.com,testtest@daum.co.kr"  # ์•Œ๋ฆผ์„ ๋ฐ›์„ ์ด๋ฉ”์ผ ์ฃผ์†Œ
MESSAGE="/tmp/resource_alert.txt"

# ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰ ํ™•์ธ (๋งˆ์šดํŠธ ํฌ์ธํŠธ / ๋งŒ ํ™•์ธ)
df -h | awk '$6 == "/" {print $5 " " $6}' | while read output; do
  usage=$(echo $output | awk '{print $1}' | sed 's/%//') # ํผ์„ผํŠธ ์ œ๊ฑฐ
  mount=$(echo $output | awk '{print $2}')

  echo "ํ˜„์žฌ ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰: ${usage}%"  # ๋””๋ฒ„๊น… ๋ฉ”์‹œ์ง€

  if [ $usage -ge $DISK_THRESHOLD ]; then
    SUBJECT_DISK="[WARNING] System Resource Alert (192.168.2.53 | DISK ${usage}%)"
    echo -e "๊ฒฝ๊ณ : ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ž„๊ณ„๊ฐ’(${DISK_THRESHOLD}%)์„ ์ดˆ๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค.\\n" > $MESSAGE
    echo -e "๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰: ${usage}%\\n๋งˆ์šดํŠธ ์œ„์น˜: ${mount}" >> $MESSAGE
    echo "๋””์Šคํฌ ๊ฒฝ๊ณ  ์ด๋ฉ”์ผ ์ „์†ก ์ค‘..."
    mailx -s "$SUBJECT_DISK" "$EMAIL" < $MESSAGE
  fi
done

# ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๊ณ„์‚ฐ (total์—์„œ available ๋นผ๊ธฐ)
memory_info=$(free | awk '/Mem:/ {print $2, $7}') # total๊ณผ available ์ถ”์ถœ
total_memory=$(echo $memory_info | awk '{print $1}')
available_memory=$(echo $memory_info | awk '{print $2}')
used_memory=$((total_memory - available_memory))  # ์‚ฌ์šฉ ์ค‘ ๋ฉ”๋ชจ๋ฆฌ ๊ณ„์‚ฐ
memory_usage=$((used_memory * 100 / total_memory)) # ์‚ฌ์šฉ๋Ÿ‰ ๋น„์œจ ๊ณ„์‚ฐ (%)

# ๋ฉ”๋ชจ๋ฆฌ ๋‹จ์œ„๋ฅผ KB -> GB๋กœ ๋ณ€ํ™˜
total_memory_gb=$(awk "BEGIN {printf \\"%.2f\\", $total_memory / 1024 / 1024}") # GB๋กœ ๋ณ€ํ™˜
used_memory_gb=$(awk "BEGIN {printf \\"%.2f\\", $used_memory / 1024 / 1024}")   # GB๋กœ ๋ณ€ํ™˜

echo "ํ˜„์žฌ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰: ${memory_usage}%"  # ๋””๋ฒ„๊น… ๋ฉ”์‹œ์ง€

if [ $memory_usage -ge $MEMORY_THRESHOLD ]; then
  SUBJECT_MEMORY="[WARNING] System Resource Alert (192.168.2.53 | MEMORY ${memory_usage}%)"
  echo -e "๊ฒฝ๊ณ : ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ž„๊ณ„๊ฐ’(${MEMORY_THRESHOLD}%)์„ ์ดˆ๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค.\\n" > $MESSAGE
  echo -e "์ด ๋ฉ”๋ชจ๋ฆฌ: ${total_memory_gb}GB\\n์‚ฌ์šฉ ์ค‘ ๋ฉ”๋ชจ๋ฆฌ: ${used_memory_gb}GB\\n์‚ฌ์šฉ๋ฅ : ${memory_usage}%" >> $MESSAGE
  echo "๋ฉ”๋ชจ๋ฆฌ ๊ฒฝ๊ณ  ์ด๋ฉ”์ผ ์ „์†ก ์ค‘..."
  mailx -s "$SUBJECT_MEMORY" "$EMAIL" < $MESSAGE
fi


3. ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ๊ถŒํ•œ ๋ถ€์—ฌ

์Šคํฌ๋ฆฝํŠธ์— ์‹คํ–‰ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๊ธฐ

chmod +x disk_alert.sh

 

4. ํฌ๋ก ํƒญ์— ๋“ฑ๋กํ•˜์—ฌ ์ฃผ๊ธฐ์ ์œผ๋กœ ์‹คํ–‰

์ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ •๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋ ค๋ฉด cron์— ๋“ฑ๋กํ•ด์•ผํ•œ๋‹ค.

crontab -e

 

๋‹ค์Œ ๋ผ์ธ์„ ์ถ”๊ฐ€ํ•˜์—ฌ 30๋ถ„๋งˆ๋‹ค ์‹คํ–‰๋˜๋„๋ก ์„ค์ •ํ–ˆ๋‹ค. (๋„ˆ๋ฌด ์งง๊ฒŒ ํ•˜๋ฉด ๋ฉ”์ผ ํญํƒ„๋งž์„ ๊ฒƒ ๊ฐ™์•„์„œ..)

*/30 * * * * /app/test/alarm/disk_alert.sh

5. ํ…Œ์ŠคํŠธ

์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์‹คํ–‰ํ•˜์—ฌ Gmail ์•Œ๋ฆผ์ด ์ œ๋Œ€๋กœ ์˜ค๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. 

./disk_alert.sh

ํ…Œ์ŠคํŠธ ์„ฑ๊ณต !!! ๐Ÿ˜Š

๋ฆฌ์†Œ์Šค ์ž„๊ณ„์น˜๊ฐ€ ๋„˜์–ด๊ฐˆ ๊ฒฝ์šฐ ์‚ฌ๋‚ด ๋ฉ”์ผํ•จ์œผ๋กœ ๋ฉ”์ผ์ด ์˜จ๋‹ค.


์ถ”๊ฐ€ ์ •๋ณด!

  1. Gmail ๋ฐœ์†ก ํ•œ๋„: Gmail์€ ํ•˜๋ฃจ 500๊ฐœ์˜ ์ด๋ฉ”์ผ ๋ฐœ์†ก ์ œํ•œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด ์ด๋ฉ”์ผ ๋ฐœ์†ก์ด ์ฐจ๋‹จ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. 
  2. ๋ฉ”์ผ ๋กœ๊ทธ ํ™•์ธ: ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด /var/log/maillog๋ฅผ ํ™•์ธํ•˜์—ฌ ๋””๋ฒ„๊น…ํ•  ๊ฒƒ!

 

ํšŒ์‚ฌ ๋™๋ฃŒ๋“ค์ด ๋„ˆ๋ฌด ์ข‹์•„ํ•œ ๋ฉ”์ผ ์•Œ๋žŒ ์„ค์ •! ๋งค๋ฒˆ ์ „์ „๊ธ๊ธํ•˜๋ฉฐ Grafana๋ฅผ ๋“ค์—ฌ๋‹ค ๋ณผ ํ•„์š”๋„ ์—†๊ณ , ์ง‘์— ์žˆ์„ ๋•Œ๋„ ์„œ๋ฒ„ ๋ฌธ์ œ๋ฅผ ๋ฐ”๋กœ๋ฐ”๋กœ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

๋ฟŒ๋“ฏ ๐Ÿ˜Š๐Ÿ‘