最近碰到乙個專案,前端用apache htttpd進行發布(80埠),通過雙機負載均衡**到後端的兩個tomcat進行處理(8081和8082埠),現在需要隨時監控這三個埠的情況,一旦down掉需要能夠立即告警處理。批量的系統監控比較好的是用nagios軟體來實現,這樣小專案專門裝乙個nagios軟體,有點繁瑣了。在網上查了一些資料,總結實驗了一下,可以用簡單的nc命令來實現。
一、nc命令檢測埠的用法
# nc -v -w 10 %ip% -z %port%
-v 顯示指令執行過程。
-w 設定等待連線的時間。
-u 表示使用udp協議
-z 使用0輸入/輸出模式,只在掃瞄通訊埠時使用。
例1:掃瞄指定的8080埠
例2:掃瞄20到25的埠範圍,並詳細輸出。
# nc -v -w 2 -z 192.168.0.100 20-25
nc: connect to 192.168.0.100 port 20 (tcp) failed: connection refused
nc: connect to 192.168.0.100 port 21 (tcp) failed: connection refused
connection to 192.168.0.100 22 port [tcp/ssh] succeeded!
nc: connect to 192.168.0.100 port 23 (tcp) failed: connection refused
nc: connect to 192.168.0.100 port 24 (tcp) failed: connection refused
nc: connect to 192.168.0.100 port 25 (tcp) failed: connection refused
例3:掃瞄1到65535的埠範圍,只輸出開啟的埠(去掉-v引數即可)
二、批量檢測伺服器指定埠開放情況:
1、假如我們要監控一堆指定的ip和埠,可新建乙個檔案(第1列伺服器ip,第2列要監控的埠)。
# vim /scripts/ip-ports.txt
192.168.0.100 80
192.168.0.100 8081
192.168.0.101 8082
192.168.1.100 21
2、我們可以寫這樣乙個指令碼來批量檢測埠是否開放:
# vim /scripts/ncports.sh
#!/bin/bash
#檢測伺服器端口是否開放,成功會返回0值顯示ok,失敗會返回1值顯示fail
cat /scripts/ip-ports.txt | while read line
donc -w 10 -z $line > /dev/null 2>&1
if [ $? -eq 0 ]
then
echo $line:ok
else
echo $line:fail
fidone
3、執行指令碼檢視執行結果如下:
# chmod a+x /scripts/ncports.sh
# /scripts/ncports.sh
192.168.0.100 80:ok
192.168.0.100 8081:ok
192.168.0.101 8082:ok
192.168.1.100 21:fail
三、埠不通時設定告警:
1、 郵件告警:
(1) 先安裝linux下面的郵件傳送程式mutt(參見我另一篇文章《linux下面如何用mutt命令傳送郵件》
(2) 修改上面的ncports.sh檢測指令碼,在顯示失敗fail的時候增加一行:
echo $line :fail
echo "伺服器 $line 埠不通,請盡快處理!" | mutt -s "【機房監控】伺服器$line埠不通" [email protected]
(3) 如果上面的接收郵箱設定為移動139郵箱,並開啟接收郵件簡訊告知,即可實現「簡訊告警」的功能。
2、 windows訊息彈窗告警:
(1) 先開啟接收訊息彈窗windows客戶機的「messenger」服務,設定為「啟動」
# vim /scripts/net.sh
#!/bin/bash
#/scripts/net.sh
case "$1" in
send)
echo "$3"|smbclient -i "$2" -m `nmblookup -a "$2"|sed -e '1d' -e '3,/*/d'|cut -f2|cut -d' ' -f1`
echo "usage:net send "
exit 1
esac
# chmod a+x /scripts/net.sh
(3) 傳送訊息彈窗命令測試:(傳送給192.168.1.83這台win xp機子,傳送內容不支援中文)
# /scripts/net.sh send 192.168.1.83 "hello,nihao"
3、埠不通時傳送郵件並訊息彈窗告警的指令碼如下:
# vim /scripts/ncports.sh
#!/bin/bash
#檢測伺服器端口是否開放,成功會返回0值,打不開會返回1值
cat /scripts/ip-ports.txt | while read line
donc -w 10 -z $line > /dev/null 2>&1
if [ $? -eq 0 ]
then
echo $line:ok
else
echo $line:fail
echo "伺服器 $line 埠不通,請盡快處理!" | mutt -s "【機房監控】伺服器$line埠不通" [email protected]
/scripts/net.sh send 192.168.1.83 "the $line fail"
fidone
4、加入任務計畫每2分鐘執行一次
# crontab -e
*/2 * * * * /scripts/ncports.sh > /dev/null 2>&1
# service crond restart
使用NC命令檢測TCP UDP埠是否可通
linux下 netstat工具 簡稱nc,號稱是網路工具中的 瑞士軍刀 我們都知道檢測tcp埠是否可通的命令是telnet,在windows和linux都可以用,但telnet不能檢測udp埠,今天給大家介紹的是linux下 nc命令用於檢測udp埠是否可通。root free telnet 12...
使用 nc 命令檢查遠端埠是否開啟
埠是與 linux 作業系統上的應用或程序的通訊端點的邏輯實體。在使用之前,了解目標機器上哪些埠是開啟並正在執行服務是非常有用的。我們可以使用 netstat 或其他幾個 linux 命令如 nmap 在本地機器上輕鬆地列出 linux 中的開啟埠。在本指南中,我們將向你展示如何使用簡單的netca...
使用nc命令檢查遠端埠是否開啟
首先,我們要知道,埠是與 linux 作業系統上的應用或程序的通訊端點的邏輯實體。在使用之前,了解目標機器上哪些埠是開啟並正在執行是很有用的。我們可以使用netstat或其他的 linux 命令如nmap在本地機器上輕鬆地列出 linux 中的開啟埠 在本文中,我們將向你展示如何使用簡單的netca...