DevOps & Cloud발행일 2025. 7. 24.원본 https://blog.naver.com/jword_/223944339771 ↗

[ELK] 3. Logstash와 Elastic Search 연동하기

[ELK] 3. Logstash와 Elastic Search 연동하기 — #개발자의도구들 #ElasticSearch #Logstash AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작...

#DevOps/cloudOps#Naver Blog

#개발자의도구들 #ElasticSearch #Logstash

​

AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작성하였습니다

\* 현재 Spring x 프로젝트를 진행하고 있습니다. 전체 목차를 보시려면 여기를 눌러주세요.

\* Devops stack: 여기

\* 리눅스 기본기: 여기

Before

👉 1. Logstash 사용하기

👉 2. Elastic search 설정 및 실행

​

이전글(1번)에서 logstash output을 다음과 같이 설정해두었습니다.

javascript 코드 예제
                                    # 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 변경

javascript 코드 예제
                                    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 입니다.

​

데이터 저장해보기

javascript 코드 예제
                                    $ 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의 로그를 조회하는 방법만 알아보겟습니다.

javascript 코드 예제
                                    $ url -u elastic:9jgjqri6igh5DCKtEyq2 -X \
GET "http://localhost:9200/logstash-2025.07.23/_search?pretty=true"

logstash의 timestamp가 자동으로 index로 설정되기 때문에, 해당 날짜만 알면 모든 데이터를 볼 수 있습니다.

javascript 코드 예제
                                    {
  "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로 로그를 직접 보내봅시다!

발생한 오류들

  • 설정 파일 오타