tshark + Elasticsearch 打造流量回溯分析系统

栏目: 后端 · 发布时间: 6年前

内容简介:利用tshark,不仅可以对现有的pcap文件进行分析,由于可以输出其他格式,也就可以结合ES的强大搜索能力,达到对数据报文进行记录、分析处理的能力,可以实现回溯分析,结合kibana可视化工具,甚至达到实时可视化监控。性能一直被诟病,后来另起炉灶,针对采集使用

tshark 是网络分析工具 wireshark 下的一个工具,主要用于命令行环境进行抓包、分析,尤其对协议深层解析时, tcpdump 难以胜任的场景中。本系列文章将整理介绍 tshark 相关内容。本文将介绍与 tshark 相关的流量解决方案。

tshark + elastic stack

利用tshark,不仅可以对现有的pcap文件进行分析,由于可以输出其他格式,也就可以结合ES的强大搜索能力,达到对数据报文进行记录、分析处理的能力,可以实现回溯分析,结合kibana可视化工具,甚至达到实时可视化监控。

elastic stack全家桶

性能一直被诟病,后来另起炉灶,针对采集使用 golang 构建出一套beats,用于不同的采集场景。其中针对网络流量,开发出 packetbeat

packetbeat 的优势是定制了 elasticsearchmappingkibana 一系列可视化图表,可以满足一般对tcp、dns、udp等常规报文的分析。基本达到开箱即用程度。

packetbeat 也有不足,对报文的分析采用会话分析,没有一个个报文单独分析,倾向于应用层,对网络层面分析不足(尤其是故障排查时),此外,支持的协议有限,仅常见协议与 tshark 的2000多种存在明显差距,当遇到不支持时,需要等待支持或手动写插件,难度极高。

离线导入elasticsearch

tshark 支持将pcap报文分析后生成json文件导入 elasticsearch ,同时支持 elasticsearch 的批量导入接口 _bulk 的格式,命令如下:

tshark -r test_trace.pcap -T ek > test_trace.pcap.json

之后可以将json文件通过 curl 导入。

curl -s -H "Content-Type: application/x-ndjson" -XPOST "localhost:9200/foo/_bulk" --data-binary "@/Users/test-elastic/test_trace.pcap.json"

注:

  1. 导入时可能存在导入失败,由于 _bulk 接口对post的文件大小有限制,尽量不要超过15MB,最好在10MB以内。如果超过,建议使用 tshark 的输出条件生成多个json文件,使用 curl 依次导入。
  2. 如果导入失败,可以在 curl-v 查看提示信息。
  3. 默认索引名为类似 packets-2019-04-23 (报文记录的日期),可以导入后重新索引

可以使用类似以下命令查看导入情况:

curl ' http://127.0.0.1:9200/packets-2019-04-23/_search/?size=10&pretty=true'

实时监控方案

主要思路

  • 使用 tshark 实时抓取报文,并启用过滤策略
  • 使用 tshark 解析捕获的报文,提取指定的字段并写入csv文件中,或者使用json格式在下一步进行 ETL
  • 使用 filebeat 持续检测csv文件,并发个 logstash 用于字段过滤之类(如无需过滤可以跳过 logstash 直接发给 elasticsearch
  • logstash 对字段进行过滤,格式转化等,之后发到 elasticsearch
  • 使用 kibana 进行数据可视化,对报文统计分析

简单实现

1. tshark部分

tshark -a duration:600 -i phy0.mon -t ad -t ad -lT fields -E separator=, -E quote=d   -e _ws.col.Time  -e wlan.fc.type -e wlan.fc.type_subtype -e radiotap.dbm_antsignal -e frame.len -e radiotap.datarate   > tshark.csv

2. filebeat

简单filebeat.yml配置文件

filebeat.modules:
- module: system
  syslog:
    enabled: false
  auth:
    enabled: true
    var.paths: ["/home/tshark.csv"]
name: test
output.logstash:
  hosts: ["localhost:5044"]

3. logstash

logstash.yml文件,主要分为:

filebeat
input {
  beats {
    port => 5044
  }
}

csv {
     source => "message"
     columns => [ "col.time","frame.type","frame.subtype","rssi","frame.size","data.rate" ]
   }

date {
     match => [ "col.time", "YYYY-MM-DD HH:mm:ss.SSSSSSSSS" ]
     target => "@timestamp"
   }

mutate {
  add_field => {"[hour]" => "%{+HH}"}
  add_field => {"[minute]" => "%{+mm}"}
  add_field => {"[second]" => "%{+ss}"}

  }

mutate {
     convert => [ "rssi", "integer" ]
     convert => [ "frame.size", "integer" ]
     convert => [ "data.rate", "integer" ]   
     convert => [ "second", "integer" ]  
     convert => [ "minute", "integer" ]  
     convert => [ "hour", "integer" ]  

   }

if[frame.type]=="0"{
   mutate {
     replace => [ "frame.type", "Management" ]
   }}
   if[frame.type]=="1"{
   mutate {
     replace => [ "frame.type", "Control" ]
   }}
   if[frame.type]=="2"{
   mutate {
     replace => [ "frame.type", "Data" ]
   }}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}" 
    document_type => "%{[@metadata][type]}" 
  }
}

4. elasticsearch

可以预先导入索引定义 mapping ,这块可以查 elasticsearch 文档

5. kibana

利用图表、面板等进行数据可视化,实现监控功能,这块可根据业务需求进行发挥~

小结

使用 tshak 的报文解析、数据导出功能,可以根据需求灵活处理,借助开源的大数据工具,可以实现更贴合业务的工具,实现快速对网络分析、实时监控、故障排查、高级检索、回溯分析、统计报表等,甚至在部分场景下可以替代商业的网络回溯分析系统。

** 参考:**


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

马化腾自述-我的互联网思维

马化腾自述-我的互联网思维

赵黎 / 石油工业出版社 / 2014-8-1 / 35

马化腾自述:我的互联网思维》讲述了些人说移动互联网就是加了“移动”两个字,互联网十几年了,移动互联网应该是个延伸。我的感受是,移动互联网远远不只是一个延伸,甚至是一个颠覆。互联网是一个开放交融、瞬息万变的大生态,企业作为互联网生态里面的物种,需要像自然界的生物一样,各个方面都具有与生态系统汇接、和谐、共生的特性。开放和分享并不是一个宣传口号,也不是一个简单的概念。开放很多时候被看作一种姿态,但是我......一起来看看 《马化腾自述-我的互联网思维》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

MD5 加密
MD5 加密

MD5 加密工具

html转js在线工具
html转js在线工具

html转js在线工具