- 발표자료 다운로드 — DNS 응답 코드와 실패 속도로 원인 구간을 좁히는 방법
- 발표 영상으로 먼저 보기 — eBPF 기반 MSAP.ai Observability 전체 기능 개요
- 이 발표자료가 답하는 여섯 가지 질문
- 원인이 코드 밖에 있어도 같은 화면에서 찾을 수 있는가
- IP를 받지 못하면 연결 시도는 시작되지 않는다
- 어느 DNS에 어떤 순서로 물을지는 인프라 설정이 정한다
- 이름이 없으면 밀리초, 대답이 없으면 초 단위로 실패한다
- CoreDNS는 대답이 없을 때만 다른 서버로 넘어간다
- 화면의 실패 시간은 가장 짧은 타임아웃을 가진 층이 정한다
- 외부 이름 하나에 NXDOMAIN 여섯 개는 정상 동작이다
- 외부 이름을 조회하는 서비스는 결제와 배송 둘뿐이다
- 평소에 쓰지 않는 보조 DNS 경로는 막혀 있어도 드러나지 않는다
- 문제 구간은 화면에서 좁히고 이유는 인프라에서 확정한다
- 두 장애는 실패 속도와 응답 코드로 갈린다
- 시나리오 ① 보조 DNS는 살아 있었지만 방화벽 허용 목록에서 빠져 있었다
- 고장 난 길은 하나인데 영향은 두 서비스에 나타났다
- 화면 세 곳에서 DNS 구간을 찾고 인프라 세 곳에서 이유를 확정했다
- 시나리오 ② 배포 직후 장애였지만 코드는 정상이었다
- NXDOMAIN은 확정 응답이라 보조 DNS로 넘어가지 않는다
- 찾는 순서는 같고 단계마다 보이는 값이 다르다
- 등록 직후의 실패를 등록 실패로 단정하지 않는다
- 느리면 응답 없는 DNS, 빠르면 이름 없는 DNS를 먼저 의심한다
- 여러 팀과 도구를 오가던 원인 구간 좁히기가 한 화면에서 끝난다
- 넓게, 빠르기, 연결, 이름, 확정 순서로 점검한다
- 쓰지 않는 경로와 빠진 등록은 평소 점검으로 미리 찾는다
- 핵심 정리
- 자주 묻는 질문
- 쿠버네티스 관측성, OpenTelemetry, 분산 추적
- 참고 리소스
- 자료 다운로드

발표자료 다운로드 — DNS 응답 코드와 실패 속도로 원인 구간을 좁히는 방법
전체 33장, PDF로 33쪽이다. MSAP.ai 옵저버빌리티 세미나의 세 번째 세션 자료로 개념, 데모 환경, 시나리오 두 가지, 정리 다섯 부분으로 나뉜다. 마지막에는 DNS 장애 점검 다섯 단계와 평소 점검 항목 네 가지를 실었다.
CoreDNS, Kubernetes, resolv.conf, RFC 문서와 데모 포워더 로그를 근거로 정리했고 장마다 바닥글에 출처를 적었다. 장애 대응 절차를 정비하는 운영팀과 플랫폼팀이 바로 참고할 수 있도록 PDF로 공개한다.
MSAP.ai 백서 구독하기🔔
새로운 백서 소식을 가장 먼저 만나보세요!
MSAP.ai 가 전하는 AI 기반 운영 인사이트와 최신 백서 소식을 가장 빠르게 받아보실 수 있습니다.
구독해 주시면 더 좋은 콘텐츠로 보답하겠습니다.🙏
발표 영상으로 먼저 보기 — eBPF 기반 MSAP.ai Observability 전체 기능 개요
이 세션만 다룬 영상은 아직 없다. 대신 이 세션의 데모 화면과 같은 제품인 MSAP.ai Observability의 전체 기능을 30분 동안 보여 주는 개요 영상을 소개한다.
세션 자료가 DNS 장애를 좁히는 순서를 설명한다면 개요 영상은 그 화면들이 제품 안에서 어떻게 이어지는지 보여 준다. 아래 영상은 이 세션의 녹화가 아니라 같은 제품의 기능 개요 편이다.
영상에서 다루는 순서는 다음과 같다.
- eBPF 기반 Zero-Instrument 수집과 APM 비교
- 토폴로지, 분산 추적, 로그 화면
- AI 기반 원인 분석
쿠버네티스 관측성의 전체 구조는 쿠버네티스 관측성, OpenTelemetry, 분산 추적에서 함께 볼 수 있다.
이 발표자료가 답하는 여섯 가지 질문
- DNS 문제인지 아닌지 어떻게 먼저 가를 수 있는가
- 보조 DNS가 있는데도 왜 서비스가 실패하는가
- NXDOMAIN이 쌓이면 모두 장애인가
- 실패까지 걸린 초 수는 무엇이 정하는가
- 서버에 접속하지 않고 어디까지 확인할 수 있는가
- 같은 장애를 막으려면 평소에 무엇을 점검하는가
어느 DNS에 어떤 순서로 물을지는 인프라 설정이 정한다
쿠버네티스 파드에서 앱이 이름을 물으면 OS 리졸버가 /etc/resolv.conf를 보고 CoreDNS에 묻는다. 클러스터 안의 서비스 이름은 CoreDNS가 바로 답하고, 바깥 이름은 사내 주 DNS와 보조 DNS로 넘긴다.
김대리가 코드에서 정하는 것은 어떤 이름을 부를지뿐이다. 질의 순서는 resolv.conf와 Corefile이, 그 서버까지 가는 길은 방화벽과 NetworkPolicy가 정한다. egress가 막힌 파드에 DNS 53번 포트 허용이 없으면 앱 포트를 열어 두어도 이름 해석 단계에서 먼저 실패한다.
▲ DNS 서버 주소와 질의 순서는 resolv.conf 와 CoreDNS 설정이 정함 (발표자료 6쪽)
이름이 없으면 밀리초, 대답이 없으면 초 단위로 실패한다
NOERROR는 정상으로 IP를 받는다. NXDOMAIN은 그런 이름이 없다는 확정 응답이라 다른 서버에 묻지 않고 몇 밀리초 만에 실패한다. 응답 없음은 기다렸다가 다음 서버로 넘어가므로 몇 초가 걸린다.
앱 예외도 다르다. 이름이 없으면 ENOTFOUND, 대답이 없으면 EAI_AGAIN이 남는다. SERVFAIL과 REFUSED도 응답이 온 경우라 CoreDNS 기본 설정에서는 다음 서버로 넘어가지 않는다.
먼저 볼 곳도 갈린다. NXDOMAIN은 질의가 DNS 서버까지 닿았지만 이름을 찾지 못한 것이므로 이름, 네임스페이스, search 도메인을 본다. 타임아웃이면 53번 포트 경로와 CoreDNS 엔드포인트를 본다. NXDOMAIN을 보고 CoreDNS부터 재시작하는 것은 범위만 넓히는 조치다.
▲ 이름이 없으면 ms 단위로, 대답이 없으면 초 단위로 실패함 (발표자료 7쪽)
외부 이름 하나에 NXDOMAIN 여섯 개는 정상 동작이다
문제 구간은 화면에서 좁히고 이유는 인프라에서 확정한다
노드 에이전트는 DNS 질의와 응답, TCP 연결을 커널에서 수집한다. 도메인네임(DNS) 탭은 도메인별 질의 건수, 응답 코드, 응답 시간을 보여 주고, 네트워크 탭은 TCP 연결 실패와 재전송, 왕복 시간을 보여 준다.
인시던트 화면은 이슈 전파 경로와 근본 원인 분석을 보여 준다. 반대로 방화벽 규칙, DNS 응답으로 받은 IP, 사내 DNS 레코드는 화면에 없다.
서비스마다 DNS 조회 시간, 상대 서버와의 연결 시간, 왕복 시간, 재전송, 연결 실패를 앱 응답 시간과 따로 모으기 때문에 앱 처리는 정상인데 DNS 구간 때문에 느려진 경우를 구분할 수 있다. 에이전트를 둘 수 없는 CDN과 사용자 브라우저 구간은 직접 측정하지 않는다.
▲ 문제 구간은 서버 접속 없이 화면에서 좁힘 (발표자료 14쪽)
고장 난 길은 하나인데 영향은 두 서비스에 나타났다
데모 영상에서는 주 DNS를 내리자 배송 서비스에 인시던트가 열리고 가용성이 50% 정도까지 떨어진다. 응답 시간 히트맵의 요청이 3초 근처에 몰려 있어 기다렸다가 실패하는 모습이다.
포워더가 주 DNS에서 타임아웃을 맞고 보조 DNS로 넘어가지만 방화벽에 허용 규칙이 없어 질의가 버려진다. 포워더 로그에는 두 서버 모두 i/o timeout이 질의마다 약 2초씩 찍혔다.
같은 세미나 두 번째 세션의 데모에서도 언어가 다른 배송과 결제가 같은 외부 도메인 DNS 조회 실패로 함께 무너졌다. 원인 서비스를 끝까지 따라가면 코드가 아니라 인프라 구간에 닿는 경우가 많다.
▲ 고장 난 구간은 하나인데 영향은 배송과 결제 두 서비스에 나타남 (발표자료 19쪽)
NXDOMAIN은 확정 응답이라 보조 DNS로 넘어가지 않는다
등록 직후의 실패를 등록 실패로 단정하지 않는다
느리면 응답 없는 DNS, 빠르면 이름 없는 DNS를 먼저 의심한다
| 항목 | 시나리오 ① 주 DNS 장애와 방화벽 | 시나리오 ② 이름 등록 누락 |
|---|---|---|
| DNS 응답 | 없음 (타임아웃) | NXDOMAIN |
| 실패 속도 | 약 3초 | 약 100ms |
| 영향 범위 | 배송 · 결제 | 결제만 |
| 결정적 단서 | 포워더 로그의 실패한 두 서버 | 도메인네임 탭의 NXDOMAIN |
| 해결 | 방화벽에 보조 DNS 허용 | 사내 DNS에 레코드 등록 |
판별할 때는 실패까지 걸린 시간과 DNS 응답 코드를 함께 본다.
▲ 같은 DNS 장애라도 응답 코드와 실패 속도가 다름 (발표자료 28쪽)
쓰지 않는 경로와 빠진 등록은 평소 점검으로 미리 찾는다
핵심 정리
두 DNS 장애 모두 김대리의 코드는 정상이었다. 그 통신도 커널을 지나가므로 노드 에이전트 하나로 코드 수정 없이 관측된다.
느리게 실패하면 응답 없는 DNS, 빠르게 실패하면 이름 없는 DNS, 연결 시도조차 없으면 DNS부터 확인한다.
자주 묻는 질문
DNS 장애인지 어떻게 먼저 판별하는가
네트워크 탭에서 외부로 가는 연결 시도가 있었는지 본다. 연결 기록이 아예 없다면 DNS를 먼저 의심한다.
NXDOMAIN과 DNS 타임아웃은 무엇이 다른가
NXDOMAIN은 이름이 없다는 확정 응답이라 몇 밀리초 만에 실패한다. 타임아웃은 대답이 없어 몇 초 뒤에 실패한다.
보조 DNS가 있는데 왜 장애가 났는가
보조 DNS로 가는 경로가 방화벽에서 막혀 있었다. 평소에 쓰지 않는 경로라 장애 전까지 드러나지 않았다.
NXDOMAIN이 많으면 모두 장애인가
아니다. ndots:5 설정 때문에 search 도메인을 붙인 질의가 NXDOMAIN을 받는 것은 정상이다.
도메인을 등록했는데도 잠시 실패하는 이유는 무엇인가
부정 응답 캐시 때문이다. CoreDNS 기본 설정은 최대 30초, Java는 기본 10초 동안 실패를 기억한다.
MSAP.ai Observability 화면에서 보이지 않는 것은 무엇인가
방화벽 규칙, DNS 응답 IP, 사내 DNS 레코드다. 이유는 포워더 로그와 방화벽 설정에서 확정한다.





















