기본 콘텐츠로 건너뛰기

모니터링 :: 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+ 모니터링 화면

댓글

이 블로그의 인기 게시물

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 포트의 출력은 별도의 터미널프로그램으로 접속하여 출력을 모니터했다.

자작 :: 아두이노 온습도계

사용부품: Arduino UNO 호환보드, DH-22 온습도 센서, 캐릭터 LCD(16x2글자), Potentionmeter 아두이노 온습도계 AM2302 DH-22 온습도센서는 다음과 같이 3개의 핀을 사용한다. Pin 1. Vcc (전원 3.3~ 5.5V) Pin 2. GND (접지) Pin 3. DOUT (데이터 송신, SDA핀 연결) 온습도 센서의 데이터 수신을 위해 DOUT 핀은 아두이노의 D2 핀에 연결했고, 전원과 DOUT을 10㏀ 풀업 저항을 달아 연결했다. 부품 구성도 LCD는 웹사이트의 카달로그로 보기에는 백색 LED 백라이트가 멋있게 보여 구매를 했는데, 가독성면에서는 옐로우-그린 LED가 더 나을 것 같기도 하다. 아두이도는 기본적으로 LCD의 D4 ~ D7까지의 핀으로 4bit 통신을 한다. D2 핀은 밝기 조절을 위해 가변저항의 가운데 핀과 연결했다. 백라이트 전원은 220Ω 저항을 달았다. 온습도 정보를 수집하여 LCD에 출력하기 위한 아두이노 소스는 다음과 같다. 소스코드:  https://github.com/Jeongsam/arduino-DH22-LCD1602 #include <adafruit_sensor.h=""> #include <liquidcrystal.h=""> #include <dht.h=""> #include <dht_u.h=""> /** * 현재 온습도를 디스플레이하기 * DHT22(AMS2302)로부터 데이터를 받아 LCD16x2 디스플레이에 표시 */ // 온습도 센서 설정 #define DHTPIN 2 // 온습도 데이터 연결 핀 번호 #define DHTTYPE DHT22 // AMS2302 DHT_Unified dht(DHTPIN, DHTTYPE); uint32_t d...

Adafuit HUZZAH ESP8266 보드를 이용한 Arduino IDE 환경설정하기

 Espressif社의 ESP8266 마이크로컨트롤러는 Arduino 보드에 사용된 AVR 마이크로컨트롤러와 같은 종류이다. 가장 큰 장점은 WiFi 통신이 가능하며, 별도의 추가적인 하드웨어 없이 펌웨어만으로 WiFi 클라이언트와 Access Point 기능을 제공한다는 점이다. 최근 중요한 이슈로 자리잡은 사물인터넷(IoT)을 구현하는데 더없이 좋은 마이크로컨트롤러라 할 수 있다. 게다가 저렴한 가격은 덤! (8,000 ~ 10,000원 정도이니 Arduino UNO 호환보드 가격이다.)  HUZZAH 보드의 특징을 간단히 살펴보면 다음과 같다. Adafruit HUZZAH ESP8266 ESP8266 칩(64KB RAM, 96KB data RAM, 4MB QIO FLASH) 리셋 버튼 프로그램을 업로드하는데 필요한 부트로딩 모드로 전환하기 위한 버튼 프로그래밍 가능한 RED UART 통신 기능 Analog 입력 1개 (최대 1V) GPIO 핀 9개 (3.3V), I2C와 SPI 이용 가능  프로그래밍을 위해 FTDI 연결이 필요하다. 프로그래밍은 Arduino IDE를 사용할 수 있으며, Arduino와 같이 C/C++ 코드를 이용하여 개발이 가능하다. 참고로 Epressif社의 ESP8266 개발보드인 NodeMCU는 루아(LUA)라는 프로그래밍언어를 기본 제공한다. Adafruit社의 HUZZAH 보드는 기본적으로 핀헤더 없이 반제품으로 판매되며 필요에 따라 핀헤더를 직접 납땜해서 부착해야한다. 핀헤더 및 USB 포트를 기본제공하는 개발보드 형태의 제품을 별도로 판매하고 있다. Arduino IDE를 이용하여 프로그래밍을 하기 위해서는 우선 라이브러리에 ESP8266 보드를 추가해야 한다. Arduino IDE에 ESP8266 애드온 설치하기 1. 환경설정에서 "추가적인 보드 매니저 URLs"에 다음 URL을 입력한다. http://arduino.esp8266.com/sta...