DOCS/troubleshooting/250914_admin_opensearch_installation.md
happybell80 79e57dbd09 docs: OpenSearch 문제 해결 내용 정리
- 불필요한 추측 제거
- 근본적 해결책만 명시 (볼륨 마운트 추가)
- 현재 상태 업데이트 (헬스체크 실패)

🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-14 23:24:22 +09:00

5.5 KiB

OpenSearch 로그 시스템 구축

작성일: 2025-09-14

작성자: admin

환경: Ubuntu 22.04, 51123 서버, Docker Compose

요구사항 분석

목적

  • 51123/51124 서버 로그 중앙집중식 관리
  • 실시간 로그 검색 및 분석
  • 시각화 대시보드 제공

솔루션 비교

항목 OpenSearch Loki+Grafana Vector+ClickHouse
메모리 2-4GB 512MB-1GB 1-2GB
검색성능 풀텍스트 최강 라벨 기반 SQL 지원
Docker 통합 Fluentd 필요 Promtail 자동 Vector 자동
대시보드 OpenSearch Dashboards Grafana Grafana 연동

선택: OpenSearch (복잡한 텍스트 검색 요구)

시스템 확인

리소스 현황

# 메모리: 29GB 총량, 23GB 가용
free -h
# HDD: 916GB 총량, 869GB 가용
df -h /mnt/hdd
# SSD: 228GB 총량, 158GB 가용 (27% 사용)
df -h /

로그 현황

  • /mnt/hdd/logs/: 51124-server/, act_runner/, backup/, cleanup/, company-x/, nginx/
  • 종료된 컨테이너: skill-slack (10일 전), rb10508_test (6주 전)
  • 자동 정리: 매일 4시, 30일 보관

Docker Compose 설정

# /home/admin/opensearch/docker-compose.yml
version: '3'
services:
  opensearch:
    image: opensearchproject/opensearch:2.11.0
    container_name: opensearch
    environment:
      - cluster.name=robeing-logs
      - node.name=opensearch-node1
      - discovery.type=single-node
      - bootstrap.memory_lock=true
      - "OPENSEARCH_JAVA_OPTS=-Xms2g -Xmx2g"
      - DISABLE_SECURITY_PLUGIN=true  # 개발환경
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - /mnt/hdd/opensearch/data:/usr/share/opensearch/data
    ports:
      - 9200:9200
      - 9600:9600
    networks:
      - opensearch-net

  opensearch-dashboards:
    image: opensearchproject/opensearch-dashboards:2.11.0
    container_name: opensearch-dashboards
    ports:
      - 5601:5601
    environment:
      - OPENSEARCH_HOSTS=http://opensearch:9200
      - DISABLE_SECURITY_DASHBOARDS_PLUGIN=true
    networks:
      - opensearch-net

  fluentd:
    build: ./fluentd
    container_name: fluentd
    volumes:
      - /mnt/hdd/logs:/var/log/system:ro
      - /var/lib/docker/containers:/var/lib/docker/containers:ro
      - ./fluentd/fluent.conf:/fluentd/etc/fluent.conf
    environment:
      - OPENSEARCH_HOST=opensearch
      - OPENSEARCH_PORT=9200
    networks:
      - opensearch-net
    depends_on:
      - opensearch

networks:
  opensearch-net:

Fluentd 설정

# /home/admin/opensearch/fluentd/fluent.conf
<source>
  @type tail
  path /var/log/system/**/*.log
  pos_file /fluentd/log/system.pos
  tag system.logs
  <parse>
    @type multiline
    format_firstline /^\d{4}-\d{2}-\d{2}/
    format1 /^(?<time>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})\s+(?<level>\w+)\s+(?<message>.*)/
  </parse>
</source>

<match **>
  @type opensearch
  host "#{ENV['OPENSEARCH_HOST']}"
  port "#{ENV['OPENSEARCH_PORT']}"
  logstash_format true
  logstash_prefix robeing
</match>

실행 및 검증

# 디렉토리 생성
mkdir -p /mnt/hdd/opensearch/data
chmod 777 /mnt/hdd/opensearch/data

# 실행
cd /home/admin/opensearch
docker compose up -d

# 상태 확인
curl -X GET "localhost:9200/_cluster/health?pretty"

CI/CD 배포 문제 해결 (추가: happybell80)

발견된 문제들

1. Password 파싱 오류

Parsing failed. Reason: Missing argument for option: p

원인: bash -c 내부에서 변수 이스케이프 문제

  • ${OP_PASS}를 호스트가 먼저 해석하려 해서 빈 값이 됨
  • \${OP_PASS}로 이스케이프 필요

2. 인증서 파일 누락으로 컨테이너 재시작

원인: docker-compose.yaml에 볼륨 마운트 없음

# 현재 (문제)
volumes:
  - /var/lib/opensearch:/usr/share/opensearch/data

# 수정 필요
volumes:
  - /var/lib/opensearch:/usr/share/opensearch/data
  - ./certs:/usr/share/opensearch/config/certs:ro
  - ./internal_users.yml:/usr/share/opensearch/config/opensearch-security/internal_users.yml:ro

3. Gitea Secrets 한계

  • Secrets는 CI/CD Actions 실행 시에만 사용 가능
  • 서버에서 직접 docker compose up 시 사용 불가
  • Actions가 생성한 파일을 컨테이너에 마운트 필요

현재 상태 (2025-09-14 최종 확인)

헬스체크 실패 상황

  • 컨테이너 상태: 계속 재시작 중 (Restarting)
  • 포트 9200: 리스닝 중이지만 응답 없음
  • 원인: /usr/share/opensearch/config/certs/root.pem 인증서 파일 없음
  • Actions 배포: 성공으로 표시되지만 실제 컨테이너는 실패

문제 확인

  • Actions는 docker compose up -d 실행 후 종료 (백그라운드 실행)
  • 컨테이너 상태를 확인하지 않아 "성공"으로 표시
  • 실제로는 인증서 누락으로 컨테이너 재시작 반복

근본적 해결책

docker-compose.yaml에 볼륨 마운트 추가 필수

volumes:
  - /var/lib/opensearch:/usr/share/opensearch/data
  - ./certs:/usr/share/opensearch/config/certs:ro
  - ./internal_users.yml:/usr/share/opensearch/config/opensearch-security/internal_users.yml:ro

Git Actions가 생성한 인증서와 비밀번호 파일을 컨테이너가 읽을 수 있도록 마운트해야 함. 현재 데이터 볼륨만 마운트되어 있어서 인증서를 찾지 못해 실패.

다음 단계

  1. 인덱스 라이프사이클 정책 설정 (30일 보관)
  2. 기존 로그 마이그레이션 스크립트 작성
  3. 알림 규칙 설정 (에러 임계값)