- Splunk 개요
- CentOS에 Splunk 설치
- 사전 준비 사항
- Splunk 설치
- Splunk Universal forwarder 설치
- Splunk 정보
- Splunk 매뉴얼
- 함수
- Splunk 검색
- SplunkWeb
- Splunkd
- Splunk App
- Splunk App 구조
- Splunk Hadoop Connect
- Splunk Technology Add-on for HadoopOps
- Splunk 한글화
- Hunk
- 이슈
- CheckPoint
- Splunk 관리
- Splunk Development
- 권한에 따른 파일 위치
- Splunk App 생성
- App 메뉴 수정
- View 추가 및 생성
- View용 Template
- 패널 추가 및 관리
- 외부 JavaScript 사용
- SplunkJS로 데이터 가져오기
- Splunk REST API
- SplunkJS
- SplunkJS Apps 생성
- SplunkJS Page 추가
- SplunkJS View 페이지 생성
- JavaScript SDK
- Python SDK
- 참고 문헌
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/
라이선스 : 상용 솔루션
플랫폼 :
Splunk 개요
로그 수집 및 로그 기반 통계 전문 솔루션인 Splunk는 간단한 ETL 및 자동으로 내용에 대한 Index를 생성 합니다.
Flume Architecture
http://coverall2.splunk.com/web_assets/developers/diagrams/NSAF/NSAF_Architecture.jpg
http://1.bp.blogspot.com/-sn0wYFlSrv0/UU3Hjuq-4xI/AAAAAAAABPk/P8ttGMkMvtQ/s1600/LogAggregation.png
http://cdn-static.zdnet.com/i/story/60/01/032704/splunk-41_press_overview_v3pptx.jpg
CentOS에 Splunk 설치
사전 준비 사항
UCloud 기본 설정을 참조하여 CentOS 설치 및 설정
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
python2.7/sitepackages/cherrypy/ : CherryPy Web Server
python2.7/sitepackages/mako/ : Mako Template Engine
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
http://localhost:8000/locale/app/AppName/ViewName
시작 프로그램 : 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
http://localhost:8000/ko_KR/moduleName/viewName
module : etc/apps/~/, Splunk.Module, Splunk.Module.Dispatcher
view : ~.xml, ~.html
API Call
is_api parameter
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
홈페이지 : http://splunk-base.splunk.com/apps/57282/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:
In handler 'log_status': Could not find object id=1@opsec
$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"를 선택하여 메뉴을 수정 합니다.
메뉴 관리
"설정 -> 사용자 인터페이스 -> 탐색 메뉴" 메뉴에서 앱 컨텍스트로 "CustomApp(CustomApp)"을 선택 합니다.
default 메뉴의 권한을 설정 합니다.
View 추가 및 생성
"설정 -> 사용자 인터페이스 -> 뷰" 메뉴에서 앱 컨텍스트로 "CustomApp(CustomApp)"을 선택 합니다.
"새로 만들기" 버튼을 선택 합니다.
대상 앱 : CustomApp
뷰 이름 : CustomView001
$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 추가 :
JS 파일 : js/i18n.js
JS 추가 :
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 추가
"편집 -> 원본 편집" 메뉴를 선택 합니다.
명명 규칙
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
검색 명명 규칙 : search1, search2, search3 형태로 지정 합니다.
JavaScript에서 HTML Element 노드 찾기
require(
["splunkjs/mvc/utils", "splunkjs/mvc/tokenutils", "underscore", "jquery"]("splunkjs/mvc",),
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](idx.md);
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
/nas/appl/splunk/etc/apps/zzapps/default/data/ui/views/default.xml
/nas/appl/splunk/etc/apps/zzapps/appserver/templates/redirect.tmpl
- /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"]("0","216000","720000","936000".md)</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](0xFFE800,0x84E900,0x000080.md)</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
ProxyRequests On
ProxyVia On
Order deny,allow
Allow from all
SSLProxyEngine On
ProxyPass /proxy https://node201.hadoop.com:8089/ retry=0 timeout=5
ProxyPassReverse /proxy/ https://node201.hadoop.com:8089/
같은 장비의 다른 서비스 호출시 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
참고 문헌
[[Django]], CherryPy
매뉴얼
리셀러 등
http://docs.splunk.com/Documentation/Splunk/5.0.1/Installation/InstallonLinux#RedHat_RPM_install
http://blog.naver.com/PostView.nhn?blogId=daonmate&logNo=110108653763
분류: BigData