Grafana/Prometheus Architecture

- 아래 그림에서 prometheus에 해당하는 부분에 해당함
- Grafana는 시각화 도구로서 대시보드를 만드는 데 매우 유용하다. 사용자는 간단한 드래그 앤 드롭 인터페이스를 통해 차트, 그래프, 테이블 등 다양한 형태의 데이터를 대시보드에 추가할 수 있고, 모바일 장치에서도 편리하게 볼 수 있도록 반응형으로 디자인되어 있다.

테스트 수행한 환경

- 인터넷가능한 환경, Rocky Linux 8.6, Docker가 구성된 환경

1. Grafana docker-compose 구동을 위한 스크립트 준비

전체파일 구성

tree
├── create.sh
├── delete.sh
├── docker-compose.yml
├── log.sh
├── grafana
│   └── provisioning
│       ├── dashboards
│       │   ├── apache_rev7.json
│       │   ├── cadvisor-exporter_rev1.json
│       │   ├── dashboard.yml
│       │   ├── docker_containers.json
│       │   ├── docker_host.json
│       │   ├── monitor_services.json
│       │   ├── nginx_container.json
│       │   ├── node-exporter-full_rev31.json
│       │   └── windows-exporter-dashboard_rev2.json
│       └── datasources
│           └── datasource.yml
├── start.sh
└── stop.sh

1) docker-compose.yml 샘플

주요설정 설명
- GF_SECURITY_ADMIN_USER, GF_SECURITY_ADMIN_PASSWORD : admin 계정 정보 설정
- grafana 최초 구동시 datasources, dashboards 등을 설정하고 싶은경우 해당파일 작성후 /etc/grafana/provisioning 로 연결한다.

vi  docker-compose.yml

version: '3.7'

# monitor-net이름으로 이미 구성한 경우에는 networks부분은 주석처리
networks:
  monitor-net:
    driver: bridge

volumes:
    grafana_data: {}

services:

  grafana:
    #image: grafana/grafana:6.7.2
    image: grafana/grafana:latest
    container_name: grafana
    user: root
    volumes:
      - grafana_data:/var/lib/grafana
      - ./grafana/provisioning:/etc/grafana/provisioning
    environment:
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=admin
      - GF_USERS_ALLOW_SIGN_UP=false
#    restart: unless-stopped
    ports:
      - 3000:3000
    networks:
      - monitor-net

2) datasource.yml 샘플

- grafana/provisioning/datasources 폴더에 생성
- 이전에 생성하였던 prometheus와 이후 소개할 loki 를 datasource에 추가하는 설정으로 작성

mkdir prometheus;cd prometheus
vi datasource.yml

apiVersion: 1

datasources:
  - name: Prometheus
    type: prometheus
    access: proxy
    orgId: 1
    url: http://prometheus:9090
    basicAuth: false
    isDefault: true
    editable: true

  - name: Loki
    type: loki
    access: proxy
    url: http://loki:3100
    version: 1
    editable: true
    isDefault: false

3) 대시보드 샘플

- grafana/provisioning/dashboards 폴더에 생성
- https://grafana.com/grafana/dashboards/ URL에서 검색하거나 미리 만들어 놓은 dashboard가 있으면 json파일을 복사해두면 컨테이너 구동시 바로가져올 수 있다

4) 기타 docker 컨테이너 생성,삭제,구동,중지,로그조회 등 스크립트 작성

cat > create.sh <<EOF
#!/usr/bin/bash
docker-compose -f docker-compose.yml up -d
docker-compose -f docker-compose.yml logs -f
EOF

cat > delete.sh <<EOF
#!/usr/bin/bash
docker-compose -f docker-compose.yml down -v
EOF

cat > start.sh <<EOF
#!/usr/bin/bash
docker-compose -f docker-compose.yml start
EOF

cat > stop.sh <<EOF
#!/usr/bin/bash
docker-compose -f docker-compose.yml stop
EOF

cat > log.sh <<EOF
#!/usr/bin/bash
docker-compose -f docker-compose.yml logs -f
EOF

chmod +x *.sh

2. Grafana 정상구동여부 확인

### 구동하기
./create.sh 

### 도커컨테이너 정상구동여부 확인
docker ps
CONTAINER ID   IMAGE                       COMMAND                  CREATED      STATUS          PORTS                                       NAMES
b0856bb90234   grafana/grafana:latest      "/run.sh"                3 days ago   Up 32 minutes   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp   grafana

### 도커컨테이너 로그 조회
./logs.sh 
생략..
logger=grafanaStorageLogger t=2023-04-16T12:01:18.10951092Z level=info msg="storage starting"
logger=ngalert.state.manager t=2023-04-16T12:01:18.110542921Z level=info msg="Warming state cache for startup"
logger=http.server t=2023-04-16T12:01:18.111439193Z level=info msg="HTTP Server Listen" address=[::]:3000 protocol=http subUrl= socket=
logger=ngalert.state.manager t=2023-04-16T12:01:18.123873884Z level=info msg="State cache has been initialized" states=0 duration=13.324712ms

3. Grafana 대시보드 조회

- 접속URL: http://서버IP:3000/
- Granafa 대시보드 사용법 및 설정방법등은 추후 작성 예정

댓글남기기