Você está na página 1de 30

SPLUNK - EXERCÍCIOS SPL

! disclaimer

Toda informação presente neste documento só deve ser acessada por seus
responsáveis e/ou por seus destinatários. Neste documento estão presentes
informações relacionadas as operações e necessidades da empresa
REQUISITANTE, por este motivo, esse material não deverá ser compartilhado
no caso de não haver anuência de seus responsáveis e/ou por parte do
REQUISITANTE. O uso indevido das informações contidas nesse material
poderá implicar em ações legais.
Instrutores
Francisco Mota – Econocom
Lucas Cucolo – Itau
• Table • Stats • Dedup
• Fields • Eventstats • Transpose
• Fillnull • Streamstats • Inputcsv
• Addcoltotals • Chart • Inputlookup
• Addtotals • Timechart • Lookup
• Top • Eval • Outputlookup
• Rare • Where • Transaction
• Head • Search
• Sort • Rename
1. Table: realiza a tabulação dos campos disponíveis na consulta
| table *
| table <campo1>,<campo2>
2. Fields: seleciona os campos que prosseguirão em utilização, sem alterar a
forma de visualização
| fields <campo1>,<campo2>
| fields - <campo1>,<campo2>
3. Fillnull: preenche os valores nulos para os campos apresentados
| fillnull <campo> value="N/A“
4. Filldown: preenche os valores nulos com o valor do último campo não nulo
apresentado
| filldown [<campo>]
| filldown [<campo1>] [<campo2>] *
Comandos SPL

• Top: exibe os valores mais comuns para um determinado campo


| top limit=n <campo> by <campo_de_agrupamento> countfield=<novo_campo>
showperc=<“t” ou “f”>
• Rare: exibe os valores mais incomuns para determinado campo
| top limit=n <campo> by <campo_de_agrupamento> countfield=<novo_campo>
showperc=<“t” ou “f”>
• Head: exibe os últimos resultados (não confundir com o comando top)
| head 20
| head (<campo><100)
• Sort: ordena os resultados
| sort _time, -host
| sort num(<campo_numérico>), -str(<campo_string>)
1. Addcoltotals: adiciona a soma dos valores para as colunas numéricas
| addcoltotals <campos> labelfield=<label>

2. Addtotals: adiciona a soma dos valores numéricos em cada linha


| addtotals campo1 campo2 campoN fieldname=<novo_campo>
1. Listar o Top 5 de ocorrências para o campo action no index web
2. Ordenar em ordem decrescente pelo campo que indica a quantidade
3. Eliminar os campos que apresentam percentual
4. Adicionar soma total para a coluna count
5. Preencher valor nulo no campo action com o termo “TOTAL”
index=web

| top 5 action

| sort - count

| fields - percent

| addcoltotals count

| fillnull value=TOTAL
• Stats: executa funções estatísticas encima dos valores dos campos
| stats <funcao> by <campo_agrupamento>
index=web | stats count by action

• Eventstats: executa funções estatísticas encima dos valores dos campos considerando
todos os eventos e mantendo a lista de campos original
| eventstats <funcao> by <campo_agrupamento>
index=web | eventstats count by action

• Streamstats: executa funções estatísticas encima dos valores dos campos


considerando o streaming, realizando o cálculo a cada novo evento neste streaming
| streamstats <funcao> by <campo_agrupamento>

*reset_on_change=<“true” ou “false”>

index=web | table bytes action | streamstats sum(bytes) as soma by action reset_on_change=true

Parâmetros: avg(), count(), distinct_count(), max(), min(), sum(), first(), last(), mode(), mean(), var(), values(),
list(), range()
index=web | head 5
| stats sum(bytes) as soma by clientip
| table bytes, soma, clientip

index=web | head 5
| eventstats sum(bytes) as soma by clientip
| table bytes, soma, clientip

index=web | head 5
| streamstats sum(bytes) as soma by clientip
| table bytes, soma, clientip
• Chart: retorna os cálculos estatísticos em formato tabular
| chart <funcao> by <campo_agrupamento>

• Timechart: realiza a contagem sobre séries temporais


| timechart <funcao> by <campo_agrupamento>

• Bin: agrupa os valores dos campos em séries


| bin <campo> <funcao1>[<funcao2>]
1. Retorne a média de "througput" de cada "host" para cada período de uma
hora agrupando o resultado por host:
| bin _time span=1h | stats avg(bytes) by _time host

2. Alinhe o horário às 3h (horário local). Defina o intervalo para 12h. Os


compartimentos representarão das 3h às 15h, depois das 15h às 3h (no dia
seguinte) e assim por diante:
| bin _time span=12h aligntime=@d+3h

3. Agrupar o volume de bytes em grupos de 100 bytes


index=web | bin bytes bins=100 | stats count by bytes
Range selecionado no time picker Span Padrão
Last 15 minutes 10 seconds
Last 60 minutes 1 minute
Last 4 hours 5 minutes
Last 24 hours 30 minutes
Last 7 days 1 day
Last 30 days 1 day
Previous year 1 month

14
1. Eval: atribuição de valores a campos
2. Operadores:
Tipo Operador

Aritméticos +-*/%

Concatenação +

Booleano AND OR NOT XOR < > <= >=  != = ==


LIKE

3. Sintaxe básica
| eval <campo>=<atribuicao_de_valores>

4. Maiúsculas e minúsculas:
| eval <campo>=lower/upper<valor>
Comandos SPL

1. If
| eval <campo>=if(<campo> == <valor>, “<valor_true>”, “<valor_false>”)
| eval error=if(in(status, "404","500","503"),"true","false") 

2. Case
|eval <campo> = case(<campo>==<valor>, “<valor>”, <campo>==<valor>,
“<valor>”)

3. Exemplos de uso
Comandos SPL

1. Crie um novo campo chamado “Descricao” para cada evento. Usando a função
“if”, atribua o valor OK para o campo “Descricao” se o status for 200. Caso
contrário, o valor “Problema” deverá ser atribuído ao campo.

2. Crie um novo campo chamado lowuser. Usando a função “lower”, popule o


novo campo com a versão lowercase dos valores no campo JSESSIONID.

3. Utilizando a função case, atribua uma interpretação textual baseada em cada


status http em um novo campo chamado error_msg.
Comandos SPL

• Where: Filtro de valores após tratamento da consulta


| where <operação>

• Search: busca de valores de campos ou termos específicos


| search <operação>
• Rename: renomeia os campos em tempo de consulta
| rename <campo> as <novo_nome>

• Dedup: remove valores duplicados para campos


| dedup <campo>
| dedup status
| dedup 3 status (mantém os 3 primeiros valores e remove os subsequentes)

• Transpose: faz a inversão de linhas e colunas sobre valores tabulados


| transpose
• Inputcsv: realiza a leitura de um arquivo csv no servidor
| inputcsv prices.csv

• Outputcsv: exporta os resultados de uma consulta pra um arquivo csv


| outputcsv novo_<racf>.csv

• Inputlookup: realiza a leitura de um arquivo de lookup pré-definido no


servidor
| inputlookup prices.csv

• Outputlookup: exporta os resultados de uma consulta para um arquivo de


lookup
| outputlookup novo_<racf>.csv

• Lookup: realiza a comparação de valores de um arquivo de lookup com os


demais valores na consulta
index=web| lookup prices.csv productId as productId OUTPUTNEW product_name, price,
sale_price, Code
1. Transaction: Agrupa séries de eventos em transações
| transaction <campos>
startswith: busca ou expressão que marca o fim de uma transação;
endswith: busca ou expressão que marca o fim de uma transação;
maxspan= duração máxima para a transação;
maxpause= duração máxima entre os eventos da transação;
maxevents= número máximo de eventos de uma transação;

index=web | transaction clientip maxspan=30s maxpause=5s


index=web | transaction clientip host maxspan=30s maxpause=5s
• Join • Mvindex • Predict
• Append • Mvcount • Trendline
• Appendcols • Mvfind • Rangemap
• Appendpipe • Mvsort • Tail
• Makemv • Mvzip • Timewrap
• Mvexpand • Split
• Nomv • Outlier
• Append: concatena os resultados de uma subconsulta à consulta principal,
inserindo o resultado em uma nova linha
index=web | stats count by action | append [search index=web | stats count]

• Appendcols: concatena os resultados de uma subconsulta à consulta principal,


inserindo o resultado em uma nova coluna
index=web | timechart span=1d count as CountA
| appendcols [search index=secure | timechart span=1d count as CountB]

• Appendpipe: permite inserção de um novo pipe para tratar os resultados de uma


consulta em uma subconsulta
index=web | stats count by host | appendpipe [|stats sum(count) as count | eval host=“Soma"]

• Join: combina os resultados de uma subconsulta com os resultados da consulta


principal utilizando um campo de comparação
index=web | join productId [|inputlookup prices.csv]
• Makemv: transforma um campo em multivalorado à partir de algum
delimitador presente no campo
| makemv delim=“delim" <campo> 

• Mvexpand: torna os valores de campos multivalorados em eventos


separados
index=web | stats values(productId) as valores by action | mvexpand valores

• Nomv: torna um campo multivalorado em um campo com valor


único
index=web | stats values(productId) as valores by action | nomv valores
1. Mvindex: identifica dentro de um campo multivalorado a posição em que o valor
especificado se encontra
| eval <campo>=mvindex(<campo>,<indice>)
2. Mvcount: faz a contagem dos valores dentro de um campo multivalorado
| eval n=mvcount(<multi>)

3. Mvfilter: busca e exibe valores presentes em campos multivalorados


| eval k=mvfilter(match(campo, “regex"))
4. Mvfind: identifica em qual posição do campo multivalorado um valor se encontra
| eval n=mvfind(<mvfield>,”regex”)
5. Mvsort: ordena os valores dentro de campos multivalorados
| eval s=mvsort(<multi>)
6. Mvzip: concatena valores com base em delimitadores
|eval n=mvzip(<campo1>,<campo2>,“<delimitador>")
7. Split: divide valores em campos singulares à partir de um delimitador, tornando este
campo multivalorado
| eval n=split(<campo>,“<delimitador>")
index=web

| table clientip

| makemv delim=“.” clientip

| eval rede=mvindex(clientip, 0) + “.”


mvindex(clientip, 1) + “.”
mvindex(clientip, 2)
1. Crie um campo multivalorado chamado “multi” com 5 valores separados por ”,”
| makeresults
| eval multi=“um,dois,tres,quatro,cinco"

2. Separe os valores usando o delimitador “,”


| makemv delim=“," multi

3. Atribua os valores do campo multivalorado a campos distintos


| eval primeiro=mvindex(multi,0)
| eval segundo=mvindex(multi,1)...

4. Conte quantos valores existem no campo multivalorado “multi”


| eval n=mvcount(multi)

5. Crie um novo campo chamado “novo” atribuindo somente o valor do segundo


campo
| eval k=mvfilter(match(multi, "dois"))
1. Outlier: identifica e remove os “pontos fora da curva” dentro de uma série
de dados
| outlier
Obs: para captura do outlier, de acordo com a necessidade específica, é possível utilizar as técnicas presentes nos links:
https://docs.splunk.com/Documentation/SplunkCloud/latest/Search/Findingandremovingoutliers
https://docs.splunk.com/Documentation/Splunk/8.0.6/SearchReference/Anomalydetection

2. Predict: faz a predição do comportamento da série de dados em próximos


períodos dentro de séries temporais
index=web action=purchase arcade | timechart span=1d count | predict count

3. Trendline: faz o cálculo de média móvel (simples, ponderada ou


exponencial)
index=web
| stats count BY date_mday
| sort date_mday
| trendline <sma/wma/ema>2(count) as trend
• Rangemap: cria range entre os resultados obtidos atribuindo valores
específicos para cada range
index=web
| stats sum(bytes) as soma by action
| rangemap field=soma
ok=0-1000
alerta=1001-2000
problema=2001-3000
default=caos

• Timewrap: agrupa os valores em séries temporais em intervalos iguais


index=web
| timechart count span=1h
| timewrap 1d
Obrigado!

Você também pode gostar