用 Linux Shell 腳原本監控磁盤使用狀況併發送郵件

市場上有不少用來監控 Linux 系統的監控工具,當系統到達閥值後它將發送一封郵件。它監控全部的東西例如 CPU 利用率、內存利用率、交換空間利用率、磁盤空間利用率等等。然而,它更適合小環境和大環境。linux

想想若是你只有少許系統,那麼什麼是最好的方式來應對這種狀況。git

是的,咱們想要寫一個 shell 腳本 來實現。github

在這篇指南中咱們打算寫一個 shell 腳原本監控系統的磁盤空間使用率。當系統到達給定的閥值,它將給對應的郵件地址發送一封郵件。在這篇文章中咱們總共添加了四個 shell 腳本,每一個用於不一樣的目的。以後,咱們會想出其餘 shell 腳原本監控 CPU,內存和交換空間利用率。shell

在此以前,我想澄清一件事,根據我觀察的磁盤空間使用率 shell 腳本使用狀況。express

大多數用戶在多篇博客中評論說,當他們運行磁盤空間使用率腳本時他們得到了如下錯誤。bash

# sh /opt/script/disk-usage-alert-old.sh

/dev/mapper/vg_2g-lv_root
test-script.sh: line 7: [: /dev/mapper/vg_2g-lv_root: integer expression expected
/ 9.8G
複製代碼

是的,這是對的。甚至,當我第一次運行這個腳本的時候我遇到了相同的問題。以後,我發現了根本緣由。app

當你在基於 RHEL 5 & RHEL 6 的系統上運行包含用於磁盤空間警告的 df -hdf -H 的 shell 腳本中時,你會發現上述錯誤信息,由於輸出格式不對,查看下列輸出。工具

爲了解決這個問題,咱們須要用 df -Ph (POSIX 輸出格式),可是默認的 df -h 在基於 RHEL 7 的系統上運行的很好。測試

# df -h

Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_2g-lv_root
                       10G  6.7G  3.4G  67% /
tmpfs                 7.8G     0  7.8G   0% /dev/shm
/dev/sda1             976M   95M  830M  11% /boot
/dev/mapper/vg_2g-lv_home
                      5.0G  4.3G  784M  85% /home
/dev/mapper/vg_2g-lv_tmp
                      4.8G   14M  4.6G   1% /tmp
複製代碼

方法一:Linux Shell 腳原本監控磁盤空間使用率和發送郵件

你可使用下列 shell 腳本在 Linux 系統中來監控磁盤空間使用率。ui

當系統到達給定的閥值限制時,它將發送一封郵件。在這個例子中,咱們設置閥值爲 60% 用於測試目的,你能夠改變這個限制來符合你的需求。

若是超過一個文件系統到達給定的閥值,它將發送多封郵件,由於這個腳本使用了循環。

一樣,替換你的郵件地址來獲取這份警告。

# vi /opt/script/disk-usage-alert.sh

#!/bin/sh
df -Ph | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5,$1 }' | while read output;
do
  echo $output
  used=$(echo $output | awk '{print $1}' | sed s/%//g)
  partition=$(echo $output | awk '{print $2}')
  if [ $used -ge 60 ]; then
  echo "The partition \"$partition\" on $(hostname) has used $used% at $(date)" | mail -s "Disk Space Alert: $used% Used On $(hostname)" [email protected]
  fi
done
複製代碼

輸出:我得到了下列兩封郵件警告。

The partition "/dev/mapper/vg_2g-lv_home" on 2g.CentOS7 has used 85% at Mon Apr 29 06:16:14 IST 2019

The partition "/dev/mapper/vg_2g-lv_root" on 2g.CentOS7 has used 67% at Mon Apr 29 06:16:14 IST 2019
複製代碼

最終添加了一個 cronjob 來自動完成。它會每 10 分鐘運行一次。

# crontab -e
*/10 * * * * /bin/bash /opt/script/disk-usage-alert.sh
複製代碼

方法二:Linux Shell 腳原本監控磁盤空間使用率和發送郵件

做爲代替,你可使用下列的 shell 腳本。對比上面的腳本咱們作了少許改變。

# vi /opt/script/disk-usage-alert-1.sh

#!/bin/sh
df -Ph | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5,$1 }' | while read output;
do
  max=60%
  echo $output
  used=$(echo $output | awk '{print $1}')
  partition=$(echo $output | awk '{print $2}')
  if [ ${used%?} -ge ${max%?} ]; then
  echo "The partition \"$partition\" on $(hostname) has used $used at $(date)" | mail -s "Disk Space Alert: $used Used On $(hostname)" [email protected]
  fi
done
複製代碼

輸出:我得到了下列兩封郵件警告。

The partition "/dev/mapper/vg_2g-lv_home" on 2g.CentOS7 has used 85% at Mon Apr 29 06:16:14 IST 2019

The partition "/dev/mapper/vg_2g-lv_root" on 2g.CentOS7 has used 67% at Mon Apr 29 06:16:14 IST 2019
複製代碼

最終添加了一個 cronjob 來自動完成。它會每 10 分鐘運行一次。

# crontab -e
*/10 * * * * /bin/bash /opt/script/disk-usage-alert-1.sh
複製代碼

方法三:Linux Shell 腳原本監控磁盤空間使用率和發送郵件

我更喜歡這種方法。由於,它工做起來頗有魔力,你只會收到一封關於全部事的郵件。

這至關簡單和直接。

*/10 * * * * df -Ph | sed s/%//g | awk '{ if($5 > 60) print $0;}' | mail -s "Disk Space Alert On $(hostname)" [email protected]
複製代碼

輸出: 我得到了一封關於全部警告的郵件。

Filesystem                            Size  Used Avail Use Mounted on
/dev/mapper/vg_2g-lv_root              10G  6.7G  3.4G  67 /
/dev/mapper/vg_2g-lv_home             5.0G  4.3G  784M  85 /home
複製代碼

方法四:Linux Shell 腳原本監控某個分區的磁盤空間使用狀況和發送郵件

# vi /opt/script/disk-usage-alert-2.sh

#!/bin/bash
used=$(df -Ph | grep '/dev/mapper/vg_2g-lv_dbs' | awk {'print $5'})
max=80%
if [ ${used%?} -ge ${max%?} ]; then
echo "The Mount Point "/DB" on $(hostname) has used $used at $(date)" | mail -s "Disk space alert on $(hostname): $used used" [email protected]
fi
複製代碼

輸出: 我獲得了下面的郵件警告。

The partition /dev/mapper/vg_2g-lv_dbs on 2g.CentOS6 has used 82% at Mon Apr 29 06:16:14 IST 2019
複製代碼

最終添加了一個 cronjob 來自動完成這些工做。它將每 10 分鐘運行一次。

# crontab -e
*/10 * * * * /bin/bash /opt/script/disk-usage-alert-2.sh
複製代碼

注意: 你將在 10 分鐘後收到一封郵件警告,由於這個腳本被計劃爲每 10 分鐘運行一次(但也不是精確的 10 分鐘,取決於時間)。

例如這個例子。若是你的系統在 8:25 到達了限制,你將在 5 分鐘後收到郵件警告。但願如今講清楚了。


via: www.2daygeek.com/linux-shell…

做者:Magesh Maruthamuthu 選題:lujun9972 譯者:warmfrog 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

相關文章
相關標籤/搜索