반응형

1.N8N 소개

아래 포스팅을 참고하자.

https://jssvs.tistory.com/110

 

N8N 오픈소스 SW의 소개와 설치

1.N8N 소개와 개요N8N은 "Node-RED"나 "Zapier"처럼 워크플로우 자동화를 위한 툴이다. 가장 큰 특징은 오픈소스라는 점이다. MIT 라이선스를 기반으로 누구나 자유롭게 사용할 수 있고, 클라우드뿐만 아

jssvs.tistory.com

주요 특징

  • 노드 기반 아키텍처: 직관적인 시각적 인터페이스를 통해 노드를 연결하여 워크플로우 구성
  • Fair-code 라이선스: 대부분의 사용 사례에서 무료로 사용 가능
  • Self-hosted 가능: 클라우드 또는 온프레미스 환경에서 직접 호스팅 가능
  • 700개 이상의 통합: Slack, Google Sheets, Airtable, Notion 등 다양한 서비스와 연동
  • 커스텀 노드 개발: JavaScript/TypeScript로 사용자 정의 노드 개발 가능
  • 워크플로우 자동화: 스케줄링, 웹훅, API 호출 등을 통한 자동화 트리거 지원

 

2.Helm Chart를 이용한 n8n 설치 과정

A) Helm 리포지토리 추가

$ helm repo add n8n https://n8n-community.github.io/n8n-helm
$ helm repo update

 

B) chart value 작성

service:
  type: NodePort
  port: 5678
  name: http
  annotations: {}


main:
  extraEnvVars:
    N8N_SECURE_COOKIE: false

 

 

C) N8N 배포 

#!/bin/bash
helm repo add community-charts https://community-charts.github.io/helm-charts
helm repo update


echo "install n8n by helm.."

VERSION="1.5.11"
helm upgrade --cleanup-on-fail \
  --install my-n8n community-charts/n8n \
  --namespace n8n \
  --create-namespace \
  --version $VERSION \
  --values values.yaml


sleep 1

echo "install done.."

 

D) 외부 접속을 위한 ingress 생성

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: n8n-ingress
  namespace: n8n
  annotations:
    alb.ingress.kubernetes.io/scheme: internet-facing #public 오픈 시
    alb.ingress.kubernetes.io/target-type: instance  
    alb.ingress.kubernetes.io/subnets: [서브넷 리소스]
    alb.ingress.kubernetes.io/security-groups: [보안그룹 리소스]
    alb.ingress.kubernetes.io/load-balancer-name: alb-dev-n8n

spec:
  ingressClassName: alb
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-n8n
                port:
                  number: 5678

 

 

 

 

 
반응형
반응형
 

1.N8N 소개와 개요

N8N은 "Node-RED"나 "Zapier"처럼 워크플로우 자동화를 위한 툴이다.

가장 큰 특징은 오픈소스라는 점이다. MIT 라이선스를 기반으로 누구나 자유롭게 사용할 수 있고, 클라우드뿐만 아니라 자체 서버에 설치해서 운영할 수도 있다. 특히 IT 개발자나 엔지니어가 업무 자동화, 데이터 처리, 시스템 연동 등을 구현할 때 유용하다.

N8N은 다양한 API와 연동이 가능하고, 직관적인 UI 덕분에 비전문가도 기본적인 워크플로우를 쉽게 구성할 수 있다. 예를 들어, 블로그 운영자는 새로운 글이 발행되면 자동으로 트위터에 공유하거나, RSS 피드에서 콘텐츠를 가져와 블로그에 자동 업로드하는 등 블로그 자동화에 활용할 수 있다.

 

요약하면, N8N은 누구나 자유롭게 사용할 수 있는 오픈소스 워크플로우 자동화 툴이며, 기술 스택과 업무 방식에 맞춰 유연하게 확장 가능한 것이 강점이다.

n8n

 

 

2.N8N 설치 방법 소개

N8N은 로컬 환경, Docker, 클라우드 서비스 등 다양한 방식으로 설치할 수 있다. 여기서는 가장 많이 쓰이는 Docker 기반 설치 방법을 중심으로 설명한다.

A. 사전 준비 사항

B. Docker Compose 파일 작성

아래는 기본적인 docker-compose.yml 예시이다:

 

version: '3'
services:
  n8n:
    image: n8nio/n8n
    restart: always
    ports:
      - "5678:5678"
    volumes:
      - ~/.n8n:/home/node/.n8n
    environment:
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin
      - N8N_BASIC_AUTH_PASSWORD=adminpassword

C. 실행 명령어

docker-compose up -d

이제 브라우저에서 http://localhost:5678로 접속하면 로그인 후 N8N 대시보드에 들어갈 수 있다.

Docker 외에도 다음과 같은 방법으로 설치할 수 있다:

  • npm을 이용한 전통적 설치
  • N8N 클라우드(공식 유료 서비스)
  • Heroku, Render 등의 PaaS 이용

오픈소스의 장점을 살려서 원하는 방식으로 자유롭게 설치 환경을 구성할 수 있는 것이 N8N의 매력이다.

docker $ volume create n8n_data
docker $ run -it --rm --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n

 

 

 

3.결론

N8N은 강력한 오픈소스 워크플로우 자동화 툴이다. 개발자나 엔지니어가 시스템 통합과 업무 자동화를 손쉽게 구현할 수 있도록 도와준다. 특히 블로그 자동화에 활용하면 반복적인 작업을 줄이고 효율적인 운영이 가능하다.

설치와 사용이 비교적 간단하고, 다양한 API와 연동할 수 있기 때문에 어떤 기술 환경에서도 잘 맞는다. N8N을 활용해서 자신만의 스마트한 작업 흐름을 구성해보자.

반응형
반응형

 

빅데이터 처리 플랫폼을 EMR on EKS 로 도입하면서, 쿠버네티스 운영도 함께 하고 있다.

 

요즘엔 Spark 개발보다는 쿠버네티스 엔지니어링을 더 많이 하는 것 같아서, 정체성의 혼란이 올 때도 있지만..

 

나의 본질은 데이터 엔지니어링에 있다고 믿는다.

 

지난번에 한 번 정리한 글이 있는데, 새로운 명령어와 함께 다시 올려본다.

 

argoCD 사용자는 kubectl 을 쓸 일이 거의 없겠지만, 난 두개를 다 쓰고 있는 입장에서 kubectl 로 리소스를 직접 다루는게 더 재미있는

 

편이다.  아무튼.. 누군가에게 도움이 되길 바라며

 

 

1.  리소스 상태 및 로깅 관련

  • 쿠버네티스 클러스터에서 발생하는 이벤트 로깅, pod , Node 의 리소스 상태 변화 순서로 확인하는게 좋다.
기본 이벤트 확인
$ kubectl get events

특정 네임스페이스 이벤트 확인
$ kubectl get events -n <namespace>

실시간 이벤트 감시
$ kubectl get events --watch

출력 형식 지정
$ kubectl get events -o wide


특정 Pod 상세 정보 확인
$ kubectl describe pod <pod-name>

네임스페이스 지정
$ kubectl describe pod <pod-name> -n <namespace>

모든 Pod 정보 확인
$ kubectl describe pod



Pod Logs (Pod 로그 확인)
$ kubectl logs <pod-name>

특정 컨테이너 로그 확인
$ kubectl logs <pod-name> -c <container-name>

실시간 로그 스트리밍
$ kubectl logs <pod-name> -f


시간별 로그 필터링
$ kubectl logs <pod-name> --since=1h



기본 노드 목록
$ kubectl get nodes

자세한 정보 포함
$ kubectl get nodes -o wide

JSON/YAML 형식으로 출력
$ kubectl get nodes -o json

노드 내 모든 리소스 정보 확인
$ kubectl describe node

 

 

 

2. 헬름 차트 관련 (helm chart) 

  • 헬름을 이용한 서비스 설치도 많이 하게 되는데, 기본 개념을 정리하면 다음과 같다
    • 헬름 (helm) : 쿠버네티스 패키지 매니저
    • 차트 (chart) : 쿠버네티스 리소스를 하나로 묶은 템플릿 (yaml 의 묶음)
  • 헬름을 이용해 차트 기반으로 서비스를 배포할때 다음 용어도 알아두면 좋다
    • 릴리즈 : 특정 차트를 클러스터에 설치한 인스턴스
    • 레포지토리: 차트를 저장하고 배포하는 저장소
  • 순서는 사용자가 정의해둔 차트에 value 값을 custom 하게 설정하고, 레포지토리를 추가한 다음. 릴리즈 버전과 함께 설치하면 된다.

레포지토리 추가
$ helm repo add <repo-name> <repo-url>

레포지토리 목록 확인
$ helm repo list

레포지토리 업데이트
$ helm repo update

차트 검색
$ helm search repo <keyword>

기본 차트 설치
$ helm install <release-name> <chart-name>

특정 네임스페이스에 설치
$ helm install <release-name> <chart-name> -n <namespace>

value 파일로 커스터마이징
$ helm install <release-name> <chart-name> -f values.yaml

직접 값 지정으로 설치
$ helm install <release-name> <chart-name> --set key1=value1,key2=value2


설치된 릴리즈 확인
$ helm list


차트 업그레이드
$ helm upgrade <release-name> <chart-name>

릴리즈 히스토리 확인
$ helm history <release-name>

롤백 
$ helm rollback <release-name> <revision>

릴리즈 삭제
$ helm uninstall <release-name>

 

helm chart 조회는 아래에서 하면 된다.

https://artifacthub.io/

 

Artifact Hub

Find, install and publish Cloud Native packages

artifacthub.io

 

 

 
반응형
반응형


빅데이터 환경에서 다양한 애플리케이션, 플랫폼 도구들을 실험할 때 데이터는 항상 필요하다.

실제 운영 환경의 데이터를 활용하면 좋겠지만, 보통은 개발/스테이징/운영의 환경을 나눠놓기 때문에, 데이터도 개발용 데이터가 필요할 때가 있다.

아래 간단하게 yaml 포맷으로 데이터 스키마를 정의하면, 명령어 실행으로 데이터를 출력해주는 간단한 툴을 만들었다.

누구나 가져다 쓸 수 있고, 수정해서 쓸 수 있다.

사실 이미 공개된 오픈 소스 제네레이터는 많지만, 파티셔닝된 데이터출력이라던지 데이터 포맷을 스스로 정의해줘야 하는 특수한 경우를 고려해서 그냥 만들어봤다.

 

만들어볼 줄 도 알아야 하니까.

 

 

1. BigdataSimpleGenerator 소스코드 

https://github.com/jaysooo/bigdata-simple-generator

 

 

2. 빠른 시작

A.데이터 스키마 정의하기

  • 기본적으로 int, string, float( 자리수 포함), 범위, 옵션 리스트 를 정의할 수 있다.
  • S3 , 로컬을 지원한다.
  • 레코드 개수를 정의할 수 있다.
data_spec:
  table_name: stg-event-dummy
  records: 1000
  file_format: csv # csv, parquet, json
  file_prefix: data
  destination: /YourPath/sample_data
  # destination: s3://yourbucket/event-data/
  partition_by:
    name: partition_key
    range:
      min: "2025-01-01"
      max: "2025-01-10"
  table_schema:
    - name: id
      type: int
      prefix: id_
    - name: device_name
      type: string
      prefix: device_
    - name: device_type
      type: string
      range:
        items:
          - "iphone"
          - "galaxy"
          - "xiaomi"
          - "huawei"
    - name: event_time
      type: timestamp
    - name: event_type
      type: string
    - name: event_rate
      type: float
      range:
        min: 0 
        max: 1
      decimal_point: 2

B.실행하기

$ python data-generator.py --config config.yaml --producer pyarrow

 

3. 출력 데이터

예제 데이터

 

4. 참고

  • pyarrow dataframe 으로 데이터를 생산하기 때문에, 데이터량에 따라 머신의 메모리 가용 공간을 확인한다.
  • 인터페이스만 구현한다면 데이터 출력 모듈을 직접 구현해서 출력할 수 있다. (pyspark, pandas 등 )

 

 

 
반응형
반응형

오랜만에 포스팅을 하는 것 같다.

 

오늘은 GPT 를 이용해 간단한 동영상 쇼츠 제작 방법을 소개해보려고 한다.

 

여러 방법들이 있을 거고 정답은 없는 것 같다. 나는 X에서 최근 공개한 Grok 과 openAI 사의 ChatGPT 를 함께 이용해서 만들었다.

 

절차부터 얘기하면 다음과 같다.

 

1) grok 을 이용해 대본만들기

 

2) chatGPT 의 영상 제작 모델에 대본을 프롬프트로 입력해 영상 제작을 의뢰한다.

 

 

Grok (https://x.ai/) 으로 브라우저를 옮겼다. 그리고 나는 대본을 만들어달라는 프롬프트를 아래 처럼 주문했다.

 

Grok 화면

답변을 복사하고 chatgpt (https://chatgpt.com/) 로 브라우저를 넘겨보자.

GPT 탐색 을 눌러보면 video maker 와 관련된 여러 모델들을 검색할 수 있는데, 나는 1위에 랭크되있는 모델을 택했다.

 

 

 

나는 데이터엔지니어기 때문에, apache airflow 를 30초 로 소개하는 영상을 주문해보았다.

 

대본을 프롬프트에 입력하고 영상 제작을 주문하면 연계된 서비스 페이지로 링크를 하나 보내줄 것이다.

 

링크를 타고 들어가면, 영상을 제작하는 과정을 조금 기다려야 한다.

 

물론 !!! 자동으로 생성된 영상은 한 20% 정도 부족해보인다.

 

그래서 동영상을 편집하는 모드에서 자막과 영상을 업로드할 수도 있다. (여기서 노가다가 시작되지 않을까.. ) 

 

퀄리티가 아주 만족할 만한 수준은 아니지만, 그래도 짧은 시간에 제작한 것 치곤 괜찮다.

 

AI 가 제작해준 영상을 아래 업로드하면서 마무리한다.

(아.. 용량 제한으로 영상 업로드가 안되네.. ) 

 

 

참고) 프롬프트

**** GROK Prompt ****

이제부터 너 유튜브 대본을 작성하는 작가이자 데이터 엔지니어인 제인이야 

난 한국에서 유튜브 채널을 만들어 영상을 올릴 계획이야. 

이번에는 apache airflow 를 소개하는 영상을 만들거야

다음 요구사항을 만족하도록 대본과 정보를 만들어줘

- 영상 시간은 30초야
- airflow 의 소개와, 기능 그리고 장점으로 구성해줘
- airflow 를 사용자에게 홍보하는 느낌으로 만들어줘



**** ChatGPT Prompt ****

이제부터 너 유튜브 대본을 작성하는 작가이자 데이터 엔지니어인 제인이야

난 한국에서 유튜브 채널을 만들어 영상을 올릴 계획이야.

이번에는 apache airflow 를 소개하는 영상을 만들거야

다음 대본을 줄테니 영상을 제작해줘

대본 (30초)

"안녕하세요! 오늘은 데이터 엔지니어링의 필수 도구, Apache Airflow를 소개해드릴게요. Airflow는 복잡한 데이터 파이프라인을 쉽게 관리하고 스케줄링할 수 있는 오픈소스 플랫폼이에요. DAG를 통해 작업의 의존성과 순서를 명확히 정의하고, AWS, Google Cloud 같은 서비스와도 간편하게 연동할 수 있죠. 확장성이 뛰어나고, 활발한 커뮤니티 지원으로 계속 발전 중이에요. 게다가 직관적인 UI로 워크플로우를 한눈에 모니터링할 수 있어요. 데이터 작업을 효율적으로 관리하고 싶다면, Airflow를 꼭 사용해보세요!"

정보 요약

소개: Apache Airflow는 데이터 파이프라인을 관리하고 스케줄링하는 오픈소스 플랫폼입니다.

기능: DAG(Directed Acyclic Graph)로 작업 흐름을 정의하고, 다양한 서비스(AWS, Google Cloud 등)와 유연하게 통합됩니다.

장점: 확장성이 뛰어나고, 커뮤니티 지원이 활발하며, UI로 워크플로우를 시각적으로 관리할 수 있어 사용자 친화적입니다.
 
반응형
반응형

최근 커뮤니티에서 Ollama 라는 로컬에 LLM 을 쉽게 번들링 해주는 도구를 알게 되서, 호기심에 설치해봤다. 

 

쉽게 얘기해서 ChatGPT 와 같은 언어 모델을 내 컴퓨터에 로컬로 설치해서 사용하는 것이다.

 

장점이라고 한다면 오프라인으로 오픈소스 LLM(대규모 언어 모델)을 무료로 사용할 수 있고, 데이터 유출이 되지 않기 때문에 보안성이 높을 것이다. 

단점은 뭐 상용 모델보다는 답변의 퀄리티, 속도, 최신화된 정보의 답변을 받을 수 없다는 것들이 있을 수 있겠다.

 

ollama 를 설치하는 것만으로도 LLM 을 사용할 수 있다. 하지만 나는 웹 기반의 UI 가 익숙하므로 오픈 소스 open-webui 를 이용해 설치해봤다.

 

ollama 는 여기 https://github.com/ollama/ollama open-webui 는 여기에 자세한 가이드가 나와있다.

https://github.com/open-webui/open-webui

 

GitHub - open-webui/open-webui: User-friendly WebUI for LLMs (Formerly Ollama WebUI)

User-friendly WebUI for LLMs (Formerly Ollama WebUI) - open-webui/open-webui

github.com

 

관심있어 하는 분들이 있을 것 같아, 퀵스타트 구축을 포스팅해보겠다.

 

 

1. 사전 준비

  • Docker 가 설치된 환경
  • Mac , Linux 기반 환경

2. Set Up 


# set dir for volume mount
mkdir data
mkdir open-webui

# image pull and docker run
docker run -d -p 3000:8080 -v data:/root/.ollama -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:ollama

실행 과정
컨테이너가 실행을 확인

 

http://localhost:3000 접속

 

3. Model Import

모델 추가 및 다운로딩 과정

 

여러 특징에 맞게 학습된 모델들이 있을 것이다. 목적에 맞게 모델을 선택하면 되고, 중요한 것은 컴퓨터 사양이 받쳐줘야 한다. ( 내 경우에는 일부 모델이 실행되지 않았다.. 노트북 사고 싶다.. ) 

 

4. Test

간단하게 버블 정렬을 구현한 파이썬 코드를 보여달라고 해봤다.

 

배치 크기나 토큰 크기도 조절이 가능하다.

 

 

5.마무리

오픈 소스다 보니 사용자들이 학습한 모델을 올릴 수 있고, 공유할 수 가 있다. 컴퓨터 사양이 좋거나 GPU 가 있으면, 이미지 생성도 가능하다. 

 

https://openwebui.com/#open-webui-community

 

 

오늘은 여기까지.. 

 

끝.

 

 

 

 

 
 
반응형
반응형

1. 프로메테우스(prometheus) 란?

SoundCloud 사에서 만든 오픈 소스 기반 모니터링 솔루션

  • 많은 도큐먼트와 커뮤니티 보유

go 언어로 만들어짐

하드웨어 레벨 / 애플리케이션 모니터링이 가능

  • 마이크로 서비스
  • multiple language 지원(java, go, 등)
  • window/linux

pull 방식 아키텍쳐

  • push 방식은 패킷 손실. 수집처 서버의 CPU 사용율. 그리고 단일장애의 위험성이 있음
  • pull 방식은 tcp/udp 오버헤드가 적고, 집계가 push 보다 쉬워짐.
  • 부하가 높은 상황에서는 fail point 를 비교적 예방 할 수 있음

하지만 단점도? 

  • 수집 메트릭과 룰이 많아질수록 configuration 이 복잡해짐
  • 단일 노드 동작으로 스케일 아웃이 어려움

2. 왜 프로메테우스?

다양한 써드파티 Exporter 가 있다.

시계열 데이터 모델

PromQL 이라는 쉽고 간결한 자체 쿼리 언어 지원

단일 노드 사용하여 수집

많은 회사에서 사용하고 있고, kubernetes 에서도 prometheus 사용을 장려하고 있다.

3.프로메테우스 구조

시스템 구성도

prometheus server

  • main component
    • http 서버 : PromQL 쿼리를 받음
    • 시계열 데이터 베이스 storage : metric 저장
    • Worker : metric 반환

Exporter

  • fetch metric, convert to correct format, expose metric
  • 다양한 종류의 익스포터 지원
    • 해당 노드에서 발생하는 HW 메트릭 정보 수집

AlertManager

  • 알림이 발생하는 Rule 을 정의해서 부합하는 경우 알림 전송

Jobs

  • Single Application
  • 모니터 대상

** 역시 Pull Mechanism 이 가장 큰 특징 !!!

  • Data Retrieval Worker 가 pushgateway, prometheus targets으로 pull을 한다. 푸시가 아니라 pull 방식으로 수집한다.

동작 방식을 간단히 요약하면..

  • Jobs / Exporters 는 실제 메트릭을 수집하는 프로세스, 에이전트
  • Prometheus Server 가 Pull 방식으로 데이터를 가져갈 수 있게 HTTP 엔드포인트를 제공
  • GET 방식 요청을 날려 메트릭 정보를 수집하고, TSDB 에 저장.

4. 프로메테우스 설치 (docker-compose)

how? (구성 방법)

  • 아래 방법은 prod 수준이 아닌 빠른 구성이며, 모든 설정은 기본 값으로 되있다.
  • docker, docker-compose 가 미리 설치되어 있어야 한다.

a) 프로메테우스 구성

  • 가장 기본적인 구성은 프로메테우스 서버, 그라파나 조합이다.
  • 아래는 수집툴 node-exporter도 같이 띄워주는 설정이다
version: '3.7'

volumes:
    prometheus_data: {}
    grafana_data: {}

networks:
  front-tier:
  back-tier:
    driver: bridge

services:

  prometheus:
    image: prom/prometheus:latest
    volumes:
      - ./prometheus/:/etc/prometheus/
      - ./prometheus_data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.console.libraries=/usr/share/prometheus/console_libraries'
      - '--web.console.templates=/usr/share/prometheus/consoles'
    ports:
      - 9090:9090
    links:
      - cadvisor:cadvisor
      - alertmanager:alertmanager
    depends_on:
      - cadvisor

    networks:
      - back-tier
      - front-tier
    restart: always

  node-exporter:
    image: prom/node-exporter
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro
    command: 
      - '--path.procfs=/host/proc' 
      - '--path.sysfs=/host/sys'
      - --collector.filesystem.ignored-mount-points
      - "^/(sys|proc|dev|host|etc|rootfs/var/lib/docker/containers|rootfs/var/lib/docker/overlay2|rootfs/run/docker/netns|rootfs/var/lib/docker/aufs)($$|/)"
    ports:
      - 9100:9100
    networks:
      - back-tier
    restart: always
    deploy:
      mode: global

  alertmanager:
    image: prom/alertmanager
    ports:
      - 9093:9093
    volumes:
      - ./alertmanager/:/etc/alertmanager/
    networks:
      - back-tier
    restart: always
    command:
      - '--config.file=/etc/alertmanager/config.yml'
      - '--storage.path=/alertmanager'
      
    grafana:
    image: grafana/grafana
    user: "472"
    depends_on:
      - prometheus
    ports:
      - 3000:3000
    volumes:
      - ./grafana_data:/var/lib/grafana
      - ./grafana/provisioning/:/etc/grafana/provisioning/
    env_file:
      - ./grafana/config.monitoring
    networks:
      - back-tier
      - front-tier
    restart: always

b) process-exporter

  • 일반적으로 node-exporter 로 h/w 정보를 수집하긴하지만, 프로세스 수준으로 데이터를 수집이 필요할때 사용하면 좋다.
  • https://github.com/ncabatoff/process-exporter/releases/tag/v0.7.10
  • release 버전에 맞게 받을 수 있음
  • cofnig 설정방법
    • cat /proc/[processid]/cmline 의 정규식에 걸리는 애들
    process_names:
      - name: "{{.Comm}}"
        cmdline:
        - '.+'
  • 위 process-exporter 구성은 선택사항이다. 필요에 따라 구성해도 좋다. 

c) prometheus.yml 설정

  • 수집 서버 설정과, 방식, 룰 들을 셋팅하는 설정 파일이다
# 기본적인 전역 설정 
global:
  scrape_interval:     15s # 15초마다 매트릭을 수집한다. 기본은 1분이다.
  evaluation_interval: 15s # 15초마다 매트릭을 수집한다. 기본은 1분이다.
  # 'scrpae_timeout' 이라는 설정은 기본적으로 10초로 세팅되어 있다.
# Alertmanager 설정
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

# 매트릭을 수집할 엔드포인트를 설정. 여기서는 Prometheus 서버 자신을 가리키는 설정을 했다.
scrape_configs:
  # 이 설정에서 수집한 타임시리즈에 'job=<job_name>'으로 잡의 이름을 설정한다.
  - job_name: 'prometheus'
    # 'metrics_path'라는 설정의 기본 값은 '/metrics'이고
    # 'scheme'라는 설정의 기본 값은 'http'이다.
    static_configs:
    - targets: ['localhost:9090']
    
 - job_name: 'node_exporter'
    static_configs:
      - targets: ['localhost:9100']
  - job_name: 'process_exporter'
    static_configs:
      - targets: ['localhost:9256']
  • prometheus 설정파일과 볼륨 마운팅 된 위치에 위 설정파일을 추가한다
  • 위 주석을 간단하게 달았지만, 수집 서버에 대한 정보가 scrape_configs 에 모두 기술되어야 한다
  • 모든 구성이 끝나면 docker-compsoe 명령을 이용해 컨테이너를 띄운다.

(구성된 이미지나 스크린샷들은.. 나중에 추가..)

 

 

5) 소감..?

  • 이번에 회사에서 프로메테우스 신규 구성을 맡아 진행해봤는데, 역시 공부할게 아직도 많다. 
  • 그라파나에서 완성된 대시보드를 import 하면 수집쪽 셋팅 후 정말 손쉽게 구성할 수 있다.
  • 데이터 엔지니어에게 있어 모니터링은 정말 중요한 작업이라는걸 다시 느꼈다. 

 

반응형
반응형

1.zeppelin 기반 로컬 개발 환경 구성이란?

spark 를 공부할 때, zeppelin 이라는 노트북을 이용하면 편하다.

python 에서 주피터와 비슷한 역할의 툴이다.

spark 개발을 안한지 오래되서, 다시 공부를 하기 위해 구성해보려고 한다.

요즘 데이터 엔지니어들이 보는 코딩 테스트에는 알고리즘 문제 뿐만 아니라, 스파크를 이용한 문제도 출제 된다.

역시 docker-compose 를 이용해서 구성한다.

 

2.왜 Docker-compose ?

오픈 소스 버전을 그대로 로컬에 받아서 설치하려면, 적지 않은 시간이 소요된다.(java 설치 lib 등등의 환경 설정. 네트워크 설정 이나 연동 등 .. )

누군가 고생해서 만들어 놓은 docker image 와 docker-compose 에 설정이 기술된 yaml 파일을 이용하여 손쉽게 올릴 수 있다. (보통 docker compose [오픈 소스 이름] 을 치면 쉽게 찾을 수 있다. )

 

3. zeppelin, spark 설치 

구성해보기보다는 따라하기에 가깝다. 내가 참고한 블로그를 참조 한다. 여기를 참고하는게 더 정확하니까 아래 링크로 이동하자.

https://omrisk.medium.com/apache-spark-3-playground-back-to-school-with-zeppelin-notebooks-pt-3-4ebc18da68f7

 

Apache Spark 3 playground — Back to school with Zeppelin notebooks! Pt.3

In this third and final part of our “Apache Spark 3 playground” guide we will be adding a Zeppelin notebook into the mix.

omrisk.medium.com

a) 설치 스크립트

# git clone 다운로드
$ https://omrisk.medium.com/apache-spark-3-playground-back-to-school-with-zeppelin-notebooks-pt-3-4ebc18da68f7

# 컨테이너 올리기
$ docker-compose -f docker-compose.yml -f docker-compose-zeppelin.yml up -d

 

b) 브라우저 접속

  • http://localhost:9090 접속, (zeppelin) 
  • 마찬가지로 spark mster GUI 에도 접근이 가능하다.
  • 기본적으로 예제 코드와 스파크 앱을 띄우는 노트가 있다. ( spark server 입장에서는 zeppelin 도 하나의 appication 이기 때문에 spark 를 사용하기 위해서는 인터프리터가 구동되어야 한다.) 

** 보통 zeppelin 과 spark 를 연동 할때 spark_home ,master 엔드포인트를 잡아주는데, 아래에서 처럼 노트 안에서 잡아줄수도 있는 것 같다. 

 

 

시간이 생기면 추가로 보충하겠다... 너무 바쁘다 요즘.

반응형
반응형

1.apache superset 이란?

비지니스 인텔리젼스 웹 애플리케이션다.

에어비엔비에서 사용하고 있는 시각화 툴이다.

 

 

2. 왜 superset ?

오픈소스이면서 다양한 데이터소스를 지원한다.

UI 가 직관적이다.

에어비엔비가 쓰니까 공신력? 있어보인다.

 

3. spuerset 설치 (docker-compose)

how ? ( 구성 방법 )

a) 설치 스크립트

  • non-dev 버전으로 띄웠더니 app, worker, db, cache (redis) 프로세스가 분리되어있다.
    # yaml 소스 클론
    $ git clone https://github.com/apache/superset.git
    
    # 릴리즈 버전으로 체크아웃
    $ git checkout 1.2.0
    $ git status
    
    # 컨테이너로 올리는 명령 실행
    $ docker-compose -f docker-compose-non-dev.yml up -d​

b) 브라우저 접속

 

  • 초기 비밀번호는 admin/admin
  • http://localhost:8088 접속 (서버에 설치하신 분들은 localhost에 설치한 서버의 host 로 대체)
  • 기본적으로 예제 데이터가 추가되어있는데, yaml 을 찾아보면 off 할 수 있다.

 

 

c) 데이터소스 추가 ( mysql)

차트 또는 대시보드를 구성하기 전에, dataset 을 생성해야 한다.

CSV 등의 데이터 업로드를 위해서는 database advanced 에서 권한 을 줘야 한다.

대시보드 구성은 다음 편에 ..  :D

반응형
반응형

1.앤서블(Ansible) 이란?

  • python으로 개발됨
  • 환경설정, 배포를 가능하게 하는 툴
  • 깃허브 파이썬 랭킹중 상위.
  • 장점자동 배포 환경이 쉽다
  • 멱등성(여러번 적용해도 결과가 바뀌지 않음)
  • 빠른 ssh 통신. 빠른 provision이 가능

2.왜 앤서블(Ansible) ?

아직 실무에 앤서블을 적용해보기 전이고, 편리함, 이점이 피부로 와닿지는 않지만, 아래의 상황에서 좋을 것 같다

-> 작업자가 서버 셋팅을 반복적으로 해야 하거나,다수의 서버에 클러스터로 동일한 설정을 해줘야 할 경우

 

2.앤서블 설치

pip 을 통해 설치가 가능하다

$pip install ansible

3. 앤서블 사용하기

a) Inventory 설정

  • 타겟이 되는 host(managed node)들에 대한 메타정보를 기술한 파일이다. -> 쉽게 말하면 내가 어떤 서버들에 작업을 할건지, 서버 
  • 호스트마다 변수를 지정할 수 있으며 호스트 변수라고 한다
  • yaml , ini 포맷으로 작성해야 한다
  • ansible을 설치경로에 ansible.cfg 설정파일을 통해 mannual 하게 경로를 줄 수 있다

ansible.cfg

[defaults]
inventory=/home/jssvs/work/ansible_inventory

 

hosts

[airflow_worker]
airflow-worker-01  --> 이 부분은 /etc/hosts 에 등록되어 있으면 호스트명을 쓰면 된다.
airflow-worker-02

[airflow_scheduler]
localhost

 

ansible에 등록된 host 간 네트워크 통신이 되는지 ping 으로 체크 방법

$ ansible all -m ping

 

b)Playbook 작성

  • 등록된 호스트에 뭘 하게 할건지를 기술하는 파일이다. 워크플로우 작업들을 작성하면 된다.
  • 룰커맨드 실행/ 스크립트 실행 / 인스톨 패키지 등등을 정의할 수 있음특수문자( - ) 으로 플레이 단위를 구분한다.탭을 쓰면 안된당
  • 시작은 —-로 한다.
  • command, script, yum, service 등의 모듈을 지원한다.
  • 호스트에서 동작할 task 활동을 정의
  • yml 작성후 웹에서 yaml lint 사이트를 이용하여 들여쓰기를 정리하면 편하다.
  • http://www.yamllint.com
 

YAMLlint - The YAML Validator

YAML Lint Paste in your YAML and click "Go" - we'll tell you if it's valid or not, and give you a nice clean UTF-8 version of it. Optimized for Ruby.

www.yamllint.com

Playbook1.yml

#Simple PlayBook1.yml
---
-
	name : play1
	hosts : localhost
	tasks :
		- name : Execute command 'date'
			command : date
		
		- name : Execute run script
			script: test_script.sh

		- name : test2
      shell: "echo 'helloworld' >> /home/deploy/ansible_print.log


-
	name : play2
	hosts : airflow_worker01
	tasks : 
		- name : Install Yum package
			yum : 
				name: httpd
				state : present
		- name : Run httpd server
			service :
				name : httpd
				state : started

c) Playbook 실행

$ansible-playbook <playbook-filename>
반응형

+ Recent posts