-
Ubuntu 환경에서 Logstash와 Opensearch 연동하기 : logstash-input-opensearch Plugin input/output 설정스터디 노트 2023. 12. 13. 16:27
안녕하세요. 이번에는 Ubuntu 환경에서 Logstash와 Opensearch를 연동하는 부분에 대해 실습을 한 내용이 있어 공유차 글을 작성하게 되었습니다.
📌 Logstash란?
먼저 Logstash는 무엇일까요?
Logstash는 다양한 소스에서 로그 데이터를 수집하고 처리하고 저장한느데 사용되는 플러그인 기반의 오픈 소스 프로그램입니다.
Logstash는 다양한 환경에서 사용이 될 수 있고 다양한 소스들로부터 데이터를 수집할 수 있습니다.
따라서 다양한 라이브러리를 통해 input과 output을 설정할 수 있는 것이 특징입니다.
또한 filter를 통해 중간 연산 과정을 집어넣을 수 있어 데이터 파이프라인을 구성하는데 핵심적으로 사용될 수 있는 요소 프로그램 중 하나이지요.
그래서 확장성이 매우 뛰어나다는 장점이 있습니다.
📌 편하게 할 수 없을까?
기존에 Logstash의 경우 input과 output에 대한 정보가 Elasticsearch에 대한 레퍼런스는 많이 있더군요.
하지만 사실 저는 Opensearch와 연동된 내용이 필요했었습니다. 그래서 열심히 구글링을 해보았고 마침내 찾아냈습니다.
워낙 해당 블로그에 설명이 잘 되어있어서 설정은 매우 쉽게 하였습니다.
여튼 앞서 말씀드렸던데로 Logstash의 경우 input과 output에 대해 플러그인을 통해 손쉽게 사용할 수 있습니다.
그렇기 때문에 Opensearch를 input으로 활용할 수 있는 Logstash를 설치해야하며, Logstash-input-opensearch OSS Version을 설치하시면 됩니다.
해당 사이트에서 원하는 버전의 OSS Logstash를 다운받으시면 됩니다.
저는 도커를 통해 리눅스를 설치하였고, logstash-oss-with-opensearch가 필요하기 때문에 위에 체크해놓은 플러그인을 설치하였습니다. output-plugin을 받으시면 input-plugin도 활용하실 수 있습니다.
wget을 통해 설치를 해보겠습니다. 이런 wget이 설치가 되어있지 않네요..
wget부터 설치한 후 logstash oss를 다운받겠습니다.
> apt-get install wget ...(생략)... > wget https://artifacts.opensearch.org/logstash/logstash-oss-with-opensearch-output-plugin-7.16.3-linux-x64.tar.gz
저는 7.16.3 버전을 다운받았으나, 필요하신 버전을 선택하시어 받으시면 됩니다.
다운로드가 완료 되었으면 압축을 풀어줍니다.
> tar -zxvf logstash-oss ... > cd logstash-7.16.3
logstash 폴더 안에 들어가면 위와 같이 나오는데 우리가 여기서 건드려야 할 부분은 config 폴더 안쪽입니다.
config 폴더 내에 들어가서 logstash가 미리 설정되어 있는 Opensearch에서 데이터를 조회해 올 수 있도록 conf 파일을 만들어줄겁니다.
> vi logstash-input-opensearch.conf input { opensearch { hosts => ["http://host:port"] user => "admin" password => "admin" index => "index" query => '{"query": { "bool": { "must": [ { "range": { "@timestamp": { "gte": "now-1m" } } } ] } } }' codec => "json" schedule => "* * * * *" } } output { stdout { codec => "json" } file { path => "/logstash-7.16.3/logs/output.log" } }
저는 일단 filter는 따로 구현하지 않았습니다. input을 먼저 확인해보면 input plugin으로 opensearch를 사용했습니다.
hosts와 user, password를 설정하여 접속정보를 기입해주고, 조회할 index를 지정해줍니다.
그리고 다음은 가장 중요한 query입니다. 해당 query를 opensearch에 해당 index로 날려서 데이터를 가지고 오게 됩니다.
여기서 조금 헷갈릴 수가 있습니다
(필자가 그랬습니다..😵).어떤 부분이냐면 query를 opensearch에 직접 작성하여 실행할 때 _search?pretty 옵션을 붙여주게 됩니다.
근데 index에도 query에도 따로 붙이질 않아요!
저렇게 작성을 해도 쿼리는 다음과 같이 전달된다고 합니다.
// input input { # Read all documents from Elasticsearch matching the given query opensearch { hosts => "localhost" query => '{ "query": { "match": { "statuscode": 200 } }, "sort": [ "_doc" ] }' } } // 전달되는 내용 curl 'http://localhost:9200/logstash-*/_search?&scroll=1m&size=1000' -d '{ "query": { "match": { "statuscode": 200 } }, "sort": [ "_doc" ] }'
위 Elasticsearch 가이드를 참고해보니 '아 그냥 해도 되겠구나'생각이 들었습니다.
그리고 하나 더 팁을 드리자면, now-1m을 사용하면 @timestamp 기준 현재로부터 1분 전 데이터를 가지고 옵니다.
또한 schedule을 * * * * *로 설정하면 1분마다 쿼리가 실행이 됩니다. 이는 cron expression을 참고하시면 될 것 같습니다.
이제 conf 파일 내에 input과 output을 설정해주었습니다. 이제 opensearch에서 데이터를 가져와서 output.log파일로 데이터를 옮겨줄 것입니다.
📌 해보자!
실행해보겠습니다.
> ./bin/logstash -f logstash-input-opensearch.conf > [logstash.agent] Successfully started Logstash API endpoint {:port=>9600, :ssl_enabled=>false} ...(생략)... [2023-12-13T07:06:26,822][INFO ][logstash.outputs.file ][main][02bf065c844b84bf6f2e8d5786d4b 35c7e6214c2fcd9b48aa0967f9b13e4b52f] Closing file /logstash-7.16.3/logs/output.log
bin폴더 내의 logstash shell로 실행을 하면 됩니다. 여기서 -f 옵션은 설정한 conf파일을 지정하여 logstash를 구동한다는 뜻이고, 이를 통해 input과 output 설정 옵션이 적용되게 됩니다.
한 번의 logstash 실행이 끝나고 나면 파일을 Closing하게 되는데, 그 로그까지 모두 남으면 정상적으로 실행이 되는 것입니다! 그리고 schedule에 설정해놓았던 것처럼 1분마다 한 번씩 Opensearch에서 데이터를 query로 조회해와서 output.log파일로 쓰게 됩니다!
이 output 부분을 file에서 kafka나 elasticsearch, opensearch 등등으로 바꿀 수 있습니다!
'스터디 노트' 카테고리의 다른 글
레디스란? 레디스의 백업 프로세스에 대하여 (0) 2023.12.20 Ubuntu(우분투) 환경에서 Java 초간편 설치하기 (0) 2023.12.13 윈도우 10에서 Docker(도커)에 Ubuntu(우분투) 최신 버전 설치하기 (0) 2023.12.13 Apache HttpClient 5 알아보기 (0) 2023.12.06 Optional, 그렇게 쓸꺼야🤔? (1) 2023.12.05