1. 시작하기에 앞서...
리눅스 서버(CentOS)에서 프로메테우스, 그라파나를 설치할 때 Docker Compose로 설치하는것과 로컬에 설치하는 것에 대해서 정확히 자신이 원하는 환경이 무엇인지 어떻게 관리를 할것이고 이러한 상황에 따른 고려를 하고 설치하는 것이 좋을 것이다.
- Docker Compose로 설치할 경우:
구축이 빠르고 여러개의 컨테이너를 패키지화하여 한번에 사용이 가능하기 때문이기도하다
구축이 빠르다는 건 Docker Hub에서 이미 이미지로 올려둔 것으로 설치가 가능하기 때문이다.
컨테이너를 패키지화 한다는 건 프로메테우스와 그라파나 각각 2개의 컨테이너를 Docker로 설치할 경우 두개 별도로 컨테이너를 올리고 내리고 해야 하지만 Docker Compose를 이용하면 한번에 이 두개의 컨테이너를 올리고 내릴수있다. - 로컬에 설치할 경우:
프로메테우스와 그라파나를 직접 다운로드 받고 로컬 서버에 설치하면 물론 설치하는 시간이 그리 오래걸리진않고 포트 관련 이슈도 없었다. 하지만 하나하나 서비스를 올려줘야하는 단점이있었지만 그리 큰 단점으로 다가오진 않았다
2. 프로메테우스와 그라파나 간단 설명
프로메테우스와 그라파나는 서로 각각 다른 역활을 하고 Node-Exproter도 미리 설명한다.
- 프로메테우스: Prometheus는 메트릭 수집, 시각화, 알림, 서비스 디스커버리 기능을 모두 제공하는 오픈 소스 모니터링 시스템이다.
- Node-Exproter: 서버 시스템(cpu, loadAvg, memory) 및 네트워크 정보를 수집하여 메트릭(metric) API로 제공해준다.
- 그라파나: 수집된 데이터를 보기 좋게 시각화하여 보기 좋게 사용할 수 있는 기능을 제공한다.
3. Node_exporter 설치
- Docker Compose로 구축을 하더라도 이 API모듈은 로컬에 설치하기 때문에 어디에 설치할 것인지 지정하고 해당 경로로 이동합니다.
나는 '/appstore' 경로에 설치하였습니다.
$ cd /appstore
- 설치할 Node_exporter를 다운로드 받고 압축을 해제한다.
$ wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
$ tar zxvf node_exporter-1.7.0.linux-amd64.tar.gz
- 압축이 해제된 파일을 명칭을 'node_exporter-1.7.0.linux-amd64' 를 'node_exporter' 로 변경하였다.
$ mv node_exporter-1.7.0.linux-amd64
$ mv node_exporter-1.7.0.linux-amd64 node_exporter
- Node_exporter를 서비스로 지정하여 시작/중지할 수 있도록 해야 한다.
$ vi /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
ExecStart=/appstore/node_exporter/node_exporter
[Install]
WantedBy=default.target
- Node_exporter 서비스를 실행한다.
$ systemctl daemon-reload
$ systemctl start node_exporter
$ systemctl enable node_exporter
- Node_exporter 서비스가 올라왔는지 포트를 확인한다.
$ netstat -lntup | grep node
tcp6 0 0 :::9100 :::* LISTEN 17882/node_exporter
4. Docker Compose 설치
Docker Compose 다운로드 및 설치 (Download Link)
$ curl -L "https://github.com/docker/compose/releases/download/v2.6.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Docker Compose 실행 권한 설정
실행 권한의 경우 소유자를 따로 나눠 사용할 것인지에 대해서는 담당자가 결정하면됩니다.
보통 회사에서는 보안상의 이유로 서비스계정을 별도로 나눠 사용하는 경우가 많습니다.
$ chmod -x /usr/local/bin/docker-compose
Docker Compose 설치 확인 및 버전 확인
$ docker-compose --version
5. Docker Compose로 프로메테우스, 그라파나 컨테이너 생성하기
Docker Hub에서 제공하는 이미지들을 제공해주기 때문에 별도로 프로메테우스나 그라파나를 설치하지 않아도 됩니다.
Docker Compose(그라파나와 프로메테우스)의 홈디렉토리
관리목적으로 디렉토리 하나를 생성하여 그 안에서 작업을 진행하였습니다.
$ cd /appstore/prometheus-grafana
Prometheus.yml을 작성을 통해서 이후 Docker Compose는 이 설정파일을 읽어가면서 이 설정대로 구성될 것입니다.
Docker Compose.yml 설정하기
Docker Compose를 생성할 때, 프로메테우스는 어떻게 설정할 것인지 그라파나는 어떻게 설정하고 포트는 어떻게 할 것인지에 대한 종합적으로 설정하는 파일을 생성한다.
$ cd /appstore/prometheus-grafana
$ vi docker-compose-monitoring.yml (자신이 원하는 이름으로 생성)
version: '2.6'
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
volumes:
- ./prometheus.yml:/prometheus/prometheus.yml:ro
ports:
- 19090:9090
command:
- "--web.enable-lifecycle"
restart: always
networks:
- monitor
user: root
grafana:
image: grafana/grafana:latest
container_name: grafana
volumes:
- ./grafana-volume:/var/lib/grafana
restart: always
networks:
- monitor
ports:
- 13000:3000
user: root
networks:
monitor:
driver: bridge
Prometheus 서비스 설정:
- 이미지(image):
prom/prometheus:latest
Docker Hub에서 이미지를 사용하여 Prometheus의 최신 버전으로 서비스를 실행합니다 - 컨테이너 이름(container_name):
prometheus
- 볼륨 마운트(volumes): 호스트의
./prometheus.yml
파일을 컨테이너 내의/prometheus/prometheus.yml
로 읽기 전용으로 마운트합니다. - 포트 매핑(ports): 호스트의 19090 포트와 컨테이너의 9090 포트를 매핑합니다.
- 커맨드(command):
--web.enable-lifecycle
를 사용하여 웹 라이프사이클을 활성화합니다. - 리스타트 정책(restart): 항상 리스타트하도록 설정되어 있습니다.
- 네트워크(networks):
monitor
라는 사용자 정의 브리지 네트워크에 속하도록 설정되어 있습니다. - 유저(users):
root
로 실행됩니다.
Grafana 서비스 설정:
- 이미지(image):
grafana/grafana-oss
Docker Hub 이미지를 사용하여 Grafana의 최신 버전으로 서비스를 실행합니다. - 컨테이너 이름(container_name):
grafana
- 볼륨 마운트(volumes): 호스트의
./grafana-volume
디렉토리를 컨테이너 내의/var/lib/grafana
로 마운트합니다. - 포트 매핑(ports): 호스트의 13000 포트와 컨테이너의 3000 포트를 매핑합니다.
- 리스타트 정책(restart): 항상 리스타트하도록 설정되어 있습니다.
- 네트워크(networks):
monitor
라는 사용자 정의 브리지 네트워크에 속하도록 설정되어 있습니다. - 유저(users):
root
로 실행됩니다. - 네트워크 설정: monitor`라는 사용자 정의 브리지 네트워크를 정의합니다.
Docker Compose 실행 & 서비스 실행 스크립트 생성
여기까지 완료되었다면 Docker Compose를 실행하고 종료하는 Shell을 만듭니다.
물론 수동으로 해도 상관없지만 일일히 명령어 치기 번거로우니 만들었습니다.
안만들어도 문제없습니다.
$ vi monitoring_start.sh
docker-compose -f docker-compose-monitor.yml up -d
Docker Compose 종료 & 서비스 종료 스크립트 생성
$ vi monitoring_stop.sh
docker-compose -f docker-compose-monitor.yml down
생성된 파일 확인
$ pwd
/appstore/prometheus-grafana
$ ls -l
-rw-r--r-- 1 root root 569 Jan 26 17:13 docker-compose-monitor.yml -- 도커 설정 파일
-rwxr----- 1 root root 51 Jan 26 11:06 monitoring_start.sh -- 도커 실행 스크립트
-rwxr----- 1 root root 50 Jan 26 11:07 monitoring_stop.sh -- 도커 종료 스크립트
서비스 실행
$ ./monitoring_start.sh
Docker Compose의 Container 접근하기
그라파나 컨테이너 접속
Docker Compose로 생성하면 두개의 컨테이너가 생성되었을 것입니다.
그라파나와 프로메테우스로 각각 두개의 컨테이너를 접근하여 확인할 수 있습니다.
$ docker exec -it grafana /bin/sh
프로메테우스 컨테이너 접속
$ docker exec -it prometheus /bin/sh
Reference
'Linux' 카테고리의 다른 글
SSL 인증서 에러(No subject alternative DNS name matching) (0) | 2024.02.22 |
---|---|
[테라폼] 리소스 구성 및 속성 참조 (0) | 2024.02.16 |
NGINX SSL 인증서 등록 (2) | 2024.02.08 |
DNS Qusery 지연 및 도메인 등록기관 이전 (3) | 2023.11.23 |
tomcat 내 SecureRandom Error, [SHA1PRNG] (0) | 2023.11.23 |