RSS feed는 웹사이트의 최신 콘텐츠를 효율적으로 수집하고 분석할 수 있는 강력한 도구입니다. Logstash를 사용하면 RSS 데이터를 쉽게 수집하고 처리할 수 있습니다. 이 글에서는 Google News RSS를 Logstash로 수집하는 방법을 예제로 설명하겠습니다.
Logstash config
Logstash의 설정 파일은 input, filter, output 세 가지 섹션으로 구성됩니다. 아래는 Google News의 RSS 피드를 수집하기 위한 예제 설정입니다.
Input
http_poller 플러그인을 사용해 RSS 피드를 주기적으로 요청합니다.
input {
http_poller {
urls => {
google_news => {
url => "https://news.google.com/rss"
method => get
}
}
request_timeout => 60
schedule => { every => "10m" }
codec => "plain"
metadata_target => "http_metadata"
}
}
urls: 수집할 RSS 피드 URL을 지정합니다.schedule: 데이터를 가져올 주기를 설정합니다. every => “5m”은 5분마다 데이터를 요청합니다. cron 표현식을 사용하여 보다 세부적인 설정이 가능합니다metadata_target: 요청 메타데이터를 저장할 필드를 지정합니다.
Fiter
수집된 RSS 데이터를 구조화된 형태로 변환합니다.
filter {
xml {
source => "message"
target => "rss"
store_xml => true
force_array => false
}
split {
field => "[rss][channel][item]"
}
mutate {
add_field => {
"title" => "%{[rss][channel][item][title]}"
"link" => "%{[rss][channel][item][link]}"
"source" => "%{[rss][channel][item][source][content]}"
"pubDate" => "%{[rss][channel][item][pubDate]}"
"type" => "%{[http_metadata][input][http_poller][request][name]}"
}
remove_field => ["message", "rss", "event", "http_metadata"]
}
}
xml: RSS 데이터를 XML 형태에서 파싱하여 rss 필드에 저장합니다.split: 각 기사(item)를 개별 이벤트로 분리합니다.mutate: 원하는 필드(title, link, source, pubDate)를 추가하고 불필요한 데이터를 제거합니다.
Output
결과 데이터를 Elasticsearch에 저장하거 콘솔에 출력합니다.
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "rss-data-%{+YYYY.MM.dd}"
}
stdout { codec => rubydebug }
}
이 예제를 사용하면 Logstash를 활용하면 RSS 데이터를 효율적으로 수집하고 처리할 수 있습니다.