STUDY

OvS NetFlow Prometheus 연동

YOU__NAVI 2025. 3. 18. 18:06

목표는 SrcIP, DstIP, SrcPort, DstPort, ProtocolNumber로 플로우를 구분짓고 사용 Bytes를 오차 3%이내로 추정하는 것.

 

구조:

 

편의를 위해서 서버 한대만 구성한다고 가정할 때

OpenvSwitch Netflow → Netflow Exporter → Prometheus

 

뷰:

 

ONOS는 SDN Controller로 사용한다.

 

1. OvS에서 NetFlow 구성

2. NetFlow Exporter 설치

3. Prometheus 설정

4. 테스트 및 결과 확인

 

1. OvS에서 NetFlow 구성: NetFlow 추가만 해주면 끝

active-timeout 은 흐름 유지라고 생각하는게 편하다.

# OvS Bridge에 NetFlow 추가
sudo ovs-vsctl set Bridge br0 netflow=@nf -- --id=@nf create NetFlow targets=\"<Exporter_IP>:2055\" active-timeout=30

# OvS NetFlow 정보 조회
sudo ovs-vsctl list netflow

# OvS NetFlow 삭제
sudo ovs-vsctl -- clear Bridge br0 netflow

 

2. NetFlow Exporter 설치

구글, 깃허브에 자료가 많으니 취향대로 설치

https://github.com/paihu/netflow_exporter 을 사용했고, 개인적으로 수정해서 사용

Go언어로 작성돼있고, golang 패키지를 설치해서 빌드하거나 크로스컴파일 수행

# go 언어 패키지 다운로드
go get -d

# 빌드
go build

# 실행
./netflow-exporter

 

여기에 ① loglevel 옵션 추가 ② 패킷 내용 표준출력 OFF (주석처리) ③  Label 수정 ④ 메트릭 이름 수정을 해줬다.

실행 후 http://<IP>:9191/metrics 접속해서 잘 나오는지 확인

 

3. Prometheus 설정: prometheus.yml에 exporter job 추가하고 재시작

  - job_name: "netflow-exporter"
    static_configs:
      - targets: ["localhost:9191"]

 

4. 테스트 및 결과 확인: 호스트간 iPerf3 수행 후 결과 확인

테스트는 MTU를 9000으로 맞추고 iPerf3 1Gbps * 60초로 수행

iPerf3: 6.92GB 표기

Wireshark에서 dstport == 5201 필터로 패킷 선택해서 저장한 용량

7,506,435,837 = 6.99GB

Prometheus 집계: 7,442,292,930 = 6.931175 GB

 

iPerf 표기 ↔ Prometheus 집계 데이터 오차는 0.16%


NetFlow, IPFIX, sFlow

NetFlow: Cisco 에서 개발한 플로우 모니터링 기술. SNMP의 단순한 트래픽 양 추정보다 상세한 정보를 제공함.

주로 버전 5를 사용하지만 v1, v5, v9 등 다양한 버전 존재.

IPFIX: IETF에서 정한 플로우 모니터링 기술로 NetFlow의 v9를 기반으로 만들어졌다고 함. 

정보가 많이 없고 정확하지 않아서 간략하게 작성함.

sFlow: 특정 패킷을 샘플링해서 플로우를 측정하는 기술.