這段時間一直忙,沒時間好好理下監控,趁着假期有時間,理了一下。
web
對於zabbix監控TCP狀態,在網上查了不少資料,大多數都是使用netstat命令來實現。c#
若是服務器的壓力小,連接少,不會有問題,但隨着服務器壓力和連接數的增長,用netstat就會形成執行速度慢,server端沒法接收到執行結果,形成監控異常。
bash
平時一直用SS,因此試着用SS代替netstat,速度快了很多。
服務器
我的較喜歡偷懶,看到網上不少少寫了很是長的腳本,又是函數,又是寫臨時文件的。其實徹底不必,不用寫啥腳本,臨時文件,很簡單的就搞定了。
tcp
下面是具體實現方式:
ide
一、在web端建立模板,具體版本以下面這些圖。
函數
二、經過下面ss的源碼咱們能夠知道SS能識別的TCP狀態的關鍵字。server
static const char *sstate_name[] = { "UNKNOWN", [TCP_ESTABLISHED] = "ESTAB", [TCP_SYN_SENT] = "SYN-SENT", [TCP_SYN_RECV] = "SYN-RECV", [TCP_FIN_WAIT1] = "FIN-WAIT-1", [TCP_FIN_WAIT2] = "FIN-WAIT-2", [TCP_TIME_WAIT] = "TIME-WAIT", [TCP_CLOSE] = "UNCONN", [TCP_CLOSE_WAIT] = "CLOSE-WAIT", [TCP_LAST_ACK] = "LAST-ACK", [TCP_LISTEN] = "LISTEN", [TCP_CLOSING] = "CLOSING", };
咱們用這些關鍵字替換上面Item中的KEY來實現全部狀態的獲取。
blog
三、配置zabbix agent配置文件。
get
cat tcp_status.sh UserParameter=tcp.status[*], /usr/sbin/ss -ant|grep -c $1
四、最後重啓zabbix agent後,關聯模板便可。
寫的比較簡單,你們本身嘗試先,有問題再聊。