🔹 DevOps

OpenSearch 또는 ECK 기반의 로깅 시스템 구축 및 고도화

terranbin 2025. 2. 17. 15:57
728x90
SMALL

1. 개요

  • OpenSearch: Elasticsearch의 오픈소스 포크로, Kibana 대신 OpenSearch Dashboards 사용.
  • ECK (Elastic Cloud on Kubernetes): Kubernetes 환경에서 Elasticsearch를 운영할 수 있도록 Elastic에서 제공하는 오픈소스 솔루션.

2. OpenSearch 기반 로깅 시스템 구축

2.1 필수 패키지 설치

# 패키지 업데이트
sudo yum update -y

# Docker 설치
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io

# Docker 실행 및 부팅 시 자동 실행 설정
sudo systemctl start docker
sudo systemctl enable docker

# Docker Compose 설치
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# 확인
docker --version
docker-compose --version

2.2 OpenSearch 및 Dashboards 실행

docker-compose.yml 생성

version: '3'
services:
  opensearch:
    image: opensearchproject/opensearch:2.11.0
    container_name: opensearch
    environment:
      - discovery.type=single-node
      - "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - opensearch-data:/usr/share/opensearch/data
    ports:
      - "9200:9200"
      - "9600:9600"
    restart: always

  dashboards:
    image: opensearchproject/opensearch-dashboards:2.11.0
    container_name: dashboards
    environment:
      - OPENSEARCH_HOSTS=http://opensearch:9200
    ports:
      - "5601:5601"
    restart: always

volumes:
  opensearch-data:

2.3 OpenSearch 실행

docker-compose up -d

확인


3. ECK 기반 Elasticsearch 구축 (K8S)

3.1 Kubernetes 설치

sudo yum update -y

# kubeadm, kubelet, kubectl 설치
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/repodata/repomd.xml.key
EOF



sudo yum install -y kubelet kubeadm kubectl
sudo systemctl enable --now kubelet

3.2 ECK Operator 설치

kubectl create -f https://download.elastic.co/downloads/eck/2.16.1/crds.yaml

3.3 Elasticsearch 및 Kibana 배포

apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: elasticsearch-cluster
spec:
  version: 8.3.3
  nodeSets:
  - name: default
    count: 3
    config:
      node.roles: ["master", "data", "ingest"]
---
apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:
  name: kibana
spec:
  version: 8.3.3
  count: 1
  elasticsearchRef:
    name: elasticsearch-cluster

적용:

kubectl apply -f elasticsearch-kibana.yaml

확인:

kubectl get pods -n elastic-system

4. Fluentd 기반 로깅 수집

4.1 Fluentd 설치

curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent4.sh | sh
sudo systemctl start td-agent
sudo systemctl enable td-agent

4.2 Fluentd 설정 (OpenSearch 연동)

sudo vi /etc/td-agent/td-agent.conf

아래 내용 추가

<source>
  @type tail
  path /var/log/messages
  pos_file /var/log/td-agent/messages.pos
  tag messages
  format syslog
</source>

<match **>
  @type opensearch
  host localhost
  port 9200
  index_name fluentd-logs
  type_name _doc
  logstash_format true
</match>

Fluentd 재시작:

sudo systemctl restart td-agent

5. 고도화 (보안 및 성능 최적화)

5.1 인증 활성화

opensearch:
  environment:
    - "DISABLE_SECURITY_PLUGIN=false"
    
curl -XPUT -u admin:admin 'https://localhost:9200/_cluster/settings' -d '{
  "transient": {
    "cluster.routing.allocation.disk.threshold_enabled": false
  }
}'

5.2 성능 최적화

opensearch:
  environment:
    - "OPENSEARCH_JAVA_OPTS=-Xms2g -Xmx2g"

6. 결론

  • Docker 기반 OpenSearch 구성
  • ECK 기반 Kubernetes 환경에서 Elasticsearch 구축
  • Fluentd를 이용한 로그 수집 및 전송
  • 보안 설정 및 성능 최적화

필요한 환경을 선택하여 구축하면 됩니다!

LIST