본문 바로가기

Infra

OpenVSwitch sFlow

기본적으로 대부분의 네트워크 장비들은 Netflow나 sflow를 지원

설정으로 키거나 끌 수 있으며, 프로토콜의 형태로 제공

 

sFlow : sFlow의 s는 sampled로 sample packets을 뽑아 통계를 생성하여 네트워크 모니터링을 제공, NetFlow를 기반으로 파생

NetFlow : IP 트래픽 흐름을 기록하는 프로토콜, 트래픽 발생량, 주요 경로, 패킷 손실률 등을 확인할 수 있으나 모니터링 대상이 모든 패킷이기 때문에 사용량이 많아지면 데이터의 양이 커져 장치의 부담이 증가

NetFlow의 주요 요소는 위의 3가지

Flow exporter : NetFlow를 지원하는 라우터나 방화벽, Flow collector로 지속적으로 전송

Flow collector : Flow exporter로 받은 패킷 정보를 전처리하여 저장

Flow analyzer : 저장된 정보를 분석하여 시각화

 

Flow exporter는 이하의 요소에서 공통된 값을 가지면 Flow라는 이름으로 그룹화

  • 출발지 IP 주소
  • 도착지 IP 주소
  • 출발지 port 번호
  • 도착지 port 번호
  • Layer 3 프로토콜 유형
  • Type of Service
  • 라우터/스위치 인터페이스

Openvswitch : 가상 스위치를 위한 오픈소스 프로젝트로 다양한 하이퍼바이저 솔루션을 지원하며 NetFlow, sFlow등 표준 관리 인터페이스를 지원

  • Openvswitch 내부에 sFlow 에이전트를 포함하고 있기 때문에 수집 가능
    • sFlow 에이전트는 아래와 같은 기능 제공
    • 트래픽 샘플링 ( 네트워크 트래픽 데이터를 샘플링하여 일정 비율로 추출해 과도한 데이터를 방지 )
    • sFlow 데이터 생성 ( 샘플링된 데이터를 sFlow 데이터 형식으로 변환 )
    • 데이터 전송 ( 생성된 sFlow 데이터를 설정에 따라 컬렉터로 전송, 전송 시 UDP 프로토콜을 주로 사용 )
    • 에러 이벤트 로깅 ( 네트워크에서 발생하는 에러, 이벤트를 모니터링하고 필요에 따라 데이터에 포함하여 전송 )
    • 에이전트 설정 관리 ( 사용자가 설정한 샘플링 비율, 전송 주기 등을 관리하고 설정에 따라 동작 )

 

  1. ovs-vsctl -- --id=@sflow create sflow agent=172.29.236.21 target="\"172.29.236.3:6343\"" header=128 sampling=30 polling=10 -- set bridge br-int sflow=@sflow
    • --id=@sflow: 이 옵션은 명령어에서 사용될 임시 변수 @sflow를 생성합니다. 이 변수는 sFlow 구성을 정의하는 데 사용됩니다.
    • create sflow agent=172.29.236.21 target="\"172.29.236.3:6343\"" header=128 sampling=30 polling=10: 이 부분은 sflow 객체를 생성하고 설정하는 부분입니다.
      • agent=172.29.236.21: sFlow 에이전트는 생성시키는 주체를 의미.
      • target="\"172.29.236.3:6343\"": sFlow 데이터를 전송할 대상 서버의 주소와 포트를 지정합니다. 이 경우, 172.29.236.3 서버의 6343 포트로 데이터를 보냅니다.
        • 6343 포트는 sFlow-RT의 default 포트
      • header=128: sFlow 데이터 패킷의 최대 크기를 지정합니다. 여기서는 128 바이트로 설정됩니다.
      • sampling=30: 샘플링 비율을 설정합니다. 매 30개의 데이터 패킷에서 하나의 패킷을 샘플링합니다.
      • polling=10: 데이터를 수집할 주기를 설정합니다. 매 10초마다 데이터를 수집합니다.
  2. -- set bridge br-int sflow=@sflow
    • br-int 브릿지에 대해서 sflow를 적용

이렇게 하면 Open vSwitch에서 eth1 인터페이스를 통해 수집된 네트워크 흐름 데이터가 sFlow 형식으로 구성된 대상 서버(여기서는 172.29.236.3:6343)로 전송됩니다. 이 데이터는 sFlow 형식에 따라 샘플링 및 주기적인 폴링을 통해 수집되고 전송되며, 명령어를 통해 브리지에 연결된 브리지(br-int)에 적용됩니다.

 

sFlow-RT의 6343포트는 UDP로 데이터를 받는데 사용하고, 8008포트는 TCP로 데이터를 전송하는데 사용

 

간단한 튜토리얼을 보여주는 페이지를 확인

위 그림에서 두 호스트를 확인 할 수 있는데 각각 VM이 실제로 올라가 있는 서버와 모니터링을 위해 준비된 서버, sFlowTrend라는 Java 환경의 소프트웨어를 통해 시각화 되는데 다른 툴을 사용할 수 있는지 확인 필요

 

Monitoring VM Traffic Using sFlow — Open vSwitch 3.2.90 documentation

OvS Tutorial - Monitoring VM Traffic Using sFlow :: NamTech (tistory.com)

 

튜토리얼 상에서 sFlow를 사용하는 방법에 대해서 아래와 같이 표시

$ COLLECTOR_IP=[Host 2의 IP]

$ COLLECTOR_PORT=6343 (6343: sFlowTrend의 default port #)

$ AGENT_IP=eth1

$ HEADER_BYTES=128

$ SAMPLING_N=64

$ POLLING_SECS=10



$ ovs-vsctl -- --id=@sflow create sflow agent=${AGENT_IP} \
    target="\"${COLLECTOR_IP}:${COLLECTOR_PORT}\"" header=${HEADER_BYTES} \
    sampling=${SAMPLING_N} polling=${POLLING_SECS} \
      -- set bridge br0 sflow=@sflow

openvswitch의 기능으로 sflow 프로토콜을 생성하여 모니터링 호스트에게 전송하는 형태로 사용

 

AGENT_IP로 172.29.236 대역의 MGMT 네트워크를 사용하면 될 것으로 보임

해당 명령어는 각 컴퓨트 노드에 활성화 해주면 될 것으로 보임

 

sFlow: Prometheus 내보내기

sFlow-RT를 통해 sFlow 데이터를 모아 다른 환경로 전송이 가능 하며, prometheus를 위한 url path가 존재하여 prometheus를 이용

Prometheus에 저장된 데이터는 Grafana로 시각화할 수 있게 함

curl http://localhost:8008/prometheus/metrics/ALL/ALL/txt

 

sFlow-RT

sFlow-RT 요구사항으로 JAVA 1.8+ 요구

sudo apt-get update 
sudo apt-get install openjdk-8-jdk
java -version

OpensVSwitch, sFlow, sFlow-RT를 엮는 튜토리얼은 아래 링크 확인

Open vSwitch Network Monitoring Using sFlow and sFlow-RT – Adel N. Toosi's Blog (wordpress.com)

 

위 명령어를 통해 만든 sFlow protocol의 정보를 받는 서버에 sFlow-RT 설치

sFlow-RT 다운로드

 

sFlow-RT Download

Download and Install sFlow-RT requires Java 1.8+. The following commands download, install and run the software: wget https://inmon.com/products/sFlow-RT/sflow-rt.tar.gz tar -xvzf sflow-rt.tar.gz ./sflow-rt/start.sh Alternatively, the following command run

sflow-rt.com

sudo apt update
sudo apt install default-jre
wget https://inmon.com/products/sFlow-RT/sflow-rt_3.0-1689.deb
sudo dpkg -i sflow-rt_3.0-1689.deb
sudo systemctl enable sflow-rt
sudo systemctl start sflow-rt

 

sFlow-RT는 기본적으로 Prometheus를 지원하도록 기능이 추가됨

http://localhost:8008/prometheus/metrics/ALL/ALL/txt

 

sFlow-RT ( docker )

apt-get update
apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
apt-get update
apt-get install docker-ce docker-ce-cli containerd.io
systemctl status docker
docker run -p 8008:8008 -p 6343:6343/udp --name sflow-rt -d sflow/prometheus
curl http://localhost:8008/prometheus/all/all/txt

 

sFlow 삭제 시

ovs-vsctl remove bridge [bridge] sflow [sflow uuid]

'Infra' 카테고리의 다른 글

Squid proxy 폐쇄망 연결  (0) 2024.05.23
sFlow Dashboard  (0) 2024.05.23
Fluentd 설정 방법  (0) 2024.05.23
Rabbit MQ - Fluentd - Opensearch  (0) 2024.05.23
RabbitMQ 이것저것  (0) 2024.05.23