์๋ฒ์์ ๋์คํฌ๊ฐ ๋ชจ๋ ์ฐจ๋ ๊ฒฝ์ฐ ๋๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ชจ๋ ์ฐจ๋ ๊ฒฝ์ฐ (OOM์๋ฌ) ๊ฐ ์์ ๋ฐ์ํ๋ค.
์ ๋์๋ณด๋๋ก ๋งค์ผ๋งค์ผ ๊ทธ๋ผํ๋ ๋ชจ๋ํฐ๋ง์ ํ๊ณ ์์ผ๋, ๊ทธ๋ผํ๋๊ฐ ์ต์ํ์ง ์์ ๋๋ฃ๋ค์ ์ํด์ ํ์ฌ ์ฌ๋ด ๋ฉ์ผ๋ก ๋ฆฌ์์ค ๊ฒฝ๊ณ ๋ฉ์ผ์ ๋ณด๋ด๋ ์ค์ ์ ํด๋ณด๊ธฐ๋ก ํ๋ค. 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
ํ ์คํธ ์ฑ๊ณต !!! ๐
์ถ๊ฐ ์ ๋ณด!
- Gmail ๋ฐ์ก ํ๋: Gmail์ ํ๋ฃจ 500๊ฐ์ ์ด๋ฉ์ผ ๋ฐ์ก ์ ํ์ด ์์ต๋๋ค. ์ด๋ฅผ ์ด๊ณผํ๋ฉด ์ด๋ฉ์ผ ๋ฐ์ก์ด ์ฐจ๋จ๋ ์ ์๋ค๊ณ ํ๋ค.
- ๋ฉ์ผ ๋ก๊ทธ ํ์ธ: ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด /var/log/maillog๋ฅผ ํ์ธํ์ฌ ๋๋ฒ๊น
ํ ๊ฒ!
ํ์ฌ ๋๋ฃ๋ค์ด ๋๋ฌด ์ข์ํ ๋ฉ์ผ ์๋ ์ค์ ! ๋งค๋ฒ ์ ์ ๊ธ๊ธํ๋ฉฐ Grafana๋ฅผ ๋ค์ฌ๋ค ๋ณผ ํ์๋ ์๊ณ , ์ง์ ์์ ๋๋ ์๋ฒ ๋ฌธ์ ๋ฅผ ๋ฐ๋ก๋ฐ๋ก ์ ์ ์๋ค.
๋ฟ๋ฏ ๐๐