티스토리 뷰
본 포스팅에서는 Docker로 기동되는 이미지들에 대한 Performance Monitoring에 대해 살펴보겠습니다.
때때로 Kubernetes나 OpenShift 등 다수의 컨테이너가 한번에 기동되는 경우 또는 성능을 모니터링하기 위해 JMeter나 LoadRunner 등의 부하 발생기를 통해 컨테이너에 과부하를 한번에 유입할 경우 해당 Container 뿐만 아니라 OS 전체적인 성능 저하가 발생하는 경우를 볼 수 있습니다.
이때 Kubernetes의 어떤 Container를 다중화하여 성능을 확보해야 하는지 현재 기준 리소스는 얼마나 사용되고 있는지 확인해 보고 싶을 때가 있는데요. APM Tool(datadog, splunk, pagerduty 등)을 포팅해서 모니터링하거나 Dashboard를 통해서 손쉽게 확인할 수도 있지만, CLI 환경에서도 눈으로 먼저 확인해 볼 수 있는 방법이 있습니다.
바로 docker stats라는 명령어 입니다.
docker stats
docker stats는 컨테이너의 리소스 사용량 통계를 실시간으로 보여 주는 Command입니다. docker가 설치되어 있는 환경에서 손쉽게 docker stats로 명령어를 실행할 수 있습니다.
[Container가 기동되어 있지 않은 상태]
[root@elk ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@elk ~]#
[root@elk ~]# docker stats
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
[Container 2개를 기동한 상태]
[root@elk ~]# docker run --name mediawiki -p 8080:80 -d mediawiki
fc2fb010cf90ae2253954372271f1a78432f6eafec896a3c5131e7da9cb6463a
[root@elk ~]# docker run -d --name redmine -p 3000:3000 redmine
af56fd091b95547c05aecd954ebea00d2ca4ef304952d2360aa8551f970ab309
[root@elk ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
74daadf92b45 redmine "/docker-entrypoin..." 51 seconds ago Up 50 seconds 0.0.0.0:3000->3000/tcp redmine
fc2fb010cf90 mediawiki "docker-php-entryp..." 10 minutes ago Up 10 minutes 0.0.0.0:8080->80/tcp mediawiki
[root@elk ~]#
[root@elk ~]# docker stats
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
fc2fb010cf90 0.01% 6.395 MiB / 7.637 GiB 0.08% 1.31 kB / 656 B 0 B / 0 B 6
af56fd091b95 0.00% 102.7 MiB / 7.637 GiB 1.31% 656 B / 656 B 0 B / 39.2 MB 2
...
...
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
fc2fb010cf90 0.01% 6.395 MiB / 7.637 GiB 0.08% 1.83 kB / 656 B 0 B / 0 B 6
74daadf92b45 101.59% 24.44 MiB / 7.637 GiB 0.31% 516 B / 516 B 0 B / 6.89 MB 2
[Container 1개를 다운한 상태]
[root@elk ~]# docker stop 74daadf92b45865f7aa746489c1b492c90addf9b1650997ea520d6dfc61d6e2e
74daadf92b45865f7aa746489c1b492c90addf9b1650997ea520d6dfc61d6e2e
[root@elk ~]# docker rm 74daadf92b45865f7aa746489c1b492c90addf9b1650997ea520d6dfc61d6e2e
74daadf92b45
[root@elk ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fc2fb010cf90 mediawiki "docker-php-entryp..." 11 minutes ago Up 11 minutes 0.0.0.0:8080->80/tcp mediawiki
[root@elk ~]#
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
fc2fb010cf90 0.01% 6.395 MiB / 7.637 GiB 0.08% 1.31 kB / 656 B 0 B / 0 B 6
위와 같이 docker process가 기동되어 있지 않은 상태에서 docker stats를 실행하면, 메뉴항목만 출력되며
mediawiki & redmine opensource container를 기동하였을 경우 각 container 별 CPU, MEM, NET I/O, BLOCK I/O PIDS를 확인할 수 있습니다.
의미 그대로 해석할 수 있으며, CPU, MEM은 할당된 Resource 대비 사용률, NET I/O는 Network Interface를 통해 전송하고 받는 데이터 량, BLOCK I/O는 블록 디스크에 읽고 쓴 데이터 량 그리고 PIDs는 컨테이너가 생성한 프로세스 또는 쓰레드 수를 의미합니다.
실시간으로 갱신되기 때문에 성능 테스트나 모니터링 시에 유용하게 사용될 수 있을 듯합니다.
그밖에도 유용하게 사용할 수 있는 옵션으로는 아래와 같은 옵션이 있습니다.
[root@elk system]# docker stats --help
Usage: docker stats [OPTIONS] [CONTAINER...]
Display a live stream of container(s) resource usage statistics
Options:
-a, --all Show all containers (default shows just running)
--format string Pretty-print images using a Go template
--help Print usage
--no-stream Disable streaming stats and only pull the first result
[root@elk system]#
a) docker stats --no-stream
반복 출력하지 않고 현 시점의 결과 1회만 출력
[root@elk system]# docker stats --no-stream
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
fc2fb010cf90 0.01% 6.395 MiB / 7.637 GiB 0.08% 1.97 kB / 656 B 0 B / 0 B 6
[root@elk system]#
b) docker stats --format string
해당 format을 기준으로 출력 포멧을 변경
[root@elk system]# docker stats --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}"
CONTAINER CPU % MEM USAGE / LIMIT
fc2fb010cf90 0.00% 6.395 MiB / 7.637 GiB
[root@elk system]# docker stats --format "table {{.Container}}: {{.CPUPerc}}"
CONTAINER CPU %
fc2fb010cf90: 0.01%
위와 같이 원하는 항목과 원하는 포멧으로 변경하여 출력이 가능합니다.
Format으로 사용가능한 서식은
.Container, .Name, .ID, .CPUPerc, .MemUsage, .NetIO, .BlockIO, MemPerc, .PIDs가 있으며, MemPerc, PIDs는 windows에서는 사용이 불가능합니다.
간단하지만 유용하게 Docker Container를 모니터링하는 용도로 사용해 보기 바랍니다.
'③ 클라우드 > ⓓ Docker' 카테고리의 다른 글
[Docker Insecure Registry] "server gave HTTP response to HTTPS client" (0) | 2019.08.27 |
---|---|
[Docker Registry] Docker Image를 활용한 Local Registry 구축 (4) | 2019.08.27 |
[Docker] 기동중인 도커 컨테이너에 파일 복사 및 스냅샷 생성 (0) | 2019.07.19 |
[Docker] 폐쇄망에 Docker 구축하기 (3) | 2019.05.21 |
[Docker] Docker Image 관리 가이드 (0) | 2018.10.26 |
- Total
- Today
- Yesterday
- SWA
- TA
- JEUS7
- openstack tenant
- 쿠버네티스
- node.js
- apache
- OpenStack
- openstack token issue
- MSA
- 오픈스택
- nodejs
- 마이크로서비스 아키텍처
- Da
- SA
- aws
- webtob
- jeus
- Architecture
- JBoss
- k8s
- aa
- git
- JEUS6
- 마이크로서비스
- 아키텍처
- API Gateway
- wildfly
- kubernetes
- Docker
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |