안녕하세요, 디무브입니다.
네트워크 및 애플리케이션의 TCP 및 UDP 연결 상태를 확인하면 데이터 전송 환경을 모니터링할 수 있습니다.
이번 포스트에서는 서버 내부의 TCP와 UDP 포트의 상태와 성능을 Zabbix로 모니터링하는 방법에 대하여 다뤄보도록 하겠습니다.
💻 기초 팁 - TCP와 UDP?
■ TCP와 UDP는 전송계층에서 사용되는 프로토콜입니다.
■ 전송계층은 데이터 전달을 담당합니다.
■ (공통점) TCP와 UDP는 모두 포트 번호를 사용하여 주소를 지정하며 헤더와 데이터에 대한 오류를 체크합니다.
■ (차이점) TCP는 정확성을 추구하며, UDP는 신속성을 추구합니다.
0. TCP / UDP 상태 모니터링 구조
- TCP와 UDP 상태를 모니터링하기 위해서는 반드시 서버 내부에 Zabbix Agent가 구동 되어 있어야 합니다.
- Passive Agent와 Active Agent 모두 사용 가능하며, 위 이미지는 Passive Agent일 경우를 기준으로 설명되어 있습니다.
🚩 Zabbix에서는 다음과 같은 아이템을 통하여 원하는 지표를 수집할 수 있습니다.
Item Key |
Item Description |
net.tcp.listen[port] | 지정된 TCP 포트 번호가 대기상태(LISTEN)인지 체크. 대기상태가 아닌 경우엔 0을 리턴. 대기상태인 경우엔 1을 리턴. |
net.tcp.port[<ip>,port] | 지정된 포트에 TCP 접속 가능 여부를 체크. 접속할 수 없는 경우엔 0을 리턴, 접속 가능한 경우엔 1을 리턴. |
net.tcp.service.perf[service,<ip>,<port>] | TCP서비스의 퍼포먼스를 체크. 서비스가 다운된 경우엔 0을 리턴, 초(seconds)를 리턴한 경우엔 서비스에 접속에 걸린 시간을 리턴. |
net.tcp.service[service,<ip>,<port>] | 서비스 기동과 TCP 접속성 체크. 서비스가 정지되어 있는 경우엔 0을 리턴, 서비스가 기동되어 있는 경우엔 1을 리턴. |
net.tcp.socket.count[<laddr>,<lport>,<raddr>,<rport>,<state>] | 지정한 파라미터의 TCP Socket 개수를 정수 형태로 리턴. |
net.udp.listen[port] | 지정된 UDP 포트 번호가 대기상태(LISTEN)인지 체크. 대기상태가 아닌 경우엔 0을 리턴. 대기상태인 경우엔 1을 리턴. |
net.udp.service.perf[service,<ip>,<port>] | UDP서비스의 퍼포먼스를 체크. 서비스가 다운된 경우엔 0을 리턴, 초(seconds)를 리턴한 경우엔 서비스에 접속에 걸린 시간을 리턴. |
net.udp.service[service,<ip>,<port>] | 서비스 기동과 UDP 접속성 체크. 서비스가 정지되어 있는 경우엔 0을 리턴, 서비스가 기동되어 있는 경우엔 1을 리턴. |
net.udp.socket.count[<laddr>,<lport>,<raddr>,<rport>,<state>] | 지정한 파라미터의 UDP Socket 개수를 정수 형태로 리턴. |
1-1. 애플리케이션 별 TCP 사용 포트
해당 포트는 기본 값으로 설정되어 있는 TCP 포트입니다.
포트 | 설명 |
20 | 파일 전송 프로토콜 (FTP, File Transfer Protocol) - 데이터 포트 |
21 | 파일 전송 프로토콜 (FTP, File Transfer Protocol) - 제어 포트 |
22 | 시큐어 셸 (SSH, Secure SHell) - ssh scp, sftp같은 프로토콜 및 포트 포워딩 |
23 | 텔넷 프로토콜 (Telnet Protocol) - 암호화되지 않은 텍스트 통신 |
25 | SMTP (Simple Mail Transfer Protocol) - 이메일 전송에 사용 |
80 | HTTP (HyperText Transfer Protocol) - 웹 페이지 전송 |
110 | POP3 (Post Office Protocol version 3) - 전자우편 가져오기에 사용 |
389 | LDAP (Lightweight Directory Access Protocol) |
443 | HTTPS - 보안 소켓 레이어 (SSL, Secure Socket Layer) 위의 HTTP (암호화 전송) |
1-2. TCP Port 상태 확인하기
TCP Port 상태를 모니터링하기 전, 서버에서 현재 TCP 소켓의 상태를 확인해야 합니다.
✔ Step 1 서버 내부의 TCP Socket 상태 확인
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 576846/sshd: /usr/s
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1273955/nginx: mast
tcp 0 0 0.0.0.0:8086 0.0.0.0:* LISTEN 1273955/nginx: mast
tcp 0 0 0.0.0.0:8087 0.0.0.0:* LISTEN 1273955/nginx: mast
tcp 0 0 0.0.0.0:8085 0.0.0.0:* LISTEN 1273955/nginx: mast
tcp 0 0 0.0.0.0:8097 0.0.0.0:* LISTEN 1273955/nginx: mast
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 1269146/zabbix_agen
tcp 0 0 IP:10050 IP:45544 TIME_WAIT -
tcp 0 0 IP:10050 IP:56118 TIME_WAIT -
tcp 0 0 IP:10050 IP:45520 TIME_WAIT -
tcp 0 0 IP:10050 IP:45488 TIME_WAIT -
tcp 0 0 IP:10050 IP:36830 TIME_WAIT -
tcp 0 3168 IP:22 IP:8431 ESTABLISHED 1880246/sshd: root
tcp 0 0 IP:10050 IP:45572 TIME_WAIT -
tcp6 0 0 :::22 :::* LISTEN 576846/sshd: /usr/s
tcp6 0 0 :::10050 :::* LISTEN 1269146/zabbix_agen
✔ Step 2 상위에서 생성한 아이템을 기반으로 TCP Port 관련 템플릿 생성
✔ Step 3 TCP 템플릿 내부에 관련 아이템 생성 및 커스터마이징
- 위 챕터에서 생성한 아이템을 기준으로 새로운 TCP 템플릿 내부에 아이템을 생성합니다.
- 사용 용도에 따라 해당 아이템을 기반으로 아이템을 생성하여 커스터마이징 합니다.
✔ Step 4 TCP Port 트리거 아이템 생성 및 커스터마이징
- 상위 챕터에서 생성한 아이템을 기준으로 새로운 TCP 템플릿 내부에 트리거를 생성합니다.
- 사용 용도에 따라 해당 아이템을 기반으로 트리거를 생성하여 커스터마이징 합니다.
✔ (옵션) TCP Port 관련 그래프 생성
- 상위 챕터에서 생성한 아이템을 기준으로 새로운 TCP 탬플릿 내부에 그래프를 생성합니다.
- 해당 항목은 필수가 아니며 최근 데이터에서 한눈에 모든 지표를 확인해야 할 경우에 생성합니다.
✔ Step 5 TCP Port 관련 지표 최근 데이터 그래프 형식으로 확인
아이템을 생성한 뒤 최근 데이터에서 지표를 그래프 / 값 (텍스트) 형태로 확인할 수 있습니다.
✔ Step 6 TCP Port 관련 지표 그래프 확인
해당 형식으로 확인하려면 그래프가 생성되어 있어야 합니다.
상위 챕터에서 그래프를 생성했다면 다음과 같이 그래프 매뉴에서 한눈에 확인할 수 있습니다.
2-1. 애플리케이션 별 UDP 사용 포트
해당 포트는 기본 값으로 설정되어 있는 UDP 포트입니다.
포트 | 설명 |
123 | NTP (Network Time Protocol) - 시간 동기화 |
514 | syslog 프로토콜 - 시스템 로그 작성 |
161 | SNMP (Simple Network Management Protocol) - Agent 포트 |
162 | SNMP - Manager 포트 |
2-2. UDP Port 상태 확인하기
UDP Port 상태를 모니터링하기 전, 서버에서 현재 TCP 소켓의 상태를 확인해야 합니다.
✔ Step 1 서버 내부에서 사용 중인 서비스들의 UDP Socket 상태 확인
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
udp 0 0 127.0.0.1:323 0.0.0.0:* 43127/chronyd
udp6 0 0 ::1:323 :::* 43127/chronyd
✔ Step 2 상위에서 생성한 아이템을 기반으로 UDP Port 관련 템플릿 생성
✔ Step 3 UDP Port 관련 아이템 생성
- 위 챕터에서 생성한 아이템을 기준으로 새로운 UDP 템플릿 내부에 아이템을 생성합니다.
- 사용 용도에 따라 해당 아이템을 기반으로 아이템을 생성하여 커스터마이징 합니다.
✔ Step 4 UDP Port 트리거 아이템 생성
- 상위 챕터에서 생성한 아이템을 기준으로 새로운 UDP 템플릿 내부에 트리거를 생성합니다.
- 사용 용도에 따라 해당 아이템을 기반으로 트리거를 생성하여 커스터마이징 합니다.
✔ 옵션 UDP Port 관련 그래프 생성
- 상위 챕터에서 생성한 아이템을 기준으로 새로운 UDP 탬플릿 내부에 그래프를 생성합니다.
- 해당 항목은 필수가 아니며 최근 데이터에서 한눈에 모든 지표를 확인해야 할 경우에 생성합니다.
✔ Step 5 UDP Port 관련 지표 최근 데이터 그래프 형식으로 확인
아이템을 생성한 뒤 최근 데이터에서 지표를 그래프 / 값 (텍스트) 형태로 확인할 수 있습니다.
✔ Step 6 UDP Port 관련 지표 그래프 확인
해당 형식으로 확인하려면 그래프가 생성되어 있어야 합니다.
상위 챕터에서 그래프를 생성했다면 다음과 같이 그래프 매뉴에서 한눈에 확인할 수 있습니다.
지금까지 Zabbix를 활용한 네트워크 및 애플리케이션 TCP/UDP 모니터링 방법에 대하여 상세히 알아보았습니다. TCP와 UDP는 데이터 전송 환경을 책임지기 때문에 인프라 관리에 있어 중요한 부분입니다 😉 사용하고 계시는 TCP 또는 UDP 포트의 모니터링에 대한 상세한 설정이 필요하시다면 Zabbix 공식 파트너사 디무브에게 문의하세요!
'자빅스 > Case Study' 카테고리의 다른 글
Case Study- Zabbix Server를 활용한 Jira Data Center 모니터링 방법 (0) | 2024.05.07 |
---|---|
Case Study- Ansible 기반의 Zabbix 에이전트 배포 (0) | 2024.04.05 |
Case Study- Zabbix와 Atlassian Statuspage를 활용한 웹 서버 상태 모니터링 (0) | 2024.01.09 |
Case Study- Zabbix를 활용한 쿠버네티스 모니터링 (2) | 2023.12.08 |
Case Study- Zabbix에서 수집한 데이터를 Grafana를 통해 시각적으로 구성하기 (1) | 2023.10.26 |