NetFlow 架構
平台的 Netflow 架構如下:
部署
底層服務可優先部署,可依照以下順序:
NetFlow-Kafka-Control
- 進入 Netflow-Kafka-Control 資料夾
- docker-compose.yml
- ZOO_SERVERS(IP 請修改成實際位置)
- KAFKA_HEAP_OPTS(依據機器規格自行調整)
- KAFKA_ZOOKEEPER_CONNECT(IP 請修改成實際位置)
- KAFKA_LOG_RETENTION_HOURS(依據需求自行調整)
- KAFKA_ADVERTISED_LISTENERS(IP 請修改成實際位置)
- KAFKA_JMX_OPTS(IP 請修改成實際位置)
- 登入inode映像檔倉庫
- 啟動服務
cd NetFlow-Kafka-Control
ZOO_SERVERS: Kafka_Private_IP:2888:3888
KAFKA_HEAP_OPTS: -Xmx4g -Xms4g
KAFKA_ZOOKEEPER_CONNECT: Kafka_Private_IP:2181
KAFKA_LOG_RETENTION_HOURS: 3
KAFKA_ADVERTISED_LISTENERS: "INTERNAL://Kafka_Private_IP:19092,\ EXTERNAL://Kafka_Public_IP:9092"
KAFKA_JMX_OPTS: "-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=Kafka_Private_IP -Dcom.sun.management.jmxremote.rmi.port=1099 -javaagent:/opt/kafka/libs/jmx_prometheus_javaagent-0.14.0.jar=7071:/opt/kafka/config/jmx_exporter.yml"
docker login registry.inodeninja.net
帳密請洽詢相關人員
業務單位: hello@inode.ninja
技術單位: support@inode.ninja
docker-compose up -d
Netflow-Elasticsearch-Control
- 進入 NetFlow-Elasticsearch-Control 資料夾
- config/jvm.options(依據實際規格修改,預設值 2G)
- 啟動服務
- 驗證服務是否啟動
- 建立 netflow templates
- 查看 templates
- Netflow-Elasticsearch-Control
cd NetFlow-Elasticsearch-Control
-Xms2g -Xmx2g
docker-compose up -d
curl http://localhost:9200
bash script/createNetflowTemplate.sh
curl http://localhost:9200/_cat/templates
需要讓 Portal 獲取 netflow 資料
Netflow-Logstash
- 進入 NetFlow-Logstash 資料夾
- config/jvm.options(依據實際規格修改,預設值 2G)
- config/pipelines.yml
- pipeline/logstash.conf
- 刪除非必要欄位,請依據 Switch 實際送出來的資料格式進行調整,以下為範例
- 確認 Switch 是否有使用採樣比,請配合 Switch 設定進行調整,範例如下
- Kafka_IP,請改為實際位置
- Output 要確保有以下欄位資料送往 NetFlow-Kafka-Control
- 啟動服務
cd NetFlow-Logstash
-Xms2g -Xmx2g
資料持久化:自行決定是否要開啟,不需要可以跳過此步驟
注意:啟用後資料將寫入硬碟,可能會影響效能
- pipeline.id: main
path.config: "/usr/share/logstash/pipeline/logstash.conf"
#queue.type: persisted(取消這行註解)
mutate {
remove_field => [
"[netflow][l4_src_port]",
"[netflow][flow_seq_num]",
"[netflow][l4_dst_port]",
"[netflow][version]",
"[netflow][flow_end_msec]",
"[netflow][flowset_id]",
"[netflow][src_tos]",
"[netflow][flow_start_msec]",
"[netflow][input_snmp]",
"[netflow][protocol]",
"[netflow][in_pkts]",
"[netflow][output_snmp]"
]
}
* 沒有設定採樣比
event.set("[netflow][in_bytes]", event.get("[netflow][in_bytes]") * 1)
* 設定採樣比 100(計算 bytes 乘上採樣比,盡量還原原始數據)
event.set("[netflow][in_bytes]", event.get("[netflow][in_bytes]") * 100)
output {
kafka {
bootstrap_servers => "Kafka_Public_IP:9092"
codec => json
topic_id => "netflow-topic"
}
}
[netflow][ipv4_src_addr] [netflow][timestamp] [netflow][in_bytes] [netflow][ipv4_dst_addr]
docker-compose up -d
NetFlow-Logstash-Control
- config/jvm.options(依據實際規格修改,預設值 2G)
- config/pipelines.yml
- pipeline/logstash.conf
- input 區塊 bootstrap_servers(IP 請修改成實際位置)
- output hosts(IP 請修改成實際位置)
- 啟動服務
-Xms2g -Xmx2g
資料持久化:自行決定是否要開啟,不需要可以跳過此步驟
注意:啟用後資料將寫入硬碟,可能會影響效能
- pipeline.id: main
path.config: "/usr/share/logstash/pipeline/logstash.conf"
#queue.type: persisted(取消這行註解)
bootstrap_servers => "Kafka_Private_IP:19092"
hosts => ["Elasticsearch_IP:9200"]
docker-compose up -d
檔案
資料格式、平台顯示
Elasticsearch 會生成 rcm-netflow-* 的 index,資料格式如下:
{
"_index": "rcm-netflow-2025.12.05",
"_type": "doc",
"_id": "iR4B6joBowLNQ6TNdmE4",
"_version": 1,
"_score": 1,
"_source": {
"@timestamp": "2025-12-05T08:00:00.000Z",
"dst_ip": "101.***.***.101",
"@version": "1",
"src_ip": "8.***.***.8",
"timestamp": "2025-12-05T08:00:00.000Z",
"bytes": 483000
}
}平台顯示:
