엄지월드

Logstash 설치 본문

Server&DevOps

Logstash 설치

킨글 2025. 9. 17. 14:07

1. Elastic GPG 키 임포트

sudo apt-get update && sudo apt-get install -y apt-transport-https # HTTPS를 통해 저장소에 접근하기 위함
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elastic-keyring.gpg

 

2. Elastic 저장소 추가 

echo "deb [signed-by=/usr/share/keyrings/elastic-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list

 

3. 패키지 목록 업데이트

sudo apt-get update

 

4. Logstash 설치 시도

sudo apt-get install logstash

 

5. 설치 확인

/usr/share/logstash/bin/logstash --version

 

 

/etc/logstash/data 디렉토리 생성 및 소유권 설정 (다시 한번 확실하게!)

# 디렉토리가 이미 있든 없든, 안전하게 생성하고 소유권을 설정하는 명령어
sudo mkdir -p /etc/logstash/data
sudo chown logstash:logstash /etc/logstash/data
sudo chmod 755 /etc/logstash/data # 디렉토리에 대한 일반적인 읽기/실행 권한 + 소유자 쓰기 권한

 

기존 .logstash_jdbc_last_run_job_mst.yml 파일 삭제 (혹시 있다면!)
만약 이전에 권한 문제 등으로 빈 파일이 잘못 생성되어 접근이 안 되던 경우를 대비해서 삭제하는 거야. 이 파일은 Logstash가 없으면 자동으로 다시 생성한단다.

sudo rm -f /etc/logstash/data/.logstash_jdbc_last_run_job_mst.yml

 

 

mariaDB 설정

sudo vi /etc/logstash/conf.d/logstash-mariadb-job_mst.conf

 

# Logstash JDBC Input Plugin을 사용하여 MariaDB에서 데이터 동기화 설정
input {
  jdbc {
    jdbc_driver_library => "/etc/logstash/mariadb-java-client-3.1.2.jar" # <-- 이 경로가 드라이버를 둔 실제 경로여야 해!

    # MariaDB JDBC 드라이버 클래스 이름
    jdbc_driver_class => "org.mariadb.jdbc.Driver"

    jdbc_connection_string => "jdbc:mariadb://domain:30121/travel?autoReconnect=true&serverTimezone=Asia/Seoul"
    jdbc_user => "id" # MariaDB 사용자 이름
    jdbc_password => "pw" # MariaDB 비밀번호

    # Logstash 스케줄: */5 * * * * (매 5분마다 실행)
    schedule => "*/5 * * * *"

    # 동기화할 데이터를 가져올 SQL 쿼리
    # 'job_mst' 테이블에 'updated_at' 컬럼이 있다는 전제로 증분 동기화 쿼리를 작성했어.
    # 실제 job_mst 테이블의 컬럼 이름과 매핑될 JobMstDocument의 필드 이름을 잘 확인해서 쿼리를 구성해줘.
    # 예: id, company_cd, anno_id 등 모든 필요한 컬럼을 명시해주는 것이 좋아.
    statement => "SELECT id, company_cd, anno_id, class_cd_nm, emp_type_cd_nm, anno_subject, sub_job_cd_nm, sys_company_cd_nm, job_detail_link, end_date, personal_history, personal_history_end, insert_dts, updated_at FROM job_mst WHERE updated_at > :sql_last_value ORDER BY updated_at ASC"

    # 'updated_at' 컬럼 값을 추적해서 :sql_last_value를 업데이트해.
    use_column_value => true
    tracking_column => "updated_at"
    tracking_column_type => "timestamp"

    # 초기 풀 로드: 처음 실행 시 'true', 이후 증분 동기화 시 'false'
    clean_run => true

    # 마지막 실행 시간과 추적 컬럼 값을 저장할 파일 경로
    last_run_metadata_path => "/etc/logstash/data/.logstash_jdbc_last_run_job_mst.yml" # <- 이 경로가 쓰기 가능한지 확인

    # 필드 이름 변환: DB 컬럼명이 엘라스틱서치 필드명과 다를 경우 대문자->소문자, 언더스코어->카멜케이스 등으로 변환 (선택 사항)
    # statement_filepath => "/etc/logstash/conf.d/your_query.sql" # 쿼리가 길 경우 별도 파일로 관리할 수도 있음
  }
}

# 데이터를 엘라스틱서치로 보내는 설정
output {
  elasticsearch {
    hosts => ["http://localhost:9200"] # 네 엘라스틱서치 서버 주소와 포트
    user => "elastic"
    password => "changeme"
    index => "job_mst" # 엘라스틱서치에 생성할 인덱스 이름 (네 JobMstDocument와 동일하게)
    document_id => "%{id}" # MariaDB `id` 컬럼 값을 엘라스틱서치 문서의 ID로 사용
                           # 이렇게 해야 MariaDB의 데이터 변경 시 엘라스틱서치에서도 해당 문서가 업데이트돼.
  }
  stdout { codec => rubydebug } # 개발 중에는 Logstash가 어떤 데이터를 처리하는지 터미널에 출력해서 확인
}

 

실시간 로그 확인

sudo tail -f /var/log/logstash/logstash-plain.log
Comments