Elasticsearch

[Elasticsearch] logstash conf 파일 다양한 예제

IT-PAPA 2023. 10. 3. 06:02
728x90
반응형

Logstash는 데이터 수집, 변환 및 전송을 위한 강력한 오픈 소스 도구입니다. Logstash 설정 파일을 작성하는 방법을 다양한 예시와 주석을 포함하여 설명해 드리겠습니다.

1. 기본 구조

# Logstash 설정 파일의 기본 구조는 입력, 필터, 출력 섹션으로 나눠집니다.
# 각 섹션은 중괄호로 둘러싸여 있으며, 각각의 플러그인 설정을 포함합니다.

input {
  # 입력 플러그인 설정
}

filter {
  # 필터 플러그인 설정
}

output {
  # 출력 플러그인 설정
}

 

2. 파일 입력과 Elasticsearch 출력

# 파일 입력 설정
input {
  file {
    path => "/path/to/your/logfile.log"
    start_position => "beginning"
  }
}

# 필터 설정 (예: grok 필터로 로그 데이터 구문 분석)
filter {
  grok {
    match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:loglevel} %{GREEDYDATA:message}" }
  }
}

# Elasticsearch 출력 설정
output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "your_index_name"
  }
}

 

3. TCP 입력과 stdout 출력

# TCP 입력 설정
input {
  tcp {
    port => 5000
    codec => "json_lines" # 데이터 형식을 JSON으로 가정
  }
}

# 필터 설정 (필터 없음)

# 파일 출력 설정
output {
  file {
    path => "/path/to/output.log"
  }
}

 

4. JSON 파싱과 CSV 출력

input {
  stdin {}
}

filter {
  json {
    source => "message"
  }
  csv {
    separator => ","
    columns => ["column1", "column2"]
  }
}

output {
  file {
    path => "/path/to/output.csv"
  }
}

 

5. 주석과 설명

설정 파일에 주석을 추가하여 설정을 설명하실 수 있습니다. 주석은 #로 시작합니다.

input {
  # 파일 입력 플러그인 설정
  file {
    path => "/path/to/your/logfile.log"
    start_position => "beginning"
  }
}

filter {
  # JSON 파싱 필터 설정
  json {
    source => "message"
  }
}

output {
  # Elasticsearch 출력 플러그인 설정
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "your_index_name"
  }
}

 

6. HTTP 입력과 Kafka 출력

# HTTP 입력 설정
input {
  http {
    port => 8080
  }
}

# 필터 설정 (필터 없음)

# Kafka 출력 설정
output {
  kafka {
    codec => json
    topic_id => "your_topic_name"
    bootstrap_servers => "localhost:9092"
  }
}

 

7. Beats 입력과 stdout 출력

# Filebeat으로부터 로그 데이터를 입력 받는 설정
input {
  beats {
    port => 5044 # Filebeat가 데이터를 전송하는 포트 (Filebeat 설정에 맞춰야 함)
  }
}

# 필터 설정 (필터가 필요한 경우 추가)
filter {
  # 예: 로그 메시지를 구문 분석하는 grok 필터
  grok {
    match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:loglevel} %{GREEDYDATA:message}" }
  }
}

# 로컬 파일로 출력하는 설정
output {
  file {
    path => "/path/to/output.log" # 로그를 저장할 로컬 파일 경로
    codec => line { format => "%{message}" } # 로그 레코드 형식
  }
}

 

8. Schedule stdout 출력

input {
  stdin { }
}

filter {
  # 필터 설정 추가 가능
}

output {
  stdout { codec => rubydebug }
}

# 스케쥴 형식을 사용하여 주기적으로 작업을 실행하는 설정
schedule {
  # "cron" 형식을 사용하여 주기를 지정
  cron => "* * * * *"
  # 아래의 명령어를 실행
  command => "/path/to/your/script.sh"
}
input {
  stdin {
    # 스케쥴을 사용하여 메시지를 10초마다 받습니다.
    codec => "line"
    schedule => "*/10 * * * * *"
  }
}

output {
  stdout {
    codec => rubydebug
  }
}

 

9. API 호출에 대한 예제

input {
  # 입력 플러그인 설정 (예: 파일 입력)
  file {
    path => "/path/to/your/logfile.log"
  }
}

filter {
  # 필터 설정 (필요에 따라 추가)
}

output {
  http {
    http_method => "post" # HTTP 요청 메서드 (예: POST)
    url => "https://api.example.com/your-api-endpoint" # 대상 API 엔드포인트 URL
    format => "json" # 요청 형식 (예: JSON)
    message => '{"key1": "%{field1}", "key2": "%{field2}"}' # 전송할 데이터 포맷
  }
}
input {
  http_poller {
    urls => {
      api_data => {
        method => get # HTTP GET 요청
        url => "https://api.example.com/your-api-endpoint"
      }
    }
    request_timeout => 60
    schedule => { "every" => "1m" } # 1분마다 API 호출
    codec => "json" # API 응답 데이터 형식 (예: JSON)
  }
}

filter {
  # 필터 설정 (필요에 따라 추가)
}

output {
  stdout { codec => rubydebug } # 응답 데이터를 콘솔에 출력 (테스트 목적)
  # 다른 출력 플러그인을 사용하여 응답 데이터를 원하는 형식으로 처리할 수 있음
}
input {
  # HTTP 입력 플러그인을 사용하여 API에서 데이터 가져오기
  http {
    url => "https://api.example.com/data"  # API 엔드포인트 URL
    codec => "json"  # 응답 데이터가 JSON 형식인 경우
    schedule => { "every" => "30s" }  # 주기적으로 API 호출
  }
}

filter {
  # 필터링 및 데이터 가공 작업 (필요한 경우 추가)
}

output {
  # API 호출에서 수신한 데이터를 Elasticsearch 또는 다른 목적지로 전송 (예: Elasticsearch)
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "api_data"
  }
}
728x90
반응형
LIST