OvS NetFlow Prometheus 연동
목표는 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: 특정 패킷을 샘플링해서 플로우를 측정하는 기술.