기본 콘텐츠로 건너뛰기

모니터링 :: Grafana와 Prometheus 설치하기

Raspberry Pi 3 B+에서 Grafana와 Prometheus 설치하기

Grafana는 오픈소스 기반의 강력한 대시보드 플랫폼이다. 서버나 임베디드 장비의 운영상태 등을 Prometheus, ElasticSearch와 같은 data source를 플러그인 방식으로 연결해서 다양한 그래픽 요소로 나타낸다.

여기서는 대표적인 오픈소스 모니터링 솔루션인 Prometheus를 이용하여 요즘 메이커들 사이에 사물인터넷의 주요 디바이스로 자리매김하고 있는 라즈베리 파이의 운영상태를 모니터링 해보기로 하겠다.

[그림.1] 라즈베리 파이 3 B+
[그림.2] 운영 중인 라즈베리 파이 3 B+

라즈베리 파이는 영국의 라즈베리 파이 재단에서 학교와 개발도상국에서의 기초 컴퓨터 과학 교육 증진을 목표로 제작한 초소형 PC이다. 메인보드에 내장된 GPIO핀을 이용하여 다양한 센서모듈을 조합하여 메이커들에게는 사물인터넷의 핵심 기기로 각광받고 있다.

서버나 사물인터넷 허브와 같이 중단없이 장시간 운영되는 장비의 경우 안정적인 운영을 위해 실시간 서비스 모니터링이 필수적인데, Prometheus를 이용하면 다양한 정보를 수집하여 로그를 저장하고 이를 Grafana와 연동하여 세련된 그래픽 환경으로 운영이 가능하다. 게다가 오픈소스로 제공되기 때문에 설치와 운영 등 기술 비용(!)을 제외하면 소프트웨어 라이선스 비용은 무료이다. (제발, 소프트웨어 라이선스가 무료라고 모든게 공짜라는 생각은 버리자!)

[그림.3] Prometheus Architecture

Prometheus는 그림과 같이 Prometheus 서버가 외부의 export node들로부터 metric을 pulling 방식으로 수집하고, 이를 Grafaana 등을 이용해 시각화한다. 구조는 좀 복잡해 보이지만 이 글에서 구현해 볼 모니터링 툴을 간단히 설명하면,
1. node exporter - 모니터링할 기기의 메트릭(정보)을 제공
2. prometheus - 노드들로부터 수집한 메트릭을 집계하거나 후처리
3. Grafana - prometheus가 집계한 데이터를 시각화
이렇게 3가지 서비스를 설치하면된다. 3가지 서비스는 모두 HTTP 프로토콜을 사용하므로 개별 장비에서 별도로 운영해도 되고 한 장비에서 운영해도 된다. 실제 운영환경에서는 모니터링 할 개별 장비에는 node exproter 서비스를 설치하고, 모니터링 서비스를 제공할 서버에 prometheus와 grafana를 설치해서 운영하게 될 것이다.

설치 준비.
최신 버전의 Raspberian이 설치된 라즈베리 파이(이 글에서 사용한 라즈베리 파이는 NOOBS 3.2.0을 이용하여 Raspberry Pi 3 B+에 설치함)


node exporter 설치하기


배포 : https://github.com/prometheus/node_exporter/

1. 설치하기

현재 사용 중인 라즈베리 파이 CPU 타입에 맞는 배포 파일을 내려받아 압축을 푼다. (설치 작업을 편리하게 하기위해 root 권한으로 실행할 것.)

$ sudo su -
# cat /proc/cpuinfo (ARM CPU 버전 확인)
# cd /opt
# curl -sSLO https://github.com/prometheus/node_exporter/releases/download/v0.16.0-rc.0/node_exporter-0.16.0-rc.0.linux-armv7.tar.gz
# tar zxvf node_exporter-0.16.0-rc.0.linux-armv7.tar.gz
# ln -s node_exporter-0.16.0-rc.0.linux-armv7 node_exporter ### 설치 진행의 편리를 위해 심볼릭 링크 생성



※ 여기서 잠깐!

현재 설치하고 있는 라즈베리 파이 3 B+는 ARMv7 계열의 CPU를 사용하므로 armv7 이름이 들어간 배포 프로그램을 내려받는다.

그리고 라즈베리 파이에서 일반적으로 많이 사용하는 라즈비안(Raspberian)은 데비안(Debian) 계열의 리눅스이므로 디렉터리 관리는 리눅스의 파일시스템 관례( http://www.pathname.com/fhs/pub/fhs-2.3.html)를 따르는게 좋을 것 같다. 리눅스에서는 통상 사용자가 직접 소스나 실행파일을 내려받아 설치할 경우 /opt나 /usr/local 디렉터리을 이용한다.

관례에 따르면 /opt 디렉터리는 애드온 어플리케이션 소프트웨어 패키지의 인스톨 용도로 사용되며, /usr/local 디렉터리는 시스템 관리자가 필요에 의해 직접 컴파일하거나 설치하는 소프트웨어 인스톨 용도이다.

curl 명령은 원격서버(FTP, HTTP 등)에서 데이터를 전송받을 때 사용한다. 여기서는 -s: 진행 상태 표시 안함, -S: -s와 함께 사용. 실패시 에러 표시, -L: 요청 페이지가 다른 위치로 옮겨졌을 경우(HTTP 응답코드 303) 재요청, -o: remote 데이터를 파일로 저장 옵션을 사용하였다.

2. SYSTEMD 파일 설치

# cd /etc/systemd/system/
# curl -sSLo - https://raw.githubusercontent.com/prometheus/node_exporter/master/examples/systemd/node_exporter.service \
 |sed -e 's|/etc/sysconfig/node_exporter|/etc/default/node_exporter|' |sed -e 's/^User.*//'  > node_exporter.service
# curl -sSLo - https://raw.githubusercontent.com/prometheus/node_exporter/master/examples/systemd/sysconfig.node_exporter \
 |sed -e 's/^OPTIONS/#OPTIONS/;aOPTIONS=""' >/etc/default/node_exporter
# cp /home/pi/node_exporter-0.16.0-rc.0.linux-armv7/node_exporter /usr/sbin/node_exporter
# systemctl daemon-reload
# systemctl enable node_exporter.service
# systemctl start node_exporter.service

시스템 부팅시 자동 실행을 위해 데몬 서비스로 설치하는 과정이다.

3. Query 테스트

$ curl 127.0.0.1:9100/metrics

제대로 설치가 되었는지 확인하기 위해 웹서비스를 호출한다. 제대로 설치가 되었다면 라즈베리 파이 시스템의 다양한 정보(metric)가 출력될 것이다.


Prometheus 설치하기


공식사이트 : https://prometheus.io/
배포 : https://github.com/prometheus/prometheus

1. 설치하기

현재 사용 중인 라즈베리 파이 CPU 타입에 맞는 배포 파일을 내려받아 압축을 푼다. (설치 작업을 편리하게 하기위해 root 권한으로 실행할 것.)

# cd /opt
# curl -sSLo https://github.com/prometheus/prometheus/releases/download/v2.11.1/prometheus-2.11.1.linux-armv7.tar.gz
# tar zxvf prometheus-2.11.1.linux-armv7.tar.gz
# ln -s prometheus-2.11.1.linux-armv7 prometheus

2. YAML 설정 파일 편집

# vi /opt/prometheus/prometheus.yml

'scrape_configs:'섹션을 찾아서 아래와 같이 작성한다.

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']

  - job_name: 'nodes'
    scrape_interval: 1m
    scrape_timeout: 10s
    static_configs:
    - targets: ['127.0.0.1:9100']

Prometheus가 node_exporter를 통해 1m 단위로 metric값을 수집하도록 설정하였다. Prometheus의 설정은 'global:' 섹션에서 지정한다.

3. 서비스 실행

# cd /opt/prometheus
# nohup ./prometheus &

4. Query 테스트

$ curl http://127.0.0.1:9090/metrics


Grafana 설치하기


공식사이트 :  https://grafana.com/

1. 설치하기

Grafana 역시 Prometheus처럼 배포 소프트웨어를 내려받아 설치할 수 있으나 다행히 Raspbian용 배포판이 있으므로 패키지 설치 프로그램을 이용하여 손쉽게 설치가 가능하다.

공식사이트에서 'Get Grafana' 버튼을 클릭하여 현재 사용 중인 라즈베리 파이에 맞는 배포판을 내려받는다. (ARMv7)

$ sudo apt update
$ sudo apt upgrade -y
$ sudo apt autoremove -y
$ curl -sSLo https://dl.grafana.com/oss/release/grafana_6.2.5_armhf.deb
$ sudo dpkg -i grafana_6.2.5_armhf.deb
$ sudo apt-get upgrade -y
$ sudo systemctl daemon-reload
$ sudo systemctl enable grafana-server
$ sudo systemctl start grafana-server

2. Grafana  실행

라즈베리 파이에서 웹브라우저를 띄우거나, 사용 중인 PC에서 웹브라우저를 띄워서 라즈베리 파이에 설정한 IP 주소를 포함한 URL 주소를 입력한다. 정상적으로 설치가 완료되었다면 아래와 같이 Grafana 로그인 화면이 표시된다.

[그림.4] Grafana 로그인 화면

디폴트 ID와 Password인 'admin'을 입력하여 로그인한다.

「Data Sources」 메뉴를 선택하여 Prometheus를 등록한다.

[그림.5] Data sources 메뉴 선택



「Add data sources」 버튼을 클릭하여 「Prometheus」를 선택한다.
[그림.6] Data sources 선택
다음과 같이 입력란에 값을 입력한다.

Name: Prometheus
URL: http://localhost:9090
Access: Server(default)

「Save & Test」 버튼을 클릭하여 Data source를 등록한다.

[그림.7] Prometheus 등록

「+」 > 「Import」 메뉴를 선택한다.

[그림.8] Import 메뉴 선택

Dashboard ID: 1860을 입력하여 미리 준비된 Dashboard를 등록한다.

[그림.9] ID: 1860 입력한 후 Import
드디어 설치 완료! 라즈베리 파이의 모니터링 화면을 볼 수 있다. Good luck!

[그림.10] 라즈베리 파이 3 B+ 모니터링 화면

댓글

이 블로그의 인기 게시물

아두이노 미세먼지 센서 PM2008

온습도계를 달아봤으니 이참에 미세먼지까지 한꺼번에 표시되도록 기능을 추가해보기로 했다. 마침 아두이노 전용 쉴드까지 제공하는 미세먼지 센서가 눈에 띄길래 일단 구매를 해봤다. 배송받은 센서는 거의 완제품에 가깝게 제작되었다. 다만 아쉬운 점은 아두이노 전용 쉴드의 마감이 좀 지분하다는 느낌을 받았는데, 후처리에 신경을 더 써주는 센스가 부족한 듯. PC2008 미세먼지 센서 아두이노 우노 전용 PM2008 쉴드  부착한 상태는 핀 위치도 잘 맞고 비교적 깔끔한 느낌이다. 쉴드 덕분에 지저분한 배선이 줄어들어 다른 센서들을 붙이기에도 좋을 것 같다. 쉴드와 일체형으로 제작하지 않은 건 라즈베리 파이와 같은 다른 마이크로칩 보드용의 쉴드 제작을 염두에 둔 듯하다. Arduino UNO에 장착한 모습 센서의 작동 테스트를 위해 PM2008 I2C 라이브러리를 추가하여 샘플코드를 실행시켜봤다. 성공적을 테스트를 완료. 이제 공부가 남았을 뿐. Arduino library PM2008 I2C 설치

Eclipse + JBoss + jBPM 개발환경 설정

상용 개발환경인 JBoss Development Studio 9.0.0 GA 개발환경과 동일한 오픈소스 환경 구성을 목표 Windows 10 64bit JDK 1.8 64bit Eclipse Mars.1 64bit Wildfly 10 (JBoss Application Server) - JDK 1.8 지원 jBPM 6 1. JDK를 내려받아 설치한다. JDK 1.8 - Windows x64  http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2. Eclipse을 내려받아 설치한다. 1) Eclipse IDE for Java EE Developers Windows 64bit 배포판을 내려받는다. http://www.eclipse.org/downloads/ 2) 적당한 디렉터리에 압축을 푼다. Ex) d:\eclipse 3) 압축을 풀어낸 디렉터리에서 eclipse.ini를 찾아 jdk bin 디렉터리의 javaw.exe를 설정한다. [eclipse.ini] -vm C:/Program Files/Java/jdk1.8.0_65/bin/javaw.exe 3. Wildfly를 내려받아 설치한다. 1) Wildfly 10.0.0 최신버전을 내려받는다. http://wildfly.org/downloads/ 2) 적당한 디렉터리에 압축을 푼다. Ex) d:\wildfly 4. Eclipse에 JBoss Tools 4.3.0.Final 플러그인을 설치한다. Help > Install New Software... http://download.jboss.org/jbosstools/mars/stable/updates/  주소를 추가한 후 다음 소프트웨어를 설치한다. JBoss Applicastion Server Adaper JBoss Maven Int...

ESP8266 마이크로컨트롤러에서 UART0과 UART2 동시 사용하기

ESP-12F와 2개의 FTDI를 UART0과 UART2에 연결 ESP8266은 3개의 UART 포트를 제공한다. UART0과 UART2는 같은 Serial 클래스에서 관리하므로 동시 사용이 불가능하므로 교대로 사용해야 한다. UART1은 Serial1 클래스에서 관리하므로 동시 사용이 가능하지만 출력 전용이기 때문에 TX만 정의되어 있다. UART0 UART1 UART2 RX GPIO3(RX) - GPIO13 TX GPIO1(TX) GPIO2 GPIO15 아두이노 클래스 Serial Serial1 Serial 비고 UART2와 동일한 클래스를 통해 관리됨 메시지 수신을 위한 RX는 정의되어 있지 않음 UART0와 동일한 클래스를 통해 관리됨 UART0과 UART2는 동시 사용이 불가능하므로 한 번에 하나의 포트만 사용하도록 Serial 클래스의 swap() 멤버함수를 사용한다. NodeMCU와 USB-UART 연결 NodeMCU는 ESP-12E 개발보드가 사용되었으며, micro-USB 포트를 제공한다. micro-USB 포트는 UART0 포트를 사용하며, RX(GPIO3)와 TX(GPIO1) 핀을 공유한다. USB-UART 연결 장치를 UART2 포트에 연결하기 위해 D7(GPIO13)과 D8(GPIO15) 핀에 연결했다. NodeMCU는 UART0 포트를 이용하여 Ardino의 시리얼 모니터로 출력을 보내며, UART2 포트의 출력은 별도의 터미널프로그램으로 접속하여 출력을 모니터했다.