序文ここでは、zabbix を使用して監視します。netstat コマンドではなく ss コマンドを使用します。ss の方がはるかに高速だからです。信じられない場合は、テストしてみてください。マシンのソケットの数が多いほど、コントラストは顕著になります。 ss コマンドはさらに多くのコンテンツを表示できます。実際、私はこの 2 つのコマンドにあまり詳しくありません。man ss を使用すると、次のことがわかります。 1. ssコマンドss コマンドは、ソケットの状態を表示するために使用されます。PACKET ソケット、TCP ソケット、UDP ソケット、DCCP ソケット、RAW ソケット、Unix ドメイン ソケットなどの統計情報を表示できます。他のツールよりも多くの TCP および状態情報を表示します。これは、IP 接続とソケットを追跡するための非常に実用的で高速かつ効果的な新しいツールです。SS コマンドは、次の情報を提供できます。
多くの一般的な Linux ディストリビューションは ss をサポートしており、多くの監視ツールは ss コマンドを使用します。このツールに精通していると、システム パフォーマンスの問題をより適切に検出して解決するのに役立ちます。netsat -ant/lnt などの一部の netstat コマンドの代わりに ss コマンドを使用することを強くお勧めします。 直接SSコマンド 上記を説明します。 Netid #ソケットの種類。上記の例では、TCP、u_str(unixストリーム)などのソケットがあります。 State #ソケットはどのような状態ですか?以下は、TCPソケットのすべての状態と説明です。これらは実際にはTCPの3ウェイハンドシェイクと4ウェイハンドシェイクのすべての状態です。 Recv-Q #ESTAB状態では、カーネル内のデータの何バイトが上位層アプリケーションによって読み取られていないかを示します。ここでの値が大きい場合、アプリケーションがブロックされている可能性があります。 Send-Q #ESTAB状態では、カーネル送信キュー内のデータの何バイトが確認ACKを受信していないかを示します。この値が大きい場合、受信側の受信と処理を強化する必要があることを示しています。 Local Address:Port #ローカルアドレスとポート Peer Address:Port #リモートアドレスとポート それでは、上記の状態を見てみましょう。ネットワークに精通している方であれば、非常によく理解できるはずです。少なくとも私は今はあまり詳しくありません。3 つのハンドシェイクと 4 つのウェーブの状態は次のとおりです。 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : では、これらのステータス ss コマンドはどのように対応しているのでしょうか? (以下はssコマンドで表示されるステータス情報です) [TCP_ESTABLISHED] = "確立済み"、 [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] = "未接続"、 [TCP_CLOSE_WAIT] = "CLOSE-WAIT"、 [TCP_LAST_ACK] = "LAST-ACK"、 [TCP_LISTEN] = "LISTEN"、 [TCP_CLOSING] = "終了中"、 これで、次の監視を行うことができます。 ss コマンドの使用方法を読み続けてください。
-h, --help ヘルプ情報 -V, --version プログラムのバージョン情報 -n, --numeric サービス名を解決しない -r, --resolve ホスト名を解決 -a, --all すべてのソケットを表示する -l, --listening リスニングソケットを表示する -o, --options タイマー情報を表示 -e, --extended 詳細なソケット情報を表示 -m, --memory ソケットのメモリ使用量を表示 -p, --processes ソケットを使用しているプロセスを表示 -i, --info TCP 内部情報を表示 -s, --summary ソケットの使用状況の概要を表示 -4, --ipv4 IPv4 ソケットのみを表示 -6, --ipv6 IPv6ソケットのみ表示 -0, --packet PACKETソケットを表示 -t, --tcp TCPソケットのみ表示 -u, --udp UCPソケットのみ表示 -d, --dccp DCCPソケットのみ表示 -w, --raw RAWソケットのみ表示 -x, --unix Unixソケットのみ表示 -f, --family=FAMILY はタイプ FAMILY のソケットを表示します。FAMILY はオプションで、unix、inet、inet6、link、netlink をサポートします。 -A、--query=クエリ、--socket=クエリ クエリ := {all|inet|tcp|udp|raw|unix|packet|netlink}[,クエリ] -D, --diag=FILE 生のTCPソケット情報をファイルにダンプします -F, --filter=FILE ファイルからフィルター情報を削除します FILTER := [ state TCP-STATE ] [ EXPRESSION ] 焦点は次の監視です 2. Zabbix監視マシンの全体的なソケットステータスこの監視を行う前に、awkコマンドに慣れておくとよいでしょう。 ここで使用する監視システムは zabbix です。監視には、zabbix テンプレート (ここでは後で拡張できるようにテンプレートを選択) とカスタム スクリプトを組み合わせて使用します。 2.1. スクリプトを書くでは、早速スクリプトをご紹介します。 vim tcp_status.sh ##################スクリプトの内容################# #!/bin/bash [ $# -ne 1 ]の場合; echo "スクリプト名の後に引数を続けてください" フィ ケース$1 聞く) 結果 = `ss -ant | awk 'NR>1 {a[$1]++} END {for (b in a) print b,a[b]}' | awk '/LISTEN/{print $2}'` [ "$result" == "" ] の場合; エコー0 それ以外 $結果をエコーする フィ ;; 設立 結果=`ss -ant | awk 'NR>1 {a[$1]++} END {for (b in a) print b,a[b]}' | awk '/ESTAB/{print $2}'` [ "$result" == "" ] の場合; エコー0 それ以外 $結果をエコーする フィ ;; クローズ-待機 結果=`ss -ant | awk 'NR>1 {a[$1]++} END {for (b in a) print b,a[b]}' | awk '/CLOSE-WAIT/{print $2}'` [ "$result" == "" ] の場合; エコー0 それ以外 $結果をエコーする フィ ;; 時間待ち) 結果=`ss -ant | awk 'NR>1 {a[$1]++} END {for (b in a) print b,a[b]}' | awk '/TIME-WAIT/{print $2}'` [ "$result" == "" ] の場合; エコー0 それ以外 $結果をエコーする フィ ;; SYN-SENT) 結果 = `ss -ant | awk 'NR>1 {a[$1]++} END {for (b in a) print b,a[b]}' | awk '/SYN-SENT/{print $2}'` [ "$result" == "" ] の場合; エコー0 それ以外 $結果をエコーする フィ ;; SYN-RECV) 結果=`ss -ant | awk 'NR>1 {a[$1]++} END {for (b in a) print b,a[b]}' | awk '/SYN-RECV/{print $2}'` [ "$result" == "" ] の場合; エコー0 それ以外 $結果をエコーする フィ ;; フィンウェイト1) 結果=`ss -ant | awk 'NR>1 {a[$1]++} END {for (b in a) print b,a[b]}' | awk '/FIN-WAIT-1/{print $2}'` [ "$result" == "" ] の場合; エコー0 それ以外 $結果をエコーする フィ ;; フィンウェイト2) 結果 = `ss -ant | awk 'NR>1 {a[$1]++} END {for (b in a) print b,a[b]}' | awk '/FIN-WAIT-2/{print $2}'` [ "$result" == "" ] の場合; エコー0 それ以外 $結果をエコーする フィ ;; アンコネン 結果 = `ss -ant | awk 'NR>1 {a[$1]++} END {for (b in a) print b,a[b]}' | awk '/UNCONN/{print $2}'` [ "$result" == "" ] の場合; エコー0 それ以外 $結果をエコーする フィ ;; 最終確認 結果=`ss -ant | awk 'NR>1 {a[$1]++} END {for (b in a) print b,a[b]}' | awk '/LAST-ACK/{print $2}'` [ "$result" == "" ] の場合; エコー0 それ以外 $結果をエコーする フィ ;; 閉会 結果 = `ss -ant | awk 'NR>1 {a[$1]++} END {for (b in a) print b,a[b]}' | awk '/CLOSING/{print $2}'` [ "$result" == "" ] の場合; エコー0 それ以外 $結果をエコーする フィ ;; エサック 2.2. Zabbixエージェントの設定ファイルを設定するzabbix_agent.conf を vim で開きます。 ###############次のコンテンツを追加します################# UnsafeUserParameters=1 #このパラメータはカスタムスクリプトに必要です UserParameter=tcp.status[*],sh /home/zabbix/tcp_status.sh $1 #これは、記述したスクリプトを指定してパラメータを渡すために使用されます 設定後は必ずZabbixエージェントを再起動してください。 2.3. Zabbixテンプレートの設定アイテム、トリガー、グラフを追加する 次の図に示すように、新しいテンプレートを追加し、それにアイテムを追加します。 上図のキーのtcp.statusは、ステップ2の設定を参照します。UserParameter=tcp.status[*],sh /home/zabbix/tcp_status.sh \$1 そして括弧内の内容は\$1で渡されるパラメータです。具体的なパラメータは[UNCONN]のUNCONNです。これらの値は、第1ステップの監視スクリプトの場合、それぞれの場合に対応しています。基本的にはここで完了です。では、次の図に示すように、グラフを描画してテンプレートにグラフを追加してみましょう。 最も重要なステップは、監視スクリプトが設定されたホスト(最初のステップ)をテンプレートに追加することです。ここまでで監視は完了です。結果のグラフを見てみましょう。 3. 各マシンからZabbix監視マシンへのリクエスト数この監視の目的は、どのマシンがターゲット マシンに頻繁にアクセスするかを確認することです。 この監視はセルフディスカバリー監視を使用しますが、これは上記の監視よりも少し難しいです。なぜセルフディスカバリー監視を選択するのでしょうか?項目が確実ではないからです。ここでは、元のアドレス IP と宛先 IP アドレスを項目として選択します。宛先 IP アドレスは変更されないため、元のアドレス IP の値は変化します。したがって、ここでの監視には項目の自動生成が使用されます。項目を自動的に追加および削除します。実際には非常に使いやすいです。一度学べば、とても簡単です。 これも3つのステップに分かれています: スクリプトの作成、zabbix_agent.confファイルの設定、検出の設定 3.1. スクリプトの作成ここでは 2 つのスクリプトが必要です。1 つは自己検出用 (json 形式で出力する必要がある)、もう 1 つはアイテム用です。 vim tcp_monitory.sh ###################tcp_monitor.sh#################### #!/bin/bash #データを取得してdata.txtファイルに出力します。形式は次のとおりです: 元のアドレス ip: count: ターゲットアドレス ip #そして、カウントが 200 未満のデータをフィルターします。ここではソケット ステータスがありません。これは複雑すぎます。個々のニーズに応じて改善できます。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 #Python スクリプトを実行して json 形式を出力します。 python /home/zabbix/get_json.py ##################################### #以下はget_json.pyの内容です###############get_json.py################## #!/usr/bin/env python #コーディング=utf-8 jsonをインポート def create_json(パス): json_list = [] open(path) を f として: f.readlines() の行に対して: 辞書 = {} 分割 = 行.分割(" ") dict["{#DES_IP}"] = 分割[0] //dict["{#LINK_COUNT}"] = split[1] //これはオプションです dict["{#SOU_IP}"] = split[2][:-1] json_list.append(辞書) 合計 = {} 合計["データ"] = json_list 合計 = json.dumps(合計) 合計を印刷する __name__ == '__main__' の場合: パス = "/home/zabbix/data.txt" create_json(パス) ################区切り線: 上記は自分で発見したスクリプトです############### ################区切り線: 以下はアイテム関連のスクリプトです############### vim tcp_item.sh ###################tcp_item.sh####################### #!/bin/bash エクスポートLANG="en_US.UTF-8" パス=/home/zabbix/data.txt count=`cat $path | grep $1 | grep $2 | awk '{print $2}'` [ 1 "$count" -eq 1 ] && echo 0 || echo $count 両方のスクリプトが完了したので、zabbix_agent.confを設定できます。 3.2. zabbix_agent.conf ファイルの設定構成ファイルに次の内容を追加します。 UnsafeUserParameters=1 #すでに設定されている場合は、設定する必要はありません UserParameter=discovery.tcp_monitor[*],sh /home/zabbix/tcp_monitor.sh #自己検出 UserParameter=alert.tcp_count[*],sh /home/zabbix/tcp_item.sh $1 $2 #item、$1と$2は、異なるアイテムを区別するためのアイテム内の転送パラメータです 3.3. 検出、アイテム、トリガー、グラフを構成するここでは、Zabbixテンプレートで設定することを選択し、Discoveryを追加します。 次に、Discoveryでアイテム、トリガー、グラフを設定します。 構成項目: 上記の DES_IP と SOU_IP は、自己検出スクリプト内の Python スクリプトから派生し、出力形式に使用されます。 alter.tcp_count は UserParameter=alert.tcp_count[*],sh /home/zabbix/tcp_item.sh \$1 \$2 であり、後続の \$1、\$2 は DES_IP、SOU_IP に対応し、一意のアイテムを生成します。 アイテムを設定したら、トリガーを設定できます。 次にグラフの設定を続けます 最後に、テンプレートをマシンに追加して結果を確認します 上記は、Linux ss コマンドを zabbix と組み合わせてソケットを監視する方法についての詳細な説明です。Linux ss コマンド zabbix ソケット監視の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
テキストシャドウ text-shadow プロパティの効果: 1. 右下隅の影、左下隅の影、左上隅の...
目次非同期とは何ですか?なぜ非同期性が必要なのでしょうか?非同期IOとは何ですか?イベントループとは...
1. インストールパッケージをダウンロードする- お使いのコンピュータシステムに応じて適切なバージョ...
目次イベント駆動型とパブリッシュ・サブスクライブ型ブラウザの JavaScript ではイベント駆動...
この記事の例では、計算機機能を実装するためのミニプログラムの具体的なコードを参考までに共有しています...
clear:both清除浮動これは私が常に持っていた印象ですが、私はこれをめったに使用せず、私の理...
目次1. 接続管理2. オプティマイザレベルでの改善3. 機能の改善4. パフォーマンススキーマの最...
JavaとMysql 8.0.18バージョンの接続方法については、参考までに具体的な内容は以下のとお...
Fast-Linux プロジェクト アドレス: https://gitee.com/uitc/Fas...
この記事では、jQuery Canvasの描画画像検証コードの具体的なコードを例として紹介します。具...
目次1. Docker Composeとは何か、インストールして使用する方法2. DOCleverと...
目次序文1. マルチレベルのデータとイベントの配信には$attrsと$listenersを使用する2...
この記事では、MySQL での重複キー更新時の replace into と insert into...
目次序文なぜいくらですか?パラメータの数デフォルトパラメータ残りのパラメータ要約する序文今日は関数の...
関連記事: Win7 x64 に解凍版の mysql 5.7.18 winx64 をインストールする...