지난 포스팅에서는 주식에 대한 히스토리 정보를 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"에서 넣은 도움말을 확인할 수 있음
해결법: bin/readstock.py에 해당 코드를 작성한다.
혹시 위 화면처럼 도움말이 보이지 않으면 다음처럼 설정하자.
![](https://blog.kakaocdn.net/dn/caXJJo/btsj5wNkPhX/lQTDDLJOE5x8iTWWfPskU1/img.png)
사용자 계정명에서 "Preferences" 를 선택
![](https://blog.kakaocdn.net/dn/05ClB/btsj8XP3g2A/knYSjECNtj5hKqObEskyk0/img.png)
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
가상 서버에 splunklib 모듈이 설치되어 있지 않다는 오류가 나왔다.
cd /opt/splunk/bin
pip install splunklib
그냥 무시하겠다...
깔았는데 왜 없다하니....
- 그러니까 얘가 하는 말은 /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
🍀STEP 6 🍀 스플렁크 재시작 후 readstock 명령어가 먹는지 확인한다.
작업 검사기 search.log 확인
ERROR ChunkedExternProcessor [21143 ChunkedExternProcessorStderrLogger] - stderr: 'The soupsieve package is not installed. CSS selectors cannot be used.'
🍀 1차 시기 🍀
얘는 일단
- pip3 install soupsieve나 python -m pip install soupsieve 를 해보고 효과가 없으면
- /lib/python3/dist-packages의 bs4 folder의 soupsieve folder를 local bs4 folder에 넣어보라고 함.
근데 여기서 python -m의 의미가
대충 모듈의 전체 경로를 안 적어도
어디서든 실행이 가능하게끔 하는 역할을 하는 것이라고 한다.
뭔가 강하게 끌림
python3 -m pip3 install soupsieve
python3 -m pip install 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번째 줄 코드에서 오류를 뿜었다는 거지?
- 그래 한 번 보자...
![](https://blog.kakaocdn.net/dn/BT3Lq/btsj8imO7PV/KVgeEfNAPiy1oVgUbq5ovk/img.png)
- soupsieve가 import가 안되서 오류에 똑같이 있는 저 말을 뿜은거네
![](https://blog.kakaocdn.net/dn/bZ76RG/btskaE303Tq/gSBi53odsHWXyA6iYPLCsK/img.png)
- 설마 설치되지 않은 코드 파일이 있는 걸까?
![](https://blog.kakaocdn.net/dn/lcGIZ/btsj8i8f1fs/o6EIQFgHC0KDuHG2wWL8X0/img.png)
- 다 제대로 들어가 있음
- 그럼 검색한 tip을 바탕으로 해도 코드에 적혀있는 명령이 맞다.
그렇다면...
혹시 soupsieve 디렉토리 안에 있는
파일들의 권한에 문제가 있는 것이 아닐까?
![](https://blog.kakaocdn.net/dn/rhKKh/btsj9DKW8Vg/pjguzDOOUWxbTwokIK9fgK/img.png)
그 어떤 사용자도 파이썬 코드 파일의 실행 권한이 없다.
모든 사용자에게 실행 권한을 줘보자.
# soupsieve 내부의 모든 파일의 권한을 변경하고 싶음
$ chmod -R [권한숫자] [절대경로]
$ chmod -R 755 /opt/splunk/etc/apps/stock/bin/bs4/soupsieve
![](https://blog.kakaocdn.net/dn/dfTlpS/btsj8hBvPG6/T0Dkozm1oeLycXu3Hk36I0/img.png)
![](https://blog.kakaocdn.net/dn/bIEbr6/btskc9QewG0/XkNCCTyWN7dUQ63waLKVx1/img.png)
실패//
(참고) 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
'Splunk > Splunk Project' 카테고리의 다른 글
[ Splunk Project ] Splunk로 주식 분석 | Phase 4. 현재 나의 현황 대시보드 만들기 2 (0) | 2023.06.21 |
---|---|
[ Splunk Project ] Splunk로 주식 분석 | Phase 3. 현재 나의 현황 대시보드 만들기 (1) | 2023.06.21 |
[ Splunk Project ] Splunk로 주식 분석 | Phase 1. 주식 가격 조회 (0) | 2023.06.20 |
[ Splunk 서버구축 ] splunk enterprise version up 하기, 업데이트 하기 (0) | 2023.06.15 |
[ Splunk Project ] Splunk App 삭제하기 (0) | 2023.06.13 |