모니터링 대상이 되는 자원이 지표 정보를 프로메테우스로 보내는 것이 아니라 프로메테우스가 주기적으로 모니터링 대상에서 지표를 읽는 모델을 사용한다.
모니터링 대상이 프로메테우스의 데이터 포맷을 지원할 경우 바로 읽어올 수 있고 만약에 지원하지 않는다면 별도의 에이전트를 설치해서 지표를 읽어올 수 있는데 이를 exporter라고 한다.
mysql, nginx, redis와 같은 패키지는 미리 개발된 export가 있어서 다양한 서비스의 지표까지 쉽게 수집 가능하다.
프로메테우스 클라이언트 라이브러리를 사용하게 되면 바로 지표를 프로메테우스 서버로 전송할 수 있다.
Pushgateway가 지표를 보관하고 있다가 프로메테우스 서버가 Pulling하면 저장된 지표 정보를 반환한다.
서비스 디스커버리
모니터링 대상 목록을 유지하고 있고 대상에 대한 IP나 기타 접속 정보를 설정 파일에 주면 그 정보를 기반으로 프로메테우스 서버가 모니터링 정보를 수집한다.
모니터링 대상이 등록되어 있는 저장소에서 목록을 받아서 그 대상을 모니터링하는 형태다.
DNS나 Consul, etcd와 같은 다양한 서비스 디스커버리 서비스와 연동을 통해서 자동으로 모니터링 대상의 목록을 수집할 수 있다.
- azure_sd_configs: Azure Service Discovery
- consul_sd_configs: Consul Service Discovery
- dns-sd-configs: DNS Service Discovery
- ec2_sd_configs: EC2 Service Discovery
- openstack_sd_configs: OpenStack Service Discovery
- file_sd_configs: File Service Discovery
- gce_sd_configs: GCE Service Discovery
- kubernetes_sd_configs: Kubernetes Service Discovery
저장 및 시각화
수집된 지표 정보들은 프로메테우스 내부의 시계열 데이터베이스에 저장한다.
프로메테우스 웹 콘솔을 이용하여 시각화되거나 또는 API를 외부에 제공해서 Grafana와 같은 시각화 툴을 통해서 지표를 시각화할 수 있다.
알림 서비스
부가 기능 중의 하나로 alerting 컴포넌트는 지표에 대한 규칙을 설정하고 규칙을 위반할 경우에는 알림을 보낼 수 있는 기능이다.
알림을 보내는 대상은 이메일이나 pagerduty와 같은 notification 서비스 등과 연동이 가능하다.
쿠버네티스 연동 아키텍처
프로메테우스 서버가 모니터링할 리소스를 찾기 위해서 서비스 디스커버리(Service Dicovery) 메커니즘이 필요하다.
쿠버네티스 API를 호출하고 자원들의 목록(Pod, Node, Service, Ingress, Endpoint 등)을 라벨 셀렉터를 이용하여 수집한다.
수집된 모니터링 대상에 대해서 모니터링을 수행한다.
쿠버네티스는 apiServer에서 /metric 이라는 URL을 통해서 기본적인 지표 정보를 반환한다.