国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

詳解Linux使用ss命令結(jié)合zabbix對(duì)socket做監(jiān)控

瀏覽:128日期:2024-09-24 17:45:09
目錄前言一、ss命令二、zabbix監(jiān)控機(jī)器總體的socket情況2.1、寫腳本2.2、配置zabbix agent的配置文件2.3、配置zabbix的模板三、zabbix監(jiān)控機(jī)器來源于各個(gè)機(jī)器的請(qǐng)求數(shù)3.1、寫腳本3.2、配置zabbix_agent.conf文件3.3、配置Discovery,配置item,trigger,graph前言

這里我們使用zabbix對(duì)其進(jìn)行監(jiān)控,使用的是ss命令,不使用netstat命令,因?yàn)閟s的速度快很多,不信的話可以去測一下哈,一臺(tái)機(jī)器的socket越多,對(duì)比越明顯。而且ss命令能顯示更多的內(nèi)容,其實(shí)我對(duì)這兩個(gè)命令不是特別的熟悉,通過man ss可以看到:

詳解Linux使用ss命令結(jié)合zabbix對(duì)socket做監(jiān)控

一、ss命令

ss命令用于顯示socket狀態(tài). 他可以顯示PACKET sockets, TCP sockets, UDP sockets, DCCP sockets, RAW sockets, Unix domain sockets等等統(tǒng)計(jì). 它比其他工具展示等多tcp和state信息. 它是一個(gè)非常實(shí)用、快速、有效的跟蹤IP連接和sockets的新工具.SS命令可以提供如下信息:

所有的TCP sockets 所有的UDP sockets 所有ssh/ftp/ttp/https持久連接 所有連接到Xserver的本地進(jìn)程 使用state(例如:connected, synchronized, SYN-RECV, SYN-SENT,TIME-WAIT)、地址、端口過濾 所有的state FIN-WAIT-1 tcpsocket連接以及更多

很多流行的Linux發(fā)行版都支持ss以及很多監(jiān)控工具使用ss命令.熟悉這個(gè)工具有助于您更好的發(fā)現(xiàn)與解決系統(tǒng)性能問題.本人強(qiáng)烈建議使用ss命令替代netstat部分命令,例如netsat -ant/lnt等

直接ss命令

詳解Linux使用ss命令結(jié)合zabbix對(duì)socket做監(jiān)控

對(duì)上面解釋一波:

Netid #socket類型,在上面的例子中,有 TCP、u_str(unix流)等套接字State #套接字處于什么狀態(tài),下面是TCP套接字的所有狀態(tài)及說明, 實(shí)際上就是TCP的三次握手和四次揮手的所有狀態(tài)Recv-Q #在 ESTAB 狀態(tài)下,表示內(nèi)核中還有多少字節(jié)的數(shù)據(jù)沒有被上層應(yīng)用讀取,如果這里數(shù)值很大,應(yīng)用程序可能發(fā)生了阻塞Send-Q #在 ESTAB 狀態(tài)下,表示內(nèi)核發(fā)送隊(duì)列中還有多少字節(jié)的數(shù)據(jù)沒有收到確認(rèn)的ACK,如果這個(gè)數(shù)值很大,表明接收端的接收以及處理需要加強(qiáng)Local Address:Port #本地地址和端口Peer Address:Port #遠(yuǎn)程地址和端口

然后我們接著看上面的state有哪些呢,如果特別熟悉網(wǎng)絡(luò)的人應(yīng)該很懂,至少我現(xiàn)在是不是特別熟悉,三次握手和四次揮手的狀態(tài):

LISTEN #服務(wù)端偵聽套接字等待客戶端的連接SYN-SENT #客戶端已發(fā)送套接字連接請(qǐng)求報(bào)文,等待連接被服務(wù)器接收SYN-RECEIVED #服務(wù)器端接收連接請(qǐng)求報(bào)文后,等待客戶端的確認(rèn)連接的回復(fù)報(bào)文ESTABLISHED #服務(wù)端和客戶端之間成功建立了一條有效的連接,可以互相傳輸數(shù)據(jù)FIN-WAIT-1 #服務(wù)器或客戶端調(diào)用close函數(shù)主動(dòng)向?qū)Ψ桨l(fā)出終止連接的請(qǐng)求報(bào)文,同時(shí)等待對(duì)方確認(rèn)終止連接的回復(fù)報(bào)文FIN-WAIT-2 #主動(dòng)關(guān)閉連接端收到對(duì)方確認(rèn)終止連接的回復(fù)報(bào)文,同時(shí)等待對(duì)方連接終止的請(qǐng)求報(bào)文,這時(shí)的狀態(tài)是TCP連接的半關(guān)閉狀態(tài),可以接受數(shù)據(jù),但是不能發(fā)送數(shù)據(jù)CLOSE-WAIT #被動(dòng)關(guān)閉端收到主動(dòng)關(guān)閉端終止連接的請(qǐng)求報(bào)文后,向主動(dòng)關(guān)閉端發(fā)送確認(rèn)終止連接的回復(fù)報(bào)文,同時(shí)被動(dòng)關(guān)閉端等待本地用戶終止連接,這時(shí)被動(dòng)關(guān)閉端的狀態(tài)是TCP連接的半關(guān)閉狀態(tài),可以發(fā)送數(shù)據(jù),但是不能接收數(shù)據(jù)CLOSING #服務(wù)器和客戶端同時(shí)向?qū)Ψ桨l(fā)送終止連接(調(diào)用close函數(shù))請(qǐng)求報(bào)文,并且雙方都是在收到對(duì)方發(fā)送的終止連接回復(fù)報(bào)文之前收到了對(duì)方的發(fā)送的終止連接請(qǐng)求報(bào)文,這個(gè)時(shí)候雙方都進(jìn)入了CLOSING狀態(tài),進(jìn)入CLOSING狀態(tài)之后,只要收到了對(duì)方對(duì)自己終止連接的回復(fù)報(bào)文,就會(huì)進(jìn)入TIME-WAIT狀態(tài),所以CLOSING狀態(tài)的持續(xù)時(shí)間會(huì)特別短,一般很難捕獲到LAST-ACK #被動(dòng)關(guān)閉端發(fā)送完全部數(shù)據(jù)之后,向主動(dòng)關(guān)閉端發(fā)送終止連接的請(qǐng)求報(bào)文,等待主動(dòng)關(guān)閉端發(fā)送終止連接的回復(fù)報(bào)文TIME-WAIT #主動(dòng)關(guān)閉端收到被動(dòng)關(guān)閉端終止連接的請(qǐng)求報(bào)文后,給被動(dòng)關(guān)閉端發(fā)送終止連接的回復(fù)報(bào)文,等待足夠時(shí)間以確保被動(dòng)關(guān)閉端收到了主動(dòng)關(guān)閉段發(fā)送的終止連接的回復(fù)報(bào)文CLOSED #完全沒有連接,套接字連接已經(jīng)終止了

那么這些狀態(tài)ss命令又怎么對(duì)應(yīng)呢?(后面的是ss命令顯示的狀態(tài)信息)

[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',

江到這里其實(shí)就可以去做下面的監(jiān)控了,繼續(xù)往下看ss命令的使用。

Usage: ss [ OPTIONS ]

       ss [ OPTIONS ] [ FILTER ]

-h, --help 幫助信息-V, --version 程序版本信息-n, --numeric 不解析服務(wù)名稱-r, --resolve 解析主機(jī)名-a, --all 顯示所有套接字(sockets)-l, --listening 顯示監(jiān)聽狀態(tài)的套接字(sockets)-o, --options 顯示計(jì)時(shí)器信息-e, --extended 顯示詳細(xì)的套接字(sockets)信息-m, --memory 顯示套接字(socket)的內(nèi)存使用情況-p, --processes 顯示使用套接字(socket)的進(jìn)程-i, --info 顯示 TCP內(nèi)部信息-s, --summary 顯示套接字(socket)使用概況-4, --ipv4 僅顯示IPv4的套接字(sockets)-6, --ipv6 僅顯示IPv6的套接字(sockets)-0, --packet 顯示 PACKET 套接字(socket)-t, --tcp 僅顯示 TCP套接字(sockets)-u, --udp 僅顯示 UCP套接字(sockets)-d, --dccp 僅顯示 DCCP套接字(sockets)-w, --raw 僅顯示 RAW套接字(sockets)-x, --unix 僅顯示 Unix套接字(sockets)-f, --family=FAMILY 顯示 FAMILY類型的套接字(sockets),F(xiàn)AMILY可選,支持 unix, inet, inet6, link, netlink-A, --query=QUERY, --socket=QUERYQUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]-D, --diag=FILE 將原始TCP套接字(sockets)信息轉(zhuǎn)儲(chǔ)到文件-F, --filter=FILE 從文件中都去過濾器信息FILTER := [ state TCP-STATE ] [ EXPRESSION ]

重點(diǎn)在下面的監(jiān)控

二、zabbix監(jiān)控機(jī)器總體的socket情況

做這個(gè)監(jiān)控前可以熟悉下awk命令

這是使用的監(jiān)控系統(tǒng)為zabbix,我們這里會(huì)結(jié)合zabbix的模板(這里選擇模板是為了后期拓展),和自定義腳本的方式進(jìn)行監(jiān)控。

2.1、寫腳本

二話不多說上腳本先:

vim tcp_status.sh#################腳本內(nèi)容##################!/bin/bashif [ $# -ne 1 ];then echo 'Follow the script name with an argument 'ficase $1 in LISTEN)result=`ss -ant | awk ’NR>1 {a[$1]++} END {for (b in a) print b,a[b]}’ | awk ’/LISTEN/{print $2}’`if [ '$result' == '' ];then echo 0else echo $resultfi;; ESTAB)result=`ss -ant | awk ’NR>1 {a[$1]++} END {for (b in a) print b,a[b]}’ | awk ’/ESTAB/{print $2}’`if [ '$result' == '' ];then echo 0else echo $resultfi;; CLOSE-WAIT)result=`ss -ant | awk ’NR>1 {a[$1]++} END {for (b in a) print b,a[b]}’ | awk ’/CLOSE-WAIT/{print $2}’`if [ '$result' == '' ];then echo 0else echo $resultfi;; TIME-WAIT)result=`ss -ant | awk ’NR>1 {a[$1]++} END {for (b in a) print b,a[b]}’ | awk ’/TIME-WAIT/{print $2}’`if [ '$result' == '' ];then echo 0else echo $resultfi;; SYN-SENT)result=`ss -ant | awk ’NR>1 {a[$1]++} END {for (b in a) print b,a[b]}’ | awk ’/SYN-SENT/{print $2}’`if [ '$result' == '' ];then echo 0else echo $resultfi;; SYN-RECV)result=`ss -ant | awk ’NR>1 {a[$1]++} END {for (b in a) print b,a[b]}’ | awk ’/SYN-RECV/{print $2}’`if [ '$result' == '' ];then echo 0else echo $resultfi;; FIN-WAIT-1)result=`ss -ant | awk ’NR>1 {a[$1]++} END {for (b in a) print b,a[b]}’ | awk ’/FIN-WAIT-1/{print $2}’`if [ '$result' == '' ];then echo 0else echo $resultfi;; FIN-WAIT-2)result=`ss -ant | awk ’NR>1 {a[$1]++} END {for (b in a) print b,a[b]}’ | awk ’/FIN-WAIT-2/{print $2}’`if [ '$result' == '' ];then echo 0else echo $resultfi;; UNCONN)result=`ss -ant | awk ’NR>1 {a[$1]++} END {for (b in a) print b,a[b]}’ | awk ’/UNCONN/{print $2}’`if [ '$result' == '' ];then echo 0else echo $resultfi;; LAST-ACK)result=`ss -ant | awk ’NR>1 {a[$1]++} END {for (b in a) print b,a[b]}’ | awk ’/LAST-ACK/{print $2}’`if [ '$result' == '' ];then echo 0else echo $resultfi;; CLOSING)result=`ss -ant | awk ’NR>1 {a[$1]++} END {for (b in a) print b,a[b]}’ | awk ’/CLOSING/{print $2}’`if [ '$result' == '' ];then echo 0else echo $resultfi;; esac2.2、配置zabbix agent的配置文件

vim zabbix_agent.conf##############添加如下內(nèi)容#################UnsafeUserParameters=1 #這個(gè)參數(shù)是自定義腳本需要配置的UserParameter=tcp.status[*],sh /home/zabbix/tcp_status.sh $1 #這里就是用來指定剛剛寫的腳本,后面?zhèn)饕粋€(gè)參數(shù)

配置好了以后記得重啟zabbix agent

2.3、配置zabbix的模板

往其中添加item,trigger,graph

新增模板,然后往其中添加item,如下圖所示

詳解Linux使用ss命令結(jié)合zabbix對(duì)socket做監(jiān)控

上圖中key中的tcp.status指的是剛剛在第二步中的配置UserParameter=tcp.status[*],sh /home/zabbix/tcp_status.sh $1

然后中括號(hào)里面的內(nèi)容就是$1進(jìn)行傳參的參數(shù),具體的參數(shù)就是[UNCONN]里面的UNCONN,這些值對(duì)應(yīng)第一步監(jiān)控腳本中的case中的每一種情況,到這里基本上完成了,不,還是畫個(gè)圖吧,在模板中添加graph,如下圖所示:

詳解Linux使用ss命令結(jié)合zabbix對(duì)socket做監(jiān)控

還有最重要的一步就是把配置好監(jiān)控腳本的(第一步)的主機(jī)添加到該模板,到此為止這個(gè)監(jiān)控就做完了,看個(gè)結(jié)果圖吧

詳解Linux使用ss命令結(jié)合zabbix對(duì)socket做監(jiān)控

三、zabbix監(jiān)控機(jī)器來源于各個(gè)機(jī)器的請(qǐng)求數(shù)

這個(gè)監(jiān)控的目的就是看看到底是哪些機(jī)器訪問目標(biāo)機(jī)器比較頻繁。

這個(gè)監(jiān)控采用自發(fā)現(xiàn)的監(jiān)控,比上面那個(gè)會(huì)難一點(diǎn)哈,為啥要選擇自發(fā)現(xiàn)的監(jiān)控呢,因?yàn)閕tem不是確定的,這里選擇:原地址ip和目的ip地址作為item,我們?cè)谀康膇p地址進(jìn)行監(jiān)控,這個(gè)是不變的,所以原地址ip值會(huì)發(fā)生變化,所以這里采用的是自動(dòng)生成item的方式進(jìn)行監(jiān)控,自動(dòng)添加和刪除item,其實(shí)挺好用的,只要學(xué)會(huì)了,超級(jí)簡單

這里也是分為三步,寫腳本,配置zabbix_agent.conf文件,配置Discovery

3.1、寫腳本

這里需要兩個(gè)腳本,一個(gè)用來做自發(fā)現(xiàn)(需要輸出json格式),一個(gè)用來做item的)

vim tcp_monitory.sh##################tcp_monitor.sh###################!/bin/bash#獲取數(shù)據(jù)輸出到data.txt文件中,格式為:原地址ip:count:目標(biāo)地址ip#并且過濾掉count小于200的數(shù)據(jù),這里沒有分socket的狀態(tài),眉毛胡子一把抓了,個(gè)人可以根據(jù)具體的需求改進(jìn)ip_addr=`ip addr | grep -w inet | grep -v '127.0.0.1' | awk ’{print $2}’| awk -F '/' ’{print $1}’`ss -ant | awk ’{ print $5}’|grep -Ev ’127.0.0.1’ | cut -d ’:’ -f4 | awk -v ip_addr=$ip_addr ’NR>1 {++s[$1]} END {for(k in s)if(s[k]>=200){print k,s[k],ip_addr}}’ | grep -E '^([0-9]{1,3}.){3}[0-9]' > /home/zabbix/data.txt#執(zhí)行Python腳本,這是為了輸出json格式,python /home/zabbix/get_json.py######################################如下是get_json.py的內(nèi)容##############get_json.py#################!/usr/bin/env python#coding=utf-8import jsondef create_json(path): json_list = [] with open(path) as f:for line in f.readlines(): dict = {} split = line.split(' ') dict['{#DES_IP}'] = split[0] //dict['{#LINK_COUNT}'] = split[1] //這個(gè)是可以不要的 dict['{#SOU_IP}'] = split[2][:-1] json_list.append(dict) sum = {} sum['data'] = json_list sum = json.dumps(sum) print sumif __name__ == ’__main__’: path = '/home/zabbix/data.txt' create_json(path)##############分割線:上面的是自發(fā)現(xiàn)的腳本#############################分割線:下面的是item相關(guān)腳本###############vim tcp_item.sh##################tcp_item.sh#####################!/bin/bashexport LANG='en_US.UTF-8'path=/home/zabbix/data.txtcount=`cat $path | grep $1 | grep $2 | awk ’{print $2}’`[ 1'$count' -eq 1 ] && echo 0 || echo $count

兩個(gè)腳本都搞定了,就可以進(jìn)行zabbix_agent.conf的配置了

3.2、配置zabbix_agent.conf文件

在配置文件中新增如下內(nèi)容:

UnsafeUserParameters=1 #如果已經(jīng)配置就不需要配置了UserParameter=discovery.tcp_monitor[*],sh /home/zabbix/tcp_monitor.sh #自發(fā)現(xiàn)UserParameter=alert.tcp_count[*],sh /home/zabbix/tcp_item.sh $1 $2 #item,其中$1,$2為item中的傳遞參數(shù),用來區(qū)別item的不同3.3、配置Discovery,配置item,trigger,graph

這里還是選擇在zabbix的模板上進(jìn)行配置,現(xiàn)在新增一個(gè)Discovery

詳解Linux使用ss命令結(jié)合zabbix對(duì)socket做監(jiān)控

然后在Discovery上配置item,trigger,graph

詳解Linux使用ss命令結(jié)合zabbix對(duì)socket做監(jiān)控

配置item:

詳解Linux使用ss命令結(jié)合zabbix對(duì)socket做監(jiān)控

上面的DES_IP,SOU_IP來源于自發(fā)現(xiàn)腳本中的Python腳本,用于輸出的格式。alter.tcp_count是UserParameter=alert.tcp_count[*],sh /home/zabbix/tcp_item.sh $1 $2,后面的$1,$2與DES_IP,SOU_IP相對(duì)應(yīng)生成唯一確定的item。

item配置完畢后就可以配置trigger了:

詳解Linux使用ss命令結(jié)合zabbix對(duì)socket做監(jiān)控

接下來繼續(xù)配置graph了

詳解Linux使用ss命令結(jié)合zabbix對(duì)socket做監(jiān)控

最后把模板添加到機(jī)器,然后看結(jié)果

詳解Linux使用ss命令結(jié)合zabbix對(duì)socket做監(jiān)控

以上就是詳解Linux使用ss命令結(jié)合zabbix對(duì)socket做監(jiān)控的詳細(xì)內(nèi)容,更多關(guān)于Linux ss命令 zabbix socket監(jiān)控的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Linux系統(tǒng)
相關(guān)文章:
主站蜘蛛池模板: 成人在免费观看视频国产 | 华人黄网站 | 国产99视频精品免费观看9e | 最近最新中文字幕免费的一页 | 国产免费人视频在线观看免费 | 日本欧美一级二级三级不卡 | freesex日本高清nice | 最新毛片久热97免费精品视频 | 国产人成久久久精品 | 免费人欧美成又黄又爽的视频 | 女人被男人桶 | 免费视频99 | 欧美日韩一区二区三区在线视频 | 精品国产一区二区三区不卡在线 | 亚洲日本高清影院毛片 | 国产一级毛片一区二区三区 | 久久精品国产亚洲网址 | 国产成人在线视频免费观看 | 亚洲免费视频一区 | 成人观看的视频三级 | 久草在线资源网站 | 性刺激久久久久久久久 | 国产一区二区三区在线观看免费 | 国产3级在线 | 99久久99久久精品免费看子 | 成年女人毛片免费视频永久vip | 欧美综合图片一区二区三区 | 欧美一级片在线看 | 久久亚洲国产精品 | 欧美成人三级视频 | 国产的一级片 | 中文字幕无线精品乱码一区 | 在线小毛片 | 久久精品免费播放 | 99在线精品视频免费观里 | 欧美成人视 | 九色97| 淫模| 久久高清精品 | 美女精品永久福利在线 | 秋霞手机入口二日韩区 |