Help us understand the problem. What is going on with this article?

tcpdumpの結果をS3に送る

More than 1 year has passed since last update.

これはなに

pt-query-digestなどで利用するために、特定のサーバから数分間tcpdumpを観測し収集したいという要件があります。
このとき、その特定のサーバがオートスケーリングの対象であったりすると非常にめんどうなため、S3など、クラウドストレージにサクッと収集できると良いです。

なお要件の性質上厳密に全てのログを収集する必要はないものとします。

どうするの

tcpdumpの結果を標準出力に吐き出し、それをawsコマンドのS3 Streamingで拾ってあげます。

つまり

$ tcpdump  -W1 -G60 -w - | aws s3 cp - s3://bucket/path/dump.pcap

とすることで実現できます。

解説

tcpdump -W1 -G60 -w -

-W1はファイルローテートを1回。
-G60は60秒でローテート。
-wは続くファイルに出力。
-は標準出力です。

このtcpdumpのキャプチャ結果をパイプで繋ぎ、S3に送ります。

S3では、
-標準入力で受け取った結果を、S3の特定のパスへアップロードします。

使用例

現実的には以下のようにcronに設定することで毎日0時に5分間だけポート3306へのTCP通信内容をキャプチャできます。

0 0 * * * tcpdump -W1 -G300 -w - port 3306 | aws s3 cp -  s3://log-bucket/tcpdump/$(date +\%Y/\%m/\%d)/$(date +\%s)-$(hostname).pcap
rmanzoku
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away