草庐IT

搭建流量分析工具elastiflow(基于elk)

瞬亡 2023-04-09 原文

一、*功能*

接收网络设备的netflow或sflow报文,对网络设备的数据进行分析,从而得到协议的流量排行、下载IP排行、通信对等信息。

二、*基础环境*

1、安装ELK和java

RHEL server 7,ELK 6.8.21

用rpm安装elasticsearch、logstash、kibana

下载地址:https://www.elastic.co/cn/downloads/past-releases#elasticsearch

rpm -ivh elasticserach-6.8.21.rpm

rpm -ivh logstash-6.8.21.rpm

rpm -ivh kibana-6.8.21-x86_64.rpm

安装java 1.8.0_171或以上(安装方法网上可找到)

2、kibana配置

编辑/etc/kibana/kibana.yml

server.port 5601
server.host: "192.168.11.105"
server.maxPayloadBytes: 8388608
elasticsearch.url: “http://192.168.11.105:9200”
i18n.locale: "zh-CN"

把kibana相关路径的权限修改

chown -R kibana:kibana /etc/kibana

chown -R kibana:kibana /usr/share/kibana

chown kibana:kibana /etc/default/kibana

启动kibana

systemctl enable kibana

systemctl start kibana

2、elasticsearch配置

编辑/etc/elasticsearch/elasticsearch.yml

node.name:net-pd-1
path.data:/data/elisticsearch/data
Path.logs:/data/elasticsearch/logs
bootstrap.memory_lock:true
network.host:192.168.11.105
http.port:9200

编辑/etc/elasticsearch/jvm.options,只改以下部分(大小为1/4 内存)

-Xms64g
-Xmx64g

编辑/usr/lib/systemd/system/elasticsearch.service(第一行下面添加第二行)

LimitFSIZE =infinity 
LimitMEMLOCK=infinity 

把elasticsearch相关路径的权限修改

chown -R elasticsearch:elasticsearch /etc/elasticsearch

chown -R elasticsearch:elasticsearch /usr/share/elasticsearch

chown -R elasticsearch:elasticsearch /data/elisticsearch/data

chown -R elasticsearch:elasticsearch /data/elisticsearch/logs

chown elasticsearch:elasticsearch /etc/sysconfig/elasticsearch

启动elasticsearch
systemctl daemon-reload

systemctl enable elasticsearch

systemctl start elasticsearch

3、logstash配置

编辑/etc/logstash/logstash.yml,data和logs路径是自定义

path.data:/data/logstash/data
config.reload.automatic:true
config.reload.interval:3600s
http.host: "192.168.11.105"
http.port: 9600-9700
path.logs:/data/logstash/logs

编辑/etc/logstash/jvm.options,只改以下部分(大小为1/4 内存)

-Xms64g 
-Xmx64g

编辑/etc/logstash/startup.options,只改以下部分(java 路径)

JAVACMD=/usr/bin/java

把logstash相关路径的权限修改

chown -R logstash:logstash /etc/logstash

chown -R logstash:logstash /usr/share/logstash

chown -R logstash:logstash /data/logstash/data

chown -R logstash:logstash /data/logstash/logs

chown logstash:logstash /etc/default/logstash

启动logstash

systemctl enable logstash

systemctl start logstash

三、*安装过程*

1、安装elastiflow

下载elastiflow:https://github.com/robcowart/elastiflow/releases/tag/v3.4.2 的tar.gz包

tar -zxvf v3.4.2.tar.gz

cd elastiflow-3.4.2

cp -r logstash/elastiflow /etc/logstash/

cp -r logstash.service.d /etc/systemd/system/

chown -R logstash:logstash /etc/logstash/elastiflow

2、elastiflow 配置

禁用/etc/logstash/elastiflow/conf.d/中不用的配置文件(文件名后添加.disabled)

10_input_ipfix_ipv4.logstash.conf.disabled

10_input_ipfix_ipv6.logstash.conf.disabled

10_input_netflow_ipv6.logstash.conf.disabled

10_input_sflow_jpv4.logstash.conf.disabled

10_input_sflow_ipv6.logstash.conf.disabled

20_filter_30_ipfix.logtsh.conf.disabled

20_filter_40_sflow logstash.conf.disabled

30_output_20_multi.logstash.conf.disabled

编辑/etc/systemd/system/logstash.service.d/elastiflow.conf,修改以下部分(NETFLOW的IPv6部分注释掉,IPFIX协议和SFLOW协议全部注释掉)

Environment= "ELASTIFLOW_GEOIP_CACHE_SIZE=12288"
Environment= "ELASTIFLOW_RESOLVE_IP2HOST=true"
Environment= "ELASTIFLOW_ES_HOST=192.168.11.105:9200"
Environment= "ELASTIFLOW_NETFLOW_IPV4_HOST=192.168.11.105"
Environment= "ELASTIFLOW_NETFLOW_IPV4_PORT=2055"

重载systemctl

systemctl daemon-reload

3、logstash 修改配置

编辑/etc/logstash/pipeline.yml (仅当logstash没有其他业务)

#- pipeline.id:main
# path.config:/etc/logstash/conf.d/*.conf
- pipeline.id:elastiflow
  path.config: “/etc/logstash/elastiflow/conf.d/*.conf"

编辑/etc/logstash/elatilow/conf.d/30_output_10_single.logstash.conf,在output的elasticsearch中修改此行

hosts => [ "${ELASTIFLOW_ES_HOST:192.168.11.105:9200}" ]

重启logstash

systemctl restart logstash

(用netstat -ntulp验证是否监听udp 2055端口)

4、kibana 修改配置

将elastiflow-3.4.2/kibana/elastiflow.kibana.6.7.x.json上传到kibana界面(管理→已保存对象→导入)

新建索引(管理→索引模式→创建索引模式) ,取名"elastiflow-*" (必须在启动logstash之后再添加)

5、kibana仪表板

新建仪表板,添加自己惯用的图表(以下是应用排名、客户端流量排名、服务端流量排名、会话流量排名),同时使用筛选器可以过滤出指定ip的分析结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UVL5sDQZ-1640189972551)(https://s2.loli.net/2021/12/22/o8qCKgwmbdx5sUp.png)]

6、elastiflow设置(如果discover界面中的@timestamp参数慢8小时,可按此方法改正)

编辑/etc/logstash/elastiflow/conf.d/20_filter_10_begin.logstash.conf,在filter中添加

# timezone
ruby {
  code => "event.set('index_date',event.get('@timestamp).time.localtime + 8*60*60)"
} 
mutate {
  convert => [index_date", "string"]
  gsub => ["index_date","T([\S\s]*?)Z",""]
  gsub => ["index_date","-", "."]
}

编辑/etc/logstash/elatilow/conf.d/30_output_10_single.logstash.conf,在output的elasticsearch中注释此行index => “elastiflow-3.4.2-%{index.date}”

#index => "elastiflow-3.4.2 -%{+YYY.MM.dd}"
index => "elastiflow-3.4.2-%{index.date}"

四、*网络设备netflow配置模板*

*思科:*

int GigabitEthernet0/0
 ip flow ingress
 ip flow egress
ip flow-export source GigabitEthernet0/0
ip flow-export version 5
ip flow-export destination 192.168.11.105 2055

*瞻博:*

set services flow- monitoring
set interfaces ge-0/0/0 unit 0 family inet sampling input
set interfaces ge-0/0/0 unit 0 family inet sampling output
set forwarding-options sampling input rate 1000
set forwarding-options sampling input run-length 0
set forwarding-options sampling input max-packets-per-second 2000
set forwarding-options sampling family inet output flow-server 192.168.11.105 port 2055
set forwarding-options sampling family inet output flow-server 192.168.11.105 source-address 192.168.11.106
set forwarding-options sampling family inet output flow-server 192.168.11.105 version 5

*华为/华三:*

sampler2 mode random packet-interval 2000
ip netstream export index-switch 32(部分华为设备默认接口索引是16位,故需要此设置)
ip netstream export version 5 origin-as
ip netstream export host 192.168.11.105 2055
ip netstream export source interface GigabitEthernet0/0
interface GigabitEthernet0/0
 ip netstream inbound
 ip netstream outbound
 ip netstream inbound sampler 2
 ip netstream outbound sampler 2

五、*网络设备sflow配置模板(仅针对不支持netflow的设备)*

1、logstash安装sflow插件

在 https://gems.ruby-china.com/gems/logstash-codec-sflow 下载logstash-codec-sflow插件,注意和logstash的版本适配(logstash 6.8.1需要sflow 2.1.3)。

用zip打包成logstash-codec-sflow.zip,上传到服务器的/tmp

cd /usr/share/logstash

bin/logstash-plugin install file:///tmp/logstash-codec-sflow.zip

安装完插件再次修改权限

chown -R logstash:logstash /usr/share/logstash

2、编辑/etc/systemd/system/logstash.service.d/elastiflow.conf,把sflow取消注释(除了ipv6部分)

Environment="ELASTIFLOW_SFLOW_IPV4_HOST=192.168.11.105"
Environment="ELASTIFLOW_SFLOW_IPV4_PORT=6343"
Environment="ELASTIFLOW_SFLOW_UDP_WORKERS=4"
Environment="ELASTIFLOW_SFLOW_UDP_QUEUE_SIZE=4096"
Environment="ELASTIFLOW_SFLOW_UDP_RCV_BUFF=33554432"

重载systemctl

systemctl daemon-reload

3、解禁/etc/logstash/elastiflow/conf.d/中sflow配置文件(文件名后删除.disabled)

10_input_sflow_ipv4.logstash.conf

20_filter_40_sflow.logstash.conf

4、编辑/etc/logstash/elastiflow/conf.d/20_filter_40_sflow.logstash.conf (sflow的node.ipaddr默认是agent ip,要改成管理ip),注释以下内容

    #mutate {
    #  id => "sflow_set_node_agent_ip"
    #  replace => {
    #    "[node][ipaddr]" => "%{[agent_ip]}"
    #    "[node][hostname]" => "%{[agent_ip]}"
    #  }
    #}

5、重启logstash

systemctl restart logstash

(用netstat -ntulp验证是否监听udp 2055和udp 6343端口)

瞻博sflow (例如EX4200) :

set protocols sflow collector 192.168.11.105

set protocols sflow collector udp-port 6343

set protocols sflow interfaces ge-0/0/0.0

set protocols sflow polling-interval 60

set protocols sflow sample-rate 1000

set protocols sflow source-ip 192.168.11.130

注意:

EX系列的sflow 包含的接口索引是物理接口索引,即使流量是子接口产生的!

六、*设备名和接口名映射*

1、设备名

编辑/etc/hosts, elastiflow 会根据node.ipaddr来解析node.hostname。格式:

192.168.11.106 RT4
192.168.11.108 vMx-1

2、接口名

编辑/etc/logstash/elastiflow/dictionaries/ifName.yml,elastiflow 会根据node.ipaddr和ifindex来获取ifname。格式:

"192.168.11.106::ifName.1": "Gi0/0"
"192.168.11.108::ifName.513": "ge-0/0/0"
"192.168.11.108::ifName.523": "ge-0/0/0.0"

设备名和接口名的效果图如下:

修改hosts文件和ifName.yml文件后要重启logstash生效

有关搭建流量分析工具elastiflow(基于elk)的更多相关文章

  1. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  2. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

    导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

  3. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  4. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  5. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

  6. ruby-on-rails - 有没有一种工具可以在编码时自动保存对文件的增量更改? - 2

    我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功

  7. ruby-on-rails - Ruby 流量控制 : throw an exception, 返回 nil 还是让它失败? - 2

    我在思考流量控制的最佳实践。我应该走哪条路?1)不要检查任何东西并让程序失败(更清晰的代码,自然的错误消息):defself.fetch(feed_id)feed=Feed.find(feed_id)feed.fetchend2)通过返回nil静默失败(但是,“CleanCode”说,你永远不应该返回null):defself.fetch(feed_id)returnunlessfeed_idfeed=Feed.find(feed_id)returnunlessfeedfeed.fetchend3)抛出异常(因为不按id查找feed是异常的):defself.fetch(feed_id

  8. ruby - 如何捕获所有 HTTP 流量(本地代理) - 2

    我希望访问我机器上的所有HTTP流量(我的Windows机器-不是服务器)。据我了解,拥有一个本地代理是所有流量路线的必经之路。我一直在谷歌搜索但未能找到任何资源(关于Ruby)来帮助我。非常感谢任何提示或链接。 最佳答案 WEBrick中有一个HTTP代理(Rubystdlib的一部分)和here's一个实现示例。如果你喜欢生活在边缘,还有em-proxy伊利亚·格里戈里克。这postIlya暗示它似乎确实需要一些调整来解决您的问题。 关于ruby-如何捕获所有HTTP流量(本地代理)

  9. ruby-on-rails - (Ruby,Rails) 基于角色的身份验证和用户管理...? - 2

    我正在寻找用于Rails的优质管理插件。似乎大多数现有的插件/gem(例如“restful_authentication”、“acts_as_authenticated”)都围绕着self注册等展开。但是,我正在寻找一种功能齐全的基于管理/管理角色的解决方案——但不是简单地附加到另一个非基于角色的解决方案。如果我找不到,我想我会自己动手......只是不想重新发明轮子。 最佳答案 RyanBates最近做了两个关于授权的railscast(注意身份验证和授权之间的区别;身份验证检查用户是否如她所说的那样,授权检查用户是否有权访问资源

  10. ruby - 使用 Ruby 开发工具包将文件上传到 Amazon S3 - 2

    我正在尝试上传文件。一个简单的hello.txt。我正在关注文档,但无法将其上传到我的存储桶。#STARTAWSCLIENTs3=Aws::S3::Resource.newbucket=s3.bucket(BUCKET_NAME)begins3.buckets[BUCKET_NAME].objects[KEY].write(:file=>FILE_NAME)puts"Uploadingfile#{FILE_NAME}tobucket#{BUCKET_NAME}."bucket.objects.eachdo|obj|puts"#{obj.key}=>#{obj.etag}"endresc

随机推荐