Table of Contents
curl 로 dns lookup time 까지 얼마나 걸리는지 확인하기
배경
k8s 클러스터 서비스들 사이에 dns lookup time 이 얼마나 되는지 확인해야될 일이 있었다.
curl
이 가장 익숙해서 curl
로 dns lookup time 을 확인할 수 있는 방법을 알아보았다.
방법
curl
은 --write-out
옵션을 가지고 있는데 이 옵션을 사용하면 http 요청의 다양한 결과값을 확인할 수 있다.
http_code http 응답의 상태 코드
time_appconnect 요청이 시작되어 SSL/SSH/etc 연결 또는 핸드쉐이크가 완료되었을 때까지의 시간 (초단위)
time_connect 요청이 시작되어 TCP 연결이 되었을때까지의 시간 (초단위)
time_namelookup DNS 조회가 완료되었을 때까지의 시간 (초단위)
time_pretransfer 파일 전송이 시작되었을때까지의 시간(초단위)
time_starttransfer 첫번째 바이트가 전송되었을 때까지의 시간(초단위)
time_total 전체 작업이 완료되었을 때까지의 시간(초단위)
이 중에서 dns lookup time 까지의 시간을 측정하려면 time_namelookup
을 사용하면 된다.
다음과 같이 실행할 수 있다.
curl --write-out '%{time_namelookup}' https://google.com
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="https://www.google.co.kr/">here</A>.
</BODY></HTML>
0.001519%
요청 결과로 확인되는 응답은 보고 싶지 않으니 다음과 같이 결과 값을 표시하지 않도록 변경한다.
-o /dev/null
을 추가한다.
curl -o /dev/null --write-out '%{time_namelookup}' https://google.com
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 220 100 220 0 0 814 0 --:--:-- --:--:-- --:--:-- 814
0.002023%
응답 결과를 제거하였지만 진행 상황을 나타내는 프로그레스가 아직 출력되어 지저분하다. 이것도 줄여보자.
-s
을 추가한다. (silent)
curl -o /dev/null -s --write-out '%{time_namelookup}' https://google.com
0.001426%
단 한번의 응답 값으로는 확인하기 어려우니 여러번 수행한 결과를 확인해보자. 간단하게 스크립트를 작성했다.
#!/bin/sh
URL=${1}
LIMIT=${2:-1000}
if [[ -z "$URL" ]]; then
echo "ERROR:
Useage : {url} {times}
"
exit 1
fi
echo "$LIMIT times dns_time check for $URL"
function get_time() {
url=$1
t=$(curl -s -o /dev/null -w '%{time_namelookup}' $url)
echo $t
}
sum=.0
count=0
while [ "$count" -le "$LIMIT" ]
do
t=$(get_time $URL)
count=$((count + 1))
sum=$(echo "$sum + $t" | bc| sed 's/^\\./0./;s/0*$//;s/\\.$//')
if [ "$count" -ge $LIMIT ]
then
break
fi
done
total_time=$(echo "scale=10; $sum * 1000" | bc | sed 's/^\\./0./;s/0*$//;s/\\.$//')
avg_time=$(echo "scale=10; $total_time / $count " | bc | sed 's/^\\./0./;s/0*$//;s/\\.$//')
echo "total taken: $total_time ms, avg_time : $avg_time ms"
커맨드라인에서 다음과 같이 입력하면 결과를 확인할 수 있다.
./time.sh http://google.co.kr 10
10 times dns_time check for http://google.co.kr
total taken: 16.338 ms, avg_time : 1.6338 ms
dns lookup time만을 확인하기 위해서는 다른 좋은 방법이 있겠지만 나의 경우에는 k8s 클러스터 내부에서 각 서비스들 사이의 http 요청에 대해서 dns를 변경했을 때 내부에서 소요되는 시간을 측정하는게 목표라서 위와 같이 curl 로 간단하게 확인해 보았다. 게다가 alpine 리눅스라 이것저것 해볼 여지가 없었다.
참고
comments powered by Disqus
FEATURED TAGS
accesscontrol
adaptive growth
alpine linux
ansible
ansible tower
apache2.4
architecture
argocd
asgi
aws
awx
backoffice
beautiful goodbye
begining docker
benchmark
blockhound
blocking code
blog
book
brew cask
build cache
collaboration
communication
composer
confluence
cronjob
curl
customizing
customlog
data.sql
database
developer
difference
docker
docker desktop
dockerize
dos attack
eks
elasticsearch
empty string
environment to do well
errorlogformat
event driven
experience
file upload
filebeat
fluentd
forwarded option
framework
fuse.js
golang
graceful deploy
happy new year
haproxy
haproxy 1.8
haproxy acl logging
haproxy custom variable logging
haproxy metric
haproxy reload fail
haproxy stat
heap memory
hedgehog sharp
how do i work
hugo
index alias
install
installation
instance type
inverted index
istio
iterm
java
jdk 21
jekyll
jekyll to hugo
jetbrains
json
k8s
k8s api
kmooc
kubernetes
leadership
learning in 2019
let's encrypt
letsencrypt
limit_req_zone
litestar
logstash
m1 macbook pro
macro
macro key mapping
mapping
match
match_phrase
maven
microservice 설계 및 구현
migration
mm
multi datasource
mysql
nginx
nginx ingress
nginx regexp
ngram
node drain
null
openjdk
partial matching
phpstorm
poddisruptionbudget
poeaa
portfolio expansion
product strategy
python
query dsl
rate limit
rate litmiting
rds
reindex
rss template
seamless reload
search on hugo
service account & role
sidebar search
speed up
speedup
spring
spring boot
spring camp
spring camp 2023
spring event
ssh
struct
study
system manager
systemd reload
template
term
throughput
timezone
tips
traffic management
ulid
unused plugins
uuid
ux consideration
virtual thread
vm options
webflux
wildcard
zero downtime
만들면서 배우는 클린 아키텍처
시작하세요 도커
엔터프라이즈 애플리케이션 아키텍처 패턴
쿠버네티스 시작하기