세로형
Link
12-08 12:49
«   2021/12   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
Archives
Today
672
Total
1,975,281
관리 메뉴

꿈 많은 사람의 이야기

ELK 스택 설치 - logstash(로그스태시) 설치 및 장고(django) 연동 본문

빅데이터

ELK 스택 설치 - logstash(로그스태시) 설치 및 장고(django) 연동

오키여 이수진의 블로그 2018. 11. 14. 09:43

지난 포스팅에서 빅데이터 도구인 ELK 스택 설치 부분에서 엘라스틱 서치 설치를 진행했고 키바나(kibana)를 설치해서 엘라스틱 서치와 연동했습니다.

https://lsjsj92.tistory.com/398

https://lsjsj92.tistory.com/396

을 참고하시면 되겠습니다.

396이 엘라스틱 서치, 398은 키바나설치 및 엘라스틱 연동입니다.


이번 포스팅에서는 로그스태시(logstash)를 설치하고 엘라스틱 서치와 연동하겠습니다. 엘라스틱 서치와 연동하면 자동으로 키바나와 연동이 됩니다. 왜냐하면 이미 kibana랑 elasticsearch와 연동이 되어 있기 때문입니다.


그리고 파이썬 웹 프레임워크인 Django와 연동해서 화면에 띄어보겠습니다.


https://www.elastic.co/kr/downloads/logstash

사이트에 들어가시면 logstash 최신 버전을 볼 수 있습니다.

저는 우분투 환경이기 때문에 deb를 wget으로 받아왔습니다.



최신버전으로 그냥 받았는데요 제가 받았을 때는 6.4.3이었네요



그리고 받은 로그스태시 파일을 압축해제 합니다

그리고 같은 디렉토리에 저는 logstash.conf 파일을 하나 만들었습니다

원래 있는게 아니라 새로 만듭니다.


이렇게 만들어서



일단 이렇게만 합니다.

input은 log로 들어오는 입력값이고 output은 말그대로 출력에 대한 설정입니다



그리고 나서 sudo /usr/share/logstash/bin/logstash -f ./logstash.conf

를 치면! 로그스태시가 시작됩니다~

여기까지 잘 되셨으면 일단 설치는 완료되었습니다

이제 파이썬 django와 연동해보죠~



먼저 python-logstash를 설치합니다.

이것에 대한 설명은 https://pypi.org/project/python-logstash/ 를 참고하세요~

파이썬과 로그스태시를 연동해주는 것입니다.


그리고 장고와 엘라스틱서치를 연동시켜야겠죠?

https://github.com/sabricot/django-elasticsearch-dsl

이런것이 있습니다.



저는 엘라스틱 서치 최신버전이기 때문에

pip install django-elasticsearch-dsl을 이용해서 그냥 설치했습니다.

만약 버전을 맞추고 싶으시면 위 사진처럼 하시면 되겠습니다.



잘 설치가 됩니다~

이제 본인이 가지고 있는 장고에 들어갑니다

장고 설치나 이런거는.. 따로 포스팅은 못하겠네요

이미 알려져 있는게 많으니 설치하시면 되겠습니다


이제 장고 메인 프로젝트 앱에 들어가면 setting.py 가 있는데 얘를 설정합니다.



installed_apps에서 django_elasticsearch_dsl을 추가합니다.

그리고 elasticsearch_dsl 설정을 하나 추가합니다.

엘라스틱 서치가 설치된 host를 추가하면 됩니다.

저는 엘라스틱서치와 로그스태시, 키바나가 다른 분산된 서버에 설치되어 있기 때문에 ip를 적어주었습니다



그리고 밑에 위 사진처럼 설정을 하나 더 추가합니다.

이 설정에 대한 내용은 logging에 대한 내용입니다.

자세한것은 저도 잘 모르겠네요

따로 공부를 해야겠습니다. 일단은 연동이 먼저이기 때문에!

그냥 눈에 보이는 logstash의 설정을 해줍니다.

로그스태시도 마찬가지로 다른 분산 pc에 설치 되어 있기 때문에 ip를 적어줍니다.


그 다음 아까 logstash.conf를 다시설정합니다.



input을 tcp port 5959로 받고

output을 엘라스틱 서치에 설정합니다.



그리고 다시 실행!



하니까 

warning could not find logstash.yml which is typically located in $ls_home/config or /etc/logstash

뭐 무슨 이런 에러가 뜨네요

이런 에러는



sudo를 붙여서 해주시면 간단하게 해결됩니다..



잘 실행이 되네요

그럼 제 장고 웹 페이지에 먼저 들어가보겠습니다



이렇게 들어왔습니다.

간단한 웹 페이지에요

그 다음 kibana에서 엘라스틱서치에 데이터가 들어왔는지 확인해봅니다



저기 밑에 뭔가 생겼네요!



얘를 index에 설정하고



timestamp로 설정!



이렇게 설정이 되면


discover에 가보면 이렇게 django 관련된 로그가 찍히는것을 볼 수 있습니다!

이제 이걸 빅데이터 로그로써 어떻게 활용해야하나... 고민해봐야겠네요



반응형
그리드형
6 Comments
  • 프로필사진 c 2020.03.29 21:55 안녕하세요.
    포스팅 잘 보고있습니다.
    한 가지 궁금한게 있는데요,
    logstash에 아래와 같이 복수개의 설정을 등록하고 AAAA.json에 데이터를 넣으면 AAAA 인덱스와 BBBB 인덱스 모두에게 AAAA.json 데이터가 쌓입니다.
    왜 이런걸까요?
    제가 설정을 뭔가 빠뜨린걸까요..?

    [pipelines.yml]
    ```
    - pipeline.id: AAAA
    path.config: "/etc/logstash/conf.d/AAAA.conf"
    queue.type: persisted
    - pipeline.id: BBBB
    path.config: "/etc/logstash/conf.d/BBBB.conf"
    queue.type: persisted
    ```

    [AAAA.conf]
    ```
    input {
    stdin {
    codec => json
    }
    file {
    codec => json
    path => "AAAA.json"
    start_position => "beginning"
    sincedb_path => "NUL"
    }
    }

    output {
    elasticsearch {
    hosts => "localhost"
    index => "AAAA"
    }
    stdout {}
    }
    ```

    [BBBB.conf]
    ```
    input {
    stdin {
    codec => json
    }
    file {
    codec => json
    path => "BBBB.json"
    start_position => "beginning"
    sincedb_path => "NUL"
    }
    }

    output {
    elasticsearch {
    hosts => "localhost"
    index => "BBBB"
    }
    stdout {}
    }
    ```
  • 프로필사진 오키여 이수진의 블로그 2020.03.30 13:49 신고 안녕하세요.

    음... 정확하게는 저도 자세히는 모르겠네요.
    추측해보자면, 둘 다 start_position이 beginning이라서 그런 것 같기도하구요.
    그래서 하나의 값이 들어왔을 때 AAAA, BBBB 두 개의 index에 같이 들어가는 것처럼 보입니다.
  • 프로필사진 c 2020.03.30 20:23 답변 감사합니다.
    각 config마다 바라보고있는 path가 다른 문서임에도 start_position 값에 영향이 있는걸까요?
  • 프로필사진 오키여 이수진의 블로그 2020.03.31 17:48 신고 음.... 저도 정확하게는 잘 모르겠습니다.ㅠㅠ
    제가 이쪽을 하드하게 공부했던 것이 아니라서요 ㅠㅠ
    도움이 못되어 죄송합니다.
    단지, 추측하기에는 그럴 것 같아서 저렇게 작성하였습니다
  • 프로필사진 애뚱 2020.08.08 21:58 신고 안녕하세요! 좋은 글 감사합니다.
    소개해주신 코드 그대로 따라해본 결과, logstash가 elasticsearch index에 전달되긴 하는데, docs count가 0, 즉 아무런 데이터가 전송되지 않더라고요.
    그래서 그런지 kibana index pattern에서도 logstash-*를 입력해도 매칭되는 것이 없네요. 혹시 장고 버전의 코드도 공유 가능하실까요? settings.py 이외의 파일은 별도의 코드가 필요없는지 궁금하네요. 다른 자료를 보니 elasticsearch_connection 임포트가 포함된 별도의 파일을 생성하더라고요.
    감사합니다.
  • 프로필사진 오키여 이수진의 블로그 2020.08.11 06:19 신고 안녕하세요.
    흠.. 제 생각엔 이 글이 꽤나 시간이 흘러서 버전 문제도 있지 않을까 싶습니다.

    장고는 코드가 없습니다. 단, 해당 블로그에서 올린 모든 내용이 전부입니다.

    만약 계속 되지 않으신다면
    1. Django 서버 주소 및 포트 등 확인
    2. 엘라스틱서치 호스트 확인

    을 해보셔야 합니다.
    logstash -> Elasticsearch로 들어가는지
    django -> Elasticsearch로 들어가는지 따로따로 확인해보는 것도 방법입니다.
댓글쓰기 폼