Beats로 Kubernetes와 Docker 컨테이너 모니터링하기: 로그, 메트릭 및 메타데이터

이 블로그는 컨테이너 환경을 모니터링에 대해 설명하며 Google Kubernetes Engine(GKE), IBM Cloud Kubernetes Service 및 기타 모든 Kubernetes(k8s) 및 Docker 환경을 포함할 수 있습니다. 이 블로그의 목적으로, IBM Cloud Kubernetes Service를 사용하겠습니다.

Kubernetes 및 Docker 컨테이너 모니터링에 대해 왜 쓰고 있는지 궁금해 하실지도 모르겠습니다. 클라우드 공급자가 인프라를 관리하고 있으니, 나는 내 앱에 대해서만 생각하면 된다, 그렇게 생각하시겠죠? 옳은 생각일 수도 있지만, 저는 개인 추천을 받았어도 Yelp 리뷰를 확인하는 사람입니다. 가지고 있는 정보가 더 많을수록 더 좋은 것이죠. 저는 내 앱에서의 모든 로그와 메트릭, 또 환경을 사용할 수 있기 원하고 이 모두를 검색, 시각화하고 경보를 보낼 수 있기 원합니다. 일반적인 컨테이너 모니터링은 훌륭하지만, Kubernetes 이벤트 및 메타데이터를 사용해서 앱 성능 차트에 스케일링 또는 롤링 업데이트에 대한 알림을 표시하는 멋진 방법을 보여 드리고자 합니다.

계속하기 전에 몇 가지 용어를 정리해 드리겠습니다.

  • 로그: 타임 스탬프 및 메시지입니다. 여기에는 "NGINX started at 13:42(NGINX, 13:42에 시작됨)"와 같은 일반적인 로그 항목이 포함되며 "There was an NGINX container with a Back-off restarting failed container at 16:20 (16:20에 백오프 재시작이 실패한 컨테이너를 가진 NGINX 컨테이너가 있습니다)."와 같은 k8s 이벤트가 포함됩니다.
  • 메트릭: 고정된 시간에 수집된 숫자 측정값입니다. 이것은 "전자 상거래 사이트를 통한 판매는 지난 10분 동안 $50,000이었습니다", 또는 "CPU 사용률은 14:00:00에서 14:00:10까지 17%였습니다.”가 될 수 있습니다.

Kubernetes 클러스터에서의 앱 배포

여기서는 Apache HTTP Server, PHP 및 Redis를 기반으로 해서 이 애플리케이션을 사용하겠습니다.

k8s-module-1.png

또한 애플리케이션 및 컨테이너 인프라를 모니터링하기 위해 다음 사항이 제공됩니다. 

  • Elastic Cloud에 호스팅된 Elasticsearch 서비스 배포.
  • Beats는 동일한 Kubernetes 클러스터에서 DaemonSet으로 배포된 로그 및 메트릭을 위한 경량 수집기입니다. 이는 일반적으로 Kubernetes 클러스터에 배포된 fluentd를 대체할 수 있다는 것에 유의하십시오.

로그 및 메트릭

상기 애플리케이션은 캡처해야 하는 유용한 정보를 지속적으로 생성하는 생태계의 한 부분일 뿐입니다. 다음은 로그 및 메트릭이 수집되는 레벨입니다.

  1. 오케스트레이션(Kubernetes)
  2. 호스트
  3. 애플리케이션
  4. 컨테이너(Docker)

k8s-module-2.png

데이터를 수집하기 위해 Beats(Filebeat, Metricbeat 및 Packetbeat) 그리고 System, Kubernetes 및 Docker 모듈을 애플리케이션용 모듈(Apache 및 Redis)과 함께 사용합니다. 각 Beat에DaemonSet를 배치하고 Kubernetes가 이들을 관리하게 했습니다. 목록이 장황하게 들릴지도 모르지만, 걱정하지 마세요. Beats의 자동 검색 기능으로 간단하게 유지될 수 있습니다. 애플리케이션을 모니터링하기 위한 Beat 배포에 대한 자세한 내용은 이 블로그 및 함께 제공되는 비디오에 있습니다. 사실, 처음부터 보고 싶으시면 Elastic의 컨테이너 모니터링 페이지를 확인하십시오.

색인 생성, 저장, 검색, 분석 및 데이터 시각화를 위해 호스팅된 Elasticsearch를 사용했습니다. Elasticsearch 서비스를 Elastic Cloud에 배포하는 방법은 Elasticsearch 및 Kibana를 여러분 자신이 관리하는 시스템에 배포하는 것과 마찬가지로 시작 페이지에서 자세히 설명되어 있습니다. 어느 방식을 선택하든, 잘 작동합니다.

Beats와 모듈에 대해 언급했는데 이에 대해 설명을 좀 더 해 드리겠습니다. Beat는 Elasticsearch 또는 Logstash로 데이터를 보내는 경량 에이전트입니다. Beats는 어떤 경우에는 실제 또는 가상 시스템에서와 같이 데이터가 시작한 곳에 배포되고 어떤 경우에는 소스와 함께 배포됩니다(예 : DaemonSet). 모듈은 공통 로그 형식의 수집, 구문 분석, 색인 및 시각화를 단순화합니다.

이는 조금 지루하게 들릴 수도 있지만 다음과 같은 방식으로 설명해 보겠습니다. Elastic 모듈은 사전 패키지 처리된 환경입니다. 여러분이 Apache HTTPD Server 관리에 대해서는 아주 잘 알고 있지만 NGINX는 알지 못한다고 가정해 보겠습니다. NGINX를 아는 사람에게 가서 "로그에서 무엇을 찾으십니까? 어떤 메트릭을 관측하고 계십니까? 내 기록 파일에서 grep을 줄 수 있겠습니까?"라고 질문할 수 있습니다. 이러한 질문에 대한 답이 Beat 모듈을 정의하는 것입니다. 바로 Kubernetes, Docker, NGINX, Apache, 운영 체제, 데이터베이스 등과 같이 수 많은 것들을 위한 사전 패키지된 대시보드, 저장된 검색, 구문 분석 및 수집입니다. 제 경험상 이것은 매우 강력한 기능의 집합입니다.

k8s 모듈은 pod, 노드, 볼륨, ReplicaSets, 배포 등과 관련된 메트릭을 수집합니다. 각 메트릭에는 풍부한 메타데이터 세트가 첨부되어 있어 데이터를 앱에 연결할 수 있습니다. 예를 들어, pod xyz가 메모리 사용 한도에 근접하는지에 대해 관심이 없다고 생각할 수도 있지만, 해당 메트릭이 앱의 프론트엔드와 연결되어 있는 것으로 나타나면 비즈니스에 대한 가치를 알 수 있습니다. 이것은 또한 아래 비디오의 성능 차트를 보강하기 위해 사용할 이벤트를 수집합니다(위의 로그 정의에 Kubernetes 이벤트를 포함시킨 것을 기억하세요).

Docker 모듈은 컨테이너, 호스트, 메모리, 네트워크, 상태 확인 등에 관련된 메트릭을 수집합니다. Kubernetes 모듈과 마찬가지로 메타데이터는 앱 및 환경의 성능을 이해하는 데 매우 중요합니다.

FilebeatMetricbeat에 대한 다른 많은 모듈들이 있습니다. 또한 Packetbeat에는 Cassandra, Flows, HTTP, MySQL, MongoDB 등과 같은 서비스를 위한 많은 대시 보드가 함께 제공됩니다.

데이터를 실용적인 인텔리전스로 전환하는 것이 얼마나 쉬운지 보십시오. 비디오 기능:

  • 앱 성능 메트릭으로 Kubernetes 이벤트 시각화
  • Metricbeat Kubernetes 모듈 이벤트 메트릭 세트 자세히 알아보기
  • Kubernetes 이벤트 탐색 및 사용자 지정 시각화 구축