2016-02-26 23 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脚本没有明显的关联。如果你只是在你的问题中显示简洁,可测试的样本输入和预期输出,它将有助于很多。 –