choorai / excuse-me-backend

0 stars 3 forks source link

[리서치] 키바나 리서치 #29

Closed JoungMinJu closed 4 months ago

JoungMinJu commented 6 months ago

개요

로그 모니터링 툴인 키바나 학습.

키바나란

인터페이스를 이용해서 많은 데이터를 쉽게 검색, 시각화, 탐색할 수 있는 오픈소스 분석 및 시각화 도구.

키바나는 Elasticsearch, Logstash, Beats와 함께 엘라스틱스택의 핵심 구성 요소이다.

키바나를 사용해서 elasticsearch 색인에 저장된 데이터를 검색 및 조회하는 것!

ELK stack

Image

Logstash

다양한 소스의 로그 또는 트랜잭션 데이터를 수집, 집계, 파싱하여 elasticsearch로 전달

Elasticsearch logstash로 부터 받은 데이터를 검색 및 집계를 하여 필요한 관심있는 정보를 획득

Kibana Elasticsearch의 빠른 검색을 통해 데이터를 시각화 및 모니터링

참조 블로그 참조 블로그 참조 블로그

JoungMinJu commented 6 months ago

1일차

추가 조사

X-pack

Elastic에서 배포하는 공식 상용 플러그. Security, Alerting, Monitoring, Reporting, Graph, Machine Learning 모듈을 가지고 있음. 근데 어차피 대부분 유료래서.. 일단 빼고 진행

analysis-nori

엘라스틱서치의 한글 분석용 플러그인

docker-compose vs docker-stack

참조 두 가지는 다르다. docker-compose는 container를 정의하는 것이고, docker-stack은 service를 정의한 것이다.

docker-compose는 컨테이너를 정의하는 것이기 때문에, docker-compose 명령이 실행되는 순간에만 컨테이너의 상태가 올바른지 확인 후, 컨테이너가 켜져 있지 않으면 컨테이너를 실행시키고 docker-compose의 몫은 끝난다. docker-compose는 상태를 지속적으로 모니터링 하지 않기 때문에 만약 컨테이너가 5분안에 예기치 않게 종료 되면, composer는 컨테이너를 다시 시작하지 못한다.

하지만 docker stack은 docker 엔진의 원하는 서비스 상태를 항상 알 수 있으며, 그렇기 때문에 엔진이 원하는 서비스 상태와 지금 서비스 상태가 다르다면 조치도 가능하다.

예로 컨테이너가 죽으면 다른 컨테이너를 호출 하거나, 전체 노드에서 컨테이너를 몇개 가져가면 엔진을 감지하여 컨테이너를 정상적인 노드로 다시 가져올 수 있다. 즉, docker stack은 docker-compose에서 지원하지 않는 모니터링과 그에 따른 조치 기능을 제공하는 것이 큰 차이점이다.

해야함

JoungMinJu commented 6 months ago

참조

Docker-Compose를-이용하여-ELK-Stack-시작하기-1

Docker를-이용해서-ELK-스택-설치하기

ELK-Stack-on-Docker-개발-환경-셋팅-및-CSV-데이터-추출-파이프라인-구축하기

JoungMinJu commented 6 months ago

2일차

참조 블로그 기반 구축 -> 그냥 일단 ! 예제 그대로 따라하면서 띄워보기

JoungMinJu commented 4 months ago

0. 개요

(1) 전반적 구조

image

1. ELK 스택 로컬에 띄우기

참조블로그

(1)

해당 레포 클론 받기

환경변수 설정

.env 파일 열어서

Logstash 설정

logstash/pipeline/logstash.conf 수정

input {
        beats {
                port => 5044
        }

        tcp {
                port => 50000
        }
}

## Add your filters / logstash plugins configuration here

output {
        elasticsearch {
                # filebeat에서 fields: index_name으로 넘어온 값을 인덱스로 전송
                index => "%{[fields][index_name]}"
                hosts => "elasticsearch:9200"
                user => "logstash_internal"
                password => "${LOGSTASH_INTERNAL_PASSWORD}"
        }
}

컨테이너 실행

docker-compose build && docker-compose up -d

접속해보기

localhost:5601 접속해서

2. filebeat 연결하기 (*추후 내용 정리 할 것)

image

output.logstash: hosts: ["logstash:5044"]

로그스태시 에러 발생 logstash-1 | [2024-03-13T14:07:47,714][WARN ][logstash.outputs.elasticsearch][main] Attempted to resurrect connection to dead ES instance, but got an error {:url=>"http://logstash_internal:xxxxxx@elasticsearch:9200/", :exception=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::BadResponseCodeError, :message=>"Got response code '401' contacting Elasticsearch at URL 'http://elasticsearch:9200/'"}

https://hstory0208.tistory.com/entry/ELK-Logstash-401-Unauthorized-%EC%97%90%EB%9F%AC

-> logstash.conf 기본계정 elastic 으로 바꿈

해결

띄웠더니? image

이제 Elastic의 index를 설정을 위해 메뉴에서 Management의 Stack Management 클릭

Kibana의 index Patterns 로 진입한다. 아래와 같은 index patterns을 등록 할 수 있다

해주니까

스크린샷 2024-03-13 오후 11 32 59

요런 창이 뜸

근데 뭔지 모르겠음

http://localhost:9200/access-log/_search

쳐서 들어가보면 {"took":2,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":0,"relation":"eq"},"max_score":null,"hits":[]}}

이런 상황 뭔 정보가 없느 ㄴ느낌?

https://mangkyu.tistory.com/197

+백로그 : 로깅 메세지 파싱하기

인덱스 이름 바꿔봄

몰라

근데 걍 docker container 내에 log 폴더에? .log 파일들이 안잡힘

-> filebeat 컨테이너내에 폴더 이름이 ㅣogs네

https://www.inflearn.com/questions/756481/docker-compose-yml-%EC%88%98%EC%A0%95%ED%9B%84-restart-%ED%95%A0%EB%95%8C-%EB%AC%B8%EC%9D%98-%EB%93%9C%EB%A0%A4%EC%9A%94

참조해서 다시 up

  - /Users/joungminju/IdeaProjects/excuse-me-backend/log:/usr/share/filebeat/log

이렇게 바꾸니까 log파일 잡힘

그럼 저거 바라보게 수정해야하지 않나

너~~~무 안돼서 새로 시도해야겠다

paths:
  - usr/share/filebeat/log/*.log
스크린샷 2024-03-14 오전 12 26 30

.0.log 땜에 못잡나

logback 수정해도 뭐.. 안뜬다 ㅎ ㅎ. .

지금 문제 -> elk, filebeat 다 돌고 log 파일도 폴더내에 잡히는데 Filebeat -> stash로 보내주지 못하고 있음

https://velog.io/@gkqkehs7/Docker-volume%EC%99%80-Filebeat%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-%EC%84%9C%EB%B2%84-%EB%A1%9C%EA%B7%B8-%EC%88%98%EC%A7%91

위에꺼 함 보자

filebeat.yml 설정에서 logstash:5400 -> localhost:5400으로 변경 잘 되는지 확인해보려고 localhost:9200 접속 -> 스크린샷 2024-03-24 오후 4 30 50 에러 발생

로그스태시에 애초에 이벤트가 안와서 es에 index pattern이라는 메뉴가 안잡히는 것

https://velog.io/@ba93love/Docker-%EC%9C%84%EC%9D%98-%EC%9B%B9%EC%84%9C%EB%B2%84-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%84%B8%ED%8C%85-2-ELK-%EC%84%B8%ED%8C%85#elastic-search---elasticsearchconfigelasticsearchyml

이거 보고

에러 로그 찍힌거 보면서 해결해나가기

"logstash에서 2024-03-31T14:52:47,067][WARN ][logstash.outputs.elasticsearch][main] Attempted to resurrect connection to dead ES instance, but got an error {:url=>"http://elastic:xxxxxx@localhost:9200/", :exception=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError, :message=>"Elasticsearch Unreachable: [http://localhost:9200/][Manticore::SocketException] Connect to localhost:9200 [localhost/127.0.0.1] failed: Connection refused"}" 에러나요

->

스크린샷 2024-04-03 오후 11 19 12

5601 접속하ㄱ니

스크린샷 2024-04-03 오후 11 23 11

ㅎㅎㅎ..

elasticsearch.yml에 xpack.security.ena

스크린샷 2024-04-03 오후 11 32 20

bled: false

kibana.yml에서 elasticsearch.ssl.verificationMode: "none"

해결 안됨

위의 문제 해결하기

그네 뭐 어쩌다보니 write EPROTO 1090D19AFFFF0000:error:0A00010B:SSL routines:ssl3_get_record:wrong version number:../deps/openssl/openssl/ssl/record/ssl3_record.c:354: 에러가 떴고

그래서 elasticsearch.hosts; 주소 https -> http로 변경함

근데 여전히 kibana->index patterns가 안뜸

logstash Connect to elasticsearch:9200 [elasticsearch/172.21.0.2] failed: Connection refused

너무 안돼서 새로 시작해야겠다~~~~~

https://dgjinsu.tistory.com/34 얘도 똑같ㅇㅌ이 data stream이 아예 안잡힘

https://velog.io/@tks7205/LogStash-%EC%82%AC%EC%9A%A9%EB%B0%A9%EB%B2%95filebeat-in-m2-mac etc 내에 filebeat 폴더가 업슨ㄴ데.. (* docker에서 elk 띄우고 로컬에서 filebeat 띄우려고헀었음)