通過tcpdump採集主機間的流量情況

2021-09-27 05:18:31 字數 3383 閱讀 1613

由於公司計畫要從idc遷移上雲,前期準備工作之一就是要先梳理清楚當前主機間的呼叫關係鏈。 

作為乙個苦逼dba,不會那些高大上的招式,怎麼辦?? 

當然不能放棄,借鑑了下他的思路,我整出了個比較lowbi的方法。

我的思路:

1、在每台機器上tcpdump採集500個包,格式化後寫入到統一的資料庫中

2、在資料庫裡 select distinct 查詢語法, 即可找到某個主機的資料流的關係

## 在乙個專用的mysql伺服器 10.0.1.10 上建立賬號及庫:

create database tcpdump;

use tcpdump;

create table `graph` (

`id` int(10) unsigned not null auto_increment comment 'pk',

`src` varchar(100) not null default '1.1.1.1' comment '源位址',

`dest` varchar(100) not null default '2.2.2.2' comment '目的位址',

`cap_time` timestamp not null default current_timestamp on update current_timestamp,

primary key (`id`)

) engine=innodb auto_increment=5101 default charset=utf8 comment='存放抓包採集的資料流向關係';

grant select,update,delete,insert on tcpdump.* to 'tcpdump'@'%' identified by 'tcpdump';

實際執行的指令碼vim /root/cap/push.sh

# 沒錯,下面你即將看到最 low bi的用法,直接獲取資料調mysql客戶端插入

# 查詢語句:

# select distinct substring_index(src, '.', 1) as src,substring_index(dest, '.', 1) as dest from tcpdump.graph where src like 'sh1-%' and dest like 'sh1-%' and src like 'sh1-******%';

source /etc/profile

port=$(ip a | egrep "10.0.*.*/16" | awk '')

file1=dump.log

file2=data.log

mysql_host='10.0.1.10'

tcpdump -i $ tcp -p -c 1000 -q > $

# 注意,我這環境的主機名都是 sh1-db***x.demo.com ,因此使用下面的命令能提取出關鍵的主機資訊

cat $ | cut -d " " -f 3,5 > $

if `uname -r  | egrep  'el7'` ; then

mysql_version=/root/cap/mysql_el7

else

mysql_version=/root/cap/mysql_el6

fiwhile read line; do

echo $line | awk '' | $ -h $ -utcpdump -ptcpdump

done 

在 /root/cap/ 目錄下,我還放了2個版本的mysql客戶端(檔名 mysql_el6 和 mysql_el7),用來在不同版本的centos上執行寫入操作。

部署到遠端主機:

ansible ***x -m copy -a "src=/root/cap/ dest=/root/cap/ owner=root group=root mode=0755"

我們也可以再ansible推乙個定時任務到全部主機去,當然個人建議是遷移到那個服務,我們就單獨去對應服務的主機上多跑一段時間指令碼採集資料然後做分析,而不是一下子搞個全網採集,那樣資料量可能太大。

查詢方法:

select 

distinct substring_index(src,'.',1) as src,

substring_index(dest,'.',1) as dest 

from tcpdump.graph 

where src like 'sh1-rabbitmq01%' ;

結果類似這樣:

+----------------+----------------+

| src        | dest        |

+----------------+----------------+

| sh1-rabbitmq01 | sh1-web20    |

| sh1-rabbitmq01 | sh1-web25    |

| sh1-rabbitmq01 | sh1-web19    |

| sh1-rabbitmq01 | sh1-datax01   |

| sh1-rabbitmq01 | sh1-web10    |

| sh1-rabbitmq01 | sh1-k8s11    |

| sh1-rabbitmq01 | sh1-web10    |

| sh1-rabbitmq01 | sh1-web10    |

| sh1-rabbitmq01 | sh1-storm04   |

| sh1-rabbitmq01 | sh1-web10    |

+----------------+----------------+

有了資料後,我們還可以在 grafana 裡面畫圖,配置大致是這樣的:

1、新增mysql資料來源

2、畫圖,使用table型別的圖形展示介面,最終效果類似如下:

更進一步,我們還可以繪製動態的板子。這需要新增乙個variables,如下:

這樣,我們就可以下拉列表找到對應的主機了,不需要一股腦的翻的手軟眼花了。

docker 容器間通過宿主機IP間接通訊

容器間通過宿主機ip間接通訊 nginx容器和php fpm容器通訊 問題焦點 容器如何獲取宿主機docker0網絡卡ip?通過容器 etc profile hosts 檔案 下面2條命令是等效的 add host host ip 4 addr show docker0 grep po inet k...

UNIX主機間的檔案傳輸

本地工作站與遠端工作站之間檔案傳輸 必須擁有遠端工作站之帳號及密碼,才可進行傳輸工作 執行格式 ftp hostname or ftp ip address ftp 主機名或ip example ftp doc 與遠端工作站 doc 進行檔案傳輸 name doc user name 輸入帳號 pa...

基於sshpass批量實現主機間的key驗證指令碼

指令碼1 for實現 不需要ip清單檔案 bin sh iplist 10.0.0.58 10.0.0.68 color echo e e 1 32m color1 echo e e 1 31m end e 0m pass 123456 判斷軟體是否安裝,如未安裝則安裝 rpm q sshpass ...