문제
ktranslate
네트워크 모니터링 에이전트를 설치한 후 네트워크 흐름 원격 분석을 수집하는 데 문제가 발생합니다.
배경
ktranslate
패킷 페이로드를 편집하지 않고 수집된 원시 흐름 원격 측정을 반환합니다. 기본적으로 지원되는 여러 유형의 흐름이 있으며 가장 눈에 띄는 것은 NetFlow v5, NetFlow v9, sFlow 및 IPFIX 입니다.
모든 네트워크 흐름 원격 측정은 KFlow 이벤트 유형 에 저장됩니다. NRQL에서 직접 쿼리할 수 있습니다. 이 이벤트 유형이 없으면 계정이 데이터를 수신하지 않는다는 의미입니다.
FROM KFlow SELECT *
해결책
ktranslate
실행 중인 컨테이너 또는 서비스에서는 한 가지 유형의 흐름 템플릿만 수집할 수 있습니다. 런타임 중에 패킷을 변환할 수 있도록 예상되는 템플릿이 무엇인지 ktranslate
에 알려주는 -nf.source 인수를 사용하여 유형을 구성합니다.
여기서 흔히 저지르는 실수는 여러 컨테이너 또는 서비스를 실행하는 것입니다. 각각은 서로 다른 흐름 템플릿 유형을 수집하지만 들어오는 트래픽을 고유한 포트로 격리하지 않습니다.
다양한 유형의 여러 컨테이너 또는 서비스를 실행하는 경우 런타임 시 각각 -nf.port 에 대해 서로 다른 값으로 설정해야 합니다(기본값은 9995
). 그렇지 않으면 ktranslate
의 실행 중인 각 인스턴스가 수신 패킷을 비동기식으로 가져오고 잘못된 템플릿이 적용되어 로그에 오류가 발생하거나 New Relic에 데이터가 없을 위험이 높습니다. 또한 특정 포트를 대상으로 지정하려면 소스 네트워크 장치의 흐름 내보내기 구성을 업데이트해야 합니다.
각 공급업체에는 네트워크 흐름 내보내기를 위해 장치를 올바르게 구성하는 방법에 대한 자체 문서가 있습니다. NetFlow v9
, IPFIX
및 sFlow
와 같은 고급 버전에는 관리자가 수집하고 내보내는 필드를 사용자 정의할 수 있는 옵션이 있습니다. 이를 편집하면 ktranslate
에 의한 흐름 레코드를 올바르게 처리하는 기능이 효과적으로 비활성화될 수 있습니다.
다음 필드는 필수 입니다.
- 프로토콜(필드 유형 번호:
4
) - 계층 4 프로토콜 - 소스 주소(필드 유형 번호:
8
,27
) - 소스 IPv4 또는 IPv6 주소 - 소스 포트(필드 유형 번호:
7
) - 소스 TCP/UDP 포트 - 대상 주소(필드 유형 번호:
12
,28
) - 대상 IPv4 또는 IPv6 주소 - 대상 포트(필드 유형 번호:
11
) - 대상 TCP/UDP 포트
- 인터페이스 수신(필드 유형 번호:
10
) - 수신 인터페이스에 대한 SNMP 인덱스 - 인터페이스 전송(필드 유형 번호:
14
) - 송신 인터페이스에 대한 SNMP 인덱스
- 델타 바이트(필드 유형 번호:
1
) - 델타 바이트 - 총 바이트(필드 유형 번호:
85
) - 총 바이트 - 출력 바이트(필드 유형 번호:
23
) - 출력 바이트 - 개시자 옥텟(필드 유형 번호:
231
) - 개시자 바이트 - 응답자 옥텟(필드 유형 번호:
232
) - 응답자 바이트
- 델타 패킷(필드 유형 번호:
2
) - 델타 패킷 - 총 패킷(필드 유형 번호:
86
) - 총 패킷 - 송신 패킷(필드 유형 번호:
24
) - 송신 패킷 - 개시자 패킷(필드 유형 번호:
298
) - 개시자 패킷 - 응답자 패킷(필드 유형 번호:
299
) - 응답자 패킷
- ToS(필드 유형 번호:
5
) - 서비스 유형 - 소스 AS(필드 유형 번호:
16
) - 소스 BGP 자율 시스템 번호 - 대상 AS(필드 유형 번호:
17
) - 대상 BGP 자율 시스템 번호 - 피어 소스 AS(필드 유형 번호:
129
) - 피어 소스 BGP 자율 시스템 번호 - 피어 대상 AS(필드 유형 번호:
128
) - 피어 대상 BGP 자율 시스템 번호
공급업체는 장치 CLI/UI를 통해 흐름 내보내기 카운터를 관찰하는 방법에 대한 자체 문서를 보유하게 됩니다. 장치에서 카운터 증가가 부족하다는 것은 흐름 내보내기가 장치에서 올바르게 구성되지 않았음을 나타냅니다.
ktranslate
에 대한 Docker 컨테이너와 Linux 서비스 배포 옵션은 모두 호스트 네트워크를 사용하여 매핑된 포트에서 데이터를 수신합니다. 흐름 레코드가 호스트에서 수신되고 있는지 확인하려면 tcpdump 유틸리티를 사용하여 나중에 Wireshark 에서 조사할 수 있는 패킷 캡처(.pcap
) 파일을 생성할 수 있습니다.
이 명령을 실행하면 호스트의 모든 인터페이스에서 들어오는 모든 패킷을 캡처하고 현재 디렉터리의 파일에 출력을 쓰도록 tcpdump
설정됩니다.
$sudo tcpdump -i any -w dump_capture.pcap
tcpdump 에 여러 인수를 추가할 수 있습니다. 여기서 가장 중요한 항목은 나중에 분석에 사용할 수 있는 출력 파일입니다. 결과를 STDOUT
에 출력하면 현재 목적에 따라 제한된 가치가 생성됩니다.
이 파일이 있으면 다음 섹션에서는 결과를 분석하는 방법을 보여줍니다.
팁
발견된 가장 일반적인 문제 중 하나는 소스 네트워크 장치에서 대상 ktranslate
호스트로의 패킷을 차단하는 네트워크 구성/방화벽 규칙입니다. tcpdump
유틸리티로 결과를 얻지 못한 경우 문제 해결을 시작하는 가장 좋은 방법은 네트워크 규칙을 확인하는 것입니다.
Wireshark는 패킷 캡처 파일을 검사하는 데 도움이 되는 무료 유틸리티입니다. 다음과 같이하세요:
Wireshark 애플리케이션을 시작하고 패킷 캡처 파일을 엽니다.
초기 보기에는 캡처된 모든 패킷이 표시되지만 흐름 분석을 위해서는 패킷을 올바르게 디코딩하도록 애플리케이션을 설정해야 합니다. 메뉴를 사용하여 Analyze > Decode As...
으로 이동하면 새 팝업이 열립니다.
팝업에서 왼쪽 하단에 있는 더하기(+
) 아이콘을 클릭하면 패널에 새 행이 추가됩니다. Current
열의 초기 옵션은 (none)
입니다. 이를 클릭하여 드롭다운 메뉴를 연 다음 NetFlow
및 IPFIX
에 대해 CFLOW
선택하거나 sFlow
패킷에 대해 sFlow
선택합니다. 기본 UI로 돌아가려면 오른쪽 하단의 OK
클릭하세요.
팁
이 메뉴는 대소문자를 구분하여 알파벳순으로 정렬되어 있습니다. sFlow
옵션은 목록 맨 아래에 있습니다.
기본 UI에서 CFLOW
| 이제 sFlow
패킷을 Protocol
열에서 식별하여 확인합니다. 디스플레이 필터 (cflow or sflow)
를 적용하면 캡처 파일에 있을 수 있는 다른 패킷으로부터 필요한 패킷이 자동으로 격리됩니다.
다음 섹션에서는 각 패킷 유형을 검사하는 방법을 간략하게 설명합니다.
NetFlow
IPFIX
프로토콜은 관리자가 표준 옵션 목록에서 수집할 필드를 식별할 수 있는 템플릿 접근 방식을 사용합니다. ktranslate
에 대한 필수 필드가 캡처되고 있는지 확인하기 위해 이러한 패킷 분석이 수행됩니다.
Wireshark의 기본 UI에서 단일 CFLOW
패킷을 클릭하여 선택한 다음 FlowSet n
섹션을 확장합니다. 여기서 n
는 패킷의 단일 흐름 레코드를 식별하는 정수입니다. 그런 다음 Flow n
하위 그룹을 확장하여 이 흐름 레코드의 필드를 분석합니다.
팁
또한 패킷의 Template Frame
링크를 클릭하면 이 장치의 모든 흐름에 대한 템플릿이 포함된 캡처된 패킷으로 이동할 수 있습니다.
sFlow
과 기존 NetFlow/IPFIX
프로토콜 간의 프로토콜 차이로 인해 분석할 필드가 다릅니다.
Wireshark의 기본 UI에서 단일 sFlow
패킷을 클릭하여 선택한 다음 InMon sFlow
섹션을 확장합니다. 다음 필드가 있어야 합니다.
들 | 설명 |
---|---|
데이터그램 버전 | 이 sFlow 패킷의 버전입니다. |
에이전트 주소 유형 | IPv4(1) 또는 IPv6(2) |
대리인 주소 | 흐름을 내보내는 IP 주소입니다. 여기에서 흐름 내보내기를 구성했습니다. |
하위 에이전트 ID | sFlow v5에서는 여러 내보내기 프로세스를 실행할 수 있습니다. 이는 고유 식별자입니다. |
시퀀스 번호 | 에이전트 장치에서 보낸 sFlow 패킷 수입니다. |
시스템 가동 시간 | 에이전트 장치가 마지막으로 재부팅된 이후의 시간입니다. |
샘플 수 | 현재 패킷에 포함된 sFlow 샘플 수입니다. |
Flow sample
이라는 하위 그룹을 확장하면 다음과 같은 추가 필드가 표시됩니다.
들 | 설명 |
---|---|
기업 | 이 필드는 관리자가 sFlow 내보내기를 구성할 때 선택적으로 활성화할 수 있는 사용자 정의 sFlow 엔터프라이즈 구성에 주석을 답니다. (기본적으로 |
sFlow 샘플 유형 | 이는 기업이 sFlow 내보내기를 사용자 정의할 때 사용되는 샘플 유형에 대한 지정입니다. sFlow 문서 에서 정의를 찾을 수 있습니다. |
샘플 길이 | 샘플의 길이(바이트)입니다. |
시퀀스 번호 | 에이전트가 샘플을 채취할 때마다 카운터 값이 증가합니다. |
샘플링 속도 |
|
샘플 풀 | 실제 샘플링된 패킷을 포함하여 샘플링될 수 있었던 가능한 총 패킷 수입니다. |
삭제된 패킷 | 리소스 제약으로 인해 삭제된 패킷 수입니다. |
입력 인터페이스 | 패킷이 도착한 인터페이스의 SNMP ifIndex입니다. |
흐름 기록 | 이 샘플에 포함된 샘플링된 레코드 수입니다. |
팁
Decode as...
단계 없이 동일한 패턴을 적용하여 syslog 및 SNMP 트랩 데이터 수신을 검증할 수 있습니다.