NetFlow 架構

平台的 Netflow 架構如下:

NetFlow 架構圖

部署

底層服務可優先部署,可依照以下順序:

NetFlow-Kafka-Control
  1. 進入 Netflow-Kafka-Control 資料夾
  2. cd NetFlow-Kafka-Control
  3. docker-compose.yml
    • ZOO_SERVERS(IP 請修改成實際位置)
    • ZOO_SERVERS: Kafka_Private_IP:2888:3888
    • KAFKA_HEAP_OPTS(依據機器規格自行調整)
    • KAFKA_HEAP_OPTS: -Xmx4g -Xms4g
    • KAFKA_ZOOKEEPER_CONNECT(IP 請修改成實際位置)
    • KAFKA_ZOOKEEPER_CONNECT: Kafka_Private_IP:2181
    • KAFKA_LOG_RETENTION_HOURS(依據需求自行調整)
    • KAFKA_LOG_RETENTION_HOURS: 3
    • KAFKA_ADVERTISED_LISTENERS(IP 請修改成實際位置)
    • KAFKA_ADVERTISED_LISTENERS:
        "INTERNAL://Kafka_Private_IP:19092,\
        EXTERNAL://Kafka_Public_IP:9092"
    • KAFKA_JMX_OPTS(IP 請修改成實際位置)
    • 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"
  4. 登入inode映像檔倉庫
  5. docker login registry.inodeninja.net
    帳密請洽詢相關人員
    業務單位: hello@inode.ninja
    技術單位: support@inode.ninja
        
  6. 啟動服務
  7. docker-compose up -d
Netflow-Elasticsearch-Control
  1. 進入 NetFlow-Elasticsearch-Control 資料夾
  2. cd NetFlow-Elasticsearch-Control
  3. config/jvm.options(依據實際規格修改,預設值 2G)
  4. -Xms2g
    -Xmx2g
  5. 啟動服務
  6. docker-compose up -d
  7. 驗證服務是否啟動
  8. curl http://localhost:9200
  9. 建立 netflow templates
  10. bash script/createNetflowTemplate.sh
  11. 查看 templates
  12. curl http://localhost:9200/_cat/templates
  13. Netflow-Elasticsearch-Control
  14. 需要讓 Portal 獲取 netflow 資料
Netflow-Logstash
  1. 進入 NetFlow-Logstash 資料夾
  2. cd NetFlow-Logstash
  3. config/jvm.options(依據實際規格修改,預設值 2G)
  4. -Xms2g
    -Xmx2g
  5. config/pipelines.yml
  6. 資料持久化:自行決定是否要開啟,不需要可以跳過此步驟

    注意:啟用後資料將寫入硬碟,可能會影響效能

    - pipeline.id: main
      path.config: "/usr/share/logstash/pipeline/logstash.conf"
      #queue.type: persisted(取消這行註解)
  7. pipeline/logstash.conf
    • 刪除非必要欄位,請依據 Switch 實際送出來的資料格式進行調整,以下為範例
    • 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]"
        ]
      }
    • 確認 Switch 是否有使用採樣比,請配合 Switch 設定進行調整,範例如下
    • * 沒有設定採樣比
      event.set("[netflow][in_bytes]", event.get("[netflow][in_bytes]") * 1)
      * 設定採樣比 100(計算 bytes 乘上採樣比,盡量還原原始數據)
      event.set("[netflow][in_bytes]", event.get("[netflow][in_bytes]") * 100)
    • Kafka_IP,請改為實際位置
    • output {
          kafka {
            bootstrap_servers => "Kafka_Public_IP:9092"
            codec => json
            topic_id => "netflow-topic"
          }
      }
    • Output 要確保有以下欄位資料送往 NetFlow-Kafka-Control
    • [netflow][ipv4_src_addr]
      [netflow][timestamp]
      [netflow][in_bytes]
      [netflow][ipv4_dst_addr]
  8. 啟動服務
  9. docker-compose up -d
NetFlow-Logstash-Control
  1. config/jvm.options(依據實際規格修改,預設值 2G)
  2. -Xms2g
    -Xmx2g
  3. config/pipelines.yml
  4. 資料持久化:自行決定是否要開啟,不需要可以跳過此步驟

    注意:啟用後資料將寫入硬碟,可能會影響效能

    - pipeline.id: main
      path.config: "/usr/share/logstash/pipeline/logstash.conf"
      #queue.type: persisted(取消這行註解)
  5. pipeline/logstash.conf
    • input 區塊 bootstrap_servers(IP 請修改成實際位置)
    • bootstrap_servers => "Kafka_Private_IP:19092"
    • output hosts(IP 請修改成實際位置)
    • hosts => ["Elasticsearch_IP:9200"]
  6. 啟動服務
  7. 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
  }
}

平台顯示:

監控面板 / 流量分析