[ELK] 3. Logstash와 Elastic Search 연동하기
[ELK] 3. Logstash와 Elastic Search 연동하기 — #개발자의도구들 #ElasticSearch #Logstash AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작...
#개발자의도구들 #ElasticSearch #Logstash
AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작성하였습니다
\* 현재 Spring x 프로젝트를 진행하고 있습니다. 전체 목차를 보시려면 여기를 눌러주세요.
\* Devops stack: 여기
\* 리눅스 기본기: 여기
Before
이전글(1번)에서 logstash output을 다음과 같이 설정해두었습니다.
# input tcp port 5044를 열어둠, 형식 json
output {
file {
path => "/home/tod/logs/logstash/simple_test.log"
codec => json_lines
}
stdout { codec => rubydebug }
}
local에 file로 저장했었는데,이제 elasticsearch로 데이터가 전송되도록 변경해야 합니다.
output 변경
input {
tcp {
port => 5044
codec => json_lines
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "logstash-%{+YYYY.MM.dd}" # Dynamic index name based on data
# ⚠️ [] -> 되는데 이건 index 생성 못함, 반드시 {} 사용하기
user => "elastic"
password => "your_pw"
}
stdout { codec => rubydebug }
}
설정하고 launch가 정상적으로 되면 OK 입니다.
데이터 저장해보기
$ echo '{"message": "hello? elastic?"}' | nc localhost 5044
$ curl -u elastic:9jgjqri6igh5DCKtEyq2 -X GET "http://localhost:9200/_cat/indices/*?v"
👉 logs
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size dataset.size
yellow open test 3B2uo-z0QBWC7W-l5FDVUg 1 1 4 0 14.2kb 14.2kb 14.2kb
yellow open logstash-2025.07.23 rqrZusc5QHipLQxd1SgktA 1 1 1 0 5.6kb 5.6kb 5.6kb
이렇게 logstash에서 생성된 idnex가 들어잇으면 OK 입니다.
데이터 가져오기
이전에는 elastic에서 바로 response를 받았기 때문에 \_id갑을 바로 알 수 있었지만, 이번에는 Logstash에서 따로 response 처리를 해주지 않았기 때문에 id값을 알 수 없습니다. 사실 Log를 분석하는데 특정 로그의 id를 기억할 필요는 없잖아요? 보통은 로그레벨 혹은 로그 생성 시간을 기준으로 검색합니다.
query에 대해서는 나중에 좀 더 깊이 있게 다룰 것이고, 이번에는 특정 index의 로그를 조회하는 방법만 알아보겟습니다.
$ url -u elastic:9jgjqri6igh5DCKtEyq2 -X \
GET "http://localhost:9200/logstash-2025.07.23/_search?pretty=true"
logstash의 timestamp가 자동으로 index로 설정되기 때문에, 해당 날짜만 알면 모든 데이터를 볼 수 있습니다.
{
"took" : 38,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 3,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "logstash-2025.07.23",
"_id" : "JRo5NpgBJkzGk28-ESLZ",
"_score" : 1.0,
"_source" : {
"@version" : "1",
"@timestamp" : "2025-07-23T07:39:26.283722254Z",
"message" : "hello? elastic?"
}
},
{
"_index" : "logstash-2025.07.23",
"_id" : "JhpCNpgBJkzGk28-zyL0",
"_score" : 1.0,
"_source" : {
"@version" : "1",
"@timestamp" : "2025-07-23T07:50:04.915847318Z",
"message" : "hello? elastic?"
}
},
{
"_index" : "logstash-2025.07.23",
"_id" : "JxpDNpgBJkzGk28-XiKm",
"_score" : 1.0,
"_source" : {
"@version" : "1",
"@timestamp" : "2025-07-23T07:50:41.463161338Z",
"message" : "good to see u"
}
}
]
}
}
Next
🚀 다음 시간 부터는 본격적으로 Spring에서 발생가능한 로그들을 분류하고 logback을 사용하여 Logstash로 로그를 직접 보내봅시다!
발생한 오류들
- 설정 파일 오타