2016-02-26 26 views
-1

我使用elasticsearch很多,我需要一種方法來查看對elasticsearch服務器的請求。試圖清理我的ElasticSearch跟蹤器輸出

所以我發現這個bash腳本:

sudo tcpdump -A -nn -s 0 'tcp dst port 9200 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' -i lo 

效果很好,問題是它輸出了大量的垃圾:

11:40:49.690863 IP 127.0.0.1.50270 > 127.0.0.1.9200: Flags [P.], seq 2594084191:2594084256, ack 2674569216, win 342, options [nop,nop,TS val 910075 ecr 910075], length 65 
[email protected]@............^#...._.j.....V.i..... 
..HEAD/HTTP/1.1 
Host: localhost:9200 
Connection: keep-alive 


11:40:49.707181 IP 127.0.0.1.50271 > 127.0.0.1.9200: Flags [P.], seq 3009491178:3009491248, ack 3451175088, win 342, options [nop,nop,TS val 910080 ecr 910079], length 70 
[email protected]@.jc........._#..a0........V.n..... 
..GET /_nodes HTTP/1.1 
Host: localhost:9200 
Connection: keep-alive 


11:40:52.215800 IP 127.0.0.1.50272 > 127.0.0.1.9200: Flags [P.], seq 148869443:148869508, ack 2833610757, win 342, options [nop,nop,TS val 910707 ecr 910707], length 65 
[email protected]@..M.........`#....C..x....V.i..... 
.sHEAD/HTTP/1.1 
Host: localhost:9200 
Connection: keep-alive 

我只是想保持JSON。

所以我雖然要去消除。

我加入這個表達式:

sudo tcpdump -A -nn -s 0 'tcp dst port 9200 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' -i lo | grep -v "[0-9]{2}[:][0-9]{2}[:][0-9]{2}\.[0-9]*[ ][I][P][ ][0-9]{1,3}\.[0 -9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]*[ ][\>].*" 

這裏是行動的正則表達式:https://regex101.com/r/aS6kS2/1

不管怎麼說,我想在這裏完成是去除:

11:40:49.707181 IP 127.0.0.1.50271 > 127.0.0.1.9200: Flags [P.], seq 3009491178:3009491248, ack 3451175088, win 342, options [nop,nop,TS val 910080 ecr 910079], length 70 
    [email protected]@.jc........._#..a0........V.n..... 
    ..GET /_nodes HTTP/1.1 
    Host: localhost:9200 
    Connection: keep-alive 

使只保留body/JSON。

我試圖一行一行,但現在它甚至不刪除第一個是我的正則表達式的目標。

+0

嗯,我希望我沒有這樣做,我已經回滾了所有的編輯,但是我仍然在'grep -v'字符串的中間看到'[0-9]'。對不起,如果我把它搞瞎了。另外,您可能希望從示例輸入中顯示所需的輸出(JSON)。祝你好運。 – shellter

+1

不要以爲我們知道'body/JSON'是什麼。我沒有看到你得到的和你想要刪除的東西之間的區別,除了空行。只需發佈簡潔,可測試的示例輸入和預期輸出,並對您希望實現的轉換進行解釋,更廣泛的受衆羣體將能夠爲您提供幫助。 –

+0

通過刪除我顯示的行,唯一會留下的將是JSON。我正在嘗試構建一個黑名單過濾器。 – jnbdz

回答

2

這將做什麼你告訴我們,到目前爲止(從文本的3塊序列中刪除文本中間塊):

$ awk -v RS= -v ORS='\n\n' 'NR!=2' file 
11:40:49.690863 IP 127.0.0.1.50270 > 127.0.0.1.9200: Flags [P.], seq 2594084191:2594084256, ack 2674569216, win 342, options [nop,nop,TS val 910075 ecr 910075], length 65 
[email protected]@............^#...._.j.....V.i..... 
..HEAD/HTTP/1.1 
Host: localhost:9200 
Connection: keep-alive 

11:40:52.215800 IP 127.0.0.1.50272 > 127.0.0.1.9200: Flags [P.], seq 148869443:148869508, ack 2833610757, win 342, options [nop,nop,TS val 910707 ecr 910707], length 65 
[email protected]@..M.........`#....C..x....V.i..... 
.sHEAD/HTTP/1.1 
Host: localhost:9200 
Connection: keep-alive 

如果這不是你想要的,然後編輯你的問題正如我在我的評論中所建議的那樣澄清。

+0

JSON顯示在連接下...有時不顯示。我正在嘗試構建一個黑名單過濾器。所以如果它適合一個模式就把它拿出來。剩下的將是JSON。除非白名單過濾會更快。比起JSON的任何一行......所以任何有{和以}結尾的東西。但我不確定這將是最好的方式。 – jnbdz

+0

事情是我可能會將它用於其他不適合JSON模式的東西。 – jnbdz

+2

對不起,我不知道你在說什麼。在你的例子中,Connection下面只有空白行 - 是你想輸出什麼,一堆空行?你向我們展示了一個你想要刪除的文本,絕對沒有解釋爲什麼應該被刪除,並且與你的grep腳本沒有明顯的關聯。如果你只是在你的問題中顯示簡潔,可測試的樣本輸入和預期輸出,它將有助於很多。 –