DNS issue
์๋น์ค Timeout ์ด์
nginx log
upstream_response_time 10์ด ๋ฐ์
packet dump

ํด๋น ์๊ฐ๋ ํจํท ํ์ธํด๋ณด๋ nginx -> 2๋ฒ์๋ฒ ์ผ๋ก ์ฐ๊ฒฐ nginx -> 2 POST Request ํ API#2์์ ACK ๋ฐ๋ก ์์ ๋จ 2๋ฒ์๋ฒ -> nginx ๋๋ต 10์ด ์๋ค๊ฐ 200 ok Response
apm Log

APM ๋ก๊ทธ ํ์ธํด๋ณด๋
์ด 422ms ์ ํ๋ฆฌ์ผ์ด์ ์๋ 159 ms๋ง์ ์ฒ๋ฆฌ๋์๋ค๊ณ ๋์ด
ํด๋ผ์ด์ธํธ ์ ์ฅ์์๋ 10์ด ์ด์ ๊ฑธ๋ ค์ timeout ๋ฐ์ ๊ทธ ํ ์ฌ์๋ ํ๋๋ฐ ์ฐ๋ฆฌ์ธก ์๋ฒ์์๋ ์ด๋ฏธ ์ฒ๋ฆฌ๋ ์ ์ฅ์ด์ฌ์ 500 error response ํ๋ ์ํฉ ์ธ ๊ฒ ๊ฐ์
์ฌ๊ธฐ์ ์ค์ํ๊ฑด ์? 2๋ฒ ์๋ฒ๋ ๋ฐ๋ก ์๋ต์ ์ฃผ์ง ์์์๊น?
๋ค๋ฅธ case
์ฐพ๋ค๋ณด๋ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ๋ํด๋น ์๊ฐ๋์ ๋์ผํ ํ์์ ํ์ธํ๋ค.



์ฐพ์๋ณด๋ 2024.03.13 18:35:32 ~ 18:35:59 ํด๋น ์๊ฐ๋์ response_time์ด ๊ต์ฅํ ๋์
๋์๊ฐ๋ ํ์ธํด๋ณด๋ ์๋ฒ์ ์ฌ๋ผ๊ฐ์๋ ํน์ ์ ํ๋ฆฌ์ผ์ด์ ๋ง ๋ฐ์ํจ
์๋ฒ#1


์ ์ผ์ด์ค๋ 2๋ฒ์๋ฒ์์ ํ์ธํ์ ๋์ ๋ด์ฉ์
2024.03.13 18:35:32 ~ 18:35:59 ์๊ฐ๋ 1๋ฒ๋์๋ฒ ํ์ธํด๋ณด๋ ๋์ผํ๊ฒ ๋ฐ์๋จ
์ ์๋ฒ๋ค์ด Response๋ฅผ ๋๋ฆฌ๊ฒ ์ฃผ๋๊ฑธ๊น ?
1. nginx ๋ฌธ์ ?
์ ์บก์ณ๋ค์ API ์๋ฒ์์ ์บก์ณํ ๊ฒ Request๋ฅผ ์ ์์ ์ผ๋ก ๋ฐ๊ณ ack๋ ๋ ๋ฆผ. nginx ๋ฌธ์ ๋ ์๋ ๊ฒ ๊ฐ์
2. ๊ทธ๋ผ ์ ์ดํ๋ฆฌ์ผ์ด์
์ ์ฐํ request ์๊ฐ์ nginx request ์๊ฐ๊ณผ ๋ค๋ฅธ๊ฐ?
์์ธ

์ค์ ๋ก ์ดํ๋ฆฌ์ผ์ด์ ๋ก๊ทธ๋ฅผ ํ์ธํด๋ณด๋ฉด Mar 14, 2024 @ 13:43:51.497์ ๋ฐ์๊ณ Mar 14, 2024 @ 13:43:56.531์ ์ดํ๋ฆฌ์ผ์ด์ Incoming request์ด ๋์๋ค๊ณ ํ๋ค.
์ด ๊ณต๋ฐฑ์ 5์ด๋ ๋ฌด์์ผ๊น
strace
10109 16:27:30 open("/etc/hosts", O_RDONLY|O_CLOEXEC) = 113
10109 16:27:30 fstat(113, {st_mode=S_IFREG|0644, st_size=1305, ...}) = 0
10109 16:27:30 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f5d0d371000
10109 16:27:30 read(113, "127.0.0.1\tlocalhost localhost.localdomain localhost4 localhost4.localdomain4\n::1 localhost localhost.localdomain localhost6 localhost6.localdomain6\n192.168.1.217\tiserveme.iremit-inc.com\n172.31.253.150\tgayo.finnet.co.id\n211.181.107.12\tdev.kjbank.com\n211.181.107.13\tapi.kjbank.com\n172.21.100.225\tspotcash.islamibankbd.com\n103.11.136.58\teremit-lv.dutchbanglabank.com\n192.168.77.150\twallet.hanpass.com\n192.168.77.71\tpg-zeropay-api.hanpass.com\n192.168.77.71\tpg-settlement-api.hanpass.com\n63.91.129.157\tws.moneygram.com\n192.168.77.35\tapi.hanpass.com\n192.168.77.35\tpaygate.hanpass.com\n192.168.77.35\topp.hanpass.com\n192.168.77.35\tapp.hanpass.com\n172.16.200.20\tworks.hanpass.com\n185.178.51.17\ttransfer.myuzcard.uz\n192.168.7.249\tmail.hanpass.com\n192.168.77.53\tapp-beta.hanpass.com\n192.168.77.37\tlivetest-opp.hanpass.com\n192.168.77.211 auth.hanpass.com\n103.11.172.104 vcbr\n192.168.77.60\tinbound.hanpass.com\n192.168.77.33\ttest-hpg.hanpass.com\n10.189.1.131\thpg.hanpass.com\n10.189.50.149\tdev-fleet.hanpass.com\n10.189.50.150\tprd-fleet.hanpass.com\n10.189.50.151\tLogstash-1\n10.189.50.152\tLogstash-2\n10.189.50.153\tES-1\n10.189.50.154\tES-2\n10.189.50.155\tES-3\n10.189.50.156\tKibana\n\n10.189.1.49 \tpsa.hanpass.com\n10.189.11.31\tdiscovery-a.hanpass.com\n10.189.11.32\tdiscovery-b.hanpass.com\n10.189.1.49\tcoupon.hanpass.com\n", 4096) = 1305
10109 16:27:30 read(113, "", 4096) = 0
10109 16:27:30 close(113) = 0
10109 16:27:30 munmap(0x7f5d0d371000, 4096) = 0
10109 16:27:30 socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 113
10109 16:27:30 setsockopt(113, SOL_IP, IP_RECVERR, [1], 4) = 0
10109 16:27:30 connect(113, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("8.8.8.8")}, 16) = 0
10109 16:27:30 poll([{fd=113, events=POLLOUT}], 1, 0) = 1 ([{fd=113, revents=POLLOUT}])
10109 16:27:30 sendto(113, ">\244\1\0\0\1\0\0\0\0\0\0\00210\00277\003168\003192\7in-addr\4arpa\0\0\f\0\1", 44, MSG_NOSIGNAL, NULL, 0) = 44
10109 16:27:30 poll([{fd=113, events=POLLIN}], 1, 5000 <unfinished ...>
10109 16:27:35 <... poll resumed>) = 0 (Timeout)
10109 16:27:35 socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP <unfinished ...>
10109 16:27:35 <... socket resumed>) = 50
10109 16:27:35 setsockopt(50, SOL_IP, IP_RECVERR, [1], 4) = 0
10109 16:27:35 connect(50, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("8.8.4.4")}, 16) = 0
10109 16:27:35 poll([{fd=50, events=POLLOUT}], 1, 0) = 1 ([{fd=50, revents=POLLOUT}])
10109 16:27:35 sendto(50, ">\244\1\0\0\1\0\0\0\0\0\0\00210\00277\003168\003192\7in-addr\4arpa\0\0\f\0\1", 44, MSG_NOSIGNAL, NULL, 0) = 44
10109 16:27:35 poll([{fd=50, events=POLLIN}], 1, 5000 <unfinished ...>
10109 16:27:40 <... poll resumed>) = 0 (Timeout)
10109 16:27:40 poll([{fd=113, events=POLLOUT}], 1, 0 <unfinished ...>
10109 16:27:40 <... poll resumed>) = 1 ([{fd=113, revents=POLLOUT}])
10109 16:27:40 sendto(113, ">\244\1\0\0\1\0\0\0\0\0\0\00210\00277\003168\003192\7in-addr\4arpa\0\0\f\0\1", 44, MSG_NOSIGNAL, NULL, 0) = 44
10109 16:27:40 poll([{fd=113, events=POLLIN}], 1, 5000 <unfinished ...>
10109 16:27:45 <... poll resumed>) = 0 (Timeout)
10109 16:27:45 poll([{fd=50, events=POLLOUT}], 1, 0) = 1 ([{fd=50, revents=POLLOUT}])
10109 16:27:45 sendto(50, ">\244\1\0\0\1\0\0\0\0\0\0\00210\00277\003168\003192\7in-addr\4arpa\0\0\f\0\1", 44, MSG_NOSIGNAL, NULL, 0 <unfinished ...>
10109 16:27:45 <... sendto resumed>) = 44
10109 16:27:45 poll([{fd=50, events=POLLIN}], 1, 5000 <unfinished ...>
9955 16:27:48 futex(0x7f5d046fcb04, FUTEX_WAIT_BITSET_PRIVATE, 1, {tv_sec=76717854, tv_nsec=510109998}, 0xffffffff) = -1 ETIMEDOUT (์ฐ๊ฒฐ ์๊ฐ ์ด๊ณผ)
10109 16:27:50 <... poll resumed>) = 0 (Timeout)
10109 16:27:50 close(113) = 0
10109 16:27:50 close(50) = 0
10109 16:27:50 socket(AF_NETLINK, SOCK_RAW|SOCK_CLOEXEC|SOCK_NONBLOCK, NETLINK_ROUTE) = 50Strace๋ฅผ ์กฐํ ๊ฒฐ๊ณผ Request ํจํท์ ๋ฐ์ ์ดํ์ ์์ ์ IP๋ก PTR ๋ ์ฝ๋ Lookup
API ์๋ฒ์์ ๊ตฌ๊ธ DNS๋ก ์์ ์ IP PTR ๋ ์ฝ๋๋ฅผ ์ง์์ ์ผ๋ก ์กฐํ ๊ตฌ๊ธ DNS์์ ์๋ต์ด ์์ ๋ timeout ๋ฐ์ํ๋ ๊ฒ์ผ๋ก ํ์ธ DNS Timeout ์๊ฐ ๊ธฐ๋ณธ 5์ด๋ก ํ์ธ ๋จ
์์ ํด๊ฒฐ์ฑ
# /etc/hosts
1.1.1.1 api-1.domain.comptr ๋ ์ฝ๋ lookup์ ํ์ง์๊ฒ hosts ํ์ผ์ ์์๋ก ์์ฑ
์์ธ
์ดํ๋ฆฌ์ผ์ด์ ์์ค ์ฝ๋์ dns lookup ํ๋ ์ฝ๋๊ฐ ์์ด ์ ๊ฑฐ ํจ.
๊ทธ๋ฌ๋ ์๋ฒ๋ค์ DNS ์๋ฒ๊ฐ ์ธ๋ถ๋ก ๋์ด์์ด timeout๋ฐ์ํ ๊ฒ์ด 2์ฐจ์ ์ธ ์์ธ์ด๋ผ๊ณ ์๊ฐํจ
์ถํ์ ์ฌ์ด๋ ์ดํํธ ํ์ธํด์ ์ธ๋ถ dns๋ฅผ ๋ด๋ถ dns๋ก ๋ณ๊ฒฝํด์ผ ๊ฒ ๋ค.
๋๋์
1. ์์คํ
์ฝ์ ์ค์์ฑ
ํธ๋ฌ๋ธ์ํ ์ํ๋ฉด์ ์ดํ๋ฆฌ์ผ์ด์ ์ ์์คํ ์ฝ์ ๋ถ์ํ๊ธฐ ์ํด strace ํด์ ์ฒ์ ์จ๋ดค๋ค. ๋ณด๊ธฐ๊ฐ ์ฝ์ง์์์ง๋ง ์์ธ์ ํด๊ฒฐํ๋๋ฐ ํฐ ๋์์ ์คฌ๋ค. ์์คํ ์ฝ์ ๊ณต๋ถํด์ผ๊ฒ ๋ค.
2. ๋ก๊ทธ์ ์ค์์ฑ
์์คํ ์ฝ์ ๋ถ์ํ๊ธฐ ์ ๊น์ง ๋ก๊ทธ๋ง ๋ค์ฌ๋ค ๋ณด๋ฉด์ ์ด๋ค ๋ฌธ์ ์ธ์ง๋ฅผ ํ์ ํ๋ค. ๋ก๊ทธ๋ ์์ฐํ์๋ค๋ฉด ์์ธ์ ์ฐพ๋๋ฐ ์ค๋๊ฑธ๋ ธ์ ๊ฒ ๊ฐ๋ค. ๋ก๊ทธ์ ์ค์์ฑ์ ๋ค์ํ๋ฒ ๋๊ผ๋ค.
Last updated