Prometheus

Page content

Cloud Native Computing Foundation(http://cncf.io)에 포함된 Container monitoring tool.

집 맥미니에서 돌리고 있는 3개 container들을 관리하는데 사용할 수 있나 싶어(실은 관리할 것도 없지만 그냥 재미로 container monitor 기능을 보고 싶어서) 설치 해 봤다

Install

cncf.io의 많은 툴이 그렇지만 golang으로 작성되어 있어 golang부터 설치했다

brew install go

OSX에서 brew는 사용할 때마다 감탄을 금치 못하게 한다. 물론 우분투에도 apt가 있지만 apt보다 brew가 훨씬 편한 것 같다.

그 다음에는 그냥 docker hub에 있는 prometheus docker 가져다 설치

cychong:~/Dropbox/Documents/my_docker_repo/prometheus cychong$ docker run -p 9090:9090 -v ~/Dropbox/Apps/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
Unable to find image 'prom/prometheus:latest' locally
latest: Pulling from prom/prometheus
4b0bc1c4050b: Pull complete 
a3ed95caeb02: Pull complete 
d6ab6c75ce17: Pull complete 
96eeb64debe6: Pull complete 
1e7ee99aa461: Pull complete 
8d3b35efed41: Pull complete 
be179630d433: Pull complete 
63e70970c133: Pull complete 
83449160ff0d: Pull complete 
Digest: sha256:4f6d3a525f030e598016be765283c6455c3c830997a5c916b27a5d727be718e1
Status: Downloaded newer image for prom/prometheus:latest
time="2017-09-18T12:46:39Z" level=info msg="Starting prometheus (version=1.7.1, branch=master, revision=3afb3fffa3a29c3de865e1172fb740442e9d0133)" source="main.go:88" 
time="2017-09-18T12:46:39Z" level=info msg="Build context (go=go1.8.3, user=root@0aa1b7fc430d, date=20170612-11:44:05)" source="main.go:89" 
time="2017-09-18T12:46:39Z" level=info msg="Host details (Linux 4.9.41-moby #1 SMP Tue Aug 29 22:02:41 UTC 2017 x86_64 2bbd50a83799 (none))" source="main.go:90" 
time="2017-09-18T12:46:39Z" level=info msg="Loading configuration file /etc/prometheus/prometheus.yml" source="main.go:252" 
time="2017-09-18T12:46:39Z" level=info msg="Loading series map and head chunks..." source="storage.go:428" 
time="2017-09-18T12:46:39Z" level=info msg="0 series loaded." source="storage.go:439" 
time="2017-09-18T12:46:39Z" level=info msg="Starting target manager..." source="targetmanager.go:63" 
time="2017-09-18T12:46:39Z" level=info msg="Listening on :9090" source="web.go:259" 

실행시키는데 yaml 형태의 설정 파일이 필요하다고 해서 기본 값을 구해서 prometheus.yml파일에 저장했다. 이전에 ghost나 wordpress container 실행할 때 했던 것처럼 설정 파일은 ~/Dropbox/Apps/prometheus 디렉토리에 두고 docker 실행할 때 volume으로 연결했다

https://prometheus.io/docs/introduction/install/ 에 설명된 대로 docker run!!!

docker run -p 9090:9090 -v ~/Dropbox/Apps/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

특별한 문제 없이 실행된다. 웹 브라우저를 이용해 container들이 실행되고 있는 맥미니2011 서버에 접속하면 아주 심플한(이라고 쓰고 썰렁한 이라고 읽는다) 화면이 뜬다. http://192.168.1.200:9090

그 다음부터는 그냥 맨붕.

How to monitor other containers

Prometheus는 감시 당할 container에 prometheus를 위한 exporter를 실행해야 하는 듯 한다. 해당 Exporter가 export 하는 URL 주소를 prometheus.yml파일의 targets 항목에 넣어야 prometheus server가 해당 URL에 접근해서 정보를 가져오는 형식이다. 그래서 prometheus.yml파일에 적힌 targets 각각에 대해 상태를 확인할 수 있는 dashboard 화면을 제공한다.
prometheus가 설치된 서버에 targets 주소(나의 경우 http://192.168.1.200:9090/targets)에 접근하면

Screen-Shot-2017-09-18-at-11.20.37-PM

오늘은 여기까지. 나중에 container에서 해당 정보를 export하려면 어떻게 해야 하는지 알아봐야겠다.

추가) 역시나 정보를 제공할 노드에는 exporter가 필요하다. 아래에 공식 및 비공식(비공식 exporter가 훨씬 많다)
https://prometheus.io/docs/instrumenting/exporters/

그래서 모니터링할 대상이 늘어날수록 prometheus server가 pull해야 할 대상이 많아지고, 반드시 모니터링 당할 노드에 exporter가 설치되어 한다는 것도 실제 deploy할 때 장애물이 될 수 있을 듯 하다(http://hyunki1019.tistory.com/127) 다만 이 중 두 번째는 문제는 다양한 서비스에 대한 exporter가 개발되고, 해당 서비스 패키지에 빌트인 될 수 있다면 완화될 수 있을 듯. Agent 를 사용하는 monitoring 방식의 숙명이지만, 그 만큼 monitoring tool이 원하는 정보를 획득하기 용이하고, monitoring tool에 최적화된 방법으로 정보를 수집할 수 있는 장점이 있어 반드시 agent-less 방식의 monitoring이 낫다고 보기는 힘들 듯

Prometheus and Grafana

http://hyunki1019.tistory.com/128 참고 Prometheus가 열심히 모든 데이터를 Grafana를 이용해서 좀 더 보기 쉽게 보일 수 있다는. Grafana가 prometheus data를 data source로 지원하고 있어 가능한

Grafana vs. Kibana

Kibana는 주로 ELK라고 불리는 삼총사(ElasticSearch - LogStash - Kibana) 에서 visual을 담당하고 있는 프로젝트. Grafana 와 유사해 보이는데 현재 대세는 Kibana로 보이고(다른 두 친구가 워낙 유명하고, 삼총사의 케미가 좋아)
두 개를 아주 간단하게 비교한 글은 여기에서(http://opennaru.tistory.com/126)

  • graphite, Elasticsearch, InfluxDB, Zabbix 등 여러 데이터 소스를 지원하며, 데이터 소스에서 데이터를 조회하여 그래프로 표현
  • Kibana는 Elasticsearch와 사용되며, Grafana는 Graphite or InfluxDB을 주로 백엔드로 사용
  • 다양한 표현방법은 Kibana가 압도적으로 우세함
  • Grafana는 시계열 그래프만 지원

Reference