본문 바로가기
서버구축 (WEB,DB)

Grafana와 Superset 연계하여 통합된 차트 대시보드 시각화 방법

by 날으는물고기 2024. 7. 10.

Grafana와 Superset 연계하여 통합된 차트 대시보드 시각화 방법

Exploring Open Source Data Visualization: A Deep Dive into Apache Superset and Grafana

Grafana와 Apache Superset을 연계하여 대시보드를 구성하는 방법은 데이터를 시각화하고 모니터링하는데 매우 유용합니다. 두 도구를 통합하면 각 도구의 장점을 최대한 활용할 수 있습니다.

Grafana와 Superset 설치

도구를 설치해야 합니다. 각 도구의 공식 문서를 참고하여 설치를 완료합니다.

데이터 소스 구성

Grafana와 Superset에 동일한 데이터 소스를 구성합니다. 예를 들어, MySQL, PostgreSQL, ClickHouse 등 여러 데이터베이스를 사용할 수 있습니다.

Grafana

  1. Grafana에 로그인 후, 'Configuration' > 'Data Sources'로 이동합니다.
  2. 'Add data source'를 클릭하고 데이터베이스 종류를 선택합니다.
  3. 데이터베이스 연결 정보를 입력하고 'Save & Test'를 클릭합니다.

Superset

  1. Superset에 로그인 후, 'Data' > 'Databases'로 이동합니다.
  2. 'Add Database'를 클릭하고 데이터베이스 종류를 선택합니다.
  3. 데이터베이스 연결 정보를 입력하고 'Test Connection'을 클릭합니다.
  4. 연결이 성공하면 'Save'를 클릭합니다.

데이터 시각화

각 도구에서 원하는 데이터를 시각화합니다.

Grafana

  1. 'Create' > 'Dashboard'로 이동하여 새로운 대시보드를 만듭니다.
  2. 'Add Panel'을 클릭하여 새로운 패널을 추가합니다.
  3. 패널 설정에서 데이터 소스와 쿼리를 구성하여 차트를 만듭니다.

Superset

  1. 'Charts'로 이동하여 새로운 차트를 만듭니다.
  2. 데이터 소스와 쿼리를 선택하여 차트를 구성합니다.
  3. 차트를 저장하고 대시보드에 추가합니다.

Grafana에서 Superset 차트 임베드

Superset에서 만든 차트를 Grafana 대시보드에 임베드할 수 있습니다. 이를 위해 Superset 차트를 iframe으로 내보내고, Grafana의 텍스트 패널을 사용하여 포함합니다.

Superset

  1. Superset에서 만든 차트를 열고 'Share' > 'Embed Code'를 클릭합니다.
  2. 제공된 iframe 코드를 복사합니다.

Grafana

  1. Grafana 대시보드에서 'Add Panel' > 'Text'를 클릭합니다.
  2. 텍스트 패널 설정에서 'HTML' 모드를 선택합니다.
  3. 복사한 iframe 코드를 텍스트 패널에 붙여넣습니다.

추가 구성 및 최적화

필요에 따라 각 도구의 대시보드를 최적화하고, 경고 알림 설정이나 필터 등을 추가로 구성합니다.

 

이렇게 하면 Grafana와 Superset을 연계하여 통합 대시보드를 구성할 수 있습니다. 각 도구의 강력한 시각화 및 분석 기능을 활용하여 보다 풍부한 데이터를 제공할 수 있습니다.

 

Kubernetes에서 Grafana와 Superset을 운영하기 위해 Docker Compose 구성을 Kubernetes 매니페스트로 변환할 필요가 있습니다. 아래는 각각의 구성요소에 대한 매니페스트 파일입니다.

Grafana Deployment

grafana-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: grafana
spec:
  replicas: 1
  selector:
    matchLabels:
      app: grafana
  template:
    metadata:
      labels:
        app: grafana
    spec:
      containers:
      - name: grafana
        image: grafana/grafana
        ports:
        - containerPort: 3000
        volumeMounts:
        - name: grafana-config
          mountPath: /etc/grafana
        - name: grafana-data
          mountPath: /var/lib/grafana
        - name: grafana-logs
          mountPath: /var/log/grafana
        - name: zoneinfo
          mountPath: /usr/share/zoneinfo
          readOnly: true
        env:
        - name: GF_INSTALL_PLUGINS
          value: "alexanderzobnin-zabbix-app,grafana-clock-panel,grafana-simple-json-datasource"
        - name: GF_RENDERING_SERVER_URL
          value: "http://image-renderer:8081/render"
        - name: GF_RENDERING_CALLBACK_URL
          value: "http://grafana:3000"
        - name: GF_LOG_FILTERS
          value: "rendering:debug"
        - name: TZ
          value: "Asia/Seoul"
      volumes:
      - name: grafana-config
        hostPath:
          path: /path/to/your/grafana/etc
      - name: grafana-data
        hostPath:
          path: /path/to/your/grafana/data
      - name: grafana-logs
        hostPath:
          path: /path/to/your/grafana/logs
      - name: zoneinfo
        hostPath:
          path: /usr/share/zoneinfo

grafana-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: grafana
spec:
  selector:
    app: grafana
  ports:
  - protocol: TCP
    port: 3000
    targetPort: 3000
  type: NodePort

Grafana Image Renderer Deployment

image-renderer-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: image-renderer
spec:
  replicas: 1
  selector:
    matchLabels:
      app: image-renderer
  template:
    metadata:
      labels:
        app: image-renderer
    spec:
      containers:
      - name: image-renderer
        image: grafana/grafana-image-renderer
        ports:
        - containerPort: 8081
        volumeMounts:
        - name: zoneinfo
          mountPath: /usr/share/zoneinfo
          readOnly: true
        env:
        - name: TZ
          value: "Asia/Seoul"
      volumes:
      - name: zoneinfo
        hostPath:
          path: /usr/share/zoneinfo

image-renderer-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: image-renderer
spec:
  selector:
    app: image-renderer
  ports:
  - protocol: TCP
    port: 8081
    targetPort: 8081
  type: ClusterIP

Superset Deployment

superset-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: superset
spec:
  replicas: 1
  selector:
    matchLabels:
      app: superset
  template:
    metadata:
      labels:
        app: superset
    spec:
      containers:
      - name: superset
        image: apache/superset
        ports:
        - containerPort: 8088
        env:
        - name: SUPERSET_ENV
          value: "production"
        - name: SUPERSET_PORT
          value: "8088"
        # 다른 환경 변수들을 추가하세요

superset-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: superset
spec:
  selector:
    app: superset
  ports:
  - protocol: TCP
    port: 8088
    targetPort: 8088
  type: NodePort

네트워크 구성

Kubernetes는 기본적으로 네트워킹을 처리합니다. 추가 네트워크 설정은 필요하지 않으며, 서비스들이 클러스터 내에서 서로를 참조할 수 있도록 서비스 이름을 사용합니다.

ConfigMap 및 Secret

필요한 경우 ConfigMap 및 Secret을 사용하여 환경 변수 및 설정 파일을 관리할 수 있습니다.

매니페스트 적용 방법

위의 매니페스트 파일들을 저장한 후, 다음 명령어로 Kubernetes 클러스터에 적용합니다.

kubectl apply -f grafana-deployment.yaml
kubectl apply -f grafana-service.yaml
kubectl apply -f image-renderer-deployment.yaml
kubectl apply -f image-renderer-service.yaml
kubectl apply -f superset-deployment.yaml
kubectl apply -f superset-service.yaml

이렇게 하면 Kubernetes 클러스터에서 Grafana와 Superset을 성공적으로 운영할 수 있습니다.

728x90

댓글