[ Splunk Project ] Splunk로 주식 분석 | Phase 2. 실시간 주식 가격 조회
본문 바로가기

Splunk/Splunk Project

[ Splunk Project ] Splunk로 주식 분석 | Phase 2. 실시간 주식 가격 조회

728x90
반응형

지난 포스팅에서는 주식에 대한 히스토리 정보를 Splunk에 저장하였다.

 

[ 오늘의 목표 ] 현재 주식 가격 조회!

( 1 장 ) 새로운 명령어 "readstock" 만들기

🐋 readstock의 기능 🐋

  • code 이름을 주면 현재 시간의 주식 가격을 네이버를 통해 가져오게 함!

 

 

| 1 절 |  명령어 "readstock "을 "stock" 앱에다가 만들기

🍀STEP 1 🍀 stock 앱이 설치된 디렉토리로 이동

[ 메뉴얼 상 명령어 ]
$ cd $SPLUNK_HOME/etc/apps/stock

[ 내 명령어 ]
$ cd /opt/splunk/etc/apps/stock

왠지 모르게.. 나는 영구 환경 변수 설정이 안됨...ㅠ

 

🍀STEP 2 🍀 파일 생성

- bin/readstock.py : 실제 명령어 실행되는 코드를 작성
- default/commands.conf : 스플렁크에서 인식할 수 있도록 명령어를 정의
- default/searchbnf.conf : 웹에서 명령어를 실행하는 방법을 확인 할 수 있는 설명을 추가
- metadata/default.meta : 명령어의 활용 범위 정의
- lib/ : 명령어를 수행하기 위해 필요한 라이브러리 추가 폴더

 

 

🍀STEP 3 🍀 bin/readstock.py 파일 만들기

# 파이썬이 실행할 명령에 대한 코드 작성 파일
$ mkdir bin
$ touch bin/readstock.py

# 명령을 수행하기 위해 필요한 라이브러리 추가 폴더
$ mkdir lib

 

 

🍀STEP 4 🍀 각 메타데이터 추가

  • default/commands.conf
[readstock]
chunked = true
filename = readstock.py
python.version = python3

 

  • default/searchbnf.conf
[readstock-command]
syntax = readstock code
shortdesc = read current stock price in naver financial
usage = public

 

  • metadata/default.meta
[searchbnf]
export = system

 

  • 여기까지 추가하고 스플렁크를 재시작하면,
  • 검색 화면에서 다음처럼 readstock을 명령어로 인식하고
  • "searchbnf.conf"에서 넣은 도움말을 확인할 수 있음

그러나 디테일한 Syntax나 Matching Searches는 나오지 않음

 

해결법: bin/readstock.py에 해당 코드를 작성한다.

 

 

혹시 위 화면처럼 도움말이 보이지 않으면 다음처럼 설정하자.

더보기

 

사용자 계정명에서 "Preferences" 를 선택

SPL Editor 탭에서 Search assistant를 "Full" 로 선택 적용

여기까지 성공하였다면, 명령어에 편집한 내용은 검색할 때마다 바로바로 반영되기 때문에

스플렁크를 재시작 할 일 없이 명령어에 대한 코드를 작성하면 된다.

 

 

 

🍀STEP 5 🍀 readstock.py에 코드 작성

나는 가상 서버에 splunk enterprise가 있는 관계로

해당 가상 서버에 jupyter notebook를 설치하여 debuging 하며 코드를 수정했다.

 

 

 

가상 서버 ubuntu linux 환경에 jupyter notebook 설치하는 자세한 방법은 아래 포스팅을 참고하길 바란다.

2023.06.15 - [Linux] - [ Linux ] 리눅스에서 주피터 노트북 서버 환경 구축 (feat. VM_Ubuntu)

 

[ Linux ] 리눅스에서 주피터 노트북 서버 환경 구축 (feat. VM_Ubuntu)

[ STEP 1 ] Jupyter 패키지 설치 [ 설치 명령어 ] pip install jupyter [ 설치 유무 및 버전 확인 ] jupyter --version [ STEP 2 ] Jupyter Notebook 실행 jupyter notebook --ip=0.0.0.0 --port=8888 --allow-root 위의 명령어로 jupyter noteboo

authentic-information.tistory.com

splunk

 

bin/readstock.py

첫번째  import에는 문제가 없었다.
두번째 import

 

가상 서버에  splunklib 모듈이 설치되어 있지 않다는 오류가 나왔다.

cd /opt/splunk/bin
pip install splunklib

 

설치 완료: sudo로 깔면 퍼미션이 깨질 수 있다고 함

그냥 무시하겠다...

 

 

새로운 오류

 

깔았는데 왜 없다하니....

 

나와라 메뉴얼!

 

  • 그러니까 얘가 하는 말은 /opt/splunk/apps/stock/bin 밑에 splunk SDK를 설치한 후에
  • splunk SDK 안에 있는 /splunklib/ 을 /opt/splunk/apps/stock/bin 밑에 복사하라는 거다.
  • 그냥 간단하게 각각 pip3 install로 설치하겠다.
# cd /opt/splunk/etc/apps/stock/bin
[ splunklib를 작업 디렉토리에 설치 ]
pip3 install -t . splunklib

[ splunk-sdk를 작업 디렉토리에 설치 ]
pip3 install -t . splunk-sdk

[ BeautifulSoup4을 작업 디렉토리에 설치 ]
pip install -t . BeaufifulSoup4

[ bs4를 작업 디렉토리에 설치 ]
pip install -t . bs4


# cd /opt/splunk/etc/apps/stock/lib
[ splunklib를 작업 디렉토리에 설치 ]
pip3 install -t . splunklib

[ splunk-sdk를 작업 디렉토리에 설치 ]
pip3 install -t . splunk-sdk

[ BeautifulSoup4을 작업 디렉토리에 설치 ]
pip install -t . BeaufifulSoup4

[ bs4를 작업 디렉토리에 설치 ]
pip install -t . bs4

/opt/splunk/etc/apps/stock/bin
/opt/splunk/etc/apps/stock/lib

 

오류가 사라졌다.

 

 

 

🍀STEP 6 🍀 스플렁크 재시작 후 readstock 명령어가 먹는지 확인한다.

안 먹는다.

작업 검사기 search.log 확인

ERROR ChunkedExternProcessor [21143 ChunkedExternProcessorStderrLogger] - stderr:   'The soupsieve package is not installed. CSS selectors cannot be used.'

 

🍀 1차 시기 🍀

하.. 뭔가 얘는 될 것 같아

얘는 일단

  • pip3 install soupsievepython -m pip install soupsieve 를 해보고 효과가 없으면
  • /lib/python3/dist-packages의 bs4 folder의 soupsieve folder를  local bs4 folder에 넣어보라고 함.

근데 여기서 python -m의 의미가

대충 모듈의 전체 경로를 안 적어도

어디서든 실행이 가능하게끔 하는 역할을 하는 것이라고 한다.


뭔가 강하게 끌림

엄살쟁이 리눅스.. 그래서 명령어를  바꿔줌

 

python3 -m pip3 install soupsieve

pip3가 없다네요...? 왜죠?

 

python3 -m pip install soupsieve

이미 soupsieve님이 있으시다는데염;;

에휴 두번째 껄 해보자.

 

 

1. Soupsieve 파일이 어디에 있는지 확인한다.

# root 하위의 모든 soupsieve를 찾는다.
cd
find / -name soupsieve

  • 걔가 말한 위치랑 내가 아까전에 설치한 위치 두 곳에 soupsieve가 존재한다.
  • 생각해보니 apps/stock/bin/bs4에 없다, apps/stock/bin/에도 없음

 

2. 복사한다.

# bin/bs4에 복사
cd /usr/local/lib/python3.10/dist-packages
 cp -r ./soupsieve /opt/splunk/etc/apps/stock/bin/bs4

# 혹시 모르니 lib/bs4에도 복사
cp -r ./soupsieve /opt/splunk/etc/apps/stock/lib/bs4

잘들어 감...

 

 

여전히 검색 실패

EOF while attempting to read transport header read_size=0

Error in 'readstock' command: External search command exited unexpectedly with non-zero error code 1

그러나 오류가 달라짐

무슨 말인지 알 수가 없어서 server내에서 돌려봤다.

$ python3 readstock.py

TypeError at "/opt/splunk/etc/apps/stock/bin/splunklib/searchcommands/search_command.py", line 684 : cannot unpack non-iterable NoneType object
Traceback:
  File "/opt/splunk/etc/apps/stock/bin/splunklib/searchcommands/search_command.py", line 684, in _process_protocol_v2
    metadata, body = self._read_chunk(self._as_binary_stream(ifile))

chunked 1.0,202,0
{"inspector":{"messages":[["ERROR","TypeError at \"/opt/splunk/etc/apps/stock/bin/splunklib/searchcommands/search_command.py\", line 684 : cannot unpack non-iterable NoneType object"]]},"finished":true}root@splunkenterprise:/opt/splunk/etc/apps/stock/bin#
  • /opt/splunk/etc/apps/stock/bin/splunklib/searchcommands 디렉토리의 search_command.py에 684줄에 오류가 있다고 함
  • 그래서  "cannot unpack non-iterable NoneType object"를 구글에 검색해 봄

 

천사의 음성

  • /opt/splunk/etc/apps/stock/bin/splunklib/searchcommands 디렉토리의  search_command.py에 684줄을 보니!!

 

찾았다!!!!! 네 이놈!!!!!

 

수정 완료
새로운 오류

  • 이번에는 같은 파일의 689번 줄이 문제라고 함.
 RuntimeError at "/opt/splunk/etc/apps/stock/bin/splunklib/searchcommands/search_command.py", line 689 : Expected getinfo action, not None

 

  • 하다하다 안되서 디버깅 옵션을 시도했다.
python3 readstock.py --debug

결과: 짤려서 안보이는 에러메시지는 아래와 같다.

Command list_entities appears to be statically configured for search command protocol version 1
and static configuration is unsupported by splunklib.searchcommands.

Please ensure that default/commands.conf contains this stanza:

[readstock]
filename = readstock.py
enableheader = true
outputheader = true
requires_srinfo = true
supports_getinfo = true
supports_multivalues = true
supports_rawargs = true
  • 명령 list_entities가 검색 명령 프로토콜 버전 1에 대해 statsic하게 구성된 것으로 보입니다.
    정적 구성은 splunklib.searchcommands에서 지원되지 않습니다.
  • 라고 구글이 번역해 줌
  • 아마 ver 2가 나왔는데 오류가 있었나 봄...
  • default/commands.conf에
    • [readstock] 스탠자와 내용을 추가하라고 함.
  • 바로 간다!

이제 마지막이다...

 

 

재시작...하자.. 제발.. 성공하길...

성공...

오늘도 우당탕탕 성공....

 

 

🍀 민망하지만 시도한 뻘짓들을 공유한다. 🍀

더보기

난 해볼만큼 해봤다... 결국 내가 패키지 코드까지 보는구나...

/opt/splunk/etc/apps/stock/bin/bs4/css.py:9:
UserWarning: The soupsieve package is not installed. CSS selectors cannot be used.
  • 그러니까 해당위치의 css.py의 9번째 줄 코드에서 오류를 뿜었다는 거지?
  • 그래 한 번 보자...

 

  • soupsieve가 import가 안되서 오류에 똑같이 있는 저 말을 뿜은거네

 

import가 안될 때를 검색해 봄

 

  • 설마 설치되지 않은 코드 파일이 있는 걸까?
좌) 해당 디렉토리의 파일 리스트, 우) 배포되는 soupsieve 파일 리스트
  • 다 제대로 들어가 있음
  • 그럼 검색한 tip을 바탕으로 해도 코드에 적혀있는 명령이 맞다.

그렇다면...

혹시 soupsieve 디렉토리 안에 있는

파일들의 권한에 문제가 있는 것이 아닐까?


soupsieve 내 파일의 권한 확인

그 어떤 사용자도 파이썬 코드 파일의 실행 권한이 없다.

모든 사용자에게 실행 권한을 줘보자.

# soupsieve 내부의 모든 파일의 권한을 변경하고 싶음
$ chmod -R [권한숫자] [절대경로]
$ chmod -R 755 /opt/splunk/etc/apps/stock/bin/bs4/soupsieve
chmod 상세
모두 권한이 바뀌었다

실패//

 

 

 

 

 

(참고) splunk 개발자 도구 (SDK) GitHub 

https://github.com/splunk/splunk-sdk-python

 

GitHub - splunk/splunk-sdk-python: Splunk Software Development Kit for Python

Splunk Software Development Kit for Python. Contribute to splunk/splunk-sdk-python development by creating an account on GitHub.

github.com

                            

 

 

728x90
반응형