Docker 컨테이너를 모니터링하는 방법에는 여러 가지가 있습니다. 이 블로그에서는 간단하고 사용하기 쉬운 몇 가지 옵션에 대해 설명합니다:
각각에 대해 자세히 살펴보겠습니다.
우리는 카우치베이스 서버 를 사용하여 모니터링 데이터를 수집합니다. 서버를 시작하겠습니다:
1 |
도커 실행 -d -p 8091-8093:8091-8093 -p 11210:11210 --이름 카우치베이스 arungupta/카우치베이스 |
아룽업타/카우치베이스
이미지에 대한 설명은 github.com/arun-gupta/docker-images/tree/master/couchbase. 수행합니다:
- 인덱스 및 데이터 서비스용 메모리 설정
- 인덱스, 데이터 및 쿼리 서비스를 위한 Couchbase 서버 구성
- 사용자 이름 및 비밀번호 자격 증명 설정
이제 모니터링 데이터를 수집해 보겠습니다.
도커 통계
도커 통계
다음 컨테이너의 리소스 사용량 통계의 실시간 스트림을 표시합니다:
- CPU % 사용량
- 메모리 사용량, 제한, % 사용량
- 네트워크 I/O
- 디스크 I/O
통계는 매초마다 업데이트됩니다. 다음은 샘플 출력입니다:
1 2 |
컨테이너 CPU % MEM 사용 방법 / LIMIT MEM % NET I/O BLOCK I/O 4827f0139b1f 10.94% 706.2 MB / 1.045 GB 67.61% 299.7 kB / 2.473 MB 456 MB / 327.3 MB |
기본적으로 이 명령은 실행 중인 모든 컨테이너에 대한 통계를 표시합니다. 공백으로 구분된 컨테이너 이름 또는 ID 목록을 지정하여 스트림을 실행 중인 컨테이너의 하위 집합으로 제한할 수 있습니다. 예를 들어
카우치베이스 컨테이너는 다음과 같이 볼 수 있습니다:
1 |
도커 통계 카우치베이스 |
어디 카우치베이스
는 컨테이너 이름입니다. 출력은 다음과 같습니다:
1 2 |
컨테이너 CPU % MEM 사용 방법 / LIMIT MEM % NET I/O BLOCK I/O 카우치베이스 12.50% 708.2 MB / 1.045 GB 67.80% 301 kB / 2.477 MB 456 MB / 327.6 MB |
--스트림 없음
옵션을 지정하여 첫 번째 스냅샷만 표시하고 결과를 스트리밍하지 않을 수 있습니다. 이 옵션은 도커 로젠트리 컨테이너 를 수집하는 데 사용할 수 있습니다.
이 데이터.
Docker 원격 API
도커 데몬은 원격 REST API. 이 API는 클라이언트가 엔진과 통신하는 데 사용됩니다. 이 API는 다음과 같은 다른 도구에서도 호출할 수 있습니다.
curl 또는 Chrome 포스트맨 REST 클라이언트.
OSX 매버릭스에서 Docker 머신을 사용하여 Docker 데몬을 만드는 경우 이 API가 작동하도록 하는 것이 약간 까다롭습니다. Mac을 사용하는 경우 다음 지침을 따르세요. Docker 원격 API 사용 에
를 사용하여 curl이 이 REST API를 호출할 수 있는지 확인합니다. 컨테이너에 대한 통계를 제공하는 API는 다음과 같습니다. /containers/{id}/stats
또는 /컨테이너/{이름}/통계.
그러면 컨테이너에 대한 더 많은 통계를 다음과 같이 얻을 수 있습니다:
1 |
~ > curl https://192.168.99.100:2376/containers/42d1414883af/stats --cert $DOCKER_CERT_PATH/cert2.p12 --pass mypass --key $DOCKER_CERT_PATH/key.pem --cacert $DOCKER_CERT_PATH/ca.pem |
다음과 같은 결과(서식 지정)가 표시됩니다:
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
{ "read": "2016-02-07T13:26:56.142981314Z", "precpu_stats": { "cpu_usage": { "총사용량": 0, "percpu_usage": null, "사용법_in_커널모드": 0, "사용법_in_사용자 모드": 0 }, "system_cpu_usage": 0, "스로틀링_데이터": { "기간": 0, "스로틀링_기간": 0, "스로틀링_시간": 0 } }, "cpu_stats": { "cpu_usage": { "총사용량": 242581854769, "percpu_usage": [242581854769], "사용법_in_커널모드": 33910000000, "사용법_in_사용자 모드": 123040000000 }, "system_cpu_usage": 3367860000000, "스로틀링_데이터": { "기간": 0, "스로틀링_기간": 0, "스로틀링_시간": 0 } }, "memory_stats": { "사용법": 693821440, "max_usage": 818733056, "stats": { "active_anon": 282038272, "active_file": 28938240, "캐시": 82534400, "계층적_메모리_제한": 9223372036854771712, "계층적_memsw_limit": 9223372036854771712, "inactive_anon": 329543680, "inactive_file": 53284864, "맵핑된 파일": 26558464, "pgfault": 809513, "pgmajfault": 2559, "pgpgin": 1015608, "pgpgout": 940757, "rss": 611270656, "rss_huge": 136314880, "swap": 249049088, "total_active_anon": 282038272, "총_활성_파일": 28938240, "total_cache": 82534400, "총_비활성_아논": 329543680, "총_비활성_파일": 53284864, "총_맵핑된_파일": 26558464, "total_pgfault": 809513, "total_pgmajfault": 2559, "total_pgpgin": 1015608, "total_pgpgout": 940757, "total_rss": 611270656, "total_rss_huge": 136314880, "총_스왑": 249049088, "총_피난처": 0, "총_쓰기백": 0, "피할 수 없는": 0, "writeback": 0 }, "failcnt": 0, "limit": 1044574208 }, "blkio_stats": { "io_service_bytes_re귀적": [{ "전공": 8, "미성년자": 0, "op": "읽기", "value": 301649920 }, { "전공": 8, "미성년자": 0, "op": "쓰기", "value": 248315904 }, { "전공": 8, "미성년자": 0, "op": "동기화", "value": 201003008 }, { "전공": 8, "미성년자": 0, "op": "비동기", "value": 348962816 }, { "전공": 8, "미성년자": 0, "op": "Total", "value": 549965824 }], "io_serviced_re귀적": [{ "전공": 8, "미성년자": 0, "op": "읽기", "value": 41771 }, { "전공": 8, "미성년자": 0, "op": "쓰기", "value": 72796 }, { "전공": 8, "미성년자": 0, "op": "동기화", "value": 61246 }, { "전공": 8, "미성년자": 0, "op": "비동기", "value": 53321 }, { "전공": 8, "미성년자": 0, "op": "Total", "value": 114567 }], "io_queue_re귀적": [], "io_service_time_re귀적": [], "io_wait_time_re귀적": [], "io_merged_re귀적": [], "io_time_recursive": [], "섹터_재귀적": [] }, "pids_stats": {}, "네트워크": { "eth0": { "rx_bytes": 40192, "rx_packets": 285, "rx_errors": 0, "rx_dropped": 0, "tx_bytes": 222138, "tx_packets": 150, "tx_errors": 0, "tx_dropped": 0 } } } |
메모리, 디스크, 네트워크에 대한 자세한 정보가 더 많이 있습니다. 새로운 메트릭 세트가 매초마다 푸시됩니다.
cAdvisor
cAdvisor 또는 컨테이너 어드바이저는 호스트 및 컨테이너 메트릭을 제공합니다. 실행 중인 컨테이너에 대한 정보를 수집, 집계, 처리 및 내보내는 실행 중인 데몬입니다. cAdvisor를 시작하겠습니다.
컨테이너:
1 |
도커 실행 -d --이름=자문가 -p 8080:8080 --볼륨=/var/실행:/var/실행:rw --볼륨=/sys:/sys:ro --볼륨=/var/lib/도커/:/var/lib/도커:ro 구글/자문가:최신 |
cAdvisor 대시보드에는 지난 60초 동안의 데이터만 표시됩니다. 그러나 Prometheus 및 InfluxDB와 같은 여러 백엔드,
를 지원하여 장기간 저장, 검색 및 분석할 수 있습니다.
사용 카우치베이스 쿼리 도구 를 클릭하여 Couchbase 서버에 연결합니다:
1 2 3 |
~ > 도커 실행 -it --링크 카우치베이스:db arungupta/카우치베이스 cbq --엔진 http://db:8093 카우치베이스 쿼리 shell 연결된 에 http://db:8093/ . 종료하려면 Ctrl-D를 입력합니다. cbq> |
호출 N1QL 쿼리:
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 |
cbq> 선택 * 에서 `여행-샘플` limit 1; { "요청ID": "7af2d1b1-c37e-4c75-a913-cfaa99dcabdd", "서명": { "*": "*" }, "결과": [ { "travel-sample": { "콜사인": "MILE-AIR", "country": "미국", "iata": "Q5", "icao": "MLA", "id": 10, "name": "40마일 에어", "type": "항공사" } } ], "status": "성공", "metrics": { "elapsedTime": "10.292951ms", "실행 시간": "10.232921ms", "resultCount": 1, "결과 크기": 300 } } |
cAdvisor는 1분 분량의 데이터만 저장하며, 다음은 대시보드의 캡처입니다:
메모리 사용량도 마찬가지입니다:
cAdvisor에서 생성된 데이터를 사용하여 멋진 대시보드에 표시할 수 있는 다양한 도구가 있습니다. 자세한 내용은 다음에서 확인할 수 있습니다. github.com/google/cadvisor/tree/master/docs.
도커 범용 컨트롤 플레인
Docker 유니버설 컨트롤 플레인(DUCP)을 사용하면 방화벽 내에서 도커화된 분산 애플리케이션을 관리하고 배포할 수 있습니다. LDAP/AD와 같은 주요 시스템과 통합하여 사용자를 관리하고 IT 운영 팀에 다음과 같은 인터페이스를 제공합니다.
배포 및 관리. RBAC, Docker 신뢰할 수 있는 레지스트리와의 SSO 통합, 간단하고 사용하기 쉬운 웹 UI가 주요 기능 중 일부입니다. 읽기 제품 개요 완료하려면
기능 세트입니다.
도커 머신을 사용한 도커 유니버설 제어 계획 를 사용하는 것이 로컬 컴퓨터에서 이를 체험하는 가장 쉬운 방법입니다. 지침은 매우 상세하며 바로 사용할 수 있습니다. 다음은 다음과 같습니다.
Couchbase 이미지를 배포한 후 일부 이미지를 제거합니다.
DUCP 설치는 DUCP 컨트롤러와 하나 이상의 호스트로 구성됩니다. 이러한 호스트는 도커 스웜 클러스터를 생성합니다. 그리고 이 클러스터에서 컨테이너가 시작됩니다:
A 클라이언트 번들 로 도커 스웜 클러스터에 대한 정보를 표시합니다:
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
컨테이너: 10 실행 중: 10 일시 중지됨: 0 중지됨: 0 이미지: 15 서버 버전: swarm/1.1.3 역할: 기본 전략: 확산 필터: 건강, 포트, 종속성, 선호도, 제약 조건 노드: 2 node1: 192.168.99.101:12376 └ 상태: 건강 └ 컨테이너: 7 └ 예약됨 CPU: 0 / 1 └ 예약됨 메모리: 0 B / 2.004 GiB └ 레이블: 실행 드라이버=네이티브-0.2, 커널 버전=4.1.19-boot2docker, 운영 시스템=Boot2Docker 1.10.3 (TCL 6.4.1); 마스터 : 625117e - 목요일 3월 10 22:09:02 UTC 2016, 공급자=가상박스, 저장된 드라이버=aufs └ 오류: (없음) └ 업데이트된 날짜: 2016-04-09T00:12:53Z node2: 192.168.99.102:12376 └ 상태: 건강 └ 컨테이너: 3 └ 예약됨 CPU: 0 / 1 └ 예약됨 메모리: 0 B / 2.004 GiB └ 레이블: 실행 드라이버=네이티브-0.2, 커널 버전=4.1.19-boot2docker, 운영 시스템=Boot2Docker 1.10.3 (TCL 6.4.1); 마스터 : 625117e - 목요일 3월 10 22:09:02 UTC 2016, 공급자=가상박스, 저장된 드라이버=aufs └ 오류: (없음) └ 업데이트된 날짜: 2016-04-09T00:12:48Z 클러스터 관리자: 1 192.168.99.101: 건강 └ Orca 컨트롤러: https://192.168.99.101:443 └ 스웜 관리자: tcp://192.168.99.101:3376 └ KV: etcd://192.168.99.101:12379 플러그인: 볼륨: 네트워크: 커널 버전: 4.1.19-boot2docker 운영 시스템: 리눅스 아키텍처: amd64 CPU: 2 합계 메모리: 4.008 GiB 이름: ucp-컨트롤러-node1 ID: 6LTO:GVZJ:2M6Z:DONM:ZAKR:2JIL:ZWJG:KY7R:G3EL:AS2Y:X22F:RXM3 레이블: com.도커.ucp.라이선스 키=xxxxxxxxxxxxxxxxxxxx com.도커.ucp.라이선스_최대_엔진=1 com.도커.ucp.라이선스_만료=xxxxxxxxxxxxxxxxxxxx |
모니터링 데이터를 제공하는 많은 도구가 있습니다:
도커 통계 그리고 Docker 원격 API 는 확실히 가장 쉬운 첫 번째 스냅샷을 제공합니다.
모니터링 데이터.
그리고 거기서부터 흥미로워집니다!