기존에는 MongoDB의 변경 로그를 감지하고, 변경된 데이터를 Elasticsearch 에 실시간 색인하는 monstache 를 사용하였다. 그러나 여러 이슈로 인해 MySQL 에 있는 데이터를 Elasticsearch 에 색인하는 방법으로 변경해야 했다.

이때 방법으로 Logstash 을 통해 로그를 수집하고 Elasticsearch 에 색인시켰다. 참고로 데이터는 실시간으로 보낼 필요가 없어 filebeat 를 따로 사용하지 않았고, schedule 옵션을 통해 주기적으로 작업을 실행시켰다.

Elasticsearch, Logstash 도커 설치

version: "3"
services:
	elasticsearch:
	    container_name: elasticsearch
	    restart: always
	    image: docker.elastic.co/elasticsearch/elasticsearch:8.8.1
	    ports:
	      - "9200:9200"
	      - "9300:9300"
	    environment:
	      - ES_JAVA_OPTS=-Xms2048m -Xmx2048m
	      - discovery.type=single-node
	      - xpack.security.enabled=false
	    ulimits:
	      memlock:
	        soft: -1
	        hard: -1
	    volumes:
	      - ./elk/elasticsearch/data:/usr/share/elasticsearch/data
	    networks:
	      - default_bridge

	logstash:
	    container_name: logstash
	    image: docker.elastic.co/logstash/logstash:8.8.1  # elasticsearch 와 같은 버전
	    build:
	      context: ./elk   # mysql-connector-java 를 설치하기 위해 Dockfile 빌드
	    volumes:           # input conf 설정파일을 컨테이너 내부 경로에 볼륨마운트 
	      - ./elk/logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf
	    ports:
	      - "5044:5044"
	    environment:
	      - "xpack.monitoring.enabled=false"
	    depends_on:
	      - elasticsearch
	    networks:
	      - default_bridge

networks:
  default_bridge:
    ipam:
      driver: default
      config:
        - subnet: 172.16.1.0/24

Dockerfile 로 커넥터 설치

경로: ./elk/Dockerfile

FROM docker.elastic.co/logstash/logstash:8.8.1

ENV MYSQL_CONNECTOR_J_VERSION 8.0.23
ENV MYSQL_CONNECTOR_J_URL <https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-$MYSQL_CONNECTOR_J_VERSION.tar.gz>

# 드라이버 다운로드 및 복사
RUN curl -L -O $MYSQL_CONNECTOR_J_URL
RUN tar -xvf mysql-connector-java-$MYSQL_CONNECTOR_J_VERSION.tar.gz
RUN cp mysql-connector-java-$MYSQL_CONNECTOR_J_VERSION/mysql-connector-java-$MYSQL_CONNECTOR_J_VERSION.jar /usr/share/logstash/mysql-connector-java-$MYSQL_CONNECTOR_J_VERSION.jar
RUN rm -rf mysql-connector-java-$MYSQL_CONNECTOR_J_VERSION.tar.gz mysql-connector-java-$MYSQL_CONNECTOR_J_VERSION

CMD ["logstash", "-f", "/usr/share/logstash/pipeline/logstash.conf"]