背景起因
2017年02-25写过一篇 可视化网络流量的文章,实现的方式是通过fprobe把镜像端口流量转化为为Netflow 数据,并发送至ELK,然后解析展示。,
时光荏苒,技术演进,elastic Stack 的packetbeat更好的完成了fprobe的功能,并且提供了更加丰富的功能。所以重构了公司的流量可视化系统,并增加微信报警功能。
架构简述
先上图
我是把公司的出口流量 通过核心交换机镜像到一台服务器,然后通过packetbeat 把流量发送到es集群,然后通过kibana展示出来,然后通过es的api接口,解析出超过阈值的IP 发送微信报警。
Packetbeat
安装
sudo apt–get install libpcap0.8
curl –L –O https://artifacts.elastic.co/downloads/beats/packetbeat/packetbeat-6.3.0-amd64.deb
sudo dpkg –i packetbeat-6.3.0-amd64.deb
配置
详细配置 还请参考官方文档,重要的配置 如下:
#============================== Network device ================================
# Select the network interface to sniff the data. On Linux, you can use the
# "any" keyword to sniff on all connected interfaces.
packetbeat.interfaces.device: p5p2
packetbeat.interfaces.snaplen:
1514
packetbeat.interfaces.type: af_packet
packetbeat.interfaces.buffer_size_mb:
2048
#==================== Elasticsearch template setting ==========================
output.elasticsearch.index:
"packetbeat_tcn-%{[beat.version]}-%{+yyyy.MM.dd}"
setup.template.name:
"packetbeat_moloch"
setup.template.pattern:
"packetbeat_moloch-*"
setup.template.settings:
index.number_of_shards:
3
#————————– Elasticsearch output ——————————
output.elasticsearch:
# Array of hosts to connect to.
hosts: [“localhost:9200”]
流量分析
以下是我自己平时想看的数据,你要是有其它需求 可以一起交流呢
每分钟流量的量级
讲道理 每分钟流量的量级会有一定的规律 如果有异常高的量的时候 需要关注一下
Top hosts creating traffic
Top产生流量的IP地址 柱状图显示 清晰明了。
Top hosts creating packets
除了流量大小 有时候数据包的数量 也需要关于一下
Top hosts receiving traffic
流量的top
Top hosts receiving packets
Dashboard
创建一个Dashboard 在一个页面中完成流量的展示,查询,ELK的查询速度快到飞起。
发送报警
讲道理 流量展示的页面在炫酷,分析再好,要是不能发送报警都是耍流氓,不可能天天打开dashbord 页面一直看。
Python 脚本
用Python 写了一个脚本 分析30秒内Top hosts creating traffic流量
其它的可以参考下面的脚本写就好了。 然后可以弄个crontab 每30S执行一下这个脚本。
jobnumbers =
“xxxxxx”
esclient = Elasticsearch([‘localhost:9200‘])
def es_source_bytes_total():
response = esclient.search(
index=‘packetbeat_tcn-*‘,
body={
“query”: {
“bool”: {
“must”: [
{
“query_string”: {
“query”: “*”,
“analyze_wildcard”: “true”
}
},
{
“range”: {
“@timestamp”: {
“gte”: “now-30s”,
“format”: “epoch_millis”
}
}
}
],
“must_not”: []
}
},
“size”:
0,
“_source”: {
“excludes”: []
},
“aggs”: {
“source_ip”: {
“terms”: {
“field”: “source.ip.keyword”,
“size”:
5,
“order”: {
“1”: “desc”
}
},
“aggs”: {
“1”: {
“sum”: {
“field”: “source.stats.net_bytes_total”
}
}
}
}
}
}
)
for i in response[“aggregations”][“source_ip”][“buckets”]:
if i[“1”][“value”] >
100000000:
host = i[“key”]
type =
“TCN Top hosts creating traffic”
message =
“30S内超过100M 当前流量为:{}MB”.format(i[“1”][“value”]//1000000)
sendwechat(jobnumbers, host, type, message)
if __name__ == ‘__main__’:
es_source_bytes_total()
效果演示
结束语:
流量的可视化分析,暂时告一段落。然而技术的路 却没有尽头,相信随着厂商的技术演进,网络运维会越来越智能。网络的从业者也会迎来新的时代。
引用狄更斯的《双城记》与君共勉
这是最好的时代,这是最坏的时代,这是智慧的时代,这是愚蠢的时代;这是信仰的时期,这是怀疑的时期;这是光明的季节,这是黑暗的季节;这是希望之春,这是失望之冬;人们面前有着各样事物,人们面前一无所有;人们正在直登天堂;人们正在直下地狱。