使用 ElasticSearch + LogStash + Kibana 来可视化网络流量

简介

ELK 套装包括 ElasticSearch、LogStash 和 Kibana。 其中,ElasticSearch 是一个数据搜索引擎(基于 Apache Lucene)+分布式 NoSQL 数据库;LogStash 是一个消息采集转换器,类似 Syslog,可以接收包括日志消息在内的多种数据格式,然后进行格式转换,发送给后端继续处理;Kibana 是一个 Web 前段,带有强大的数据分析、整理和可视化功能。

是不是听起来就觉得十分强大!

一般情况下,ELK 套装的工作流程为原始数据 -> LogStash -> ElasticSearch -> Kibana。

网络流量信息采集协议常见包括 sFlow 和 NetFlow,两种协议都支持采集需要的网络信息,发送到指定的采集器(例如netflow-analyzer、sFlowTrend和softflowd)。其中,sFlow 一般基于采样,NetFlow 则可以基于所有网包信息获取更为精确的信息。

这里展示如何使用 ELK 套装 + NetFlow 可视化网络流量,基于 sFlow 的操作是类似的,,也给出了关键步骤。

安装 ELK 套装安装 ElasticSearch

步骤参考 。可以选择源码编译或安装包安装。

以 CentOS 下使用安装包为例,首先添加证书。

添加源文件 /etc/yum.repos.d/elasticsearch.repo,内容为

执行安装命令

启动 elasticsearch 服务,默认监听在 9200 端口,配置文件在/etc/elasticsearch/elasticsearch.yml。

restart

配置 elasticsearch 服务随系统自动启动

此时,查询本地 9200 端口,会获取类似下面的反馈信息,表示服务启动成功。

9200200, , ", ,,,, ,

安装 LogStash

从下载源码包或安装包。

以 CentOS 下使用安装包为例:

默认安装到/opt/logstash/目录下,配置文件在/etc/logstash/目录下。

也可以通过添加 yum 源的方式。

d/-1.4logstash repository gpgcheck=1gpgkey=enabled=1

测试安装是否成功

此时,随意从控制台输入内容后回车,会作为一条 log,显示出来。

LogStash 支持配置文件,下面通过配置文件配置 LogStash 将收到的 NetFlow 消息进行格式转换后发送到本机的 ElasticSearch。

假定 NetFlow 消息会被采集器发送到本地的 2055 端口,将消息转换后发送给本地的 elastic search 主机,索引名称为 "logstash_netflow5-%{+YYYY.MM.dd}"。

input port => 2055"output }"

之后重启 logstash 服务。

安装 Kibana

下载压缩包,并解压。

修改 config/kibana.yml,指定 elasticsearch 所在地址,默认认为在本地的 9200 端口。

运行 kibana。

/kibana

启动成功后,会打印如下的信息

//0.0.0.0:5601 in production mode."}

通过浏览器访问本地的 5601 端口,因为没有数据,所以这个时候看不到任何数据信息。如果有了采集到的数据后,选择logstash_netflow5-*格式的索引,会查询到所有的 NetFlow 数据信息。

配置数据采集配置 OpenvSwitch

利用下面的命令,创建一个新的网桥 ovs-br,作为要进行抓包的网桥,也可以使用已有网桥。

并配置一个 IP 地址给网桥内部接口,否则后面启动 Docker 服务会报错(检查避免与 Docker 默认网桥冲突)。

下面可以选择使用 NetFlow 采集还是 sFlow 采集,需要对应调整 logstash 中的配置。

打开 NetFlow

COLLECTOR_IP=127.0.0.1COLLECTOR_PORT=2055TIMEOUT=10@nf \– –id:active-timeout

清除 netflow 规则。

netflow

打开 sFlow

$ COLLECTOR_IP=127.0.0.1$ COLLECTOR_PORT=6343$ AGENT=eth0$ HEADER=128$ SAMPLING=512$ POLLING=10

其中,AGENT 是从本地的哪个网卡发出流量到采集器。

$ sudo ovs-vsctl — \–id:– set bridge ovs-br sflow=@sflow

清除 sflow 规则。

sflow

使用 Docker 容器生成流量

这里可以使用 Docker 容器来模拟主机发送流量。

在启动 Docker 服务的时候,使用 -b BRIDGE 或 –bridge=BRIDGE 来指定使用的网桥。或者修改 Docker 配置文件来添加参数并重启服务。

Ubuntu 下配置文件为 /etc/default/docker,重启服务命令为service docker restart。

CentOS 下配置文件为 /etc/sysconfig/docker,重启服务命令为/etc/init.d/docker restart。

搜索带有 iperf 的镜像。

这里可以任意选择一个,例如下载 gdanii/iperf 镜像。

启动两个容器,一个当作服务端(地址为 172.17.0.2)

一个当作客户端(地址为 172.17.0.3),对服务端发起请求。

这个时候刷新 kibana 页面,就可以看到收集到的每条 flow 的信息了。这些信息作为记录被存放到了 elastic search 中。当然, ELK 套装的威力要远大于此,可以通过阅读官方文档进行学习。

当然也使用 kvm 启动两个 vm 挂载到 ovs-br 上进行测试或者利用本地主机作为客户端或服务端之一。这里不再赘述。

参考

转载请注明:

没有什么可凭仗,只有他的好身体,没有地方可去,只想到处流浪。

使用 ElasticSearch + LogStash + Kibana 来可视化网络流量

相关文章:

你感兴趣的文章:

标签云: