기본적으로 대부분의 네트워크 장비들은 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 프로토콜을 주로 사용 )
- 에러 이벤트 로깅 ( 네트워크에서 발생하는 에러, 이벤트를 모니터링하고 필요에 따라 데이터에 포함하여 전송 )
- 에이전트 설정 관리 ( 사용자가 설정한 샘플링 비율, 전송 주기 등을 관리하고 설정에 따라 동작 )
- 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초마다 데이터를 수집합니다.
- -- 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-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 설치
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 |