"Splunk"의 두 판 사이의 차이
둘러보기로 가기
검색하러 가기
잔글 (→외부 JavaScript 사용) |
(차이 없음)
|
2014년 5월 7일 (수) 17:32 기준 최신판
Hadoop을 사용하는 상용 솔루션인 Splunk를 정리 합니다.
- 홈페이지 : http://www.splunk.com/, http://ko.splunk.com/, https://www.facebook.com/SplunkKorea?ref=stream
- Document : http://docs.splunk.com/Documentation, 한글 문서
- Apps : http://apps.splunk.com/
- Answer : http://answers.splunk.com/
- Wiki : http://wiki.splunk.com/
- Blog : http://blogs.splunk.com/
- Developer : http://dev.splunk.com/
- Conference : http://conf.splunk.com/
- Schwag Store : http://www.co-store.com/splunk
- Splunk Base : http://splunk-base.splunk.com/
- 다운로드 : http://www.splunk.com/download
- 라이선스 : 상용 솔루션
- 플랫폼 :
목차
Splunk 개요
로그 수집 및 로그 기반 통계 전문 솔루션인 Splunk는 간단한 ETL 및 자동으로 내용에 대한 Index를 생성 합니다.
- Flume Architecture
- 데이터 검색
- 데이터 인텍싱
- 데이터 수집
CentOS에 Splunk 설치
사전 준비 사항
- UCloud 기본 설정을 참조하여 CentOS 설치 및 설정
Splunk 설치
- 다운로드 사이트에서 설치 파일을 다운로드 합니다.
- Splunk의 Free vs. Enterprise 기능 비교
- 다운로드 사이트에서 Splunk 설치 파일을 다운로드 합니다.
### wget http://download.splunk.com/releases/5.0.3/splunk/linux/splunk-5.0.3-163460-linux-2.6-x86_64.rpm ### wget http://download.splunk.com/releases/6.0/splunk/linux/splunk-6.0-182037-linux-2.6-x86_64.rpm wget http://download.splunk.com/releases/6.0.2/splunk/linux/splunk-6.0.2-196940-linux-2.6-x86_64.rpm rpm -i splunk-6.0-182037-linux-2.6-x86_64.rpm ### rpm -i --prefix=~ splunk-5.0.3-163460-linux-2.6-x86_64.rpm #--- 설치되는 폴더 변경시 ### rpm -U splunk-5.0.3-163460-linux-2.6-x86_64.rpm #--- Splunk upgrade ### rpm -U --prefix=~ splunk-5.0.3-163460-linux-2.6-x86_64.rpm #--- SPlunk upgrade
- vi .bashrc
### ---------------------------------------------------------------------------- ### Splunk 설정 ### ---------------------------------------------------------------------------- export SPLUNK_HOME=/opt/splunk export PATH=${PATH}:${SPLUNK_HOME}/bin CDPATH=${CDPATH}:/opt
- Splunk 실행 및 접속
splunk start --accept-license #--- Splunk 시작 (첫 시작시) ### splunk enable boot-start #--- CentOS 기동시 자동 시작 설정 ### splunk enable boot-start -user splunk
- http://localhost:8000/, admin / changeme
Splunk Universal forwarder 설치
wget http://download.splunk.com/releases/5.0.4/universalforwarder/linux/splunkforwarder-5.0.4-172409-linux-2.6-x86_64.rpm?ac=get_splunk_download
Splunk 정보
- 설치 폴더 : /opt/splunk
- SplunkWeb : /opt/splunk/var
- Splunk DB : /opt/splunk/var/lib/splunk
- Python 폴더 : /opt/splunk/lib/python2.7
- 설정 파일
- vi /opt/splunk/etc/splunk-launch.conf
- 설정 폴더
- cd /opt/splunk/etc/system/local/
- cd /opt/splunk/etc/apps/~/local/
- cd /opt/splunk/etc/apps/~/default/
- cd /opt/splunk/etc/system/default/
- 설정 파일 목록
- vi web.conf
- vi server.conf
- vi inputs.conf
- Version 확인
- vi /opt/splunk/etc/splunk.version
- Demon : /opt/splunk/bin/splunkd
- 기동 종료 : splunk start / stop / restart / status
- splunk start splunkd
- splunk start splunkweb
- Process 확인 : ps -ef | grep splunk | grep -v grep
- Ports
- 8000 port : splunkweb 포트
- 8009 port : splunkd 데몬이 사용하는 포트
- 9997 port : Forwarder에서 데이터를 수신하는 포트
Splunk 매뉴얼
- Splunk 폴더 구조 (설치 폴더 : /opt/splunk/)
- bin/
- etc/
- splunk-launch.conf : 설정 파일
- splunk.version : 버전 정보
- passwd : Splunk 사용자 정보 저장
- apps/~/ : Splunk App 폴더
- users/~/ : 사용자별 정보 저장
- include/
- lib/
- python2.7/ : Python 설치 폴더
- python2.7/site-packages/splunk/ : Splunk Application
- appserver/mrsparkle/ : Document Root
- appserver/mrsparkle/root.py : splunkweb 데몬, 502 라인 참조
- appserver/mrsparkle/lib/module.py : ModuleController
- appserver/mrsparkle/controllers/view.py : ViewController
- openssl/
- share/
- splunk/ : Splunk 개발 프로그램 샘플
- app_templates : Splunk App 샘플
- var/ : SplunkWeb에서 사용하는 폴더
- lib/splunk/ : 데이터 저장
- log/splunk/ : 로그 저장
- run/splunk/ : Splunk Web에서 사용하는 작업용 폴더
- Splunk CLI 도움말
splunk splunk help cheatsheet
- Port 설정
splunk set web-port 9000 splunk set splunkd-port 9089
함수
- Unix time을 년월일 형태의 포맷으로 변환
eval sTime=strftime(time / 1000000, "%Y-%m-%d %H:%M:%S.%6N")
Splunk 검색
error OR failed OR severe OR (sourcetype=access_* (404 OR 500 OR 503)) error OR failed OR severe OR (sourcetype=access_* (status=404 OR status=500 OR status=503)) sourcetype=access_* action=purchase | top category_id
SplunkWeb
- 시작 프로그램 : lib/python2.7/site-packages/splunk/appserver/mrsparkle/root.py
- run() 함수 :
- Config 파일
- etc/system/default/web.conf -> cherrypy.config['~']
- etc/system/local/web.conf
- Model : lib/python2.7/site-packages/splunk/model/
- base.py : SplunkAppObjModel class
- app.py : App class
- field.py : Field class, FieldValue class
- Module folder : share/splunk/search_mrsparkle/modules/
- ~.html, ~.py, ~.js, ~.conf
- lib/python2.7/site-packages/splunk/appserver/mrsparkle/lib/module.py
- lib/python2.7/site-packages/splunk/appserver/mrsparkle/controllers/module.py
- ModuleHandle class, ModuleController class
- Controller : lib/python2.7/site-packages/splunk/appserver/mrsparkle
- controllers/top.py : TopController class : URL Path에 따른 Controller 지정
- controllers/custom.py : CustomController class : Customer Controller 사용 지원
- controllers/__init__.py : BaseController class
- root.py : RootController class의 index(self) 함수
- controllers/view.py : ViewController class
- Template : share/splunk/search_mrsparkle/
- template/viw/**.html
- exposed/js/, exposed/html/
- CSS : exposed/css, exposed/css/skins/default/default.css, modules/**/*.css
- log folder : var/log/splunk/
- etc/log.cfg, etc/log-local.cfg
- web_service.log
- static folder : share/splunk/search_mrsparkle/exposed/
- Splunk apps : /etc/apps/
- 다국어 지원
- lib/python2.7/site-packages/splunk/appserver/mrsparkle/lib/i18n.py
- share/splunk/search_mrsparkle/exposed/js/i18n.js
- module : etc/apps/~/, Splunk.Module, Splunk.Module.Dispatcher
- view : ~.xml, ~.html
- API Call
- is_api parameter
- http://localhost:8000/api/~
- CherryPy Web Server : lib/python2.7/site-packages/cherrypy/
- Mako Template Engine : lib/python2.7/site-packages/mako/
Splunkd
Splunk App
- Splunk에 Plug-and-Play 형태로 설치되는 모듈
Splunk App 구조
- 폴더 구조
- bin/ : 실행 파일
- appserver/ : Splunk Web에서 사용되는 화면
- local/, default/ : 로컬 설정과 디폴트 설정, 반드시 local 설정 폴더에 있는 파일만 수정 하세요.
- metadata/ : 메타 데이터
- logs/ : 로그 폴더
Splunk Hadoop Connect
- 홈페이지 : http://splunk-base.splunk.com/apps/Splunk+Hadoop+Connect
- 설치 폴더 : /opt/splunk/etc/apps/HadoopConnect/
- 사용자별 설정 폴더
- etc/users/admin/HadoopConnect/
- history/ : HadoopConnect에서 작업한 history 저장
- metadata/
- HDFS 실행
start-dfs.sh
- 참고 문헌
Splunk Technology Add-on for HadoopOps
- 설치 폴더 : /opt/splunk/etc/apps/Splunk_TA_hadoopops/
- Hadoop Operations
Splunk 한글화
- POT (Portable Object Template) 파일 : PO 파일을 생성하기 위해서 사용하는 Template
- lib/python2.7/site-packages/splunk/appserver/mrsparkle/locale/messages.pot
- etc/apps/~/locale/messages.pot
- PO (Portable Object) 파일 : GNU Gettext 카탈로그
- lib/python2.7/site-packages/splunk/appserver/mrsparkle/locale/ko_KR/LC_MESSAGES/messages.po
- etc/apps/~/locale/ko_KR/LC_MESSAGES/messages.po
- MO (Machine Object) 파일 : PO 파일이 번역된 binary 기반의 파일
- lib/python2.7/site-packages/splunk/appserver/mrsparkle/locale/ko_KR/LC_MESSAGES/messages.mo
- etc/apps/~/locale/ko_KR/LC_MESSAGES/messages.mo
- 참고 문헌
Hunk
- 참고 문헌
이슈
CheckPoint
- ERROR: SIC ERROR 119 - SIC Error for lea: Client could not choose an authentication method for service lea
- fwasync_mux_in: 10: handler returned with error
- opsec_auth_client_connected: connect failed (119)
- opsec_auth_client_connected: SIC Error for lea: Client could not choose an authentication method for service lea
splunk internal call command: $SPLUNK_HOME/bin/splunk _internal call /servicesNS/nobody/Splunk_TA_opseclea_linux22/opsec/log_status/1@opsec splunk output: QUERYING: 'https://127.0.0.1:8089/servicesNS/nobody/Splunk_TA_opseclea_linux22/opsec/log_status/1@opsec' FAILED: 'HTTP/1.1 404 Not Found' Content: <?xml version="1.0" encoding="UTF-8"?> <response> <messages> <msg type="ERROR">In handler 'log_status': Could not find object id=1@opsec</msg> </messages> </response>
- $SPLUNK_HOME/Splunk_TA_opseclea_linux22/local/opsec.conf
lea_server_auth_port = 18185 lea_server_auth_type = sslca lea_server_ip = 10.0.xxx.5
- $CHECKPOINT_HOME/conf/fwopsec.conf
lea_server auth_port 18185 lea_server auth_type sslca
- cpstop
- cpstart
- sslca 대신 ssl_opsec 인증 방식을 지원할 경우
cd etc/apps/Splunk_TA_opseclea_linux22/opsec-tools ./opsec_putkey port 18185 CMA_IP authkey.C 파일이 생성됨 etc/apps/lea-loggrabber-splunk/bin 폴더에 authkey.C 파일 복사 vi etc/apps/Splunk_TA_opseclea_linux22/default/lea.conf ### lea_server auth_type ssl_opsec lea_server auth_type auth_opsec Splunk restart
Splunk 관리
- Index 데이터 삭제
splunk stop splunk clean eventdata 인덱스명 splunk start
Splunk Development
권한에 따른 파일 위치
- 권한 설정
- 비공개 유지 : "$SPLUNK_HOME/etc/users/사용자_아이디/CustomApp/" 폴더 아래에 파일 생성
- 이 앱만 : "$SPLUNK_HOME/etc/apps/CustomApp/" 폴더 아래에 파일 생성
- 모든 앱 : "$SPLUNK_HOME/etc/users/CustomApp/" 폴더 아래에 파일 생성
Splunk App 생성
- "앱 -> 앱 관리" 메뉴에서 "앱 만들기" 버튼을 선택 합니다.
- 이름 : CustomApp
- 폴더 이름 : CustomApp
- 버전 : 0.01
- 표시 여부 : 예
- 작성자 :
- 설명 :
- 템플릿 : barebones
- $SPLUNK_HOME/share/splunk/app_templates/ 폴더에 있는 Application Template를 사용 합니다.
- Application Template 종류 : barebones, sample_app
- 자산 업로드 :
- $SPLUNK_HOME/etc/apps/CustomApp/appserver/static/ 폴더로 업로드 됩니다.
- 생성된 App 정보
- 폴더 : $SPLUNK_HOME/etc/apps/CustomApp/
- appserver/ : 앱 관련 데이터 저장
- bin/ : 앱 관련 실행 파일 저장
- default/ : 앱 관련 디폴트 설정 저장
- app.conf : CustomApp의 기본 정보
- data/ui/nav/default.xml : 앱의 메뉴 정보
- data/views/ : 앱의 view 정보
- local/ : default/ 폴더에서 customize된 정보 저장
- metadata/ : 메타 데이터 저장
- default.meta : 앱의 설정 정보
- local.meta : 앱의 custom 설정 정보
- 앱 관리
- "앱 -> 앱 관리" 메뉴에서 권한, 속성, 개체 등을 편집 합니다.
App 메뉴 수정
- "설정 -> 사용자 인터페이스 -> 탐색 메뉴" 메뉴에서 앱 컨텍스트로 "CustomApp(CustomApp)"을 선택 합니다.
- "default"를 선택하여 메뉴을 수정 합니다.
<nav search_view="search" color="#65A637"> <view name="search" default='true' /> #--- 검색 <view name="data_models" /> #--- 피벗 <view name="reports" /> #--- 보고서 <view name="alerts" /> #--- 경고 <view name="dashboards" /> #--- 대시보드 <collection label="분석 요건 I"> #--- View 모음 <view name="view101"/> #--- 개별 view <view name="view102"/> <view name="view103"/> <view name="view104"/> </collection> <collection label="발생 서비스 분석"> <view name="view211"/> <view name="view212"/> </collection> <collection label="운영자 요청 분석"> <view name="view221"/> </collection> <collection label="발생 데이터 분석"> <view name="view232"/> </collection> </nav>
- 메뉴 관리
- "설정 -> 사용자 인터페이스 -> 탐색 메뉴" 메뉴에서 앱 컨텍스트로 "CustomApp(CustomApp)"을 선택 합니다.
- default 메뉴의 권한을 설정 합니다.
View 추가 및 생성
- "설정 -> 사용자 인터페이스 -> 뷰" 메뉴에서 앱 컨텍스트로 "CustomApp(CustomApp)"을 선택 합니다.
- "새로 만들기" 버튼을 선택 합니다.
- 대상 앱 : CustomApp
- 뷰 이름 : CustomView001
<form script="CustomView001.js" stylesheet="CustomView001.css"> <label>CustomView001</label> </form>
- $Splunk_HOME/etc/apps/CustomApp/local/data/ui/views/CustomView001.xml 파일이 생성 됩니다.
- View에서 사용하는 파일 업로드
- "앱 -> 앱 관리" 메뉴를 선택 합니다.
- CustomApp이 "속성 편집" 메뉴을 선택 합니다.
- "자산 업로드"에서 업로드할 파일을 선택한 후 업로드 합니다.
- $SPLUNK_HOME/etc/apps/CustomApp/appserver/static/ 폴더로 파일이 업로드 됩니다.
- 업로드한 파일을 View에서 사용하기 위해서는 Splunk를 재기동 하여야 합니다.
- "설정 -> 서버 컨트롤" 메뉴을 선택한 후 "Splunk 재시작" 버튼을 선택 합니다.
- View 페이지 접속 및 편집
- "앱 -> CustomApp" 메뉴을 선택 합니다.
- "대시보드" 메뉴에서 CustomView001 을 선택 합니다.
- View 관리
- "설정 -> 사용자 인터페이스 -> 뷰" 메뉴에서 앱 컨텍스트로 "CustomApp(CustomApp)"을 선택 합니다.
- view의 권한 설정과 복제, 이동, 삭제 등을 합니다.
View용 Template
- Template 폴더 : $SPLUNK_HOME/share/splunk/search_mrsparkle/templates/
- 대시보드 Template : dashboards/dashboard.html
- 정적 파일 저장 폴더 : $SPLUNK_HOME/share/splunk/search_mrsparkle/exposed/
- Template 파일에 정적 파일 추가
- CSS 파일 : css/bootstrap.min.css
- CSS 추가 : <link rel="stylesheet" type="text/css" href="${url('/static/css/bootstrap.min.css')}" />
- JS 파일 : js/i18n.js
- JS 추가 : <script src="${url('/static/js/i18n.js')}"></script>
- RequireJS의 Base 폴더
- $SPLUNK_HOME/share/splunk/search_mrsparkle/exposed/js/
- RequireJS를 위하여 JavaScript 파일의 위치를 관리
- share/splunk/search_mrsparkle/exposed/js/build/simplexml/config.js
- 주의 : JavaScript 추가시 config.js를 사용하여 추가하지 않을 경우, 오류가 발생할 수 있습니다.
패널 추가 및 관리
- View 화면에서 "편집 -> 패널 편집" 메뉴를 선택 합니다.
- "패널 추가" 버튼을 선택 합니다.
- 콘텐츠 제목 : Panel001
- 콘텐츠 유형 : 인라인 검색
- 인라인 검색, 인라인 피벗, 보고서
- 검색 문자열 : index=_internal
- 시간 범위 : 전체시간
- HTML Element 추가
- "편집 -> 원본 편집" 메뉴를 선택 합니다.
<form script="CustomView001.js" stylesheet="CustomView001.css"> <label>CustomView001</label> <row> <html> <p>HTML Element</p> </html> </row> </form>
- 명명 규칙
- Element 명명 규칙 : element1, element2, element3 형태의 id로 지정 합니다.
<div class="dashboard-cell" style="width: 50%;"> <div class="dashboard-panel clearfix"> <div class="panel-element-row"> <div class="dashboard-element html" id="element2" style="width: 100%"> <div class="panel-body html">
<div><p>HTML Element
</div> </div> </div> </div> </div>
- 검색 명명 규칙 : search1, search2, search3 형태로 지정 합니다.
- JavaScript에서 HTML Element 노드 찾기
require( ["splunkjs/mvc", "splunkjs/mvc/utils", "splunkjs/mvc/tokenutils", "underscore", "jquery"], function(mvc, utils, TokenUtils, _, $) { var node = null; node = $("#element2 .panel-body"); alert(node.html()); } );
외부 JavaScript 사용
- JavaScript에서 d3.js 파일 사용 방법
- RequireJS의 Base 폴더 : $SPLUNK_HOME/share/splunk/search_mrsparkle/exposed/js/
- $SPLUNK_HOME/share/splunk/search_mrsparkle/exposed/jslib/d3/d3.js 파일이 존재할 경우
require( ["splunkjs/mvc", "splunkjs/mvc/utils", "splunkjs/mvc/tokenutils", "underscore", "jquery", "../jslib/d3/d3"], function(mvc, utils, TokenUtils, _, $, d3) { var node = null; viewTemplate(); viewJavaScriptObject(window, "window"); chart001(d3); } );
SplunkJS로 데이터 가져오기
- Search 생성
var search004 = new SearchManager({ "id": "search004 ", "search": "index=json | head 10 | table _time guid gubun filename maxDuration source sourcetype", "earliest_time": "-2400h", "latest_time": "now", "preview": true });
- Search 결과 가져오기
var manager = splunkjs.mvc.Components.getInstance('search004'); #--- SearchManager 인스턴스 생성 var data = manager.data('results', { #--- SplunkResultsModel 생성 (events, preview, results, summary) output_mode: 'json_rows', count: 0 #--- 가져올 레코드 수 지정 (0. 모두 가져오기) }); data.on('data', function(results) { #--- results : SplunkResultsModel #--- 데이터를 가져올 때까지 반복적으로 호출됨 if (!data.hasData()) { return; } var collection = results.collection().toJSON(); #--- collection에 배열 형태로 레코드가 저장됨. 각 레코드는 object 형태를 가짐 ("{name: value}") for (var idx = 0; idx < collection.length; idx++) { var item = collection[idx]; window.alert("item[" + idx + "] = " + JSONtoString(item)); } }); manager.startSearch();
Splunk REST API
SplunkJS
SplunkJS Apps 생성
cd /nas/appl/splunk/etc/apps/framework ./splunkdj createapp zzapps splunk stop splunk start cd /nas/appl/splunk/etc/apps/zzapps
- /nas/appl/splunk/etc/apps/zzapps/default/data/ui/nav/default.xml
<nav> <view name="default" default="true"/> <a href="/dj/redirector/zzapps/home">Home</a> </nav>
- /nas/appl/splunk/etc/apps/zzapps/default/data/ui/views/default.xml
<view template="zzapps:/templates/redirect.tmpl" isVisible="false"><label>Home</label></view>
- /nas/appl/splunk/etc/apps/zzapps/appserver/templates/redirect.tmpl
<script> var root = "/dj/redirector/"; var path = document.location.pathname; var appName = path.match(/\/app\/(.*)\/default/)[1] window.alert(path); //--- /en-US/app/zzapps/default window.alert(root + appName + "/home"); //--- /dj/redirector/zzapps/home document.location = root + appName + "/home"; </script>
- /nas/appl/splunk/etc/apps/zzapps/django/zzapps/urls.py urlpatterns = patterns(, url(r'^home/$', 'zzapps.views.home', name='home'), ) - /nas/appl/splunk/etc/apps/zzapps/django/zzapps/views.py def home(request): return { "message": "Hello World from zzapps!", "app_name": "zzapps" }
- http://node201.hadoop.com:8000/dj/static/zzapps/custom.css /nas/appl/splunk/etc/apps/zzapps/django/zzapps/static/zzapps/custom.css
SplunkJS Page 추가
- vi /nas/appl/splunk/etc/apps/zzapps/django/zzapps/templates/home001.html
{# Boilerplate for a Django Bindings template #} {% extends "splunkdj:base_with_app_bar.html" %} {% load splunkmvc %} {% block title %}{ {app_name}} Your page title goes here{% endblock title %} {% block css %} <!-- Style sheets are loaded here --> <link rel="stylesheet" type="text/css" href="{ {STATIC_URL}}{ {app_name}}/custom.css" /> <link rel="stylesheet" type="text/css" href="{ {STATIC_URL}}splunkjs/css/dashboard.css" /> <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.0/themes/base/jquery-ui.css" /> <style> /* Define any page styles here*/ </style> {% endblock css %} {% block content %} <!-- You can use HTML and <div> tags for layout --> {# Splunk views go here #} <!-- http://dev.splunk.com/view/SP-CAAAEQA --> <div class="dashboard-body container-fluid main-section-body"> <div class="row"> <div class="dashboard-header clearfix"> <h2>Add views to a template using Django template tags</h2> </div> </div> <div class="fieldset"> {% dropdown id="drop_headcount" default="1" value="$headcount$"|token_safe %} {% radiogroup id="radio_sourcetype" managerid="search_sourcetypes" labelField="sourcetype" valueField="sourcetype" value="$sourcetype$"|token_safe default="splunkd"%} <div class="input form-submit" id="search_btn"> <button class="btn btn-primary submit">Search</button> </div> </div> <div class="dashboard-row"> <div class="dashboard-cell" style="width: 50%;"> <div class="dashboard-panel"> <div class="panel-head"> <h3>Chart</h3> </div> <div class="panel-body"> <p>view chart</p> {% chart id="chart1" managerid="search1" type="bar" %} </div> </div> </div> <div class="dashboard-cell" style="width: 50%;"> <div class="dashboard-panel"> <div class="panel-head"> <h3>Chart</h3> </div> <div class="panel-body"> <p>view chart</p> {% chart id="chart_sourcetype" managerid="search_chart" type="pie" %} </div> </div> </div> </div> <div class="dashboard-row"> <div class="dashboard-cell" style="width: 100%;"> <div class="dashboard-panel"> <div class="panel-head"> <h3>Table</h3> </div> <div class="panel-body"> <p>view table : $sourcetype$</p> {% table id="table_searchresults" managerid="search_resulttable" %} </div> </div> </div> </div> <div class="dashboard-row"> <div class="dashboard-cell" style="width: 30%;"> <div class="dashboard-panel"> <div class="panel-head"> <h3>Timeline</h3> </div> <div class="panel-body"> <p>view timeline</p> {% timeline id="timeline1" managerid="search1" %} </div> </div> </div> <div class="dashboard-cell" style="width: 70%;"> <div class="dashboard-panel"> <div class="panel-head"> <h3>Event Viewer</h3> </div> <div class="panel-body"> <p>view events</p> {% eventsviewer id="eviewer1" managerid="search1" %} </div> </div> </div> </div> </div> {% endblock content%} {% block managers %} {# Search managers go here #} {% searchmanager id="search1" search="index=_internal | head 1000 | stats count by sourcetype" preview=True required_field_list="*" status_buckets=300 %} {% savedsearchmanager id="search2" searchname="Top five sourcetypes" app="search" %} {% searchmanager id="search_resulttable" search="index=_internal sourcetype=$sourcetype$ | head $headcount$"|token_safe cache=True %} {% searchmanager id="search_chart" search="index=_internal | head 1000 | stats count by sourcetype" cache=True %} {% searchmanager id="search_sourcetypes" search="index=_internal | head 1000 | top sourcetype" cache=True %} {% endblock managers %} {% block js %} {# JavaScript goes here #} <script> var deps = [ "splunkjs/ready!", "splunkjs/mvc/radiogroupview" ]; require(deps, function(mvc) { var choices_headcount = [ {label:"1", value: "1"}, {label:"2", value: "2"}, {label:"3", value: "3"} ]; splunkjs.mvc.Components.getInstance("drop_headcount").settings.set("choices", choices_headcount); }); </script> {% endblock js %}
SplunkJS View 페이지 생성
- local/data/ui/views/view102.xml
- appserver/static/view102.js
- appserver/static/view102.css
<form stylesheet="view102.css" script="view102.js"> <label>분당 인덱싱</label> <fieldset submitButton="false" autoRun="true"> <input type="time" searchWhenChanged="true"> <default> <earliestTime>rt-5m</earliestTime> <latestTime>rt</latestTime> </default> </input> </fieldset> <row> <html> <h1>분당 인덱싱 건수</h1> <ul> <li>최대 초당 6,000개의 서비스, 서비스 당 2 이벤트</li> <li> <b> <font color="blue">최대 분당 720,000 인덱싱을 하여야 함</font> </b> </li> </ul> </html> <html> <h1>데이터부 인덱싱 자동화 방안</h1> <ul> <li>서비스별 IO폼 파일을 프로그램으로 자동 파싱하여 데이터베이스에 저장함</li> <li> <b> <font color="blue">데이터베이스 저장된 정보를 사용하여 서비스 로그 인덱싱 자동화함</font> </b> </li> </ul> </html> </row> <row> <chart> <title>분당 인덱싱 건수</title> <searchString>index=_internal sourcetype=splunkd series=json | eval epm = eps * 60 | stats avg(epm) as "분당 인덱싱 건수"</searchString> <earliestTime>$earliest$</earliestTime> <latestTime>$latest$</latestTime> <option name="charting.axisTitleX.visibility">visible</option> <option name="charting.axisTitleY.visibility">visible</option> <option name="charting.axisX.scale">linear</option> <option name="charting.axisY.scale">linear</option> <option name="charting.chart">radialGauge</option> <option name="charting.chart.nullValueMode">gaps</option> <option name="charting.chart.rangeValues">["0","216000","720000","936000"]</option> <option name="charting.chart.sliceCollapsingThreshold">0.01</option> <option name="charting.chart.stackMode">default</option> <option name="charting.chart.style">shiny</option> <option name="charting.drilldown">all</option> <option name="charting.gaugeColors">[0xFFE800,0x84E900,0x000080]</option> <option name="charting.layout.splitSeries">0</option> <option name="charting.legend.labelStyle.overflowMode">ellipsisMiddle</option> <option name="charting.legend.placement">right</option> </chart> <chart> <title>분당 인덱싱 건수/용량</title> <!-- <searchString>index=_internal sourcetype=splunkd series=json | bucket _time span=1m | eval epm = eps * 60 | eval kbpm = kbps * 60 | stats avg(epm) as "분당 인덱싱 건수" avg(kbpm) as "분당 인덱싱 용량(KB)" by _time</searchString> --> <searchString>index=_internal sourcetype=splunkd series=json | bucket _time span=1m | eval epm = eps * 60 | eval kbpm = kbps * 60 | stats avg(epm) as "분당 인덱싱 건수" by _time</searchString> <earliestTime>$earliest$</earliestTime> <latestTime>$latest$</latestTime> <option name="charting.axisTitleX.visibility">visible</option> <option name="charting.axisTitleY.visibility">visible</option> <option name="charting.axisX.scale">linear</option> <option name="charting.axisY.scale">linear</option> <option name="charting.chart">line</option> <option name="charting.chart.nullValueMode">gaps</option> <option name="charting.chart.sliceCollapsingThreshold">0.01</option> <option name="charting.chart.stackMode">default</option> <option name="charting.chart.style">shiny</option> <option name="charting.drilldown">none</option> <option name="charting.layout.splitSeries">0</option> <option name="charting.legend.labelStyle.overflowMode">ellipsisMiddle</option> <option name="charting.legend.placement">right</option> </chart> </row> <row> <table> <title>분당 인덱싱 현황</title> <searchString>index=_internal sourcetype=splunkd series=json | bucket _time span=1m | eval epm = eps * 60 | eval kbpm = kbps * 60 | stats avg(epm) as "분당 인덱싱 건수" avg(kbpm) as "분당 인덱싱 용량(KB)" by _time splunk_server | rename splunk_server as "인덱스 서버"</searchString> <earliestTime>$earliest$</earliestTime> <latestTime>$latest$</latestTime> <option name="wrap">true</option> <option name="rowNumbers">false</option> <option name="dataOverlayMode">none</option> <option name="drilldown">none</option> <option name="count">10</option> </table> </row> </form>
JavaScript SDK
yum install httpd httpd-* yum install mod_ssl
- vi /etc/httpd/conf/httpd.conf
<IfModule mod_proxy.c> ProxyRequests On ProxyVia On <Proxy *> Order deny,allow Allow from all </Proxy> SSLProxyEngine On ProxyPass /proxy https://node201.hadoop.com:8089/ retry=0 timeout=5 ProxyPassReverse /proxy/ https://node201.hadoop.com:8089/ </IfModule>
- 같은 장비의 다른 서비스 호출시 SELinux에 의해 차단됨
- 오류 메시지
Permission denied: proxy: HTTP: attempt to connect to 127.0.0.1:8888 (*) failed
- 조치 방안
/usr/sbin/setsebool httpd_can_network_connect true
- 참고 문헌
Python SDK
참고 문헌
- 매뉴얼
- 리셀러 등
- http://docs.splunk.com/Documentation/Splunk/5.0.1/Installation/InstallonLinux#RedHat_RPM_install
- Splunk 설치
- Splunk 설치하기 on 리눅스, 2013.01
- Splunk와 하둡 연동하기 - HadoopConnect