153

Explorando o splunk

Embed Size (px)

Citation preview

Explorando o Splunk

LINGUAGEM DE PROCESSAMENTO DE BUSCA (SPL) GUIA PRÁTICO

Por David Carasso, Chief-Mind do Splunk

Ressalva

Este livro foi feito somente como um texto ou livro de referências. O real uso do

software Splunk deve estar de acordo com sua licença de software e não com nada do

que está escrito neste livro. A documentação dada pelos produtos do software Splunk, e

não este livro, são a fonte de informação definitiva de como usar tais produtos.

Apesar de um grande cuidado ter sido tomado para garantir a precisão e atemporalidade

das informações neste livro, a Splunk não oferece nenhuma garantia da precisão ou

atemporalidade das informações e o Splunk não se responsabiliza quanto aos resultados

do uso das informações contidas neste livro. O leitor deve checar em docs.splunk.com

para as descrições definitivas das funções e conteúdos do Splunk.

Sumário

Prefácio .................................................................................. i

Sobre Este Livro ...................................................................... ii

O que está neste Livro? ......................................................... iii

Convenções ........................................................................... iv

Avisos..................................................................................... v

PARTE I EXPLORANDO SPLUNK ........................................ 1

1 A Historia do Splunk ............................................................ 1

Splunk ao resgate do Data Center ........................................ 1

Splunk ao resgate do departamento de marketing ................ 2

Se aproximando do Splunk.................................................... 2

Splunk: A companhia e o Conceito ....................................... 5

Como o Splunk aperfeiçoou os dados de maquina no data

Center .................................................................................... 6

Inteligência Operacional ........................................................ 7

Inteligência operacional no trabalho ...................................... 8

2 Integrando os Dados ......................................................... 10

O básico dos dados de maquina ......................................... 10

Tipos de dados que o Splunk consegue ler ........................ 12

Fontes de dados do Splunk ................................................. 12

Baixando, Instalando e Iniciando o Splunk .......................... 12

Baixando o Splunk ............................................................... 13

Instalando o Splunk ............................................................. 13

Starting Splunk .................................................................... 13

Trazendo os dados para serem Indexados ......................... 14

Entendendo como o Splunk Indexa os dados ..................... 15

3 Buscando com o Splunk .................................................... 17

A Dashboard de Busca ........................................................ 19

SPL™: Linguagem de Processamento de Busca ............... 22

Pipes .................................................................................... 23

AND Implícito ....................................................................... 23

top user ................................................................................ 23

Campos – Porcentagem ...................................................... 24

O comando de busca ........................................................... 24

Dicas para o uso do comando de busca ............................. 25

Subpesquisas ...................................................................... 26

4 SPL: Linguagem de Processamento de Busca .................. 27

Organizando Resultados ..................................................... 27

sort ....................................................................................... 27

Filtrando Resultados ............................................................ 29

where ................................................................................... 29

dedup ................................................................................... 30

head ..................................................................................... 32

Agrupando Resultados ........................................................ 33

transaction ........................................................................... 33

Reportando Resultados ....................................................... 36

top ........................................................................................ 36

stats ..................................................................................... 37

chart ..................................................................................... 40

timechart .............................................................................. 41

Filtrando, Modificando e Adicionando Campos ................... 43

fields .................................................................................... 43

replace ................................................................................. 44

eval ...................................................................................... 45

rex ........................................................................................ 46

lookup .................................................................................. 47

5 Enriquecendo seus dados ................................................. 50

Usando o Splunk para entender os dados .......................... 50

Identificando campos: Olhando entre as peças do quebra-

cabeça ................................................................................. 50

Explorando os dados para entender o escopo .................... 52

Preparando para reportagem e agregação ......................... 55

Visualizando os Dados ........................................................ 59

Criando Visualizações ......................................................... 60

Criando Dashboards ............................................................ 61

Criando Alertas .................................................................... 63

Criando Alertas através do Instrutor .................................... 63

Afinando Alertas Usando o Gerenciador ............................. 66

Customizando as Ações para um Alerta ............................. 68

O Gerenciador de Alertas .................................................... 69

PARTE II RECEITAS ........................................................... 70

6 Receitas para monitoramentos e alertas ........................... 70

Receitas de monitoramento ................................................. 70

Monitorando usuários concorrentes .................................... 70

Monitorando hospedeiros inativos ....................................... 71

Reportando dados categorizados ........................................ 72

Comparando o principais valores com os do último mês .... 73

Encontrando medidas que caíram em 10% na última hora. 75

Tabelando os resultados de semana a semana .................. 76

Identificando oscilações em seus dados ............................. 77

Compactando uma tabulação baseada em tempo .............. 79

Reportando em campos dentro do XML ou JSON .............. 79

Extraindo campos de um evento ......................................... 80

Receitas de Alerta ............................................................... 81

Alertar por e-mail quando o servidor atinge uma carga

determinada ......................................................................... 81

Alertando quando a performance de um servidor está lenta

............................................................................................. 82

Desligar instancias de EC2 desnecessárias ....................... 82

Convertendo um monitoramento em um alerta ................... 83

7 Agrupando Eventos ........................................................... 85

Introdução ............................................................................ 85

Receitas ............................................................................... 86

Unificando os nomes dos campos ....................................... 86

Encontrando Transações Incompletas ................................ 87

Calculando o tempo dentro de transações .......................... 88

Encontrando os últimos eventos ......................................... 90

Encontrando eventos repetidos ........................................... 90

Tempo entre transações ...................................................... 92

Encontrando transações especificas ................................... 94

Encontrando eventos perto de outros eventos .................... 97

Encontrando eventos depois de eventos ............................ 98

Agrupando grupos ............................................................... 99

8 Tabelas de Lookup .......................................................... 102

Introdução .......................................................................... 102

lookup ................................................................................ 102

inputlookup ........................................................................ 102

outputlookup ...................................................................... 102

Leitura Posterior ................................................................ 102

Receitas ............................................................................. 103

Colocando os Valores Padrões de Lookup ....................... 103

Usando Lookups reversos ................................................. 103

Usando um lookup de duas camadas ............................... 104

Usando lookups de múltiplos passos ................................ 105

Criando uma tabela de lookup usando os resultados de uma

busca ................................................................................. 106

Anexando resultados a tabelas de lookup ......................... 106

Usando tabelas gigantes de lookup .................................. 107

Comparando resultados com valores de lookup ............... 108

Controlando os encaixes da tabela de lookup ................... 110

Encaixando IPs .................................................................. 111

Encaixando Coringas ......................................................... 112

Apêndice A: Básico dos Dados de Maquina ....................... 113

Logs de Aplicação ............................................................. 114

Logs de Acesso Web ......................................................... 114

Logs de Proxy Web ........................................................... 114

Registros de Detalhes de Chamadas ................................ 115

Dados de Clickstream ........................................................ 115

Enfileiramento de Mensagem ............................................ 115

Pacotes de Dados ............................................................. 116

Arquivos de Configuração ................................................. 116

Logs de Auditoria de Bancos de Dados e Tabelas ........... 116

Logs de Auditoria do Sistema de Arquivos ........................ 116

Gerenciamento e APIs de Log .......................................... 116

Medidas de OS, Estado e Comandos de Diagnostico ...... 117

Fontes de Dados de Outras Maquinas .............................. 117

Apêndice B: Sensibilidade a Maiúsculas ............................ 118

Apêndice C: Comandos Comuns ....................................... 119

Apêndice D: Recursos mais usados ................................... 121

Apêndice E: Guia de Referencia Rápida do Splunk ............ 122

CONCEITOS ..................................................................... 122

COMANDOS COMUNS DE BUSCA ................................. 127

Otimizando Buscas ............................................................ 128

EXEMPLOS DE BUSCA .................................................... 128

FUNÇÔES EVAL ............................................................... 132

FUNÇÕES COMUNS DO STATS ..................................... 137

EXPRESSÕES REGULARES ........................................... 138

FUNÇÕES COMUNS DO STRPTIME DO SPLUNK ......... 139

i

Prefácio

A Empresa de Software Splunk (“Splunk”) é provavelmente a ferramenta mais

poderosa na assistência de busca e exploração de dados que você vai encontrar. Nós

escrevemos este livro para fornecer uma introdução ao Splunk e tudo o que ele pode

fazer. Este livro também seve como um ponto de partida de como ficar criativo com o

Splunk

O Splunk é geralmente usado por administradores de sistemas, administradores de redes

e gurus da segurança, mas o seu uso não é restrito a estas audiências. Existe um grande

valor de negócios escondido em dados corporativos que o Splunk pode liberar. Este

livro foi feito para alcançar alem do típico entusiasta de tecnologia para os grupos de

marketing e qualquer pessoa interessada em tópicos de Big Data e Inteligência

Operacional.

ii

Sobre Este Livro

O objetivo central deste livro é ajudar-lo a entender rapidamente o que o Splunk é e

como ele pode te ajudar. Ele cumpre isto lhe ensinando sobre as partes mais importantes

da Linguagem de Processamento de Busca do Splunk (SPL)™. O Splunk pode ajudar

tecnólogos e empresários de diversas formas. Não espere aprender sobre o Splunk de

uma vez. O Splunk não é como um canivete suíço, uma ferramenta simples que pode

fazer várias coisas incríveis.

Agora a questão é: Como este livro pode me ajudar? A resposta curta é que dando

rapidamente um senso de o que você pode fazer com o Splunk e aponte para onde você

pode aprender mais.

Mas já não existe um monte de documentação sobre o Splunk? Sim:

• Se você checar http://docs.splunk.com, você vai encontrar vários manuais com

explicações detalhada do maquinário do Splunk.

• Se você checar http://splunkbase.com, você vai encontrar uma base de dados

pesquisável com perguntas e respostas. Este tipo de conteúdo é valioso quanto você

sabe um pouco sobre o Splunk e está tentando resolver um problema comum.

Este livro cai entre estes dois níveis de documentação. Ele oferece um entendimento

básico das partes mais importantes do Splunk e combina isso com soluções para

problemas do mundo real.

iii

O que está neste Livro?

O capitulo 1 fala sobre o Splunk e como ele pode te ajudar.

O capitulo 2 discute como baixar o Splunk e os primeiros passos para usar-lo.

O capitulo 3 discute a interface de usuário para busca e como buscar usando o Splunk.

O capitulo 4 cobre as partes mais usadas da SPL.

O capitulo 5 explica como visualizar e enriquecer os seus dados com conhecimento.

O capitulo 6 cobre as soluções e monitoramento e alertas mais comuns.

O capitulo 7 cobre soluções para problemas que podem ser resolvidos através do

grupamento de eventos.

O capitulo 8 cobre muitas das formas que você pode usar as tabelas de lookup para

resolver problemas comuns.

Se você pensa que a Parte I (capítulos de 1 a 5) como um curso intensivo em Splunk, a

Parte II (capítulos de 6 a 8) mostra como você fazer manobras mais avançadas

combinando tudo isso, usando o Splunk para resolver alguns dos problemas mais

comuns e interessantes. Revisando estas receitas - e experimentando algumas - irá lhe

dar alguma idéia de como você usar o Splunk para responder a todos os mistérios do

universo (ou pelo menos do data center).

Os apêndices contornam o livro com algumas informações que podem ajudar. O

apêndice A dispõe um resumo do básico dos dados de maquina para abrir seus olhos

para as possibilidades e variedades de Big Datas. O apêndice B proporciona uma tabela

sobre o que é e não é sensível a letras maiúsculas nas buscas do Splunk. O apêndice C

proporciona uma olhada nas buscas mais comuns feitas com o Splunk (nós descobrimos

isto usando o Splunk, só pra avisar). O apêndice E aponta para algumas das maiores

fontes de aprendizagem relacionadas ao Splunk. O apêndice E é uma versão

especialmente projetada do cartão de referências do Splunk, que á o documento

educacional mais popular que nós temos.

iv

Convenções

Enquanto você for lendo este livro, você irá perceber que nós usamos varias fontes para

apontar certos elementos:

• Elementos da UI aparecem em negrito.

• Comandos e nomes de campo estão largura constante.

Se você for dito para selecionar a opção Y do menu X, ela estará escrita concisamente

como “selecione X » Y.”

v

Avisos

Este livro não seria possível se não fosse pela ajuda de inúmeras pessoas que

emprestaram seu tempo e talentos. Para revisões cuidadosas dos rascunhos do

manuscrito fazendo melhoramento valiosos, nós gostarias de agradecer especialmente

Ledion Bitincka, Gene Hartsell, Gerald Kanapathy, Vishal Patelm, Alex Raitz, Stephen

Sorkin, Sophy Ting e ao Steve Zhang, PhD; por me fornecer parte de seu tempo para

uma entrevista: Maverick Garner; pela ajuda adicional: Jessica Law, Tera Mendonca,

Rachel Perkins e Michael Wilde.

1

PARTE I EXPLORANDO SPLUNK

1 A Historia do Splunk

O Splunk é uma poderosa plataforma para análise de dados de maquina, dados que as

maquinas emitem em grandes volumes mas que são raramente usados efetivamente. Os

dados de maquina já são importantes para o mundo da tecnologia e estão se tornando

cada vez mais importantes no mundo dos negócios. (Para aprender mais sobre dados de

maquina, veja o Apêndice A.)

A forma mais rápida de entender o poder e versatilidade do Splunk é considerar duas

situações: uma no data Center e outra no departamento de marketing.

Splunk ao resgate do Data Center

São 2 da manha na quarta. O telefone toca. Seu chefe está ligando; o site está fora do

ar. Por que ele falhou? Foi por culpa dos servidores, das aplicações dos servidores de

dados, algum disco cheio ou algum balanceador de carga que fritou? Ele está gritando

com você para que conserte isto agora. Está chovendo. Você está perdendo a cabeça.

Relaxa. Você instalou Splunk no dia anterior.

Você liga o Splunk. Em um único lugar, você pode procurar os arquivos de log de todos

os seus servidores web, bancos de dados, firewalls, roteadores e balanceadores de

carga, assim como buscar dentro de arquivos de configuração e dados de todos os

outros dispositivos, sistemas operacionais ou aplicativos de interesse. (Isto é verdade,

não importa em quantos Data Centers ou provedores de nuvem eles possam estar

espalhados.)

Você olha no gráfico de tráfego do servidor para ver quando o problema ocorreu. As

17:03, erros no servidor web tiveram um pico repentino. Você então olha para as 10

paginas com mais erros, a home page estava bem. A página de busca estava bem. A,

mas o carrinho de comprar é o problema. Começando as 17:03, cada pedido na pagina

estava produzindo um erro. Isto está custando dinheiro - impedindo vendas e afastando

clientes - e isto tem que ser corrigido. Você sabe que o carrinho de comprar conta com

um servidor de e-commerce conectado ao banco de dados. Uma olhada nos logs mostra

que o banco de dados está online. Bom.

Vamos checar os logs do servidor de e-commerce. As 17:03m o servidor de e-commerce

começa a dizer que ele não consegue se conectar ao servidor de banco de dados. Você

então busca por mudanças na configuração dos arquivos e vê que alguém mudou uma

das configurações de rede. Você olha mais de perto; ela foi feita incorretamente. Você

contata a pessoas que fez a mudanças, que faz o rollback, e o sistema começa a

funcionar novamente.

2

Tudo isso pode levar menos de 5 minutos porque o Splunk já juntou todas as

informações relevantes em um índice central que você pode pesquisar rapidamente.

Splunk ao resgate do departamento de marketing

Você trabalha no departamento de promoções de um grande varejista. Você afina a

otimização e promoção do mecanismo de busca dos seus produtos para otimizar a

carga de trafego que vem dele. Na ultima semana, os caras do data Center instalaram

uma nova dashboard do Splunk que mostra (pelo ultima hora, dia e semana) todas os

termos de pesquisa usados para encontrar o site.

Olhando no gráfico pelas ultimas horas, você vê um pico de 20 minutos atrás. Buscas

pelo nome de sua companhia e o seu ultimo produto estão bem altos; Você chega o

relatório ao topo referenciando URLs na ultima hora e o Splunk mostra que uma

celebridade publicou um tweet sobre o produto e com o link para sua home page.

Você olha para outro gráfico que mostra a performance da maioria das páginas mais

frequentadas. A página de busca está sobre carregada e está ficando mais lenta. Uma

multidão de pessoas estão vindo ao seu site mas não podem achar chave do produto

que eles estão procurando, então eles estão todos usando a busca.

Você loga no sistema gerenciador de conteúdo do seu site e coloca uma propaganda

promocional para o novo produto ao centro da home page. Você então volta e olha as

paginas mais visitadas. O trafego de busca começa a diminuir, e o trafego na página do

novo produto começa a subir, da mesma forma, o trafego da página do carrinho de

compras. Você olha para a lista dos 10 produtos mais adicionados ao carrinho e os 10

produtos mais comprados; o novo produto se encontra no topo das listas. Você envia

um recado para do departamento de RP para acompanhar o processo. O trafego que

está chegando está sendo convertido em dinheiro ao invés de frustração, exatamente o

que você quer que aconteça. Sua habilidade de fazer o máximo com uma oportunidade

imprevista se tornou possível graças ao Splunk. Seu próximo passo é ter certeza de que

você tem o suficiente deste produto em estoque, pois isto é um problema grave.

Estes dois exemplos servem para mostrar como o Splunk pode providenciar uma janela

detalhada do que está acontecendo com o dados da sua maquina. O Splunk também

pode revelar padrões históricos, correlacionar múltiplas fontes de informação e ajudar

em milhares de outras forma.

Se aproximando do Splunk

Enquanto você usa o Splunk para responder certas questões, você vai descobrir que

você pode dividir a tarefa em três fases.

• Primeiro, identificar os dados que podem responder a sua questão.

• Segundo, transformar os dados em resultados que podem responder a sua questão.

3

• Terceiro, mostrar a resposta em forma de um relatório, tabela interativa ou gráfico

para tornar-la legível para uma audiência mais ampla.

Comece com a questão que você quer responder: Por que este sistema falhou? Por que

ele está tão lento ultimamente? Aonde as pessoas estão tendo problemas com o nosso

site?

Enquanto você fica melhor com o Splunk, fica mais obvio que tipos de dados e

pesquisas ajudam a responder estas questões. Este livro vai acelerar o progresso da sua

perícia.

A questão então se torna: Os dados podem oferecer a resposta? Muitas vezes, quando

iniciamos uma análise, não sabemos o que os dados podem nos dizer. Mas o Splunk

também é uma poderosa ferramenta para a exploração e entendimento dos dados.

Você pode descobrir a maioria dos valores mais comuns ou mais estranhos. Você pode

sumarizar os dados com estatísticas ou agrupar eventos em transações, de forma que

todos os eventos que fazem parte de uma reserva online em um hotel através de

sistemas de registro. Você pode criar fluxos que começam com data set inteiro, então é

filtrado dos eventos irrelevantes, analisando que sobrou. Então, talvez, adicionar

algumas informações de uma fonte externa até então, depois em um número de passos

simples, você tem somente os dados necessário para responder a sua questão. A figura

1-1 mostra o processo básico de análise do Splunk.

Figura 1-1. Trabalhando com o Splunk

1. Trabalhando com o Splunk

4

5

Splunk: A companhia e o Conceito

A verdadeira razão pela qual as pessoas estão excitadas com o Splunk é porque ele

ajuda a resolver problemas que os clientes sempre tiveram. A historia do Splunk

começou em 2002, quando os co fundadores Erik Swan e Rob Das começaram a

procurar pelo próximo desafio. Erik e Rob já haviam feito alguns projetos juntos e

estavam procurando por uma nova aventura, então eles começaram a falar sobre as

companhias e seus problemas.

Erik e Rob perguntaram a possíveis clientes “Como vocês resolvem os seus problemas

na sua infra estrutura?” continuamente, e ouviram sobre as experiências dos praticantes

tentando resolver os problemas de TI e recuperar os dados na forma tradicional. Os

dados estavam muito espalhados; eram difíceis de juntar e conseguir tirar algum sentido

de tudo aquilo. Todo mundo estava tentando resolver os problemas verificando

manualmente arquivos de log, algumas vezes escrevendo scripts para ajudar ao longo

do processo. Os scripts caseiros eram fracos e as pessoas que faziam eles geralmente

acabavam saindo das empresas depois de um tempo, levando com elas o conhecimento

de como eles funcionavam, e com cada nova tentativa de explorar o problema iria

acabar causando discussões, apontar culpados e a necessidade de refazer o script do

zero, com vários plantões do departamento de TI para suprir a emergência. Estes

praticantes disseram aos fundadores do Splunk que resolver problemas de infra

estrutura era como rastejar lentamente para fora de um buraco (seus datacenters) com

picaretas, iluminação ruim e navegação limitada (velhos scripts e tecnologia de

gerenciamento de logs). Resumindo, era como minerar uma caverna desconhecida, e

pensando na palavra Splunk (desbravador de cavernas) que eles escolheram dar o nome

do sistema de Splunk.

Entendendo a dificuldade da mineração digital, a única alternativa disponível para estas

pessoas era procurar na internet para ver se outras companhias tinham problemas

similares e haviam postado suas soluções online. Os fundadores estavam abismados que

as pessoas estavam gastando dinheiro nestes problemas de conhecimento comum, e

mesmo assim ninguém havia tentado construir uma solução. Erik e Rob perguntaram a

si mesmos, “Por que pesquisar dados de TI não pode ser tão fácil e intuitivo quanto uma

pesquisa no Google?™”

A primeira visão do Splunk estava direcionada em fazer um união e análise de dados

mais fácil de ser feita e resolver os problemas de um data Center ou grandes redes ou

ambientes computacionais. A missão do Splunk foi combinar a facilidade do uso das

pesquisas web com o poder dos trabalhosos métodos caseiros que os profissionais de

TI estavam usando para resolver os seus problemas.

Erik e Rob juntaram os fundos e a primeira versão do Splunk foi estreada na

LinuxWorld® 2005. O produto foi um grande sucesso e imediatamente virou um viral,

espalhado por sua disponibilidade como um download gratuito. Uma vez baixado, o

Splunk começou a resolver os problemas de uma diversa gama de problemas

impensados pelos clientes e acabou se espalhando de departamento em departamento e

de companhia em companhia. Quando usuários perguntaram a gerência para comprar

6

ele, eles já poderiam apontar para uma lista de problemas que já haviam sido resolvidos

com o Splunk.

Originalmente pensado como uma forma de ajudar os gerentes de TI e datacenters a

resolver problemas técnicos, o Splunk cresceu para se tornar uma plataforma

extremamente útil para todos os tipos de empresas porque ele permite que eles

pesquisem, coletem e organizem os dados de uma forma bem mais fácil de

compreender e seja uma forma que consuma menos recursos que os bancos de dados

tradicionais. O resultado é que temos novos pontos de vista e inteligência operacional

que as organizações nunca tiveram antes.

Como o Splunk aperfeiçoou os dados de maquina no data

Center

O primeiro lugar que o Splunk tomou, naturalmente, foi o data Center, que está

submerso em dados de maquina. O Splunk se tornou popular com administradores de

sistema, engenheiros de rede e desenvolvedores de aplicações como um mecanismo

para rapidamente entender (e aumentar a utilidade dos) dados de maquina. Mas por que

eles gostam tanto dele? Um exemplo que ajuda não somente a explicar a popularidade

precoce do Splunk mas também ajuda-nos a entender a natureza dos dados de maquina,

que é central para o valor que o Splunk agrega ao mundo dos negócios.

Na maioria dos ambientes computacionais, muitos sistemas diferentes dependem um do

outro. Sistemas de monitoramento enviam alertas depois de que algo deu errado.

Por exemplo, a página principal de um site pode depender de servidores web, servidores

de aplicação, servidores de dados, sistemas de arquivos, balanceadores de cargas,

roteadores, aceleradores de aplicação, sistema de cache, etc. Quando algo da errado em

algum destes sistemas, por exemplo o banco de dados, alarmes podem começar a apitar

em todos o níveis. Quando isto acontece, um administrador de sistema ou especialista

de aplicação deve encontrar a raiz do problema e consertar o que está causando ele. O

problema é que os arquivos de log estão espalhados através de múltiplas maquinas, as

vezes em múltiplas zonas de tempo e podem conter milhões de entradas que não tem

nada a ver com o problema. Em adição, os registros relevantes - aqueles que indicam

alguma falha do sistema - tendem a aparecer todos de uma vez. O desvio então é

encontrar o problema que começou tudo isso. Vamos dar uma olhada em como o

Splunk faz isso.

• O Splunk começa indexando, que significa juntar todos os dados de diversos locais e

combinar eles em índices centralizados. Antes do Splunk, administradores de sistema

teriam de criar um acesso a várias maquinas diferentes para alcançar toda a informação,

ainda usando ferramentas muito menos poderosas.

• Usando os índices, o Splunk pode rapidamente procurar logs de todos os servidores e

vasculhar por dentro onde o problema ocorreu. Com a sua velocidade, escala e

usabilidade, o Splunk faz a determinação de quando o problema ocorreu muito mais

rápida.

7

• O Splunk pode se aprofundar no tempo em que o problema originalmente ocorreu e

determinar a causa. Alertas podem ser criados para lidar com o problema no futuro.

Através da indexação e agregação de arquivos de log de várias fontes para fazer elas

pesquisáveis de forma centralizada, o Splunk se tornou popular entre os administradores

de sistema e outras pessoas que comandam operações técnicas para empresas ao redor

do mundo. Analistas de segurança usam o Splunk para farejar vulnerabilidades de

segurança e ataques. Analistas de sistemas usam o splunk para descobrir ineficiências e

gargalos em aplicações complexas. Analistas de rede usam o Splunk para encontrar as

causas de deficiências de rede e gargalos de bandwidth.

Esta discussão traz vários pontos chave sobre o Splunk:

• A criação de um repositório central é vital: Uma das maiores vitórias do Splunk é a

forma que diversos tipos de dados de diferente fontes são centralizados para a pesquisa.

• O Splunk converte dados em respostas: O Splunk te ajuda a encontrar os aspectos

escondidos nos dados.

• O Splunk ajuda a entender a estrutura e o significado dos dados: Quanto mais

você entender seus dados, mais você vai ter aproveitamento deles. O Splunk também

ajuda você a capturar o que você aprende e fazer futuras investigações mais fáceis e a

compartilhar o que você aprendeu com o outros.

• A visualização fecha o loop: Toda essa indexação e pesquisa dão frutos

eventualmente quando você vê uma tabela ou relatório que faz a respostas simples e

obvia. Ser capaz de visualizar dados de formas diferentes acelera o entendimento e

ajuda a compartilhar o seu entendimento com os outros.

Inteligência Operacional

Porque quase tudo que a gente faz é suportado de alguma forma por tecnologia, a

informação coletada sobre cada um de nós cresceu drasticamente. Muitos dos eventos

recordados pelos servidores na verdade representam o comportamento de clientes ou

parceiros. Os clientes do Splunk perceberam bem cedo que os logs de acesso web

poderiam ser usados não somente para diagnósticos de sistema mas também para

melhor entender o comportamento das pessoas navegando um site.

O Splunk tem sido a vanguarda em levantar a atenção sobre a inteligência operacional,

uma nova categoria de métodos e tecnologias para o uso de dados de maquina para

ganhar visibilidade dentro dos negócios de TI e o resto da empresa. A inteligência

operacional não é um subproduto da inteligência de negócios (BI), mas uma nova

aproximação baseada em fontes de informação não tipicamente dentro do escopo das

soluções de BI. Os dados operacionais não são somente inacreditavelmente valiosos

para o melhoramento das operações de TI, mas também fornece idéias para outras

partes dos negócios.

8

A inteligência operacional permite que organizações:

• Usando dados de maquina para ganhar um entendimento mais profundo dos seus

clientes: Por exemplo, se você observar as transações em um site, você o que as pessoas

compraram. Mas olhando com atenção nos logs servidor web você pode ver todas as

paginas que eles passaram antes de comprar, e, talvez elas sejam ainda mais importantes

para os lucros, as paginas que as pessoas que não compraram passaram. (Lembram-se

de nosso exemplo de busca para um novo produto no começo?)

• Revelar padrões importantes e dados analíticos derivados da correlação de várias

fontes: Quando você pode rastrear os indicadores do comportamento de um consumidor

de sites, chamar por detalhes dos registros, mídia social e informações de transações

armazenadas, uma imagem bem mais completa do consumidor começa a surgir. E

quanto mais e mais a interação com o cliente aparece nos dados de maquina, mais pode

ser aprendido.

• Reduzir o tempo entre um evento importante e a sua detecção:

Dados de maquina podem ser monitorados e co relatados em tempo real.

• Alavanque os feeds ao vivo e os dados históricos para fazer que está acontecendo

agora fazer sentido, encontrar tendências e anomalias e tomar uma decisão mais

informada baseada nesta informação: Por exemplo, o trafego criado pro uma

promoção na internet pode ser medido em tempo real e comparado com promoções

anteriores.

• Implementar uma solução rapidamente e entregar ela com a flexibilidade

necessária para as organizações de hoje em dia e no futuro - quer dizer, a

habilidade de entregar relatórios ad hoc, responder perguntas e adicionar novas

fontes de dados: Os dados do Splunk podem ser apresentados em dashboards

tradicionais que permitem aos usuários que eles explorem os eventos que continuem

fazendo novas questões.

Inteligência operacional no trabalho

O Splunk faz algo que nenhum outro produto pode: capturar de forma eficiente e

analisar enormes quantidade de dados de maquina não estruturados em series de tempo.

Apesar dos departamentos de TI geralmente começarem usando o Splunk para resolver

problemas tecnicamente esotéricos, eles rapidamente ganharão um entendimento

valioso para todos os outros setores dos negócio.

Usando dados de maquina no Splunk ajuda a resolver problemas irritantes de trabalho.

Aqui estão alguns exemplos:

• Um time de operações implementou uma aplicação de atendimento ao cliente através

da nuvem e usou o Splunk para fazer o diagnóstico. Eles logo perceberam que eles

9

poderiam acompanhar as estatísticas dos usuários e planejar melhor a capacidade - uma

medida com profundas implicações nos negócios.

• Logs de trafego de um servidor web podem ser usados para acompanhar quantos

carrinhos de compra estão sendo preenchidos e abandonados em tempo real. O

departamento de marketing pode usar esta informação para determinar aonde os

consumidores estão tendo problemas e que tipos de compras estão sendo abandonadas

para que qualquer problema possa ser corrigido na hora e promoções possam se focar

em itens que estão sendo abandonados.

• Organizações usando o Splunk para monitorar aplicações direcionadas a resolução de

problemas acabaram percebendo que elas podem facilmente providenciar visões para os

seus times de suporte de primeira linha para cuidas das chamadas dos clientes

diretamente, ao invés de acumular estas ligações em custosos recursos de engenharia.

• Uma das principais companhias de utilidades foi capaz de eliminar as custosas taxas

manutenção de software substituindo seis outras ferramentas de monitoramento e

diagnóstico pelo Splunk.

• Uma das principais organizações de mídia publica reduziu o tempo que levava para

capturar dados analíticos de extrema importância de meses para horas. Eles eram

também capazes de acompanhar o seus componentes digitais com confiabilidade e

precisão que eles não teriam de outra forma, resultando em uma melhor divisão de

lucros e marketing de conteúdo.

• Um restaurante fast-food que vende taco conectou seus pontos de vendas (POS) ao

Splunk, e dentro de uma hora, os analistas de negócios foram capazes de começar a

responder perguntas como “Quantas pessoas estão comprando tacos da meia noite as

duas da manha, neste local, nesta época do ano?”

Finalmente, a inteligência operacional permite as organizações que elas façam as

perguntas certa, levando a respostas que podem oferecer um entendimento melhor de

negócio, usando combinações de tempo real e dados históricos, mostrados de forma

fácil de digerir em dashboards e ferramentas gráficas.

Existe um motivo de por que temos a tendência de chamar dados de maquina de “big

data”. Ela é grande, é bagunçada e está lá, enterrada em algum lugar, ela é a chave para

o futuro do seu negócio. Agora vamos em frente para o capítulo 2, onde você irá

aprender como conseguir os dados no Splunk e começar a encontrar o ouro enterrado

em meio aos seus dados.

10

2 Integrando os Dados

O capitulo 1 ofereceu uma introdução ao Splunk e descreveu como ele pode te ajudar.

Agora vamos tomar o próximo passo em sua jornada: entrando os dados no Splunk.

Este capítulo cobre a instalação do Splunk, a importação dos dados e um pouco sobre

como os dados estão organizados para facilitar a busca.

O básico dos dados de maquina

A missão do Splunk é fazer com que os dados de maquina sejam úteis para as pessoas.

Para te dar um pouco de contexto, vale a pane resumir alguns dos aspectos básicos

sobre dados de maquina e como o Splunk percebe eles.

A pessoa que cria sistemas (como servidores web ou balance adores de carga ou vídeo

games ou plataformas de mídia social) também especifica a informação que estes

sistemas geram em arquivos logs quando estão rodando. Esta informação (os dados de

maquina em seus arquivos de log) é o que as pessoas que estão usando os sistemas

podem usar para entender o que estes sistemas estão fazendo enquanto rodam (ou

falham). Por exemplo, o arquivo de log que sai de uma aplicação de relógio hipotética

pode parecer com isso:

Action: ticked s:57, m:05, h:10, d:23, mo:03, y:2011

Action: ticked s:58, m:05, h:10, d:23, mo:03, y:2011

Action: ticked s:59, m:05, h:10, d:23, mo:03, y:2011

Action: ticked s:00, m:06, h:10, d:23, mo:03, y:2011

Toda vez que o relógio conta, ele cria um log para a ação e o tempo que ela ocorreu. Se

você estivesse realmente acompanhando o relógio, em adição do fato de que ele contou,

o log também pode incluir outras informações úteis: O nível de bateria, quando o

alarma está marcado para tocar, se ele está ligado ou não ou se tocou alguma vez - tudo

que poderia te dar uma noção de como o relógio está funcionando. Cada linha do dado

de maquina mostrado acima pode ser considerado um evento separado, mesmo que seja

comum para outros dados de maquina terem eventos que se espalhem por múltiplas, até

centenas de linhas.

O Splunk divide dado de maquina cru em discretas peças de informação conhecidas

como eventos. Quando você faz uma simples busca, o Splunk recolhe os eventos que

se encaixam nos termos da busca. Cada evento consiste de uma ou mais peças

discretas de dados conhecidas como campos (fields). Nos dados do relógio, os campos

podem incluir segundo, minuto, hora, dia, mês e ano. Se você pensar em grupos de

eventos organizados em um banco de dados ou tabelas, os eventos são as linhas e o

campos são as colunas, assim como a figura 2-1 mostra.

Figura 2-1. Eventos do relógio em forma de tabela.

Na prática, outra forma de pensar nos eventos

grupos de campos com pares de chave/valor. Se representados como pares de

chave/valor, os eventos do relógio parecem com a figura 2

Figura 2-2. Eventos do relógio como campos de pares chave/valor.

Aqui está um outro exemplo do mundo real, um dos mais comuns e úteis tipos de dados

de maquina. Um servidor web tem um log que grava cada página URL que foi

requisitada ao servidor.

Alguns dos campos em um servidor web são:

IP do cliente, estampa de tempo,

usuário

Uma visito a uma página pode invocar dúzias de pedidos de envio de texto, imagens e

outros recursos. Cada pedido é tipicamente logado como um evento separado em um

arquivo de log. O resulta é um arquivo que

convenientes campos destacados para ajudar na visão deles).

Figure 2-3. Típico log de um servidor web.

1. Eventos do relógio em forma de tabela.

Na prática, outra forma de pensar nos eventos é como se tivessem sido organizados em

grupos de campos com pares de chave/valor. Se representados como pares de

chave/valor, os eventos do relógio parecem com a figura 2-2.

2. Eventos do relógio como campos de pares chave/valor.

outro exemplo do mundo real, um dos mais comuns e úteis tipos de dados

de maquina. Um servidor web tem um log que grava cada página URL que foi

Alguns dos campos em um servidor web são:

IP do cliente, estampa de tempo, método de HTTP, estado, bytes, referente, agente de

Uma visito a uma página pode invocar dúzias de pedidos de envio de texto, imagens e

outros recursos. Cada pedido é tipicamente logado como um evento separado em um

arquivo de log. O resulta é um arquivo que parece com a figura 2-

convenientes campos destacados para ajudar na visão deles).

3. Típico log de um servidor web.

11

é como se tivessem sido organizados em

grupos de campos com pares de chave/valor. Se representados como pares de

outro exemplo do mundo real, um dos mais comuns e úteis tipos de dados

de maquina. Um servidor web tem um log que grava cada página URL que foi

, estado, bytes, referente, agente de

Uma visito a uma página pode invocar dúzias de pedidos de envio de texto, imagens e

outros recursos. Cada pedido é tipicamente logado como um evento separado em um

-3 (sem os

12

Tipos de dados que o Splunk consegue ler

Uma das características comuns dos dados de maquina é que quase sempre ele contem

alguma indicação de quando o dados foi criado ou quando o evento criado pelo dado

ocorreu. Tendo em conta esta característica, os índices do Splunk são otimizados para

recuperar eventos em ordem de uma série de tempo. Se os dados puros não possuem

uma estampa de tempo explicita, o Splunk da a ela o tempo em que o dado foi indexado

por ele para os eventos nos dados ou usa outras aproximações, como o tempo em que o

arquivo foi modificado pela ultima vez ou a estampa de tempo de um evento anterior.

O único outro requerimento é que este dado de maquina tem que ser textual, e não

binário. Arquivos de som e imagem são exemplos comuns de dados binários. Alguns

tipos de dados binários, como o despejo de núcleo produzido quando um programa

trava, podem ser convertidos em informação textual, como um stack trace. O Splunk

pode invocar os seus scripts para fazer esta conversão antes de indexar os dados.

Finalmente, apesar disso, os dados do Splunk tem que ter uma representação textual

para ser indexado e procurado.

Fontes de dados do Splunk

Durante a indexação, o Splunk pode ler os dados de maquina de qualquer número de

fonte. O tipos mais comuns de fontes de entrada são:

• Arquivos: O Splunk pode monitorar arquivos e diretórios específicos. Se dados são

adicionados ao arquivo ou arquivos ao diretório monitorado, o Splunk é capaz de ler os

dados.

• A rede: O Splunk pode escutar as portas TCP e UDP, lendo quaisquer dados

enviados.

• Entrada scriptadas: O Splunk pode ler os dados de maquina que saem de programas

ou scripts, como um comando Unix® ou um script customizado que monitora sensores.

Já basta de explicações: vamos começar a trabalhar com o Splunk.

Baixando, Instalando e Iniciando o Splunk

Nós recomendamos que você instale o Splunk e adiciona alguns dados de maquina para

te ajudar a trabalhar com os tópicos discutidos no livro. Tudo que iremos cobrir pode

ser feito usando o Splunk gratuito (veja abaixo).

Esta sessão descreve como fazer para o Splunk rodar.

Baixando o Splunk

Você pode baixar um Splu

suporte de uso moderado do Splunk. Na home page do splunk.com, você verá este

botão:

Clique nele para começar a baixar e instalar o Splunk em computadores rodando

Windows®, Mac™, Linux

Instalando o Splunk

Instalar o Splunk é fácil, então vamos assumir que você vai conseguir fazer isso

sozinho. Se você tiver alguma questão, refira

(http://splunk.com/goto/book#tutorial

Starting Splunk

Para iniciar o Splunk no Windows, lance a aplicação pelo menu Iniciar. Olhe para a tela

do Windows, mostrada na figura 2

Para iniciar o Splunk no Mac OS X ou no Unix, abra a janela do terminal. Vá para o

diretório onde você instalou o Splu

comando, digite:

./splunk start

A última linha de informação que você vê quando o Splunk inicia é:

The Splunk web interface is at http://your

Siga o link para a tela de login. Se você ainda

credenciais padrão são admin e changeme. Depois de logar, a tela de boas

aparecera.

Você pode baixar um Splunk completamente funcionar de graça, para aprendizado ou

suporte de uso moderado do Splunk. Na home page do splunk.com, você verá este

Clique nele para começar a baixar e instalar o Splunk em computadores rodando

, Mac™, Linux® e Unix.

Instalar o Splunk é fácil, então vamos assumir que você vai conseguir fazer isso

sozinho. Se você tiver alguma questão, refira-se ao Tutorial Splunk

http://splunk.com/goto/book#tutorial), que cobre tudo em detalhe.

iniciar o Splunk no Windows, lance a aplicação pelo menu Iniciar. Olhe para a tela

do Windows, mostrada na figura 2-4, e continue lendo.

Para iniciar o Splunk no Mac OS X ou no Unix, abra a janela do terminal. Vá para o

diretório onde você instalou o Splunk, vá para o subdiretório Bin e no prompt de

A última linha de informação que você vê quando o Splunk inicia é:

The Splunk web interface is at http://your-machinename:8000

Siga o link para a tela de login. Se você ainda não tem um usuário e senha, as

credenciais padrão são admin e changeme. Depois de logar, a tela de boas

13

nk completamente funcionar de graça, para aprendizado ou

suporte de uso moderado do Splunk. Na home page do splunk.com, você verá este

Clique nele para começar a baixar e instalar o Splunk em computadores rodando

Instalar o Splunk é fácil, então vamos assumir que você vai conseguir fazer isso

se ao Tutorial Splunk

iniciar o Splunk no Windows, lance a aplicação pelo menu Iniciar. Olhe para a tela

Para iniciar o Splunk no Mac OS X ou no Unix, abra a janela do terminal. Vá para o

e no prompt de

não tem um usuário e senha, as

credenciais padrão são admin e changeme. Depois de logar, a tela de boas-vindas

Figura 2-4. A tela de boas vindas

A tela de boas-vindas mostra o que você pode fazer com uma instancia limpa do

Splunk: adicionar dados ou lançar o aplicativo de busca.

Trazendo os dados para serem Indexados

O próximo passo em aprender a explorar o Splunk é adicionar dados o índice para que

você possa explorar eles.

Nós vamos usar alguns dados de exemplo para o propósito deste capítulo. Você pode

encontrar as instruções de como conseguir os dados aqui:

book#add_data

Existem dois passos no processo de indexação:

• Baixando o arquivo de exemplo d

• Dizendo ao Splunk para indexar o arquivo

Para baixar o arquivo de exemplo, siga este link e salve o seu arquivo na sua área de

trabalho: http://splunk.com/goto/book#sample_data

Para adicionar um arquivo ao Splunk:

1. Da tela de boas vindas, clique em

2. Clique From files and directories

3. Escolha Skip preview

4. Clique na opção Upload and index a file

5. Escolha o arquivo que você baixou na sua área de trabalho.

vindas mostra o que você pode fazer com uma instancia limpa do

dados ou lançar o aplicativo de busca.

Trazendo os dados para serem Indexados

O próximo passo em aprender a explorar o Splunk é adicionar dados o índice para que

você possa explorar eles.

Nós vamos usar alguns dados de exemplo para o propósito deste capítulo. Você pode

encontrar as instruções de como conseguir os dados aqui: http://splunk.com/goto/

Existem dois passos no processo de indexação:

• Baixando o arquivo de exemplo do site do Splunk

• Dizendo ao Splunk para indexar o arquivo

Para baixar o arquivo de exemplo, siga este link e salve o seu arquivo na sua área de

http://splunk.com/goto/book#sample_data

Para adicionar um arquivo ao Splunk:

as, clique em Add Data.

From files and directories na parte de baixo da tela.

Skip preview.

Upload and index a file.

5. Escolha o arquivo que você baixou na sua área de trabalho.

14

vindas mostra o que você pode fazer com uma instancia limpa do

O próximo passo em aprender a explorar o Splunk é adicionar dados o índice para que

Nós vamos usar alguns dados de exemplo para o propósito deste capítulo. Você pode

http://splunk.com/goto/

Para baixar o arquivo de exemplo, siga este link e salve o seu arquivo na sua área de

6. Clique Save.

Você terminou de adicionar dados. Vamos falar sobre o que o Splunk está fazendo por

traz das cenas.

Entendendo como o Splunk Indexa os dados

O valor central do Splunk para muitas das organizações é a sua habilidade única de

indexar os dados de maquina para que eles possam

reportados e alertados. Os dados que você começa são chamados de dados crus. O

Splunk indexa os dados crus através da criação de um mapa baseado em tempo das

palavras contidas nos dados sem modificar os dados em si.

Antes do Splunk poder procurar enormes quantidade de dados, ele primeiro deve

indexar os dados. O índice do Splunk é similar aos índices de livros, que apontam para

as páginas com palavras chave específicas. No Splunk, as “páginas” são chamadas de

eventos.

Figura 2-5. As características únicas dos índices do Splunk

O Splunk divide uma corrente de dados de maquina em eventos individuais. Lembre

um evento no dados de maquina pode ser tão simples quanto uma linha em um arquivo

de log ou até tão complicado como u

Cada evento no Splunk tem pelo menos os 4 campos mostrados na tabela 2

adicionar dados. Vamos falar sobre o que o Splunk está fazendo por

Entendendo como o Splunk Indexa os dados

O valor central do Splunk para muitas das organizações é a sua habilidade única de

indexar os dados de maquina para que eles possam ser rapidamente analisados,

reportados e alertados. Os dados que você começa são chamados de dados crus. O

Splunk indexa os dados crus através da criação de um mapa baseado em tempo das

palavras contidas nos dados sem modificar os dados em si.

plunk poder procurar enormes quantidade de dados, ele primeiro deve

indexar os dados. O índice do Splunk é similar aos índices de livros, que apontam para

as páginas com palavras chave específicas. No Splunk, as “páginas” são chamadas de

5. As características únicas dos índices do Splunk

O Splunk divide uma corrente de dados de maquina em eventos individuais. Lembre

um evento no dados de maquina pode ser tão simples quanto uma linha em um arquivo

de log ou até tão complicado como um stack trace contendo várias centenas de linhas.

Cada evento no Splunk tem pelo menos os 4 campos mostrados na tabela 2-1.

15

adicionar dados. Vamos falar sobre o que o Splunk está fazendo por

O valor central do Splunk para muitas das organizações é a sua habilidade única de

ser rapidamente analisados,

reportados e alertados. Os dados que você começa são chamados de dados crus. O

Splunk indexa os dados crus através da criação de um mapa baseado em tempo das

plunk poder procurar enormes quantidade de dados, ele primeiro deve

indexar os dados. O índice do Splunk é similar aos índices de livros, que apontam para

as páginas com palavras chave específicas. No Splunk, as “páginas” são chamadas de

O Splunk divide uma corrente de dados de maquina em eventos individuais. Lembre-se,

um evento no dados de maquina pode ser tão simples quanto uma linha em um arquivo

m stack trace contendo várias centenas de linhas.

1.

Tabela 2-1. Campos que o Splunk sempre Indexa

Estes campos padrões são indexados junto dos dados crus. O campo estampa de tempo

(_time) é especial porque os indexadores Splunk usam ele para ordenar os eventos,

permitindo que o Splunk possa recuperar efetivamente dentro de uma janela de tempo.

O capitulo 3 nos traz para o lugar onde a maioria da ação acontece: A interface de busca

do Splunk.

1. Campos que o Splunk sempre Indexa

Estes campos padrões são indexados junto dos dados crus. O campo estampa de tempo

) é especial porque os indexadores Splunk usam ele para ordenar os eventos,

permitindo que o Splunk possa recuperar efetivamente dentro de uma janela de tempo.

O capitulo 3 nos traz para o lugar onde a maioria da ação acontece: A interface de busca

16

Estes campos padrões são indexados junto dos dados crus. O campo estampa de tempo

) é especial porque os indexadores Splunk usam ele para ordenar os eventos,

permitindo que o Splunk possa recuperar efetivamente dentro de uma janela de tempo.

O capitulo 3 nos traz para o lugar onde a maioria da ação acontece: A interface de busca

3 Buscando com o Splunk

Agora que você ganhou um entendimento de como os índices de dados do Splunk

funcionam (no Capítulo 2), vai ser mais fácil de entender o que está acontecendo que

acontece uma pesquisa com o Splunk.

É claro, o objetivo de uma pesquisa é te ajudar a encontrar exatamente o que você

precisa. Isto pode significar filtrar, sumarizar e visualizar uma grande quantidade de

dados, para responder a sua questão sobre os dados. Outras vezes, você pode precisar

grandes quantidades de dados regularmente. Muitas vezes, você simplesmente quer

encontrar a agulha no palheiro, aquele evento enterrado que tirou tudo dos trilhos. O

Summary dashboard lhe fornece uma visão rápida dos dados visíveis para você.

Clique em Launch search app

Home do Splunk, clique em

é mostrado como na figura 3

Figura 3-1. O Summary dashboard do Search app’s

Buscando com o Splunk

Agora que você ganhou um entendimento de como os índices de dados do Splunk

funcionam (no Capítulo 2), vai ser mais fácil de entender o que está acontecendo que

acontece uma pesquisa com o Splunk.

É claro, o objetivo de uma pesquisa é te ajudar a encontrar exatamente o que você

precisa. Isto pode significar filtrar, sumarizar e visualizar uma grande quantidade de

dados, para responder a sua questão sobre os dados. Outras vezes, você pode precisar

andes quantidades de dados regularmente. Muitas vezes, você simplesmente quer

encontrar a agulha no palheiro, aquele evento enterrado que tirou tudo dos trilhos. O

lhe fornece uma visão rápida dos dados visíveis para você.

h search app na aba Welcome do Splunk. Se você estiver na aba

do Splunk, clique em Search sob o menu Your Apps. O Summary dashboard

é mostrado como na figura 3-1.

1. O Summary dashboard do Search app’s

17

Agora que você ganhou um entendimento de como os índices de dados do Splunk

funcionam (no Capítulo 2), vai ser mais fácil de entender o que está acontecendo que

É claro, o objetivo de uma pesquisa é te ajudar a encontrar exatamente o que você

precisa. Isto pode significar filtrar, sumarizar e visualizar uma grande quantidade de

dados, para responder a sua questão sobre os dados. Outras vezes, você pode precisar

andes quantidades de dados regularmente. Muitas vezes, você simplesmente quer

encontrar a agulha no palheiro, aquele evento enterrado que tirou tudo dos trilhos. O

lhe fornece uma visão rápida dos dados visíveis para você.

do Splunk. Se você estiver na aba

Summary dashboard

Perceba algumas coisas sobre esta

• A search bar (barra de busca

pesquisa.

• O time range picker (

ajuste do alcance de tempo. Você pode ver eventos dos últimos 15 minuto

exemplo, ou qualquer intervalo de tempo desejado. Para transporte de dados em tempo

real, você pode selecionar um intervalo para a visão, indo de 30 segundos a uma hora.

• O painel de All indexed data

dos dados indexados.

Os próximos 3 painéis mostram o valores mais recentes ou comuns que foram

indexados a cada categoria:

• O painel Sources (Fontes

vem.

• O painel de Source types

• O painel de Hosts (Hospedeiros

Agora vamos dar uma olhada nos menus de negação de busca perto do topo da página:

Figura 3-2. Menus de navegação de bus

• Summary (Sumario) é onde nós estamos.

• Search (Busca) leva para a interface principal de busca, a

(Dashboard de Busca).

• Status (Estado) lista as dashboards no estado da sua instancia do Splunk.

• Dashboards & Views

• Searches & Reports

relatórios.

A próxima seção introduz para você a

Perceba algumas coisas sobre esta dashboard:

barra de busca) no topo está vazia, pronta para você digitar a

(seletor de janela de tempo) a direita da search bar

de tempo. Você pode ver eventos dos últimos 15 minuto

exemplo, ou qualquer intervalo de tempo desejado. Para transporte de dados em tempo

real, você pode selecionar um intervalo para a visão, indo de 30 segundos a uma hora.

All indexed data (Todos os dados indexados) mostra um total

Os próximos 3 painéis mostram o valores mais recentes ou comuns que foram

indexados a cada categoria:

Fontes) mostra de quais arquivos (ou outras fontes) seus dados

Source types (Tipos de Fontes) mostra os tipos de fontes nos seus dados.

Hospedeiros) mostra de quais hospedeiros os seus dados vieram.

Agora vamos dar uma olhada nos menus de negação de busca perto do topo da página:

2. Menus de navegação de busca

é onde nós estamos.

leva para a interface principal de busca, a Search dashboard

lista as dashboards no estado da sua instancia do Splunk.

• Dashboards & Views (Dashboards & Visões) lista as dashboards e as visões.

• Searches & Reports (Buscas & Relatórios) lista as suas buscas salvas e os seus

A próxima seção introduz para você a Search dashboard.

18

) no topo está vazia, pronta para você digitar a

search bar permite o

de tempo. Você pode ver eventos dos últimos 15 minutos, por

exemplo, ou qualquer intervalo de tempo desejado. Para transporte de dados em tempo

real, você pode selecionar um intervalo para a visão, indo de 30 segundos a uma hora.

total corrente

Os próximos 3 painéis mostram o valores mais recentes ou comuns que foram

) mostra de quais arquivos (ou outras fontes) seus dados

) mostra os tipos de fontes nos seus dados.

) mostra de quais hospedeiros os seus dados vieram.

Agora vamos dar uma olhada nos menus de negação de busca perto do topo da página:

Search dashboard

) lista as dashboards e as visões.

lista as suas buscas salvas e os seus

A Dashboard de Busca

Se você clicar na opção

a Search dashboard (algumas vezes chamadas de linha do tempo ou visão instantânea

linha do tempo). Quando a busca começar, os resultados vão quase que imediatamente

começar a aparecer. Por exemplo, col

recuperando todos os dados nos seus índices padrão, e uma tela similar a da figura 3

vai aparecer.

Figura 3-3. A Search dashboard Vamos examinar o conteúdo desta dashboard: • Timeline (Linha do Tempo): encaixam na pesquisa por tempo..

A Dashboard de Busca

Se você clicar na opção Seach ou entrar uma busca na search bar, a pagina muda para

(algumas vezes chamadas de linha do tempo ou visão instantânea

linha do tempo). Quando a busca começar, os resultados vão quase que imediatamente

começar a aparecer. Por exemplo, colocando um asterisco (*) na search bar

recuperando todos os dados nos seus índices padrão, e uma tela similar a da figura 3

desta dashboard:

• Timeline (Linha do Tempo): Uma representação gráfica do número de eventos que se encaixam na pesquisa por tempo..

19

, a pagina muda para

(algumas vezes chamadas de linha do tempo ou visão instantânea

linha do tempo). Quando a busca começar, os resultados vão quase que imediatamente

search bar

recuperando todos os dados nos seus índices padrão, e uma tela similar a da figura 3-3

representação gráfica do número de eventos que se

• Fields sidebar (Barra lateral de campos):

contagens de eventos. Este menu também permite que você adicione campos aos

resultados.

• Field discovery switch (Botão de descoberta de campos):

descoberta de campos ligada ou desligada. Quando o Splunk executa uma busca e a

descoberta de campos esta ligada, o Splunk tenta identificar campos automaticamente

com a busca atual.

• Results area (Área de resultados):

ordenados pelas Timestamps

evento. Sob o Raw Text

selecionados da Fields sidebar

Quando você começar a digitar na search bar, informação sensível ao contexto irá

começar a aparecer sob a barra, com as pesquisas que se encaixam a esquerda e a

ajuda a direita:

Figura 3-4. Informação útil aparece quando você coloca texto na search bar

Abaixo do time range picker, você vai v

• Fields sidebar (Barra lateral de campos): Mostra campos relevantes junto da

contagens de eventos. Este menu também permite que você adicione campos aos

d discovery switch (Botão de descoberta de campos): Torna automaticamente a

descoberta de campos ligada ou desligada. Quando o Splunk executa uma busca e a

descoberta de campos esta ligada, o Splunk tenta identificar campos automaticamente

• Results area (Área de resultados): Mostra os eventos de sua busca. Eventos são

Timestamps (Estampas de Tempo), que aparecem a esquerda de cada

Raw Text (Texto Cru) de cada evento estão quaisquer campos foram

Fields sidebar para que o eventos possua valores correspondentes.

Quando você começar a digitar na search bar, informação sensível ao contexto irá

começar a aparecer sob a barra, com as pesquisas que se encaixam a esquerda e a

4. Informação útil aparece quando você coloca texto na search bar

, você vai ver uma linha de icones:

20

Mostra campos relevantes junto da

contagens de eventos. Este menu também permite que você adicione campos aos

Torna automaticamente a

descoberta de campos ligada ou desligada. Quando o Splunk executa uma busca e a

descoberta de campos esta ligada, o Splunk tenta identificar campos automaticamente

Mostra os eventos de sua busca. Eventos são

), que aparecem a esquerda de cada

) de cada evento estão quaisquer campos foram

para que o eventos possua valores correspondentes.

Quando você começar a digitar na search bar, informação sensível ao contexto irá

começar a aparecer sob a barra, com as pesquisas que se encaixam a esquerda e a

Figura 3-5. Ícones de Busca

Os controles de busca

começou uma busca, ou se ela já tiver acabado, eles se tornarão inativos e acinzentados.

Mas se você estiver fazendo uma busca e ela demorar demais para completar, você pode

usar estes ícones para controlar o progresso da dela.

• Enviando uma busca para o segundo plano deixa que ela continue rodando no servidor

até que esteja completa enquanto você pode fazer outras buscas ou até fechar a janela e

deslogar. Quando você clicar em

plano), a search bar fica limpa e você pode continuar com outras tarefas. Quando ela

completar, uma notificação irá aparecer na sua tela se você ainda estiver logado; caso

contrario, o Splunk te manda um e

Se você quer checar o progresso no meio tempo, eu depois, clique em

pagina.

• Pausando uma busca temporariamente para ela e deixa que você explore os resultado

até este ponto. Enquanto a busca está pausada, o ícone

clicar no botão, a busca continua de onde você parou.

• Finalizar uma busca para ela antes que ela complete, mas

este ponto para que você possa ver e explorar ela no search

• Em contraste, cancelar uma busca para ela, descarta os resultados e limpa eles da tela.

O ícone do Job inspector

que mostra os detalhes da sua busca, como os custos de execução da busca, as

mensagens de debug e as p

Use o menu de Save (Salvar

os resultados. Se você salvar a busca, você pode encontrar

Reports (Buscas & Relatórios

no menu Jobs no canto superior direito da tela.

só são ativados quando a busca está acontecendo. Se você não

começou uma busca, ou se ela já tiver acabado, eles se tornarão inativos e acinzentados.

Mas se você estiver fazendo uma busca e ela demorar demais para completar, você pode

ra controlar o progresso da dela.

• Enviando uma busca para o segundo plano deixa que ela continue rodando no servidor

até que esteja completa enquanto você pode fazer outras buscas ou até fechar a janela e

. Quando você clicar em Send to background (Enviar para o segundo

fica limpa e você pode continuar com outras tarefas. Quando ela

completar, uma notificação irá aparecer na sua tela se você ainda estiver logado; caso

contrario, o Splunk te manda um e-mail (se você especificou um endereço de e

Se você quer checar o progresso no meio tempo, eu depois, clique em Jobs

• Pausando uma busca temporariamente para ela e deixa que você explore os resultado

até este ponto. Enquanto a busca está pausada, o ícone muda para um botão de play. Ao

clicar no botão, a busca continua de onde você parou.

• Finalizar uma busca para ela antes que ela complete, mas mantém os resultados até

este ponto para que você possa ver e explorar ela no search Views.

elar uma busca para ela, descarta os resultados e limpa eles da tela.

Job inspector (Inspetor de trabalhos) te leva a página do Job inspector

que mostra os detalhes da sua busca, como os custos de execução da busca, as

mensagens de debug e as propriedades de funcionamento da busca.

Salvar) para salvar a busca, os resultados ou salvar e compartilhar

os resultados. Se você salvar a busca, você pode encontrar-la no menu Searcher &

Buscas & Relatórios). Se você salvar os resultados, você pode visualizar

no canto superior direito da tela.

21

só são ativados quando a busca está acontecendo. Se você não

começou uma busca, ou se ela já tiver acabado, eles se tornarão inativos e acinzentados.

Mas se você estiver fazendo uma busca e ela demorar demais para completar, você pode

• Enviando uma busca para o segundo plano deixa que ela continue rodando no servidor

até que esteja completa enquanto você pode fazer outras buscas ou até fechar a janela e

Enviar para o segundo

fica limpa e você pode continuar com outras tarefas. Quando ela

completar, uma notificação irá aparecer na sua tela se você ainda estiver logado; caso

um endereço de e-mail).

Jobs no topo da

• Pausando uma busca temporariamente para ela e deixa que você explore os resultado

muda para um botão de play. Ao

os resultados até

elar uma busca para ela, descarta os resultados e limpa eles da tela.

Job inspector,

que mostra os detalhes da sua busca, como os custos de execução da busca, as

) para salvar a busca, os resultados ou salvar e compartilhar

Searcher &

). Se você salvar os resultados, você pode visualizar-los

Use o menu Create (Criar

agendar buscas. Nós iremos explicar eles em detalhe no capítulo 5.

superior esquerdo da área de resultados, você pode ver os seguintes ícones.

Figura 3-6. Ícones da área de resultados

Por padrão, o Splunk mostra os eventos em forma de lista, dos mais recentes aos mais

antigos, mas você pode clicar n

de tabela, ou clicar no ícone Chart (Gráfico) para ver eles como um gráfico. O botão

exportar exporta os resultados da pesquisa em vários formatos: CSV, eventos crus,

XML ou JSON.

Eventos? Resultados? Qual é a diferença?

Tecnicamente falando, eventos recuperados de alguns de seus índices são chamados de

“eventos”. Se este eventos estão transformados ou sumarizados de forma que eles não

fique mais na forma de mapeamentos de um

chamados de “resultados”.

comando de search é um evento, mas a URL mais visitada hoje é um resultado. Com

isso, nós não iremos ser tão chatos, e vamos usar ambas as formas como sinônimos

SPL™: Linguagem de Processamento de Busca

O Splunk ajuda a resumir os dados de uma infinidade de eventos indexados de uma

forma que ela seja útil para responder questões do mundo real.

A figura 3-7 ilustra um padrão comum de busca: Recupere eventos e g

Está busca retorna os valoras mais presentes nos erros do syslog.

Criar) para dashboards, alertas, relatórios, tipos de eventos e

agendar buscas. Nós iremos explicar eles em detalhe no capítulo 5. Indo para o canto

superior esquerdo da área de resultados, você pode ver os seguintes ícones.

6. Ícones da área de resultados

Por padrão, o Splunk mostra os eventos em forma de lista, dos mais recentes aos mais

antigos, mas você pode clicar no ícone Table (Tabela) para ver os resultados em forma

de tabela, ou clicar no ícone Chart (Gráfico) para ver eles como um gráfico. O botão

exportar exporta os resultados da pesquisa em vários formatos: CSV, eventos crus,

Qual é a diferença?

Tecnicamente falando, eventos recuperados de alguns de seus índices são chamados de

Se este eventos estão transformados ou sumarizados de forma que eles não

fique mais na forma de mapeamentos de um-para-um com os eventos em disco, eles são

chamados de “resultados”. Por exemplo, um evento de acesso web recuperado com o

comando de search é um evento, mas a URL mais visitada hoje é um resultado. Com

isso, nós não iremos ser tão chatos, e vamos usar ambas as formas como sinônimos

SPL™: Linguagem de Processamento de Busca

O Splunk ajuda a resumir os dados de uma infinidade de eventos indexados de uma

forma que ela seja útil para responder questões do mundo real.

7 ilustra um padrão comum de busca: Recupere eventos e gere um relatório.

Está busca retorna os valoras mais presentes nos erros do syslog.

22

) para dashboards, alertas, relatórios, tipos de eventos e

Indo para o canto

Por padrão, o Splunk mostra os eventos em forma de lista, dos mais recentes aos mais

o ícone Table (Tabela) para ver os resultados em forma

de tabela, ou clicar no ícone Chart (Gráfico) para ver eles como um gráfico. O botão

exportar exporta os resultados da pesquisa em vários formatos: CSV, eventos crus,

Tecnicamente falando, eventos recuperados de alguns de seus índices são chamados de

Se este eventos estão transformados ou sumarizados de forma que eles não

disco, eles são

Por exemplo, um evento de acesso web recuperado com o

comando de search é um evento, mas a URL mais visitada hoje é um resultado. Com

isso, nós não iremos ser tão chatos, e vamos usar ambas as formas como sinônimos.

O Splunk ajuda a resumir os dados de uma infinidade de eventos indexados de uma

ere um relatório.

Figura 3-7. Como uma simples busca no Splunk é processada

A String inteira

sourcetype=syslog ERROR | top user | fields

é chamada de busca, e o caractere de

fazem parte da busca.

Pipes

A primeira palavra chave depois da barra é o nome do comando de busca. Neste caso os

comandos são top e fields

existe um comando implícito

comece com uma barra. Então, realmente, estes são os 3 comandos de busca na

pesquisa acima: search,

Os resultados de cada comando são passados como entrada para o próximo coma

você alguma vez usou o shell do Linux como um bash, este conceito provavelmente lhe

é familiar.

AND Implícito

O sourcetype=syslog ERROR

eventos que tem o sourcetype

top user

O próximo comando, top

padrão, o top retorna os 10 valores mais comuns para o campo especificado, em ordem

decrescente. Neste caso, o campo

que mais aparecem nos eventos do syslog que contenham o termo

top é uma tabela com 3 colunas (

7. Como uma simples busca no Splunk é processada

sourcetype=syslog ERROR | top user | fields - percent

é chamada de busca, e o caractere de barra (|) separa os comandos individuais que

A primeira palavra chave depois da barra é o nome do comando de busca. Neste caso os

fields. Que comando está recuperando os eventos do índice? Bem,

implícito chamado search, no começo de qualquer busca que não

comece com uma barra. Então, realmente, estes são os 3 comandos de busca na

, top, e fields.

Os resultados de cada comando são passados como entrada para o próximo coma

você alguma vez usou o shell do Linux como um bash, este conceito provavelmente lhe

sourcetype=syslog ERROR diz ao comando search para recuperar somente os

sourcetype igual a syslog AND (&) contenham o termo ERROR

top, retorna os valores mais comuns do campo especificado. Por

retorna os 10 valores mais comuns para o campo especificado, em ordem

decrescente. Neste caso, o campo especificado é user, então o top retorna os usuários

que mais aparecem nos eventos do syslog que contenham o termo ERROR. A saída do

é uma tabela com 3 colunas (user, count e percent), com 10 linha de valores.

23

barra (|) separa os comandos individuais que

A primeira palavra chave depois da barra é o nome do comando de busca. Neste caso os

. Que comando está recuperando os eventos do índice? Bem,

, no começo de qualquer busca que não

comece com uma barra. Então, realmente, estes são os 3 comandos de busca na

Os resultados de cada comando são passados como entrada para o próximo comando, se

você alguma vez usou o shell do Linux como um bash, este conceito provavelmente lhe

para recuperar somente os

ERROR.

, retorna os valores mais comuns do campo especificado. Por

retorna os 10 valores mais comuns para o campo especificado, em ordem

retorna os usuários

. A saída do

), com 10 linha de valores.

24

Também é importante entender que a saída do comando top se torna na entrada do

próximo comando depois da barra. Neste sentido, o top transformou os resultados em

um conjunto menor de valores, que são ainda mais refinados pelo próximo comando.

Campos – Porcentagem

O segundo comando, fields, com um argumento de – percent, diz ao Splunk para

remover a coluna percent da saída do comando top.

Análise Exploratória de Dados: Escavando com o Splunk

E se você não souber nada sobre os dados? Seja criativo e explore. Você pode fazer

uma busca por “*” para recuperar todos os eventos e então aprender sobre eles: olhe

para alguns eventos, extraia alguns campos interessantes, extraia um top deste campo,

veja como os eventos estão divididos, talvez derive alguns campos novos baseados em

outros campos, organize os seus resultados, veja como um campo vária em relação a

outros campos, etc. (Para mais dicas sobre o aprendizado do que se encontra naquela

fonte que você não tem idéia, siga para http://splunk.com/goto/book#mining_tips.)

Antes de mergulharmos nos comandos de busca no Capitulo 4, vamos cobrir o comando

search em si: um comando bastante especial e crítico para o uso do Splunk.

O comando de busca

O comando search é o burro de carga do Splunk. É um dos mais simples e poderosos

comandos. É um comando tão básico que você precisa escrever-lo em lugar algum antes

da primeira barra, por que ele é invocado implicitamente no começa da pesquisa,

recuperando eventos dos índices no disco.

Nem todas as buscas recuperam dados dos índices do Splunk. Por exemplo, o comando

inputcsv lê os dados de um arquivo CSV. Para colocar comandos deste tipo como o

primeiro comando, coloque uma barra antes deles. Por exemplo | inputcsv

myfile.csv

Quando ele não é o primeiro comando na busca, o comando search pode filtrar um

grupo de resultados da busca anterior. Para fazer isso, use o comando search como

qualquer outro comando - com a barra seguida pelo nome de um comando explicito.

Por exemplo, o comando error | top url | search count>=2 busca por eventos no

disco que possuam a palavra error, encontrar as URLs que mais aparecem, e filtrem

qualquer URL que só apareça uma vez. Em outras palavras, dos 10 eventos de erro que

o top retornar, me mostre somente aqueles que tem de duas a mais instancias da mesma

URL.

A tabela 3-1 mostra alguns exemplos de chamadas implícitas para o comando search e

seus resultados.

Tabela 3-1. Comandos de busca implícitos

Dicas para o uso do comando de busca

Aqui estão algumas dicas para o uso do comando

outros comandos também.

Sensibilidade a maiúsculas

Argumentos de palavras chave para o comando

mas os nomes do campos são. (Veja o apêndice B para mais detalhes sobre a

sensibilidade a maiúsculas.)

Usando aspas em uma pesquisa

Você precisa de aspas em volta de frases ou valores de campos que contenham

caracteres de separação como espaço, virgulas, barras, chaves, colchetes,

sinais de igual, etc. Então,

por exemplo, você vai precisar colocar aspas em volta do valor, como em

host=”webserver

#9”. Em adição, para procurar por palavras reservadas (AND, OR, NOT,

aspas.

A busca por aspas usa barras invertidas para escapar do efeito padrão das aspas.

Para encontrar a frase —

por: “Splunk changed \”life itself

Lógica Booleana

Argumentos —palavras chave e campos

implicitamente.

Você pode especificar que qualquer um dos dois ou mais argumentos precisariam ser

verdadeiros, usando a palavra ch

1. Comandos de busca implícitos

Dicas para o uso do comando de busca

ão algumas dicas para o uso do comando search. Elas se aplicam a vários

outros comandos também.

Sensibilidade a maiúsculas

Argumentos de palavras chave para o comando search não são sensíveis a maiúsculas,

mas os nomes do campos são. (Veja o apêndice B para mais detalhes sobre a

sensibilidade a maiúsculas.)

Usando aspas em uma pesquisa

Você precisa de aspas em volta de frases ou valores de campos que contenham

separação como espaço, virgulas, barras, chaves, colchetes,

sinais de igual, etc. Então, host=web09 está bom, mas se o valor do host tem espaços,

por exemplo, você vai precisar colocar aspas em volta do valor, como em

ição, para procurar por palavras reservadas (AND, OR, NOT,

A busca por aspas usa barras invertidas para escapar do efeito padrão das aspas.

—Splunk changed “life itself” for me— você teria de procurar

”life itself\” for me”

palavras chave e campos— para o comando search são dados

Você pode especificar que qualquer um dos dois ou mais argumentos precisariam ser

verdadeiros, usando a palavra chave OR, em letras maiúsculas. O OR tem precedência

25

Elas se aplicam a vários

não são sensíveis a maiúsculas,

mas os nomes do campos são. (Veja o apêndice B para mais detalhes sobre a

Você precisa de aspas em volta de frases ou valores de campos que contenham

separação como espaço, virgulas, barras, chaves, colchetes, parênteses,

está bom, mas se o valor do host tem espaços,

por exemplo, você vai precisar colocar aspas em volta do valor, como em

ição, para procurar por palavras reservadas (AND, OR, NOT, etc.), use

A busca por aspas usa barras invertidas para escapar do efeito padrão das aspas.

você teria de procurar

ados juntos,

Você pode especificar que qualquer um dos dois ou mais argumentos precisariam ser

ave OR, em letras maiúsculas. O OR tem precedência

26

maior que o AND, então você pode em argumentos que usam OR como tendo

parênteses em volta deles.

Para filtrar os eventos que contem uma palavra em particular, use a palavra chave NOT.

Finalmente, você pode usar parênteses explicitamente para tornar as coisas mais claras

se você quiser. Por exemplo, a busca por x y OR z NOT w é a mesma coisa que AND (y

OR z) AND NOT w.

Subpesquisas

O comando search, como todos os comandos, podem ser usados como um subpesquisa

— uma busca cujo os resultados serão usados como argumentos para outro comando de

busca.

Subpesquisas são fechadas em colchetes. Por exemplo, para encontrar todos os

eventos do syslog do usuário tiveram um erro de login, use o seguinte comando:

sourcetype=syslog [search login error | return user]

Aqui, a busca por eventos tendo os termos login e error são executados, retornando o

primeiro valor de user encontrado, diga-se bob, seguido por uma pesquisa para o

sourcetype=syslog user=bob.

Se você está pronto para continuar a sua aventura de aprendizado no Splunk, o Capitulo

4 introduz para você mais comandos que você pode considerar imediatamente úteis.

4 SPL: Linguagem de Processamento

de Busca

No capítulo 3, nós cobrimos a maioria dos comandos básicos

Este capitulo descreve alguns dos outros comandos SPL que você vai querer saber.

Este capitulo usa um aproximação mais crua, ensinando os comandos SPL através de

exemplos. Para a documentação de referencia completa, veja

com.

A tabela 4-1 sumariza os comandos SPL cobertos neste capitulo, por categoria.

Tabela 4-1. Comandos comuns de SPL

Organizando Resultados

Organizar comandos é o trabalho do comando

sort

O comando sort organiza os resultados das

mostra alguns dos exemplos.

4 SPL: Linguagem de Processamento

No capítulo 3, nós cobrimos a maioria dos comandos básicos do Splunk na busca SPL.

Este capitulo descreve alguns dos outros comandos SPL que você vai querer saber.

Este capitulo usa um aproximação mais crua, ensinando os comandos SPL através de

exemplos. Para a documentação de referencia completa, veja http://docs.splunk.

1 sumariza os comandos SPL cobertos neste capitulo, por categoria.

1. Comandos comuns de SPL

Organizando Resultados

Organizar comandos é o trabalho do comando sort.

organiza os resultados das busca por campos específicos. A tabela 4

mostra alguns dos exemplos.

27

4 SPL: Linguagem de Processamento

do Splunk na busca SPL.

Este capitulo descreve alguns dos outros comandos SPL que você vai querer saber.

Este capitulo usa um aproximação mais crua, ensinando os comandos SPL através de

.splunk.

1 sumariza os comandos SPL cobertos neste capitulo, por categoria.

busca por campos específicos. A tabela 4-2

Resumindo partes da busca Se nós simplesmente mostrarmos partes de uma série de comandos (como nós fizemos na tabela 4-2), você vai ver: Isto significa que alguma busca veio antes do comando, mas nós estamos nos focando no que vem depois.

Tabela 4-2. Exemplos de Comando sort

Dica: A ordem crescente é o resultado padrão das buscas. Para reverter a ordem dos resultados, use o sinal de menos na frente do campos escolhido para organizar os resultados.

A figura 4-1 ilustra o segundo exemplo. Nós vamos organizar por preços crescentes e

notas decrescentes. O primeiro resultado vai ser o item mais barato e mais be

Se nós simplesmente mostrarmos partes de uma série de comandos (como nós fizemos 2), você vai ver: ... |

Isto significa que alguma busca veio antes do comando, mas nós estamos nos focando

sort

: A ordem crescente é o resultado padrão das buscas. Para reverter a ordem dos resultados, use o sinal de menos na frente do campos escolhido para organizar os

1 ilustra o segundo exemplo. Nós vamos organizar por preços crescentes e

notas decrescentes. O primeiro resultado vai ser o item mais barato e mais be

28

Se nós simplesmente mostrarmos partes de uma série de comandos (como nós fizemos

Isto significa que alguma busca veio antes do comando, mas nós estamos nos focando

: A ordem crescente é o resultado padrão das buscas. Para reverter a ordem dos resultados, use o sinal de menos na frente do campos escolhido para organizar os

1 ilustra o segundo exemplo. Nós vamos organizar por preços crescentes e

notas decrescentes. O primeiro resultado vai ser o item mais barato e mais bem votado.

Figura 4-1. Comando sort

Filtrando Resultados

Este comandos pegam os resultados da busca anterior e reduzem eles em grupos menos

de resultados. Em outras palavras, você está estreitando a sua visão dos dados para

mostrar somente os resultad

where

O comando de filtragem

a avaliação funcionar e o resultado for

resultado é descartado. Por exemplo:

source=job_listings | where salary > industry_average

Este exemplo recupera trabalhos listando e descartando aqueles que o salário não é

maior do que o valor médio da industria. Ele também descarta os eventos que estão em

falta de um campo salary

This example compares two fields

something we can only do with the

field values to literal values, simply use the

Este exemplo compara dois campos podemos fazer com o comando

seus valores literais, simplesmente use o comando

source=job_listings salary>80000

Filtrando Resultados

Este comandos pegam os resultados da busca anterior e reduzem eles em grupos menos

de resultados. Em outras palavras, você está estreitando a sua visão dos dados para

mostrar somente os resultados que você está procurando.

O comando de filtragem where avalia uma expressão para a filtragem dos resultados. Se

a avaliação funcionar e o resultado for TRUE, o resultado é mantido; senão, o

resultado é descartado. Por exemplo:

| where salary > industry_average

Este exemplo recupera trabalhos listando e descartando aqueles que o salário não é

maior do que o valor médio da industria. Ele também descarta os eventos que estão em

salary ou industry_average.

example compares two fields—salary and industry_average—

something we can only do with the where command. When comparing

field values to literal values, simply use the search command:

Este exemplo compara dois campos - salary and industry_average - algo que nós só

podemos fazer com o comando where. Quando comparando valores de campos para

seus valores literais, simplesmente use o comando search:

source=job_listings salary>80000

29

Este comandos pegam os resultados da busca anterior e reduzem eles em grupos menos

de resultados. Em outras palavras, você está estreitando a sua visão dos dados para

avalia uma expressão para a filtragem dos resultados. Se

, o resultado é mantido; senão, o

Este exemplo recupera trabalhos listando e descartando aqueles que o salário não é

maior do que o valor médio da industria. Ele também descarta os eventos que estão em

algo que nós só

. Quando comparando valores de campos para

Tabela 4-3. Exemplos do comando where

A figura 4-2 ilustra o coman

Figure 4-2. Exemplo do comando where

Dicas para usar o where

Como o comando eval, o comando

de avaliação de expressões (veja o apêndice E para uma lista completa).

dedup

Removendo os dados redundantes é a razão comando de filtragem

comando remove resultados subsequentes que se encaixam em um critério.

comando só pode manter

valores dos campos especificados. Se o

pra 1 e retorna o primeiro valor encontrado (que é normalmente o mais recente).

where

2 ilustra o comando where distance/time > 100.

where

Dicas para usar o where

, o comando where funciona com um grande grupo de funções

de avaliação de expressões (veja o apêndice E para uma lista completa).

Removendo os dados redundantes é a razão comando de filtragem dedup

comando remove resultados subsequentes que se encaixam em um critério.

manter o primeiro resultado do count para cada combinação dos

specificados. Se o count não for especificado, por padrão ele vai

pra 1 e retorna o primeiro valor encontrado (que é normalmente o mais recente).

30

funciona com um grande grupo de funções

dedup. Este

comando remove resultados subsequentes que se encaixam em um critério. Este é, este

para cada combinação dos

não for especificado, por padrão ele vai

pra 1 e retorna o primeiro valor encontrado (que é normalmente o mais recente).

Tabela 4-4. Exemplos do comando dedup

A figura 4-3 ilustra o comando

Figure 4-3. Exemplo do comando dedup

Pontos Chave

• Para manter todos os resultados mas remover os valores duplicados, use a opção

keepevents.

• Os resultados que retornam são os primeiros resultados a serem encontrados com as

combinações deste valores es

sortby para mudar a ordem quando necessário.

dedup

3 ilustra o comando dedup 3 source.

dedup

• Para manter todos os resultados mas remover os valores duplicados, use a opção

• Os resultados que retornam são os primeiros resultados a serem encontrados com as

combinações deste valores específicos - geralmente os mais recentes. Use a clausula

para mudar a ordem quando necessário.

31

• Para manter todos os resultados mas remover os valores duplicados, use a opção

• Os resultados que retornam são os primeiros resultados a serem encontrados com as

geralmente os mais recentes. Use a clausula

• Campos onde o campo especificado não existe são mantidos por padrão. Use a opção

keepnull=<true/false> para substituir o comportamento padrão, se

head

O comando de filtragem

permite que uma busca pare de recuperar eventos do disco quando ele encontrar o

número desejado de resultados.

Da frente ou de traz? O oposto do comando é o primeiro. Os resultados são retornados em ordem reversa, começando pelo fim dos resultados. Lembre-se que este primeiro é relativo a ordem de entrada dos eventos, que normalmente desce confor 10 retorna os últimos 10 eventos.

Tabela 4-5. Exemplos do comando head

Figura 4-4. Exemplo do comando head

• Campos onde o campo especificado não existe são mantidos por padrão. Use a opção

para substituir o comportamento padrão, se desejar.

O comando de filtragem head retorna os primeiros resultados do count. Usar o

permite que uma busca pare de recuperar eventos do disco quando ele encontrar o

número desejado de resultados.

O oposto do comando é o head comando tail, que retorna o último resultado, em vez do primeiro. Os resultados são retornados em ordem reversa, começando pelo fim dos

se que este primeiro é relativo a ordem de entrada dos eventos, que normalmente desce conforme a ordem do tempo, significando que, por exemplo,

10 eventos.

head

head

32

• Campos onde o campo especificado não existe são mantidos por padrão. Use a opção

retorna os primeiros resultados do count. Usar o head

permite que uma busca pare de recuperar eventos do disco quando ele encontrar o

, que retorna o último resultado, em vez do primeiro. Os resultados são retornados em ordem reversa, começando pelo fim dos

se que este primeiro é relativo a ordem de entrada dos eventos, que me a ordem do tempo, significando que, por exemplo, head

33

Agrupando Resultados

O comando transaction agrupa eventos relacionados.

transaction

O comando transaction agrupa eventos que se encontram em várias restrições em

transações - coleções de eventos, possivelmente de múltiplas fontes. Os eventos são

agrupados se todas as definições de restrições da transação são alcançadas. Transações

são compostas de texto cru (o campo _raw) de cada evento membro, a estampa de

tempo (o campo _time) do membro mais antigo, a união de todos os outros campos de

cada membro, e alguns campos adicionais que descrevem a transação como duration e

eventcount.

Table 4-6. Exemplos do comando transactiontransaction

34

O segundo exemplo na tabela 4-6, transaction clientip maxspan=30s

maxpause=5s, é ilustrado na figura 4

Figura 4-5. Exemplo do comando transaction

Pontos chave

Todos argumentos do comando

de ser especificadas para definir como os eventos serão agrupado em transações.

O Splunk não necessariamente interpreta a transação definida por

como uma conjunção (field1 AND field2

field2 OR field3) destes campos. Se existe uma relação transitiva entre os campos no

<fields list>, o comando

Por exemplo, se você procura

eventos agrupados em uma única transação:

event=1 host=a

event=2 host=a cookie=b

event=3 cookie=b

Os primeiros dois eventos estão junto pois eles tem o

está com eles pois ele divide o

O comando transação produz dois campos:

• duration: a diferença entre as estampas de tempo para o primeiro e último evento na

transação.

transaction clientip maxspan=30s , é ilustrado na figura 4-5.

transaction

Todos argumentos do comando transaction são opcionais, mas algumas restrições tem

de ser especificadas para definir como os eventos serão agrupado em transações.

O Splunk não necessariamente interpreta a transação definida por múltiplos

field1 AND field2 AND field3) ou uma disjunção (

) destes campos. Se existe uma relação transitiva entre os campos no

, o comando transaction a usa.

Por exemplo, se você procura-se por transaction host cookie, você pode ver os seguintes

eventos agrupados em uma única transação:

event=2 host=a cookie=b

Os primeiros dois eventos estão junto pois eles tem o host=a em comum e o terceiro

está com eles pois ele divide o cookie=b com o segundo evento.

ransação produz dois campos:

: a diferença entre as estampas de tempo para o primeiro e último evento na

35

são opcionais, mas algumas restrições tem

de ser especificadas para definir como os eventos serão agrupado em transações.

múltiplos campos

) ou uma disjunção (field1 OR

) destes campos. Se existe uma relação transitiva entre os campos no

, você pode ver os seguintes

em comum e o terceiro

: a diferença entre as estampas de tempo para o primeiro e último evento na

• eventcount: número de eventos na transação.

depois nesta seção) e o comando

existe uma importante distinção:

• stats calcula valores estatísticos nos eventos agrupados pelos valores dos campos(e

então os eventos descartados).

• transaction agrupa evento, e suporta mais opções em como eles podem s

mantém o texto cru e os valores dos outros campos dos eventos originais.

Reportando Resultados

Os comandos de reportagem cobertos nesta seção incluem

top

Tendo uma lista de campos, o comando

valores de campos, junto de suas contagens e porcentagens. Se você especificar por

clausula os campos adicionais opcionais, o valores mais

distinto de valores dos campos por clausula que f

O oposto do comum é raro O oposto do comando top

os valores menos comuns de um campo (em vez dos mais comuns). O comando exatamente isso.

Tabela 4-7. Exemplos do comando top

O segundo exemplo da tabela 4

: número de eventos na transação. Mesmo que o comando stats

comando transaction ambos permitem que você agrupe eventos,

existe uma importante distinção:

calcula valores estatísticos nos eventos agrupados pelos valores dos campos(e

então os eventos descartados).

agrupa evento, e suporta mais opções em como eles podem ser agrupados e

o texto cru e os valores dos outros campos dos eventos originais.

Reportando Resultados

Os comandos de reportagem cobertos nesta seção incluem top, stats, chart,e

Tendo uma lista de campos, o comando top retorna os grupos mais freqüentes

valores de campos, junto de suas contagens e porcentagens. Se você especificar por

clausula os campos adicionais opcionais, o valores mais freqüentes para cada grupo

distinto de valores dos campos por clausula que foram retornados.

top é o comando rare. Algumas vezes você que saber quais são os valores menos comuns de um campo (em vez dos mais comuns). O comando

top

O segundo exemplo da tabela 4-7, top 2 user by host, é ilustrado na figura 4

36

stats (coberto

permitem que você agrupe eventos,

calcula valores estatísticos nos eventos agrupados pelos valores dos campos(e

er agrupados e

,e timechart.

freqüentes deste

valores de campos, junto de suas contagens e porcentagens. Se você especificar por

para cada grupo

. Algumas vezes você que saber quais são os valores menos comuns de um campo (em vez dos mais comuns). O comando rare faz

, é ilustrado na figura 4-6.

Figura 4-6. Exemplo do comando top

stats

O comando stats calcula as estatísticas agregadas sobre um dataset, similar a uma

agregação em SQL. A tabulação resultante pode conter uma linha, que representa a

agregação de todo o grupo de resultados, ou uma linha para cada valor distinto

especificado por clausula.

Existe mais de um comando para cálculos estatísticos. Os comandos

chart e timechart fazem os mesmos cálculos estatísticos nos seus dados, mas retornam

grupos de resultados diferentes para permitir que você possa conseguir os resultados

necessários mais facilmente.

• O comando stats retorna uma tabela de resultados onde cada linha representa uma

combinação única dos valores dos campos agrupados.

• O comando chart retorna a mesma tabela de resultados, com as linhas como os

campos arbitrários.

• O comando timechart retorna os mesmos resultados tabulados, mas a linha é colocada

como um campo interno,

tempo..

O que “as” significa Nota: O uso da palavra chave “as” em alguns dos comandos na tabe usado para renome ar um campo. Por exemplo, ele tem que adicionar todos os campos “Revenue.”

top

calcula as estatísticas agregadas sobre um dataset, similar a uma

agregação em SQL. A tabulação resultante pode conter uma linha, que representa a

agregação de todo o grupo de resultados, ou uma linha para cada valor distinto

especificado por clausula.

xiste mais de um comando para cálculos estatísticos. Os comandos stats,

fazem os mesmos cálculos estatísticos nos seus dados, mas retornam

grupos de resultados diferentes para permitir que você possa conseguir os resultados

is facilmente.

retorna uma tabela de resultados onde cada linha representa uma

combinação única dos valores dos campos agrupados.

retorna a mesma tabela de resultados, com as linhas como os

retorna os mesmos resultados tabulados, mas a linha é colocada

como um campo interno, _time, que te permite organizar o seu gráfico por períodos de

O uso da palavra chave “as” em alguns dos comandos na tabela 4um campo. Por exemplo, sum(price) as “Revenue” significa que

ele tem que adicionar todos os campos price e nomear a coluna resultante como

37

calcula as estatísticas agregadas sobre um dataset, similar a uma

agregação em SQL. A tabulação resultante pode conter uma linha, que representa a

agregação de todo o grupo de resultados, ou uma linha para cada valor distinto

fazem os mesmos cálculos estatísticos nos seus dados, mas retornam

grupos de resultados diferentes para permitir que você possa conseguir os resultados

retorna uma tabela de resultados onde cada linha representa uma

retorna a mesma tabela de resultados, com as linhas como os

retorna os mesmos resultados tabulados, mas a linha é colocada

, que te permite organizar o seu gráfico por períodos de

la 4-14. O as é significa que

e nomear a coluna resultante como

A tabela 4-8 mostra exemplos do uso do comando

Tabela 4-8. Exemplos do comando stats

O terceiro exemplo na tabela 4

por host, é ilustrado na figura 4

Figura 4-7. Exemplo de comando stats

A tabela 4-9 lista funções estatísticas que você pode usa

funções também podem ser usadas com os comandos

discutir depois)

8 mostra exemplos do uso do comando stats.

stats

O terceiro exemplo na tabela 4-8, recuperando o número de pedidos de GET e POST

por host, é ilustrado na figura 4-7.

stats

9 lista funções estatísticas que você pode usar com o comando stats

funções também podem ser usadas com os comandos chart e timechart,que nós vamos

38

8, recuperando o número de pedidos de GET e POST

stats. (Estas

,que nós vamos

39

Tabela 4-9. Funções estatísticas do

Nota: Todas as funções exceto aquelas que são exclusivas do timechart são aplicáveis aos comandos

chart

O comando chart cria uma saída tabular de dados específica para gráficos. Você pode

especificar a variável do eixo x usando o

A tabela 4-10 mostra alguns exemplos de uso do comando

realistas, veja o capítulo 6.

Tabela 4-10. Exemplos do comando

As figuras 4-8 (resultados tabelados) e 4

ilustram os resultados do último exemplo da Tabela 4

9. Funções estatísticas do stats

Nota: Todas as funções exceto aquelas que são exclusivas do timechart são veis aos comandos chart, stats e timechart.

cria uma saída tabular de dados específica para gráficos. Você pode

especificar a variável do eixo x usando o over ou o by.

10 mostra alguns exemplos de uso do comando chart; para cenários mais

realistas, veja o capítulo 6.

10. Exemplos do comando chart

8 (resultados tabelados) e 4-9 (gráfico de barras em escala logarítmica)

ilustram os resultados do último exemplo da Tabela 4-10:

40

Nota: Todas as funções exceto aquelas que são exclusivas do timechart são

cria uma saída tabular de dados específica para gráficos. Você pode

ara cenários mais

9 (gráfico de barras em escala logarítmica)

Figura 4-8. Exemplo do comando chart

Figure 4-9. Exemplo do comando chart

timechart

O comando timechart cria um gráfico para agregação estatística aplicada ao campo com

o tempo como o eixo x.

A tabela 4-11 mostra alguns exemplos do uso do comando

oferece mais exemplos do uso deste comando com um contexto.

chart—Resultados Tabelados

chart—Gráfico formatado pelo Report Builder

cria um gráfico para agregação estatística aplicada ao campo com

11 mostra alguns exemplos do uso do comando timechart. O capítulo 6

oferece mais exemplos do uso deste comando com um contexto.

41

cria um gráfico para agregação estatística aplicada ao campo com

. O capítulo 6

Tabela 4-11. timechart Exemplo de comando

O quarto exemplo na tabela 4

ilustrada nas figuras 4-10 e 4

Exemplo de comando

O quarto exemplo na tabela 4-11, retorna a receita horária por nome do produto, é

10 e 4-11.

42

o produto, é

Figure 4-10. Exemplo do comando timechart

Figure 4-11. Exemplo do comando timechart

Filtrando, Modificando e Adicionando Campos

Estes comandos irão te ajudar a obter somente os campos desejados em sua busca. Você

pode querer simplificar os seus resultados usando o comando

campos. Você pode querer que os valores dos seus campos fiquem mais fáceis de ler

usando o comando replace

Ou você precise adicionar novos campos com a ajuda de comandos como

lookup:

• O comando eval calcula o valor de um novo campo baseado nos outros campos, seja

numericamente, por concatenação ou através de lógica booleana.

• O comando rex pode ser usado para criar novos campos através do uso de expressões

regulares para a extração de padrões de dados em outros campos.

• O comando lookup adiciona campos baseados na busca de um valor em um evento,

referir ele para uma tabela

linha da tabela de lookup no evento. Estes comandos podem ser usados para criar novos

campos ou eles podem ser usados para substituir os valores de campos existentes. Isso

fica a sua escolha.

fields

O comando fields remove os campos de uma busca. Comandos típicos são mostrados na

tabela 4-12.

timechart—Resultados Tabelados

timechart—Gráfico formatado pelo Report Builder

Filtrando, Modificando e Adicionando Campos

Estes comandos irão te ajudar a obter somente os campos desejados em sua busca. Você

pode querer simplificar os seus resultados usando o comando fields para remover alguns

campos. Você pode querer que os valores dos seus campos fiquem mais fáceis de ler

replace.

Ou você precise adicionar novos campos com a ajuda de comandos como

calcula o valor de um novo campo baseado nos outros campos, seja

numericamente, por concatenação ou através de lógica booleana.

pode ser usado para criar novos campos através do uso de expressões

regulares para a extração de padrões de dados em outros campos.

adiciona campos baseados na busca de um valor em um evento,

referir ele para uma tabela de lookup, e adicionando os campos que se encaixam da

linha da tabela de lookup no evento. Estes comandos podem ser usados para criar novos

campos ou eles podem ser usados para substituir os valores de campos existentes. Isso

remove os campos de uma busca. Comandos típicos são mostrados na

43

Estes comandos irão te ajudar a obter somente os campos desejados em sua busca. Você

para remover alguns

campos. Você pode querer que os valores dos seus campos fiquem mais fáceis de ler

Ou você precise adicionar novos campos com a ajuda de comandos como eval, rex e

calcula o valor de um novo campo baseado nos outros campos, seja

pode ser usado para criar novos campos através do uso de expressões

adiciona campos baseados na busca de um valor em um evento,

de lookup, e adicionando os campos que se encaixam da

linha da tabela de lookup no evento. Estes comandos podem ser usados para criar novos

campos ou eles podem ser usados para substituir os valores de campos existentes. Isso

remove os campos de uma busca. Comandos típicos são mostrados na

Tabela 4-12. Exemplos do comando

O primeiro exemplo da tabela 4

Figura 4-12. Exemplo do comando fields

Pontos Chave

Campos internos, ou seja, campos cujo o nome começa com um underscore, não são

afetados pelo comando fields

replace

O comando replace executa

campo por outro valor substituto.

O valor em uma localização e substituição é sensível a maiúsculas.

12. Exemplos do comando fields

O primeiro exemplo da tabela 4-12, fields – field1, field2, é ilustrado na figura 4

fields

Campos internos, ou seja, campos cujo o nome começa com um underscore, não são

fields, a não ser que especificado.

executa uma localização e substituição de um valor especifico de

campo por outro valor substituto.

O valor em uma localização e substituição é sensível a maiúsculas.

44

, é ilustrado na figura 4-12.

Campos internos, ou seja, campos cujo o nome começa com um underscore, não são

uma localização e substituição de um valor especifico de

Tabela 4-13. Exemplos do comando

O segundo exemplo na tabela 4

msg_level, é ilustrado na figura 4

Figura 4-13. Exemplo do comando replace

eval

O comando eval calcula uma expressão e coloca o valor resultante em um novo campo.

Os comandos eval e where

todas as funções disponíveis.

13. Exemplos do comando replace

O segundo exemplo na tabela 4-13, muda de 0 para Critical e 1 para Error no

msg_level, é ilustrado na figura 4-13.

replace

calcula uma expressão e coloca o valor resultante em um novo campo.

where usam a mesma sintaxe de expressão; O Apêndice E lista

todas as funções disponíveis.

45

para Error no

calcula uma expressão e coloca o valor resultante em um novo campo.

expressão; O Apêndice E lista

Tabela 4-14. Exemplos do comando

A figura 4-14 ilustra o primeiro exemplo na tabela 4

Figura 4-14. Exemplo do comando eval

Os resultados do comando

chamado velocity já existe, o comando

substitui somente um campo por vez.

rex

O comando rex extrai campos que possuem um valor que se encaixa em uma

Regular Compatível de Perl (PCRE) especificado. (

expressão regular (Regular Ex

O que são expressões regulares? Pense nas expressões regulares como “coringas ao extremo”. Você provavelmente já procurou em arquivos com expressões como *.doc ou *.xls. Expressões regulares permitem que você leve isto para um novo patamar de poder e flexibilidade. Se você já está familiar com as expressões regulares, você provavelmente não está lendo esta caixa. Para aprender mais, veja site no tópico.

14. Exemplos do comando eval

14 ilustra o primeiro exemplo na tabela 4-14, eval velocity=distance/time

eval

Os resultados do comando eval criam um novo campo chamado velocity. (Se um campo

já existe, o comando eval atualiza o seu valor.) O comando

substitui somente um campo por vez.

extrai campos que possuem um valor que se encaixa em uma

Regular Compatível de Perl (PCRE) especificado. (rex é uma abreviação pa

expressão regular (Regular Expression).)

O que são expressões regulares?

Pense nas expressões regulares como “coringas ao extremo”. Você provavelmente já quivos com expressões como *.doc ou *.xls. Expressões regulares

permitem que você leve isto para um novo patamar de poder e flexibilidade. Se você já está familiar com as expressões regulares, você provavelmente não está lendo esta

mais, veja http://www.regular-expressions.info —facilmente o melhor

46

velocity=distance/time.

. (Se um campo

atualiza o seu valor.) O comando eval cria e

extrai campos que possuem um valor que se encaixa em uma Expressão

é uma abreviação para

Pense nas expressões regulares como “coringas ao extremo”. Você provavelmente já quivos com expressões como *.doc ou *.xls. Expressões regulares

permitem que você leve isto para um novo patamar de poder e flexibilidade. Se você já está familiar com as expressões regulares, você provavelmente não está lendo esta

facilmente o melhor

Tabela 4-15. Exemplos do comando

A figura 4-15 ilustra o primeiro exemplo na tabela 4

Figura 4-15. Exemplo do comando rex

lookup

O comando de lookup manualmente invoca campos de lookup de uma tabela de lookup,

permitindo que você adicione campos e valores de fontes externas. Por exemplo, se

você tem CEPs, você pode fazer um lookup no nome da rua.

Exemplos do comando rex

15 ilustra o primeiro exemplo na tabela 4-15, extraindo os campos

rex

manualmente invoca campos de lookup de uma tabela de lookup,

permitindo que você adicione campos e valores de fontes externas. Por exemplo, se

você tem CEPs, você pode fazer um lookup no nome da rua.

47

15, extraindo os campos from e to.

manualmente invoca campos de lookup de uma tabela de lookup,

permitindo que você adicione campos e valores de fontes externas. Por exemplo, se

48

Tabela 4-16. Exemplos do comando lookup

A figura 4-16 ilustra o primeiro exemplo da tabela 4-16, lookup usertogroup user as

local_user OUTPUT group as user_group.

49

Figura 4-16. Exemplo do comando lookup

Este capítulo forneceu um curso intensivo para os comandos SPL. O próximo capítulo

descreve como enriquecer seus dados com etiquetas e tipos de eventos e como dizer

para o Splunk observar certos padrões e te alertar sobre eles.

50

5 Enriquecendo seus dados

Para fazer os seus dados mais úteis, adiciones conhecimento a eles. O que a gente quer

dizer com isso? Quando você diz ao Splunk como extrair os campos dos seus dados,

você pode começar a discutir sobre estes campos e dar ao Splunk o conhecimento para

classificar os seus dados para análises mais profundas. Quando você salva reportagens e

dashboards, seus dados se tornam mais fáceis de entender, tanto para você quanto para

os outros. E quando você cria alertas, o Splunk proativamente revela potenciais

problemas para que você não tenha que procurar manualmente depois do ocorrido.

Este capítulo cobre 3 áreas:

• Usando o Splunk para entender os seus dados mostra como explorar, categorizar e

se tornar mais familiar com os seus dados.

• Mostrando os dados mostra o básico da visualização de dados.

• Criando alertas para potenciais problemas mostra como localizar e mandar alertas

quando os dados alcançam uma marca.

Usando o Splunk para entender os dados

Quando você encontrar pela primeira vez uma nova fonte de dados de maquina, ele

pode parecer como uma massa sem sentido de números e texto crípticos. Quanto mais

você sabe sobre o sistema que está bombeando os dados, mais os dados irão fazer

sentido para você. Mas mesmo que você saiba o conjunto de dados bem, uma

exploração mais profunda pode lhe trazer novas perspectivas.

O primeiro passo em conhecer os dados é usar o Splunk para identificar os campos nos

seus dados. Você pode pensar que isto é como procurar entre todas as peças do quebra-

cabeça, primeiro notando seus formatos. O próximo passo é categorizar os dados como

uma proposta para agregação e reportagem. Isto é como organizar as peças do quebra-

cabeça em peças de borda e peças do meio. Quando mais você for capaz de entender os

dados e montar o quebra-cabeça, mais claro a imagem vai ficando.

E por último, a imagem está completa (mostrando os dados) e você pode compartilhar

ela com os outros.

Identificando campos: Olhando entre as peças do quebra-

cabeça

O Splunk reconhece muitos dos tipos mais comuns de dados, referidos como tipos de

fonte. Se você colocar o tipo de fonte correto, o Splunk pode usar ambientações pré-

configuradas para tentar identificar os campos. Este é o caso para muitos dos logs de

servidores web, por exemplo.

51

Mas ainda é comum existirem atributos escondidos nos dados de maquina. Por

exemplo, a categoria de um produto pode fazer parte de uma URL. Examinando os

eventos que possuem certas categorias de produtos nas suas URLs, você pode

determinar os tempos de resposta e taxas de erro para diferentes seções do site ou

informações sobre quais tipos de produtos são os mais procurados.

Descoberta de campo automática

Quando você faz uma busca, o Splunk automaticamente extrai os campos através da

identificação de padrões comuns nos dados, como a presença de um sinal igual entre a

chave e o valor. Por exemplo, se um evento contem “… id=11 lname=smith … ” o

Splunk automaticamente cria os campos id e lname com os valores de exemplo. E,

como foi mencionado no capítulo 2, alguns campos (como source, sourcetype, host,

_time e linecount) serão sempre identificados.

Não consegue achar o que você está procurando? Comece a procurar por isso. O

Splunk mostra somente um certo número de campos na tela por padrão. Centenas ou

mais podem ter sido extraídos perfeitamente. Procurar por eles faz com que eles

apareçam no topo.

O botão de Descoberta de Campos (Field Discovery) na barra lateral de Campos

(Fields) ta tela pode ligar ou desligar este comportamento. Você pode usar alguns

destes campos selecionados (campos que o Splunk selecionou por padrão ou que você

tenha escolhido), seguidos de campos que o Splunk achou pois eles aparecem em

múltiplos eventos. Se você clicar em Editar (Edit), o Splunk lista mais campos que

você pode adicionar ao grupo de campos selecionados. Criando em qualquer campo

mostra pra você os valores mais comuns extraídos dos resultados da sua busca.

Para mais informações sobre a extração automática de campos, veja

http://splunk.com/goto/book#auto_fields.

Configurando a Extração de Campos

A configuração da extração de campos pode ser feita de duas formas. Você pode deixar

o Splunk automatizar a configuração para você utilizando o Extrator de Campos

Interativo (Interactive Field Extrator), ou você pode manualmente especificar a

configuração você mesmo.

O Extrator de Campos Interativo

De qualquer evento no resultado de sua busca, você pode iniciar o Interactive Field

Extractor (IFX) selecionando a opção Extract Fields do menu Event option,

que você pode alcançar clicando na seta para baixo a esquerda de um evento na lista de

eventos (veja a figura 5-1).

Figure 5-1. Escolhendo o Extract Fields Extractor

O IFX aparecerá em outra aba ou janela no seu navegador. Colocando

que você deseja encontrar (como o IP do cliente nos endereços dentro dos logs de web),

o Splunk gera uma expressão regular que extrai valores similares (isto é especialmente

útil para aqueles que tem dificuldades com REX entre nós). Você

(para ter certeza que ela está encontrando o campo que você estava procurando) e salvar

ela com o nome do campo que deseja.

Para aprender mais sobre o IFX, veja

Configurando manualmente a extração dos

Do menu Manager » Fields » Field extractions

expressão regular para extrair o campo, que é um método mais flexível e avançado de

fazer a extração.

Para aprender mais sobre a extração manual de campos, veja

http://splunk.com/goto/book#config_fields

Extração de Linguagem de Busca

Outra forma de extrair campos é o uso de comandos de busca. O comando mais comum

para a extração de dados é o comando

expressão regular e extrai os campos que se encaixam na

Alguma vezes o comando que você usa depende do tipo de dado do qual você está

extraindo os campos. Para extrair os campos de eventos tabulares

como a saída de uma linha de comando), use o

JSON, use o spath ou xmlkv

Para aprender mais sobre comandos que extraem campos, veja

http://splunk.com/goto/book#search_fields

Explorando os dados pa

Depois que os campos são extraídos, você pode começar a explorar os dados para ver o

que ele te diz. Retornando a nossa analogia do quebra

Extract Fields do menu do Event Options você inicia o Interactive Field

O IFX aparecerá em outra aba ou janela no seu navegador. Colocando os tipos de valor

que você deseja encontrar (como o IP do cliente nos endereços dentro dos logs de web),

o Splunk gera uma expressão regular que extrai valores similares (isto é especialmente

útil para aqueles que tem dificuldades com REX entre nós). Você pode testar a extração

(para ter certeza que ela está encontrando o campo que você estava procurando) e salvar

ela com o nome do campo que deseja.

Para aprender mais sobre o IFX, veja http://splunk.com/goto/book#ifx.

Configurando manualmente a extração dos campos

Manager » Fields » Field extractions, você pode especificar manualmente a

expressão regular para extrair o campo, que é um método mais flexível e avançado de

Para aprender mais sobre a extração manual de campos, veja

//splunk.com/goto/book#config_fields.

Extração de Linguagem de Busca

Outra forma de extrair campos é o uso de comandos de busca. O comando mais comum

para a extração de dados é o comando rex, descrito no último capítulo. Ele toma uma

expressão regular e extrai os campos que se encaixam na expressão.

Alguma vezes o comando que você usa depende do tipo de dado do qual você está

extraindo os campos. Para extrair os campos de eventos tabulares multi linha

como a saída de uma linha de comando), use o multikv e para extrair de dados XML e

xmlkv.

Para aprender mais sobre comandos que extraem campos, veja

http://splunk.com/goto/book#search_fields.

Explorando os dados para entender o escopo

Depois que os campos são extraídos, você pode começar a explorar os dados para ver o

que ele te diz. Retornando a nossa analogia do quebra-cabeça, você começa procurando

52

Interactive Field

os tipos de valor

que você deseja encontrar (como o IP do cliente nos endereços dentro dos logs de web),

o Splunk gera uma expressão regular que extrai valores similares (isto é especialmente

pode testar a extração

(para ter certeza que ela está encontrando o campo que você estava procurando) e salvar

, você pode especificar manualmente a

expressão regular para extrair o campo, que é um método mais flexível e avançado de

Para aprender mais sobre a extração manual de campos, veja

Outra forma de extrair campos é o uso de comandos de busca. O comando mais comum

, descrito no último capítulo. Ele toma uma

Alguma vezes o comando que você usa depende do tipo de dado do qual você está

lti linha (Tal qual

e para extrair de dados XML e

Para aprender mais sobre comandos que extraem campos, veja

Depois que os campos são extraídos, você pode começar a explorar os dados para ver o

cabeça, você começa procurando

por padrões. Que peças te ajudam a definir as bordas do quebra c

forma você pode categorizar as peças? Por forma ou por cor?

A barra lateral do painel de busca

imediatas sobre cada campo:

• O tipo básico de dados do campo, indicado por um caractere a esquerda do nome do

campo (“a” para textos e “#” para

• O número de ocorrências do campo na lista de eventos (em

do campo).

Quando você clica no nome do cam

aparecem incluindo o valores mais comuns e links para gráficos adicionais.

Figura 5-2. Veja o sumario de um campo clicando no nome do campo na barra lateral

Você também pode estreitar a lista de

algum valor para este campo.

Explorando os dados usando o top

O comando top da a você os valores mais comuns, por padrão os 10 mais comuns. Você

pode usar o comando top para responder as seguintes questões:

• Quais são as minhas 10 páginas mais visitadas?

sourcetype=”access*” | top uri

• Quais são os 10 usuários mais recorrentes do hospedeiro?

sourcetype=”access*” | top user by host

por padrões. Que peças te ajudam a definir as bordas do quebra cabeça? De qual outra

forma você pode categorizar as peças? Por forma ou por cor?

painel de busca (Search Dashboard) te da algumas informações

imediatas sobre cada campo:

• O tipo básico de dados do campo, indicado por um caractere a esquerda do nome do

campo (“a” para textos e “#” para numérico).

• O número de ocorrências do campo na lista de eventos (em parênteses depois do nome

no nome do campo na barra lateral Fields, um sumario o campo

aparecem incluindo o valores mais comuns e links para gráficos adicionais.

2. Veja o sumario de um campo clicando no nome do campo na barra lateral Fields

Você também pode estreitar a lista de eventos para ver somente os eventos que tenham

algum valor para este campo.

Explorando os dados usando o top

da a você os valores mais comuns, por padrão os 10 mais comuns. Você

pode usar o comando top para responder as seguintes questões:

Quais são as minhas 10 páginas mais visitadas?

sourcetype=”access*” | top uri

• Quais são os 10 usuários mais recorrentes do hospedeiro?

sourcetype=”access*” | top user by host

53

abeça? De qual outra

) te da algumas informações

• O tipo básico de dados do campo, indicado por um caractere a esquerda do nome do

depois do nome

, um sumario o campo

Fields.

eventos para ver somente os eventos que tenham

da a você os valores mais comuns, por padrão os 10 mais comuns. Você

54

• Quais são os 50 pares de IP para fonte e destino?

…| top limit=50 src_ip, dest_ip

Explorando os dados usando o stats

O comando stats proporciona uma grande quantidade de informação estatística sobre os

seus dados.

Aqui estão algumas formas simples de como usar-lo:

• Quantas respostas de erro 503 eu tive?

sourcetype=”access*” status=503 | stats count

• Qual é a média de kilobytes por segundo do hospedeiro?

sourcetype=”access*” | stats avg(kbps) by host

• Quantas pessoas compraram flores ontem? Use o stats dc (contagem de distintos) para

ter certeza de que os endereços de IP repetidos serão contados apenas uma vez.

sourcetype=”access*” action=purchase category_id=flowers | stats dc(clientip)

• Quanto é 95% do tempo que os sites estão demorando para responder?

sourcetype=”access*” | stats perc95(spent)

Adicionando Sparklines a mistura

Desde o Splunk 4.3, você pode adicionar gráficos simples de linha, conhecidos como

Sparkline,

para os seus resultados tabulares. Os Sparklines te permitem a visualização de um

padrão de dados sem ter de criar um gráfico de linha separado.

Por exemplo, esta busca usa sparklines para mostrar o número de eventos por tempo

para cada hospedeiro?

* | stats sparkline count by host

A figura 5-3 mostra uma sparklines na tabela.

Figura 5-3. A Sparklines mostra os padrões nos dados dentro da tabela de even

Aqui estão alguns comandos a mais que demonstram formas de uso para as Sparklines:

• Qual é o número de eventos para cada combinação de status e categoria, por tempo?

sourcetype=”access*” | stats sparkline count by status,

• Qual é o tempo médio de resposta para cada categoria de produto,

por tempo?

sourcetype=”access*” | stats sparkline(avg(spent)) by category_

• Usando um grupo de dados diferente (dados de magnitude de terremotos), veja como a

magnitude de um terremoto vária de região pa

horas, com as regiões mais recorrentes primeiro.

source=eqs7day-M2.5.csv | stats sparkline(avg(Magnitude),6h)

count, avg(Magnitude) by Region | sort

Preparando para reportagem e agregação

Depois de já ter identificado os campos e explorado os dados, o próximo passo é

começar a entender o que está acontecendo. Agrupando os seus dados em categorias,

você pode buscar, reportar e alertar para estas categorias.

As categorias das quais estamos fa

dados, e você sabe o que você quer tirar deles. Usando o Splunk, você pode categorizar

seus dados de quantas formas você quiser.

Existem duas formas primárias de que o Splunk pode te ajudar com a categor

dados: etiquetas e tipos de eventos.

Etiquetagem (Tagging)

3. A Sparklines mostra os padrões nos dados dentro da tabela de eventos

Aqui estão alguns comandos a mais que demonstram formas de uso para as Sparklines:

• Qual é o número de eventos para cada combinação de status e categoria, por tempo?

=”access*” | stats sparkline count by status,category_id

médio de resposta para cada categoria de produto,

sourcetype=”access*” | stats sparkline(avg(spent)) by category_id

• Usando um grupo de dados diferente (dados de magnitude de terremotos), veja como a

magnitude de um terremoto vária de região para região em intervalos de tempo de 6

horas, com as regiões mais recorrentes primeiro.

M2.5.csv | stats sparkline(avg(Magnitude),6h) as magnitude_trend,

count, avg(Magnitude) by Region | sort count

Preparando para reportagem e agregação

Depois de já ter identificado os campos e explorado os dados, o próximo passo é

começar a entender o que está acontecendo. Agrupando os seus dados em categorias,

você pode buscar, reportar e alertar para estas categorias.

As categorias das quais estamos falando são definidas pelo usuário. Você sabe dos seus

dados, e você sabe o que você quer tirar deles. Usando o Splunk, você pode categorizar

seus dados de quantas formas você quiser.

Existem duas formas primárias de que o Splunk pode te ajudar com a categor

dados: etiquetas e tipos de eventos.

55

Aqui estão alguns comandos a mais que demonstram formas de uso para as Sparklines:

• Qual é o número de eventos para cada combinação de status e categoria, por tempo?

• Usando um grupo de dados diferente (dados de magnitude de terremotos), veja como a

ra região em intervalos de tempo de 6

as magnitude_trend,

Depois de já ter identificado os campos e explorado os dados, o próximo passo é

começar a entender o que está acontecendo. Agrupando os seus dados em categorias,

lando são definidas pelo usuário. Você sabe dos seus

dados, e você sabe o que você quer tirar deles. Usando o Splunk, você pode categorizar

Existem duas formas primárias de que o Splunk pode te ajudar com a categorização dos

Tags são uma forma fácil de etiquetar qualquer valor de um campo. Se o nome do

hospedeiro é bdgpu-login

autenticação authentication_server

valor interessante na interface e quer ser capaz de investigar ele futuramente para

conseguir mais contexto, você pode colocar a

Para etiquetar o valor de um campo na lista de eventos, clique na

esquerda do valor do campo que você quer etiquetar (veja a figura 5

Figura 5-4. Etiquetando os hospedeiros

Você pode gerenciar todas as suas etiquetas indo para

Suponhamos que você etiquetou vários dos seus valores de hospedeiro com etiquetas

como webserver, database_server

customizadas para ver os seus dados da maneira que você quer ao invés de como a eles

aparecem normalmente.

Por exemplo, para comparar como vários tipos de hospedeiros se dão com o tempo,

rode uma busca como:

… | timechart avg(delay) by tag::host

Reportando e a alegria da busca ne Do momento em que você começa a procurar os dados, você deveria estar pensando sobre reportar. O que você gostaria de saber sobre os dados? O que você está procurando? Que “barulho” você gostaria de remover dos seus dados para que fique mais fácil de achar o que procura? O último ponto possui um explicação mais profunda como um exemplo de algo que o Splunk faz muito bem e que outros softwares de análise de dados podem: Busca Negativa. É muitas vezes dito que você não pode provar uma negação. Você não olhar para um todo e dizer que o que você procura não está aqui. Com o Splunk, você pode fazer uma busca negativa e de fato deveria. A ra

Tags são uma forma fácil de etiquetar qualquer valor de um campo. Se o nome do

login-01 ele não é intuitivo, coloque uma tag, como servidor de

cation_server, para que ele faça mais sentido. Se você ver um

valor interessante na interface e quer ser capaz de investigar ele futuramente para

conseguir mais contexto, você pode colocar a tag follow_up nele.

Para etiquetar o valor de um campo na lista de eventos, clique na seta para baixo a

esquerda do valor do campo que você quer etiquetar (veja a figura 5-4).

4. Etiquetando os hospedeiros

Você pode gerenciar todas as suas etiquetas indo para Manager » Tags.

Suponhamos que você etiquetou vários dos seus valores de hospedeiro com etiquetas

database_server, etc. Você pode reportar estas etiquetas

customizadas para ver os seus dados da maneira que você quer ao invés de como a eles

arecem normalmente. De novo, você decide como você quer olhar para os seus dados.

Por exemplo, para comparar como vários tipos de hospedeiros se dão com o tempo,

… | timechart avg(delay) by tag::host

Reportando e a alegria da busca negativa

Do momento em que você começa a procurar os dados, você deveria estar pensando sobre reportar. O que você gostaria de saber sobre os dados? O que você está procurando? Que “barulho” você gostaria de remover dos seus dados para que fique

fácil de achar o que procura?

O último ponto possui um explicação mais profunda como um exemplo de algo que o Splunk faz muito bem e que outros softwares de análise de dados podem: Busca

É muitas vezes dito que você não pode provar uma negação. Você não olhar para um todo e dizer que o que você procura não está aqui. Com o Splunk, você pode fazer uma busca negativa e de fato deveria. A razão pela qual é difícil de ver o que está

56

Tags são uma forma fácil de etiquetar qualquer valor de um campo. Se o nome do

não é intuitivo, coloque uma tag, como servidor de

, para que ele faça mais sentido. Se você ver um

valor interessante na interface e quer ser capaz de investigar ele futuramente para

para baixo a

Suponhamos que você etiquetou vários dos seus valores de hospedeiro com etiquetas

, etc. Você pode reportar estas etiquetas

customizadas para ver os seus dados da maneira que você quer ao invés de como a eles

, você decide como você quer olhar para os seus dados.

Por exemplo, para comparar como vários tipos de hospedeiros se dão com o tempo,

Do momento em que você começa a procurar os dados, você deveria estar pensando sobre reportar. O que você gostaria de saber sobre os dados? O que você está procurando? Que “barulho” você gostaria de remover dos seus dados para que fique

O último ponto possui um explicação mais profunda como um exemplo de algo que o Splunk faz muito bem e que outros softwares de análise de dados podem: Busca

É muitas vezes dito que você não pode provar uma negação. Você não olhar para um todo e dizer que o que você procura não está aqui. Com o Splunk, você pode fazer uma

ão pela qual é difícil de ver o que está

57

acontecendo com os arquivos de log, a muitos outros tipo de dados, é que eles tem muito do mesmo, coisas que são lugar comum para dados de maquina. Com o Splunk você pode categorizar estes dados desinteressantes e dizer ao Splunk para mostrar para você somente o que é incomum e diferente. Mostre me o que eu não havia visto antes. Alguns especialistas de segurança usam o Splunk desta forma única para identificar eventos anômalos que poderiam indicar uma intrusão, por exemplo. Se eles já viram isto antes, eles deram uma etiqueta e excluíram da busca. Depois que você faz isso por um tempo, e algo estranho acontece, você vai perceber na hora.

Tipos de Eventos

Quando você faz uma busca no Splunk, você começa a recuperar eventos. Você

implicitamente procura por uma espécie particular de evento fazendo uma busca por

ele. Você pode dizer que você estava procurando um evento de certo tipo. É assim que

os “event types” são usados: eles lhes permitem categorizar eventos.

Tipos de eventos (event types) facilitam a categorização de eventos usando o poder total

do comando search,o que significa que você pode usa expressões booleanas, coringas,

valores de campos, frases, etc. Desta maneira, event types são ainda mais poderosos que

as tags, que são limitadas aos valores dos campos. Mas, como as tags, como os dados

serão categorizados está nas suas mãos.

Você pode criar um event type para categorizar eventos como um em que o cliente fez

uma compra, o sistema travou, ou alguma condição de erro ocorreu.

Tudo isso tem a ver com o que você precisa saber dos eventos.

Aqui estão algumas regras básicas para uma busca que define um event type.

• Sem barras. Você não pode colocar barras na busca usada para criar um event type

(ela não pode ter comandos de busca alem do comando search implícito).

• No sub pesquisas. No fim do do capítulo 3, nós cobrimos rapidamente a roda

engrenagem dentro de uma engrenagem que é a sub pesquisa; por agora, lembre-se que

você não pode usar elas para criar event types.

Aqui está um exemplo simples. Na nossa busca contínua de melhorar o seu site, nós

vamos criar quatro tipos de eventos baseados no campo status:

• status=”2*” é definido como sucess(sucesso).

• status=”3*” é definido como redirect(redirecionamento).

• status=”4*” é definido como client_error(erro_do_cliente).

• status=”5*” é definido como server_error(erro_do_servidor).

Para criar um event type success como nós definimos, você teria que fazer uma busca

assim:

sourcetype=”access*” status=”2*

Próximo, escolha Create » Event type

aparecer onde você pode nomear o event type, opcionalmente adicionar etiquetas e

então clique Save.

Para ver tipos de evento que se encaixam com os resultados da busca, clique em

eventtype na barra lateral

types para os eventos na lista de eventos.

Nós criamos os outros 3 event type do mesmo jeito, e então rodamos um

para ver a distribuição:

sourcetype=”access*”| stats count

O resultado parece com a figura 5

Figura 5-5. Separando eventos por event type

Existem relativamente poucos evento com um event type igual a

mesmo assim, eles precisam de uma olhada mais profunda para ver se a gente

descobrir o que eles tem em comum.

Clicando em server_error

vemos 15 eventos que parecem um pouco com aquele mostrado na figura 5

Figura 5-6. Um evento com um erro de servidor

Create » Event type. A caixa de dialogo Save As Event Type

aparecer onde você pode nomear o event type, opcionalmente adicionar etiquetas e

Para ver tipos de evento que se encaixam com os resultados da busca, clique em

barra lateral Fields. Este campo multi valorizado mostra todos os event

types para os eventos na lista de eventos.

Nós criamos os outros 3 event type do mesmo jeito, e então rodamos um

sourcetype=”access*”| stats count by eventtype

O resultado parece com a figura 5-5.

5. Separando eventos por event type

Existem relativamente poucos evento com um event type igual a server_error

mesmo assim, eles precisam de uma olhada mais profunda para ver se a gente

descobrir o que eles tem em comum.

server_error lhe permite somente os eventos deste event type, onde nos

vemos 15 eventos que parecem um pouco com aquele mostrado na figura 5-6.

6. Um evento com um erro de servidor

58

Save As Event Type irá

aparecer onde você pode nomear o event type, opcionalmente adicionar etiquetas e

Para ver tipos de evento que se encaixam com os resultados da busca, clique em

mostra todos os event

Nós criamos os outros 3 event type do mesmo jeito, e então rodamos um stats count

server_error, mas

mesmo assim, eles precisam de uma olhada mais profunda para ver se a gente consegue

lhe permite somente os eventos deste event type, onde nos

6.

59

Os eventos de server_error tem uma coisa perturbadora em comum: pessoas estão

tentando comprar algo quando o status de servidor indisponível acontece. Em outras

palavras, isto está nos custando dinheiro! É hora de ir falar com a pessoa que administra

este servidor e descobrir o que há de errado.

Aninhando Event Types Você pode construir event types sobre os event types mais genéricos. Nós podemos definir um novo event type web_error com outros event types como tijolos: eventtype=client_error OR eventtype=server_error É claro, você deveria usar isto racionalmente, porque você não quer arriscar perder o foco e inadvertidamente criar definições circulares.

Etiquetando Event Types

Event types podem ter tags (assim como qualquer valor de um campo). Por exemplo,

você pode etiquetar todos os event types relacionados a erro sob a tag error. Você pode

adicionar tags mais descritivas sobre os tipos de erros dentro deste event type. Talvez

possa até haver 3 tipos de erros: um tipo que avisa com antecedência dos possíveis

problemas, outro que defina deficiências que podem afetar o usuário e outro que indica

uma falha catastrófica. Você pode adicionar outra tag aos event types de erros que seja

ainda mais descritiva, como early_

warning, user_impact ou red_alert, e reportar-las separadamente.

Juntos, event types e tags lhe permitem construir um modelo de alto nível dos eventos

detalhados nos dados de maquina em questão. Normalmente, isto é um processo

interativo. Você começa etiquetando alguns campos úteis, usando eles para monitorar e

alertar. Dali a pouco tempo, você vai começar a criar alguns event types para fazer uma

categorização mais complexa. Talvez colocar um event type de mais alto nível

referenciando event types de baixo nível. Talvez então você adicione tags aos seus

event types para unificar várias categorizações. O tempo todo, você vai estar

adicionando conhecimento ao Splunk de como ele pode organizar e rotular seus dados

da forma que você precisa.

Mais cedo, nós mencionamos a busca negativa. Se você etiquetar todos os event types

que você não quer ver como normal, você pode então procurar por eventos que não são

normais. Isto puxa as anomalias de volta para a superfície

NOT tag::eventtype=normal

Visualizando os Dados

Até agora nós lhe mostramos algumas forma de como conseguir a visualização dos seus

dados:

• Clicando no nome do campo na barra lateral Fields para ver alguns gráficos

simplificados sobre os valores do campo.

• Usando os comandos de busca top e stats.

• Usando sparklines para ter a visualização em linha dos resultados da tabela de eventos.

Esta seção mostra como você pode criar gráficos e dashboards para a visualização dos

seus dados.

Criando Visualizações

Quando você olha para uma tabela de dados, você pode acabar vendo algo interessante.

Colocar estes mesmo dados em forma de gráficos e quadros pode

de informação e trazer para fora detalhes e gráficos que são difíceis de ver de outra

forma.

Para criar quadros dos seus dados, depois de fazer uma pesquisa, escolha

Report. Alternativamente, no Splunk 4.3, clique no ícone

resulta para criar um quadro com os seus resultados.

O Splunk oferece vários tipos de quadros: colunas, linhas, áreas, barras, pizza e

dispersão.

Quais as categorias de produtos são mais afetadas por erros 404? Esta busca calcula o

número de eventos para cada

7.

sourcetype=”access*” status=”404” | stats count by category_id

Figura 5-7. Páginas não encontras por categoria de produtos

Levando em consideração que

de maior margem, seria bom adicionar alguns redirecionamentos para as URLs (e tentar

fazer com que os sites que estão linkando para a nossa página atualizem os seus links).

Quando você passa o mous

informações sobre os dados por traz desta porção do gráfico. Veja a figura 5

• Usando sparklines para ter a visualização em linha dos resultados da tabela de eventos.

mostra como você pode criar gráficos e dashboards para a visualização dos

Criando Visualizações

Quando você olha para uma tabela de dados, você pode acabar vendo algo interessante.

Colocar estes mesmo dados em forma de gráficos e quadros pode revelar novos níveis

de informação e trazer para fora detalhes e gráficos que são difíceis de ver de outra

Para criar quadros dos seus dados, depois de fazer uma pesquisa, escolha Create »

. Alternativamente, no Splunk 4.3, clique no ícone Results Chart

resulta para criar um quadro com os seus resultados.

O Splunk oferece vários tipos de quadros: colunas, linhas, áreas, barras, pizza e

Quais as categorias de produtos são mais afetadas por erros 404? Esta busca calcula o

úmero de eventos para cada category_id e gera um gráfico de pizza como na figura 5

sourcetype=”access*” status=”404” | stats count by category_id

7. Páginas não encontras por categoria de produtos

Levando em consideração que flores(flowers) e presentes(gifts) estão entre os produtos

de maior margem, seria bom adicionar alguns redirecionamentos para as URLs (e tentar

fazer com que os sites que estão linkando para a nossa página atualizem os seus links).

Quando você passa o mouse sobre qualquer gráfico no Splunk, você consegue mais

informações sobre os dados por traz desta porção do gráfico. Veja a figura 5

60

• Usando sparklines para ter a visualização em linha dos resultados da tabela de eventos.

mostra como você pode criar gráficos e dashboards para a visualização dos

Quando você olha para uma tabela de dados, você pode acabar vendo algo interessante.

revelar novos níveis

de informação e trazer para fora detalhes e gráficos que são difíceis de ver de outra

Create »

sults Chart na área de

O Splunk oferece vários tipos de quadros: colunas, linhas, áreas, barras, pizza e

Quais as categorias de produtos são mais afetadas por erros 404? Esta busca calcula o

e gera um gráfico de pizza como na figura 5-

flores(flowers) e presentes(gifts) estão entre os produtos

de maior margem, seria bom adicionar alguns redirecionamentos para as URLs (e tentar

fazer com que os sites que estão linkando para a nossa página atualizem os seus links).

e sobre qualquer gráfico no Splunk, você consegue mais

informações sobre os dados por traz desta porção do gráfico. Veja a figura 5-8.

Figura 5-8. Passando sobre alguma parte de um gráfico mostra os detalhes dos dados

Criando Dashboards

O resultado final de usar o Splunk para o monitoramento é normalmente uma dashboard

com várias visualizações. Uma dashboard é formada de painéis de reportagem, que

pode ser um quadro, uma barra de progresso ou uma tabela ou até listar os resultados de

uma busca (muitas vezes os dados em si são interessantes para uma

Quando criando uma dashboard, se pergunte, “De todos estes quadros, quais eu gostaria

de ver primeiro? Quais os usuários finais iriam querer ver primeiro? Quais os gerentes

de linha de trabalho iriam querer ver primeiro?” Talvez cada audiência precise de sua

própria dashboard.

Então você se pergunta, “Quais questão aparecem quando você está olhando em uma

dashboard?”. O Splunk automaticamente cuida de vários tipos de aprofundamentos

especificações dos quadros com um simples clique no quadro.

podem especificar o comportamento do aprofundamento, mas isto está alem do escopo

deste livro.)

Um ponto chave é lembrar que visualizações simples são geralmente as mais po

entre todos os tipos de usuários. Você pode, e deve, fazer dashboards mais avançadas e

detalhadas, mas tenha certeza de que você está fazendo um bom trabalho cobrindo as

visões simples de alto-nível.

A figura 5-9 um exemplo de uma dashboard.

8. Passando sobre alguma parte de um gráfico mostra os detalhes dos dados

Criando Dashboards

O resultado final de usar o Splunk para o monitoramento é normalmente uma dashboard

com várias visualizações. Uma dashboard é formada de painéis de reportagem, que

pode ser um quadro, uma barra de progresso ou uma tabela ou até listar os resultados de

busca (muitas vezes os dados em si são interessantes para uma perspectiva

Quando criando uma dashboard, se pergunte, “De todos estes quadros, quais eu gostaria

de ver primeiro? Quais os usuários finais iriam querer ver primeiro? Quais os gerentes

a de trabalho iriam querer ver primeiro?” Talvez cada audiência precise de sua

Então você se pergunta, “Quais questão aparecem quando você está olhando em uma

O Splunk automaticamente cuida de vários tipos de aprofundamentos

especificações dos quadros com um simples clique no quadro. (Usuários avançados

podem especificar o comportamento do aprofundamento, mas isto está alem do escopo

Um ponto chave é lembrar que visualizações simples são geralmente as mais po

entre todos os tipos de usuários. Você pode, e deve, fazer dashboards mais avançadas e

detalhadas, mas tenha certeza de que você está fazendo um bom trabalho cobrindo as

nível.

9 um exemplo de uma dashboard.

61

O resultado final de usar o Splunk para o monitoramento é normalmente uma dashboard

com várias visualizações. Uma dashboard é formada de painéis de reportagem, que

pode ser um quadro, uma barra de progresso ou uma tabela ou até listar os resultados de

perspectiva).

Quando criando uma dashboard, se pergunte, “De todos estes quadros, quais eu gostaria

de ver primeiro? Quais os usuários finais iriam querer ver primeiro? Quais os gerentes

a de trabalho iriam querer ver primeiro?” Talvez cada audiência precise de sua

Então você se pergunta, “Quais questão aparecem quando você está olhando em uma

O Splunk automaticamente cuida de vários tipos de aprofundamentos de

(Usuários avançados

podem especificar o comportamento do aprofundamento, mas isto está alem do escopo

Um ponto chave é lembrar que visualizações simples são geralmente as mais populares

entre todos os tipos de usuários. Você pode, e deve, fazer dashboards mais avançadas e

detalhadas, mas tenha certeza de que você está fazendo um bom trabalho cobrindo as

Figura 5-9. Uma dashboard

A melhor forma de construir uma dashboard não é de cima para baixo, mas de baixo

para cima, com cada painel. Comece usando as habilidades de enquadramento do

Splunk para mostrar os sinais vitais de várias formas. Quando você tem v

individuais mostrando diferentes partes da saúde do sistema, coloque eles em uma

dashboard.

Criando uma Dashboard

No Splunk 4.3, para criar uma dashboard e adicionar um relatório, quadro ou resultados

de uma busca a ela:

1. Faça uma busca que gere o relatório para uma dashboard.

2. Escolha o painel Create » Dashboard

3. De um nome a sua busca, então clique em

4. Decida se você quer que este relatório irá para um nova dashboard alguma existente.

Se você for criar uma nova dashboard, d

5. Especifique o título da sua dashboard e a sua visualização (tabela, barra,

de progresso, etc.), e quando você quer que o relatório rode

chamada ou em uma rotina fixa).

6. Clique Next seguido pelo link

Vendo uma Dashboard

A qualquer hora você pode uma dashboard selecionando ela do menu

Views no topo da página.

A melhor forma de construir uma dashboard não é de cima para baixo, mas de baixo

para cima, com cada painel. Comece usando as habilidades de enquadramento do

Splunk para mostrar os sinais vitais de várias formas. Quando você tem vários gráficos

individuais mostrando diferentes partes da saúde do sistema, coloque eles em uma

Criando uma Dashboard

No Splunk 4.3, para criar uma dashboard e adicionar um relatório, quadro ou resultados

que gere o relatório para uma dashboard.

Create » Dashboard.

3. De um nome a sua busca, então clique em Next.

4. Decida se você quer que este relatório irá para um nova dashboard alguma existente.

Se você for criar uma nova dashboard, de a ela um nome. Clique Next.

5. Especifique o título da sua dashboard e a sua visualização (tabela, barra,

de progresso, etc.), e quando você quer que o relatório rode (sempre que a dashboard é

chamada ou em uma rotina fixa).

seguido pelo link View dashboard ou OK.

Vendo uma Dashboard

A qualquer hora você pode uma dashboard selecionando ela do menu Dashboards

no topo da página.

62

A melhor forma de construir uma dashboard não é de cima para baixo, mas de baixo

para cima, com cada painel. Comece usando as habilidades de enquadramento do

ários gráficos

individuais mostrando diferentes partes da saúde do sistema, coloque eles em uma

No Splunk 4.3, para criar uma dashboard e adicionar um relatório, quadro ou resultados

4. Decida se você quer que este relatório irá para um nova dashboard alguma existente.

pizza, barra

(sempre que a dashboard é

Dashboards &

63

Editando uma Dashboard

Enquanto você vê uma dashboard, você pode editar-la clicando On no selector de modo

Edit e então clicando no menu Edit de qualquer painel que você quer. Dai, você pode

editar a busca que é gera o relatório ou como ela é visualizada, ou deletar o painel.

Criando Alertas

O que é um alerta? Você pode pensar em um alerta como uma declaração de “se então”

que avaliado em uma rotina:

Se isso acontecer, então faça isso em resposta.

O “se” neste caso é a busca. O “então” é a ação que você quer que seja feita em resposta

ao “se” sendo realizado.

Mais formalmente, um alerta é uma busca que ocorre periodicamente com uma

condição avaliada nos resultados da busca. Quando a condição se encaixa, algumas

ações são executadas.

Criando Alertas através do Instrutor

Para ser iniciado na criação de alertas, o primeiro passo é fazer uma busca para que

possua os dados dos quais você quer ser alertado. O Splunk pega qualquer busca que

estiver na search bar na hora que você cria um alerta e usa ela como uma busca salva,

que se torna a base para o seu alerta (o “se” para o seu “se então”).

Com a busca que você quer na search bar, escolha Create » Alert. Ele inicia um

instrutor que torna o processo de criação mais fácil.

Agendando um Alerta

Na tela de Schedule(Agendamento) da caixa de dialogo Create Alerts, você coloca o

nome dele e como você quer que o Splunk execute ele.

Você pode escolher se o Splunk deve monitorar pela condição rodando uma busca em

tempo real, rodando a busca em uma rotina periódica ou monitoramento em tempo real

sobre uma janela deslizante.

Aqui estão casos de uso para as três opções:

• Monitorar em tempo real no caso de você querer ser avisado quando a condição for

satisfeita.

• Monitorar em uma rotina para situações menos urgentes que você mesmo assim quer

saber.

• Monitorar usando uma janela

certo número de coisas acontecendo dentro de um período de tempo (é meio que um

hibrido de ambas as anteriores por assim dizer). Por exemplo, ative o alerta assim que

mais de 20 404s ocorrerem em uma janela de 5

Se você especificar que você quer monitorar em uma rotina ou uma janela

você também precisa especificar o intervalo de tempo e o número de resultado que

deveriam se encaixar com o gatilho do alerta. Alternativamente, você também poder

colocar uma condição customizada, que é uma busca que é executada quando o alerta é

ativado. Condições customizadas são descritas depois neste capítulo.

Figura 5-10. Agendando um alerta

O próximo passo é delimitar os limites do alerta e o que você

for ativado.

Especificando Ações

O que deveria acontecer se as condições do alerta ocorrerem? Na tela de

da caixa de dialogo Create Alert

sejam tomadas (enviar um

Manager (Gerenciador de Alertas)).

Na figura 5-11, o usuários escolheu todas as ações acima, deixando nos ver todos as

opções disponíveis.

• Monitorar usando uma janela deslizante em tempo real se você quiser saber sobre um

certo número de coisas acontecendo dentro de um período de tempo (é meio que um

hibrido de ambas as anteriores por assim dizer). Por exemplo, ative o alerta assim que

mais de 20 404s ocorrerem em uma janela de 5 minutos.

Se você especificar que você quer monitorar em uma rotina ou uma janela

você também precisa especificar o intervalo de tempo e o número de resultado que

deveriam se encaixar com o gatilho do alerta. Alternativamente, você também poder

colocar uma condição customizada, que é uma busca que é executada quando o alerta é

ativado. Condições customizadas são descritas depois neste capítulo.

O próximo passo é delimitar os limites do alerta e o que você quer que ele faça quando

O que deveria acontecer se as condições do alerta ocorrerem? Na tela de Action

Create Alert, você especifica que ação ou ações você quer que

sejam tomadas (enviar um email, rodar um script, mostrar os alertas ativados no Alerts

Manager (Gerenciador de Alertas)).

11, o usuários escolheu todas as ações acima, deixando nos ver todos as

64

em tempo real se você quiser saber sobre um

certo número de coisas acontecendo dentro de um período de tempo (é meio que um

hibrido de ambas as anteriores por assim dizer). Por exemplo, ative o alerta assim que

Se você especificar que você quer monitorar em uma rotina ou uma janela deslizante,

você também precisa especificar o intervalo de tempo e o número de resultado que

deveriam se encaixar com o gatilho do alerta. Alternativamente, você também poderia

colocar uma condição customizada, que é uma busca que é executada quando o alerta é

quer que ele faça quando

Action(Ação)

, você especifica que ação ou ações você quer que

email, rodar um script, mostrar os alertas ativados no Alerts

11, o usuários escolheu todas as ações acima, deixando nos ver todos as

Figura 5-11. A tela de ações do instrutor

• Enviar um email. O email tem as seguintes opções:

◊ Endereço de email. Coloque pelo menos um.

◊ Assunto. Você pode deixar ela como o padrão, que é Splunk

nome do alerta é substituído por

assunto para: Oh não! Aconteceu

◊ Incluir os resultados que ativaram o alerta. Clique na opção para incluir ele como um

arquivo CSV anexado ou selecione

• Rodar um script. Você especifica o nome do Script,

Splunk, dentro de /bin/scripts

11. A tela de ações do instrutor

O email tem as seguintes opções:

Endereço de email. Coloque pelo menos um.

Assunto. Você pode deixar ela como o padrão, que é Splunk Alert: Nome do Alerta. O

nome do alerta é substituído por $name$. (Isto significa que você poderia mudar o

ssunto para: Oh não! Aconteceu $name$.)

Incluir os resultados que ativaram o alerta. Clique na opção para incluir ele como um

arquivo CSV anexado ou selecione inline para colocar eles no próprio email.

Você especifica o nome do Script, que deve estar no diretório do

/bin/scripts dentro de diretório /bin/scripts de um app.

65

Alert: Nome do Alerta. O

. (Isto significa que você poderia mudar o

Incluir os resultados que ativaram o alerta. Clique na opção para incluir ele como um

para colocar eles no próprio email.

que deve estar no diretório do

66

• Mostrar os alertas ativados no Alert manager, que pode ser alcançado clicando em

Alerts no canto superior esquerdo da interface.

Depois de escolher uma ação (ou duas, ou três), você pode preencher algumas opções:

• A seriedade. A seriedade é metadata para você referenciar quando organizando os

alertas. Os níveis são info, low, medium, high, and critical. A seriedade é mostrada no

Alert manager.

• Executar ações em todos os resultados ou em cada. Isto determina se o Splunk deve

tomar uma ação (como mandar um email) para o grupo inteiro de resultados que se

encaixam com o alerta ou para cada resultado individual. “All results” é o padrão.

• Afogar (Throttling). Alertas só são efetivos se eles te dizem o que você precisa saber

quando você precisa saber. Alertas demais e você vai começar a ignorar-los. Muito

poucos e você não vai ter como saber o que está acontecendo. Esta questão especifica o

quanto o Splunk deve esperar para refazer uma ação relacionada a um alerta, depois de

que ele foi ativado a primeira vez. Se você especificar uma janela deslizante, o instrutor

coloca a afogamento padrão para o tamanho da janela. Mais opções de afogamento são

descritas depois neste capítulo.

Depois de clicar em Next, o paço final é especificar se o alerta é privado ou é

compartilhado com acesso somente leitura para os usuários do app atual. Clique Finish

para finalizar o alerta.

Afinando Alertas Usando o Gerenciador

Colocando os limites corretos para os alertas normalmente requer tentativa e erro. isto

pode tomar alguns ajustes para prevenir que muitos alertas irrelevantes ou poucos

relevantes. Os limites devem ser afinados apara que, por exemplo, um pico em um sinal

vital isolado não ative um alerta, mas 10 sinais vitais ficando perto de 10% dos seus

limites sim.

É fácil de criar alertas rapidamente usando o instrutor, mas ainda mais opções para o

afinamento de alertas estão disponíveis no gerenciador.

Lembre-se que buscas salvas sustentam os alertas. Como um resultado, você pode editar

eles como você edita uma busca salva. Para editar o seu alerta, escolha Manager e

então Searches and Reports.

Escolha a busca salva da lista para mostrar os seus parâmetros.

Colocando Condições de Alerta

Pensando em um alerta como um declaração Se Então, você tem mais flexibilidade no

lado se editando ele pelo gerenciador. O alerta pode ser colocar para ativar:

• Sempre

• Dependendo do número de eventos, hospedeiros ou fontes

67

• Condição customizada

Apesar do instrutor oferecer alertar pelo número de eventos, aqui você pode ter opções

para alertar pelo número de hospedeiros ou fontes. Considere hospedeiros. É uma coisa

se você quer começar a ver o estado “servidor indisponível” em um servidor web em

um bolo, mas é uma coisa completamente diferente se você de repente ver ele em mais

de um de seus servidores. Claramente existe um pico e os servidores não estão

agüentando o trafego.

Esta tela oferece mais flexibilidade para a definição do escopo para um alerta:

• é maior que

•é menor que

• é igual a

• não é igual a

• sobe por

• cai por

As primeiras quatro opções foram expostas pelo instrutor, mas aqui a gente adiciona a

habilidade de alertar se os número sobem ou caem por uma certa margem ou

porcentagem (como 50%). “sobe por” e “cai por” permite que você coloque

efetivamente as condições dos alertas que são relativos (que não é o número absoluto

mas sim se ele duplicar ou triplicar que você quer saber). “sobe por” e “cai por” não são

suportados por condições que usam buscas em tempo real.

Aplicando Condições Customizadas

Apesar de a interface oferecer flexibilidade para a configuração dos tipos mais comuns

de alertas, algumas vezes você precisa de ainda mais flexibilidade na forma de

condições customizadas.

Uma condição customizada é uma busca contra os resultados da busca principal de um

alerta. Se ela retornar algum resultado, a condição é verdadeira, e o alerta é ativado. Por

exemplo, você pode querer ser alerta toda vez que um hospedeiro cair, mas excluir os

que estiverem sofrendo uma manutenção agendada. Para fazer isso, você faria uma

busca principal para localizar todos os servidores que estão fora do ar e uma condição

customizada para filtrar os “falsos positivos” - hospedeiros que estão em um calendário

para a manutenção agendada. Desta forma, você pode ser alertado somente dos

servidores que caírem inesperadamente.

Afogando Alertas

O Splunk lhe permite afinar os alertas para que eles de digam algo significativo. Uma

mensagem que te diz algo importante é útil. Cem mensagens, por outro lado,

justificadas ou não, não são úteis. São barulho.

O Splunk lhe permite afogar os alertas para que quando ele forem ativados, eles só ajam

uma vez. Em outras palavras, se o primeiro alerta é

estourar na panela, você não quer ser avisado de todos estes milhos estourando, que são

realmente relacionados ao primeiro alerta. (Se a pipoca tiver um segundo alerta, ele

deveria apitar somente depois de todos os milhos

Isto é o que o throttling faz. Você pode dizer ao Splunk para alertar a você mas não

continuar alertando.

In the middle of the Manager’s screen for editing alerts is an option called

No meio da tela do gerenciador para a edição de alertas existe uma opção chamada

Alert mode(Modo de Alerta

Figura 5-12. Modo de Alerta

Você pode ser alertado uma vez por busca, quer dizer, para todos os resultados, ou você

pode ser alertado uma vez para cada resultado. Alertas por resultados pode ser ainda

mais afogados por campos. Por exemplo, você pode querer ser alertado toda a vez que

uma condição for alcançada, mas só uma vez por hospedeiro. Digamos que o espaço em

disco está ficando baixo em um servidor e você quer ser alertado de que ele está com

menos de 30% de espaço livre disponível. Se você especificar o campo de host no

result throttling fields, você só seria notificado uma vez para cada servidor dentro

deste período de tempo especificado. Se você estivesse lidando com falhas de login dos

usuários, você vai querer colocar o username como o campo de afogamento por

resultado.

Customizando as Ações para um Alerta

Escrevendo ou modificando scripts, você pode colocar açõ

alertas.

Por exemplo, você pode querer que o alerta:

• Envie um SMS para as pessoas que possam te ajudar com o problema.

• Criar um tíquete para um helpdesk outro tíquete de resolução de problemas.

• Reiniciar o servidor.

O Splunk lhe permite afogar os alertas para que quando ele forem ativados, eles só ajam

uma vez. Em outras palavras, se o primeiro alerta é como o primeiro milho de pipoca a

estourar na panela, você não quer ser avisado de todos estes milhos estourando, que são

realmente relacionados ao primeiro alerta. (Se a pipoca tiver um segundo alerta, ele

deveria apitar somente depois de todos os milhos terem estourado e antes dela queimar.)

Isto é o que o throttling faz. Você pode dizer ao Splunk para alertar a você mas não

In the middle of the Manager’s screen for editing alerts is an option called

No meio da tela do gerenciador para a edição de alertas existe uma opção chamada

Modo de Alerta) (veja a figura 5-12).

Você pode ser alertado uma vez por busca, quer dizer, para todos os resultados, ou você

er alertado uma vez para cada resultado. Alertas por resultados pode ser ainda

mais afogados por campos. Por exemplo, você pode querer ser alertado toda a vez que

uma condição for alcançada, mas só uma vez por hospedeiro. Digamos que o espaço em

ficando baixo em um servidor e você quer ser alertado de que ele está com

menos de 30% de espaço livre disponível. Se você especificar o campo de host no

s, você só seria notificado uma vez para cada servidor dentro

o de tempo especificado. Se você estivesse lidando com falhas de login dos

usuários, você vai querer colocar o username como o campo de afogamento por

Customizando as Ações para um Alerta

Escrevendo ou modificando scripts, você pode colocar ações customizadas para os seus

Por exemplo, você pode querer que o alerta:

• Envie um SMS para as pessoas que possam te ajudar com o problema.

• Criar um tíquete para um helpdesk outro tíquete de resolução de problemas.

68

O Splunk lhe permite afogar os alertas para que quando ele forem ativados, eles só ajam

como o primeiro milho de pipoca a

estourar na panela, você não quer ser avisado de todos estes milhos estourando, que são

realmente relacionados ao primeiro alerta. (Se a pipoca tiver um segundo alerta, ele

terem estourado e antes dela queimar.)

Isto é o que o throttling faz. Você pode dizer ao Splunk para alertar a você mas não

No meio da tela do gerenciador para a edição de alertas existe uma opção chamada

Você pode ser alertado uma vez por busca, quer dizer, para todos os resultados, ou você

er alertado uma vez para cada resultado. Alertas por resultados pode ser ainda

mais afogados por campos. Por exemplo, você pode querer ser alertado toda a vez que

uma condição for alcançada, mas só uma vez por hospedeiro. Digamos que o espaço em

ficando baixo em um servidor e você quer ser alertado de que ele está com

menos de 30% de espaço livre disponível. Se você especificar o campo de host no Per

s, você só seria notificado uma vez para cada servidor dentro

o de tempo especificado. Se você estivesse lidando com falhas de login dos

usuários, você vai querer colocar o username como o campo de afogamento por

es customizadas para os seus

• Criar um tíquete para um helpdesk outro tíquete de resolução de problemas.

Todas as ações dos alertas são baseadas em um script, incluindo mandar um email.

Assim como criar um fiel

montar com ações de alerta tão flexíveis quanto necessárias para usar no roteiro.

Para aprender mais http://splunk.com/goto/book#custom_alerts

O Gerenciador de Alertas

O controle da missão dos alertas é o

Clique em Alert no canto superior direito da tela para mostrar o

Figura 5-13. Gerenciador de Alertas

Uma breve clarificação da terminologia é necessária aqui. Nós iremos nos referir para a

busca agendada se então

chamada de instancia do alerta.

O Alert manager mostra

alertas). Ele mostra quando a instancia foi ativada e proporciona um link para a visão

dos resultados da busca desta ativação e um para a deletar esta ativação. Ele também

mostra o nome do alerta, o app, o tipo (agendado, tempo real ou janela deslizante),

seriedade e modo (resumido ou por resultado). Você também pode editar as definições

do alerta.

as ações dos alertas são baseadas em um script, incluindo mandar um email.

fiel RSS. Com isso em mente, você pode ver o que você pode

montar com ações de alerta tão flexíveis quanto necessárias para usar no roteiro.

Para aprender mais sobre a criação de alertas customizados, veja http://splunk.com/goto/book#custom_alerts

O Gerenciador de Alertas

O controle da missão dos alertas é o Alert Manager.

no canto superior direito da tela para mostrar o Alert manager

13. Gerenciador de Alertas

Uma breve clarificação da terminologia é necessária aqui. Nós iremos nos referir para a

se então como um alerta, e uma ativação individual deste alerta será

chamada de instancia do alerta.

mostra a lista dos alertas ativados mais recentemente (instancias de

alertas). Ele mostra quando a instancia foi ativada e proporciona um link para a visão

dos resultados da busca desta ativação e um para a deletar esta ativação. Ele também

ta, o app, o tipo (agendado, tempo real ou janela deslizante),

seriedade e modo (resumido ou por resultado). Você também pode editar as definições

69

as ações dos alertas são baseadas em um script, incluindo mandar um email.

RSS. Com isso em mente, você pode ver o que você pode

montar com ações de alerta tão flexíveis quanto necessárias para usar no roteiro.

sobre a criação de alertas customizados, veja

Alert manager.

Uma breve clarificação da terminologia é necessária aqui. Nós iremos nos referir para a

como um alerta, e uma ativação individual deste alerta será

a lista dos alertas ativados mais recentemente (instancias de

alertas). Ele mostra quando a instancia foi ativada e proporciona um link para a visão

dos resultados da busca desta ativação e um para a deletar esta ativação. Ele também

ta, o app, o tipo (agendado, tempo real ou janela deslizante),

seriedade e modo (resumido ou por resultado). Você também pode editar as definições

70

PARTE II RECEITAS

6 Receitas para monitoramentos e

alertas

Os primeiros cinco capítulo deste livro lhe prepararam para usar o Splunk para resolver

problemas, responder questões e explorar os seus dados de formas interessantes.

Neste capítulo, nós vamos te apresentar algumas receitas de monitoramentos e alertas.

Monitoramento refere-se a relatórios que você pode monitorar visualmente e alerta

refere-se a condições monitoradas pelo Splunk, que podem ativar ações automáticas.

Estas receitas são pensadas como breves soluções para problemas comuns de alerta e

monitoramento. Cada receita inclui um enunciado de um problema seguido por uma

descrição de qual seria a solução do problema utilizando o Splunk. Alguns do exemplos

mais complexos sugerem variações na receita para que você possa explorar.

Para fazer mais perguntas e encontrar mais respostas, visite http://splunkbase.com.

Receitas de monitoramento

O monitoramento pode te ajudar a ver o que está acontecendo com os seus dados.

Quantos usuários concorrentes estão conectados atualmente? Como tendências

importantes estão mudando com o tempo?

Em adição as receitas de monitoramento de várias condições, esta seção dispõe receitas

que descrevem como usar os comandos de busca para extrair os campos de dados semi

ou completamente estruturados.

Monitorando usuários concorrentes

Problema

Você precisa determinar quantos usuários concorrentes você tem em qualquer horário

especifico. Isto pode te ajudar detectar se certos servidores estão sobre carregados e

causar uma melhor provisão de recursos para picos da demanda.

Solução

Primeiro, faça uma busca para encontrar eventos relevantes. Em seguida, use o

comando concurrency encontrar o número de usuários que se sobrepõem. Finalmente,

use o comando de reportagem timechart para mostrar um quadro do número de

usuários concorrentes em uma base de tempo.

71

Digamos que você tenha os seguintes eventos, que especificam data, tempo, duração de

pedido e nome de usuário:

5/10/10 1:00:01 ReqTime=3 User=jsmith

5/10/10 1:00:01 ReqTime=2 User=rtyler

5/10/10 1:00:01 ReqTime=50 User=hjones

5/10/10 1:00:11 ReqTime=2 User=rwilliams

5/10/10 1:00:12 ReqTime=3 User=apond

Você pode ver que, as 1:00:01, existem três eventos concorrentes (jsmith, rtyler,

hjones); as 1:00:11, existem dois (hjones, rwilliams); e as 1:00:12, existem três (hjones,

rwilliams, apond).

Use esta busca para mostrar o máximo de usuários concorrentes em qualquer hora:

<your search here> sourcetype=login_data

| concurrency duration=ReqTime

| timechart max(concurrency)

Para aprender mais sobre o comando concurrency, veja http://splunk.com/goto/book#concurrency

Monitorando hospedeiros inativos

Problema

Você precisa determinar quais hospedeiros pararam de enviar dados. Um hospedeiro

pode ter parado de anotar eventos se o servidor ou aplicações que produzam logs,

tenham travado ou tenham sido desligados. Isto normalmente indica um problema sério.

Se um hospedeiro para de anotar eventos, você vai querer saber sobre isso.

Solução

Use o comando metadata, que relata informações sobre os hospedeiros, fontes e tipos

de fontes nos índices do Splunk. É isto que é usado para fazer uma Dashboard de

Sumário. Note a barra que se encontra no início da busca, porque nós não estamos

recuperando eventos dos índices do Splunk, ao invés, nós estamos chamando um

comando de geração de eventos (metadata).

Use a seguinte busca para pegar as informações dos hospedeiros, organizar ela para que

os hospedeiros menos referenciados recentemente estejam em primeiro, e mostrar o

tempo em uma forma legível:

| metadata type=hosts

| sort recentTime

| convert ctime(recentTime) as Latest_Time

72

Você vai rapidamente ver que hospedeiros não tem anotado nada recentemente.

Para aprender mais sobre o comando metadata, veja http://splunk.com/goto/book#metadata

Reportando dados categorizados

Problema

Você precisar reportar segmentos dos seus dados que não estão bem definidos.

Solução

Para procurar por partes especificas dos seus dados, classifique os seus eventos com

tags ou event types. Tags são mais simples mas event types são mais poderosos (tags e

event types são discutidos no capítulo 5).

Você pode se perguntar como esta categorização de dos dados pode ser colocada sobre

monitoramento. Isto se da porque quando você categoriza os dados usando tags ou

event types, você não só categoriza os dados que você tem hoje, mas você ensina ao

Splunk que ele deve categorizar dados deste tipo todas as vezes que eles aparecerem.

Você está ensinando ao Splunk que ele deve ficar atento a certas características. Pense

em tags e event types como colocar um aviso geral nos seus dados.

Usando Tags

Você pode classificar simples pares de campo=valor usando tags. Por exemplo,

classificar eventos que tenham o host=db09 como hospedeiro database aplicando uma

tag ao valor do campo. Isto cria um campo tag::host tendo como valor database, em

eventos com host=db09. Você pode usar isto para criar uma classificação customizada

para a geração de relatórios. Aqui estão alguns exemplos do uso de tags:

Mostre os 10 tipos de hospedeiros mais comuns (ótimo para gráficos em barra ou

pizza):

... | top 10 tag::host

Compare como vários tipos de hospedeiro estão se desempenhando com o tempo:

... | timechart avg(delay) by tag::host

Usando Event Types

Quando você usa event types, em vês de tags, para classificar eventos, você não vai

estar limitado a um simples par de campo=valor. Você pode usar o poder completo do

comando search, incluindo operações booleanas, comparação de frases e até coringas.

Você poderia criar um tipo de evento chamado de database_host com a definição de

“host=db* OR host=orcl*”, e outro tipo de evento chamado de web_host. Repita as

mesmas buscas que você fez para as tags, mas substitua tag::host com o eventtype. Por

exemplo, para mostrar os 10 eventtypes mais comuns:

73

... | top 10 eventtype

Porque os tipos de eventos não específicos para uma dimensão, como hospedeiros, tipos

de usuários ou códigos de erro, eles estão todos em um mesmo espaço nominal,

amontoados.

Procurar por top eventtypes pode retornar database_host e web_error, que

provavelmente não é o que você quer pois isto seria como comparar maças com

laranjas. Por sorte você pode filtrar os tipos e eventos que você está reportando, usando

o comando eval, se você usa uma convenção de nomes para os seus eventtypes.

Como um exemplo, usando tipos de eventos, compare vários tipos de hospedeiros

(mostrados como uma timechart), usando somente eventtypes que terminam em _host:

…| eval host_types = mvfilter(match(eventtype, “_host$”))

| timechart avg(delay) by host_types

Comparando o principais valores com os do último mês

Problema

Você precisa saber os N valores mais comuns de hoje e como eles se comparam com os

valores do mês passado. Isto pode responder questões como, que produtos, ou erros de

base de dados estão espontaneamente ficando mais comuns do que eles costumavam

ser.

Solução

Para esta solução, nós vamos utilizar como exemplo dados de musica para mostrar quais

os artistas mais populares de hoje e a posição média dele no resto do mês. Assuma que

os eventos tenham um campo artist e um campo vendas sales que te diz quantas vendas

foram feitas neste específico período de tempo. Nó vamos usar a soma de sales como a

nossa medida — sum(sales) — mas nós poderíamos usar qualquer outra medida..

A pesquisa completa parece maçante no inicio, mas você pode dividir-la em simples

passos:

1. Pegue os rankings mensais por artista.

2. Peque os resultados diários e os combine com o resultados anteriores.

3. Use stats para unir os resultados diários e mensais por artista.

4. Use sort e eval para formatar os resultados..

Consiga os rankings mensais.

Use esta busca para encontrar os 10 resultados mais comuns:

sourcetype=music_sales earliest=-30d@d

| stats sum(sales) as month_sales by artist

74

| sort 10 - month_sales

| streamstats count as MonthRank

O earliest=-30d@d diz ao Splunk para recuperar eventos começando 30 dias atrás (em

outras palavras, eventos do mês passado). O stats calcula as vendas de cada artista

como o campo month_sales. Agora você tem uma fileira para cada artista, com duas

colunas: month_sales e artist. O sort 10 – month_sales mantem somente as fileiras

com os maiores valores de month_sales, organizados do maior para o menor. O

comando streamstats adiciona uma ou mais estatísticas para cada evento, baseado

no valor atualmente agregado a ele quando o eventos é recuperado (não nos resultados

como um todo, como o comando stats faz). Efetivamente, streamstats count as

MonthRank assinala o primeiro para o MonthRank=1, o segundo para MonthRank=2, e

assim vai.

Consiga os rankings de ontem

Faça três pequenas mudanças na busca de ranking mensais para conseguir os rankings

de ontem:

• Mude os valores do earliest de -30d@d para -1d@d para conseguir os rankings de

ontem.

• Mude cada instancia de “month” na busca para “day”.

• Envelope a busca com o comando append para que os resultados sejam unidos com os

resultados da primeira busca:

append [

search sourcetype=music_sales earliest=-1d@d

| stats sum(sales) as day_sales by artist

| sort 10 - day_sales

| streamstats count as DayRank

]

Use o stats para juntar os rankings diários e mensais por artistas.

Use o comando stats para unir os resultados por artista, colocando o primeiro resultado

mensal e diário no mesmo conjunto.

stats first(MonthRank) as MonthRank first(DayRank) as

DayRank by artist

Formatando o resultado

Finalmente, nós iremos calcular as diferenças no ranking diário e mensal, organizar os

seus resultados por ranking diário, e mostrar os resultados em ordem de billboard (rank,

artista, mudança no ranking, ranking antigo):

75

eval diff=MonthRank-DayRank

| sort DayRank

| table DayRank, artist, diff, MonthRank

Sumario

Juntando tudo a busca fica assim:

sourcetype=music_sales earliest=-30d@d

| stats sum(sales) as month_sales by artist

| sort 10 - month_sales | streamstats count as MonthRank

| append [

search sourcetype=music_sales earliest=-1d@d

| stats sum(sales) as day_sales by artist

| sort 10 - day_sales | streamstats count as DayRank

]

| stats first(MonthRank) as MonthRank first(DayRank) as

DayRank by artist

| eval diff=MonthRank-DayRank

| sort DayRank

| table DayRank, artist, diff, MonthRank

Variações

Aqui, nós usamos o sum como nossa medida — sum(sales) — mas poderíamos usar

qualquer medida, como o min(sales), ou mudar o timerange para comparar a última

semana com esta.

Para aprender mais sobre o comando streamstats, veja http://splunk.com/goto/book#streamstats

Encontrando medidas que caíram em 10% na última hora.

Problema

Você quer saber sobre medidas que caíram em 10% na última hora. Isto pode ser menos

clientes, menos visitas a página, menos pacotes de dados, etc.

Solução

76

Para ver uma queda na última hora, nós iremos precisar dar uma olhada nos resultados

para pelo menos as últimas 2 horas. Nó iremos olhar nos eventos de duas horas, calcular

uma medida separada para cada hora, e então, determinar como as medidas mudaram

entre estas duas horas. A medida que estamos procurando é a contagem do número de

eventos entre duas horas atrás e na hora passada.

Esta busca compara a contagem por hospedeiro da hora anterior com a hora atual e

filtra aqueles cuja a contagem caiu mais de 10%:

earliest=-2h@h latest=@h

| stats count by date_hour,host

| stats first(count) as previous, last(count) as current by

host

| where current/previous < 0.9

A primeira condição (earliest=-2h@h latest=@h) recupera duas horas de dados,

ignorando o intervalo entre horas (ele irá procurar 14-16 horas, e não 14:01-16:01).

Então nós conseguimos uma contagem do número de eventos por hora e hospedeiro.

Pelo fato de só haver duas horas (duas horas atrás e uma hora atrás), stats first(count)

retorna os resultados de duas horas atrás e last(count) de uma hora. A clausula where

retorna somente os eventos cuja a contagem atual é menor que 90% da contagem da

hora anterior 90% (que mostra que a porcentagem caiu em 10%).

Como um exercício para você, pense que pode dar errado quando o tempo passar da

meia noite. Você vê como corrigir isto adicionando first(_time) para o primeiro

comando stats e organizando pelo novo valor?

Variações

Em vez do número de eventos, use uma medida diferente, como uma média de atraso ou

bytes mínimos por segundo e considere diferentes janelas de tempo, como dia a dia.

Tabelando os resultados de semana a semana

Problema

Você precisa determinar como os resultados desta semana se comparam com os

resultados da semana passada.

Solução

Primeiro faça uma busca sobre todos os eventos marque se eles pertencem a esta

semana ou semana passada. Em seguida, ajuste o valor de tempo dos eventos da semana

passada para parecer com os dos eventos desta semana (para que eles se designem na

mesma janela de tempo). Finalmente crie um gráfico.

Vamos pegar os resultados das últimas duas semanas, marcados no começo da

semana:

77

earliest=-2w@w latest=@w

Marque os eventos como sendo desta semana ou da semana anterior:

eval marker = if (_time < relative_time(now(), “-1w@w”),

“last week”, “this week”)

Ajuste os eventos desta semana para parecer que são desta:

eval _time = if (marker==”last week”,

_time + 7*24*60*60, _time)

Tabele a medida desejada, usando o marcador de semana que a gente criou, como o

timechart da média de download em bytes da última semana:

timechart avg(bytes) by marker

Isto produz uma timechart com duas series etiquetadas: “last week” e “this week”.

Juntando tudo:

earliest=-2w@w latest=@w

| eval marker = if (_time < relative_time(now(), “-1w@w”),

“last week”, “this week”)

| eval _time = if (marker==”last week”,

_time + 7*24*60*60, _time)

| timechart avg(bytes) by marker

Se você usar este padrão comumente, você irá querer salvar isto com um macro para

poder reutilizar ele mais tarde.

Variações

Explore períodos de tempo diferentes, como na base de dia a dia, com diferentes tipos

de tabelas. Tente tipos de tabelas diferentes de avg(bytes). Alternativamente, remova a

marcação dos limites da semana colocando as configurações como earliest=-2w e não

colocando um valor para latest (isto deixa como padrão “now” que é agora), e mudando

o argumento relative_time() para –1w.

Identificando oscilações em seus dados

Problema

Você quer identificar as oscilações em seus dados. As oscilações podem te mostrar onde

você tem picos (ou depressões) que podem indicar que algumas de suas medidas estão

caindo ou subindo drasticamente. As oscilações de trafego, vendas, número de

78

respostas, carga do banco de dados - qualquer tipo de oscilação que você possa estar

interessado, você quer poder observar e talvez tomar alguma ação para cuidar destas

oscilações.

Solução

Use uma janela de tendências deslizante para te ajudar nesta situação. Faça uma busca

seguida pelo comando trendline usando o campo quer você quer usar para criar a janela

de tendências.

Por exemplo, no acesso de dados da web, nós podemos tabelar uma com o campo

bytes:

sourcetype=access* | timechart avg(bytes) as avg_bytes

Para adicionar outra série de linhas/barras a tabela com uma simples média variante dos

últimos 5 valores de bytes, use este comando:

trendline sma5(avg_bytes) as moving_avg_bytes

Se você quiser identificar os picos de forma clara, você pode adicionar uma série extra

para oscilações - quando o valor atual é mais que o dobro que a média variante.

eval spike=if(avg_bytes > 2 * moving_avg_bytes, 10000, 0)

O 10000 aqui é arbitrário e você deveria escolher uma valor relevante aos seus dados,

que faça a oscilação noticiável. Mudando a formatação do eixo Y na escala do Log

também ajuda.

Juntando tudo isso a nossa busca é:

sourcetype=access*

| timechart avg(bytes) as avg_bytes

| trendline sma5(avg_bytes) as moving_avg_bytes

| eval spike=if(avg_bytes > 2 * moving_avg_bytes, 10000, 0)

Variações

Nós utilizamos uma média variante para os últimos 5 resultados (sma5). Considerando

um número diferente de valores (por exemplo, sma20), e outros tipos de médias

variantes, como uma média variante exponencial (ema) e uma média variante pesada

(wma).

Alternativamente, você pode ultrapassar a tabulação por completo e substituir eval ali

em cima por uma clausula where para filtrar os resultados.

... | where avg_bytes > 2 * moving_avg_bytes

79

E olhando pela visão da tabela ou como um alerta, você só vera os tempos que o

avg_bytes oscilou.

Para aprender mais sobre o comando de busca trendline, veja http://splunk.com/goto/book#trendline

Compactando uma tabulação baseada em tempo

Problema

Você gostaria de ser capaz de visualizar múltiplas tendências em seus dados em um

pequeno espaço. Esta é a idéia por traz das sparklines - pequenas tabelas baseadas em

tempo mostradas dentro das células da sua tabela de resultados. Sparklines foram

inventadas por Edward Tufte e incorporadas no Splunk 4.3.

Solução

Para produzir estas sparklines em suas tabelas, simplesmente encapsule as suas funções

stats ou chart dentro da função sparkline().

Aqui, nós iremos usar como exemplo os logs de acesso web. Nós iremos criar um

gráfico mostrando o quanto demorou para cada página responder (assumindo que o

campo spent é no tempo de espera na página). Nós temos várias páginas, então nós

iremos organizar-las para descobrir quais as páginas mais acessadas (em outras

palavras, aquelas com o maior valor de count). O 5m diz ao Splunk que ele dever

mostrar os detalhes com uma escala de 5 minutos nas sparklines.

sourcetype=access*

| stats sparkline(avg(spent),5m), count by file

| sort - count

Faça esta busca na última hora. O resultado é uma série de mini gráficos mostrando

quanto tempo levou para cada página carregar em uma média de tempo.

Variações

Tente usar funções diferentes de avg. Tente usar valores diferentes de 5m para a escala.

Se você remover a escala 5m completamente, o Splunk automaticamente escolhe o

melhor valor para este intervalo de tempo.

Reportando em campos dentro do XML ou JSON

Problema

Você precisa formatar em dados formatados em XML ou JSON.

Solução

80

Use o comando spath, introduzido no Splunk 4.3, para extrair informações de dados

formatados em XML- ou JSON-. Neste exemplo, nós iremos assumir que um tipo de

fonte de dados sobre livros está formatada em XML ou JSON. Nós iremos rodar uma

pesquisar que retorna XML ou JSON como texto de evento, e usar o comando spath

para extrair o nome do autor:

sourcetype=books

| spath output=author path=catalog.book.author

Quando chamado se um argumento de path, spath extrair todos os campos nos

primeiros 5000 caracteres, o que é configurável, criando campos para caminhos dos

elementos. Caminhos tem a forma foo.bar.baz. Cada nível tem uma série de índices

opcionais, indicado por chaves (como foo{1}.bar). Todas as séries podem ser

representadas com chaves vazias (como foo{}). O nível final para filas em XML

também inclui o nome do atributo, também fechado entre chaves (como

foo.bar{@title}) e precedido por uma @.

Depois de ter extraído o campo, você pode reportar ele:

... | top author

Variações

Um comando de busca antigo chamado xmlkv extraia valores chaves simples de pares

em XML. Por exemplo, chamando ... | xmlkv em eventos que possuem um valor de

<foo>bar</foo> cria o campo foo com uma barra de valor. Outro comando antigo para

extrair eventos do XML é o xpath.

Extraindo campos de um evento

Problema

Você quer fazer uma busca por um padrão e extrair esta informação dos seus eventos.

Solução

Usando comandos para extrair os campos convenientes para rapidamente extrair

campos que são necessários temporariamente ou para aplicar eles a busca especificas e

não são tão comuns quanto o resto dos campos.

Expressões Regulares

O comando rex facilita a extração de campos usando expressões regulares. Por

exemplo, nos dados do e-mail, a seguinte busca extrai os campos “de” e “para” do e-

mail usando o comando rex:

sourcetype=sendmail_syslog

| rex “From: (?<from>.*) To: (?<to>.*)”

81

Delimitadores

Se você estiver trabalhando com múltiplos campos possuem delimitadores entre eles,

use o comando extract extrair eles.

Digamos que os seus eventos sejam assim:

|height:72|age:43|name:matt smith|

Extraia os campos event sem usar delimitadores usando:

... | extract pairdelim=”|” kvdelim=”:”

O resultado é o que você pode esperar:

height=72, age=43, and name=matt smith.

Variações

Tente usar multikv, spath ou xmlkv.

Receitas de Alerta

Lembre-se do capítulo 5 que um alerta é feito de duas partes:

• Uma condição: Uma coisa interessante que você gostaria de ficar sabendo.

• Uma ação: O que fazer quando esta coisa interessante acontece.

Adicionalmente, você pode usar afogamento para prevenir o excesso de alertas do

mesmo tipo.

Por exemplo:

• Eu quero receber um e-mail sempre que o meu servidor estivar com a carga acima da

média.

• Eu quero receber um e-mail sempre que o meu servidor estivar com a carga acima de

uma certa porcentagem, mas não faça spam na minha caixa de entrada, então afogue os

alertas para cada 24 horas.

Alertar por e-mail quando o servidor atinge uma carga

determinada

Problema

Você quer ser notificado por e-mail quando um servidor exceder 80% de sua

capacidade.

Solução

82

A seguinte busca recupera eventos que possuem uma carga acida de 80% da capacidade

e calcula o valor máximo para cada hospedeiro. O sourcetype “top” vem com o app do

Splunk Unix app (disponível na splunkbase.com), e é alimentado com dados do

comando de Unix top a cada 5 segundos:

sourcetype=top load_avg>80

| stats max(load_avg) by host

Monte um alerta da seguinte maneira, usando as instruções do capítulo 5:

• Condição de alerta: se a busca retornar pelo menos um resultado.

• Ação do Alerta: enviar um e-mail e colocar o assunto como: Carga do servidor acima

dos 80%.

• Suprimir: 1 hora.

Variações

Mude as condições de alerta e supressão.

Alertando quando a performance de um servidor está lenta

Problema

Você quer ser notificado por e-mail sempre que 95% do tempo de resposta de seu

servidor web está maior que um certo número de milissegundos.

Solução

A seguinte busca recupera eventos de logs de web, calcula se mais de 95% dos tempos

de resposta para cada endereço único de internet (uri_path) ultrapassa a amostra de 200

milissegundos para o par sourcetype=weblog.

| stats perc95(response_time) AS resp_time_95 by uri_path

| where resp_time_95>200

Monte o alerta da seguinte maneira:

• Condição de Alerta: alertar se a busca retornar X resultados (o número de respostas

lentas que você acha que é o mínimo necessário para ser alertado).

• Ações do Alerta: enviar e-mail com o assunto: “Servidores WEB ficando lentos.”

Se você estiver na nuvem (por exemplo Amazon EC2™), começar novas instancias de

servidor web.

• Suprimir: 1 hora.

Desligar instancias de EC2 desnecessárias

83

Problema

Você quer desligar instanciar de EC2 que não estão sendo utilizadas.

Solução

A seguinte busca recupera os eventos de logs de web e retorna uma tabela de

hospedeiros que possuem menos de 10000 pedidos (dentro da janela de tempo que a

busca cobre):

sourcetype=weblog

| stats count by host

| where count<10000

Monte o alerta da seguinte maneira:

• Condição de Alerta: alertar se a busca retornar X eventos (o número de eventos

máximos que você acredita ser necessário para tomar alguma atitude).

• Ações do Alerta: ativar um script que remova o servidor do balanceador de carga e

desligue o mesmo..

• Suprimir: 10 minutos.

Convertendo um monitoramento em um alerta

As receitas de monitoramento neste capítulo produzem reportagens úteis e valiosas.

Mas, se você der uma segunda olhada, muitas delas também podem ser usadas como

base para montar alertas, permitindo que o Splunk monitore a situação para você.

Aqui nós vamos discutir brevemente como converter algumas das receitas de

monitoramento em alertas.

Monitorando usuários concorrentes

Esta receita pode ser transformada em um alerta criando uma condição customizada

onde “where max(concurrency) > 20”. Isto servirá para te alertar se existem usuários

demais conectados simultaneamente.

Variações: Considere calcular a média de concorrência e alertar se o máximo é o dobro

da média.

Monitorando hospedeiros inativos

Uma condição de alerta customizado onde where now() - recentTime > 60*60 alerta

se algum dos hospedeiros não foi citado em mais de uma hora.

Comparando os maiores valores deste mês com o do mês passado

84

Uma condição de alerta customizado onde where diff < -10 alerta se um artista dispara

para o número um hoje e não estava na lista dos top 10 do último mês.

Variações: Use a mesma receita do monitorador de estado dos códigos HTTP e reporte

e o código de estado de um erro (como 404) se torne mais ou menos comuns do que ele

era no último mês.

Encontre medidas que caíram em 10% na última hora

Esta receita já está montada convenientemente para um alerta. Dispare o alerta quando

qualquer evento é notado.

Variação: Dispare somente quando N declínios são notados em seguida.

Mostrar uma linha de tendência deslizante e identificando oscilações

A variação para esta receita está convenientemente montada na própria receita.

Dispare um alerta para quando qualquer evento é notado.

Variações: Disparar somente quando mais de N oscilações são notadas em um período

de tempo (como 5 minutos).

Você pode pensar nisto como um exercício útil tentar adicionar alertas para o resto das

receitas de monitoramento.

85

7 Agrupando Eventos

Estas receitas oferecem soluções rápidas para alguns dos problemas do mundo real que

nós vemos por ai e que podem ser resolvidos com o agrupamento de eventos.

Introdução

Existem vários grupos de eventos. A aproximação mais comum usa ambos os comandos

transaction e stats. Mas quando você deveria usar transaction e quando você deveria

usar stats?

A regra de ouro: Se você pode usar stats, use stats. É mais rápido que o transaction,

especialmente em ambientes distribuídos. Com essa velocidade, como sempre, vem

algumas limitações. Você só pode agrupar eventos com o stats se eles tem pelo menos

um valor de campo em comum e se você não pedir nenhuma outra restrição.

Tipicamente, o texto cru do evento é descartado.

Como o stats, o comando transaction pode agrupar os eventos por valores de campos

comuns, mas ele também pode usar restrições mais complexas como o tempo total da

transação, atraso dentro da transação e eventos de inicio e fim requisitados. Diferente

do stats, transaction retém os textos crus dos eventos e os valores dos campo dos

eventos originais, mas não pode executar nenhuma estatística sobre os eventos

agrupados, alem da duração duration (o delta do campo _time entre o evento mais

velho e mais novo da transação) e o eventcount (o número de eventos na transação).

O comando transaction é o mais útil em dois casos:

• Quando valores únicos de campos (também conhecidos como identificadores) não são

o suficiente para discriminar entre transações discretas. Este é o caso onde o

identificador pode ser reutilizado, por exemplo em seções web que são identificados por

cookie/IP do cliente. Neste caso, intervalos ou pausas podem ser usados para

segmentar dados em transações. Em outros casos, quando o identificador é reusado,

por exemplo em logs DHCP, uma mensagem em particular pode identificar o inicio e o

fim de uma transação.

• Quando você quer ver o texto puro dos eventos em vez de uma simples análise dos

valores do campos.

De novo, quando nenhum destes casos é aplicável, é uma idéia melhor usar o stats, já

que a performance na busca com o stats é geralmente melhor que com o transaction.

Muitas vezes pode existir um identificadores único e o stats pode ser usado.

Por exemplo, para computar a duração das trocas identificadas pelo identificador único

trade_id, as seguintes buscas possuem a resposta:

… | transaction trade_id

| chart count by duration

86

… | stats range(_time) as duration by trade_id

| chart count by duration

A segunda busca é mais eficiente.

Apesar disto, se os valores do trade_id são reusados mas o último evento de cada

troca são identificados por “END”, a única solução viável é:

… | transaction trade_id endswith=END

| chart count by duration

Se, ao invés de uma condição de finalização, trade_id os valores não forem reusados

em pelo menos 10 minutos, a solução mais viável é:

… | transaction trade_id maxpause=10m

| chart count by duration

Finalmente, uma palavrinha sobre performance. Não importa quais comando de busca

você usar, é imperativo que você deixe a busca básica o mais específica o possível.

Considere esta busca:

sourcetype=x | transaction field=ip maxpause=15s | search

ip=1.2.3.4

Aqui nós estamos recuperando todos os eventos do sourcetype=x, construindo

transações e então se desfazendo de todas aquelas que não possuam o ip=1.2.3.4. Se

todos os seus eventos tem o mesmo valor de ip, a pesquisa deveria ser:

sourcetype=x ip=1.2.3.4 | transaction field=ip maxpause=15s

Esta busca recupera somente os eventos que ela precisa e é muito mais eficiente.

Mais obre isto em “Encontrando Transações Especificas” posteriormente neste capítulo.

Receitas

Unificando os nomes dos campos

Problema

Você precisa construir uma transação com múltiplas fontes de dados que usando nomes

diferentes para os campos com os mesmos identificadores

Solução

Tipicamente, você pode juntar campos comuns em transações usando:

… | transaction username

87

Mas quando o identificador username é chamado de diferentes nomes (login, name,

user, owner, e assim vai) em fontes de dados diferentes, você vai precisar normalizar os

nomes dos campos.

Se o sourcetype A só contem o campo field_A e o sourcetype B só contem o campo

field_B, crie um novo campo chamado de field_Z que pode ser tanto field_A ou field_B,

dependendo de que evento está sendo apresentado. Você pode construir a transação

baseando-se no campo field_Z.

sourcetype=A OR sourcetype=B

| eval field_Z = coalesce(field_A, field_B)

| transaction field_Z

Variações

Acima nós invocamos coalesce para usar qualquer campo que estivesse presente no

evento, mas as vezes você vai precisar usar alguma lógica para especificar quais campos

dos eventos tem de ser unificados. As funções if ou case do eval podem vir a calhar.

Encontrando Transações Incompletas

Problema

Você precisa reportas as transações incompletas, como as em que o usuário logou mas

não deslogou.

Solução

Suponha que nós estamos procurando por sessões de usuário que começam com login e

terminam com logout:

… | transaction userid startswith=”login”

endswith=”logout”

Você gostaria de construir uma reportagem que mostra-se as transações incompletas -

usuários que logaram não deslogaram. Como você pode conseguir isto?

O comando transaction cria um campo booleano interno chamado closed_txn para

indicar se uma certa transação foi fechada ou não. Normalmente transações incompletas

não possuem um retorno, mas você pode pedir por estas transações parciais

“desalojadas” especificando o parâmetro keepevicted=true.

Transações desalojadas são conjuntos de eventos que não se encaixam em todos os

parâmetros de transação. Por exemplo, os requerimentos de tempo não são encontram

em uma transação desalojada. Transações que cumprem todos os requerimentos são

marcadas como completas tendo os seus campos closed_txn colocados como 1 (ao

invés de 0 para transações inacabadas). Então o padrão para encontrar transações

incompletas seria geralmente:

88

… | transaction <conditions> keepevicted=true

| search closed_txn=0

No seu caso, apesar de tudo, existe um problema. Uma condição endswith não se

encaixa e não vai ativar o closed_txn=0 por que os eventos são colocados dos mais

novos para os mais velhos. Tecnicamente, a condição endswith começa a transação, em

termos de processamento. Para contornar isto, nós precisamos filtrar as transações

baseando-se no campo closed_txn, e também ter certeza que nossas transações não

possuem tanto um login quanto um logout:

… | transaction userid startswith=”login”

endswith=”logout”

keepevicted=true

| search closed_txn=0 NOT (login logout)

Variações

Uma variação para esta solução é utilizar o stats, se a transação não possui uma

condição startswith/endswith ou restrições de tempo, e você não se importa em

conservar o transaction. Neste exemplo, você só quer o userid dos usuários que não

deslogaram.

Primeiro, nós podemos procurar especificamente por eventos com login e logout:

action=”login” OR action=”logout”

Em seguida, para cada userid, nós usaremos stats para termos uma noção do número de

action por userid. Por eventos estarem em ordem decrescente de tempo, a primeira ação

é a mais recente.

… | stats first(action) as last_action by userid

Finalmente, nós mantemos os eventos cuja ação mais recente foi login::

… | search last_action=”login”

Neste ponto, nós temos uma lista de todos os valores userid onde a última ação foi

logar.

Calculando o tempo dentro de transações

Problema

Você precisa saber o tempo decorrido entre os eventos dentro de uma transação.

Solução

A aproximação básica é usar o comando eval para marcar os pontos no tempo

necessários para marcar os diferentes intervalos entre os eventos, então calcular o tempo

entre estes eventos aplicando estes pontos ao eval depois de um comando transaction.

89

Nota: Neste capítulo, eventos de amostra dentro de uma transação são numerados para

que nós possamos nos referir a eles como evento1, evento2, etc.

Por exemplo, suponha que nós temos uma transação composta de quatro eventos,

unificados por um campo id em comum e você quer medir a duração entre a fase 1 e 2:

[1] Tue Jul 6 09:16:00 id=1234 start of event.

[2] Tue Jul 6 09:16:10 id=1234 phase1: do some work.

[3] Tue Jul 6 09:16:40 id=1234 phase2: do some more.

[4] Tue Jul 6 09:17:00 id=1234 end of event.

Por padrão, as estampas de tempo destes eventos baseados em uma transação serão do

primeiro evento (evento1), e a duração será a diferença entre o evento1 e o evento4.

Para conseguir a fase de duração, nós teremos de marcas as estampas de tempo dos

evento2

e evento3. A função searchmatch do eval funciona bem para este exemplo, mas você

ainda tem todo o leque possibilidades da função eval disponível para situações mais

complexas.

…| eval p1start = if(searchmatch(“phase1”), _time, null())

| eval p2start = if(searchmatch(“phase2”), _time, null())

Agora nós faremos a transação em si:

… | transaction id startswith=”start of event”

endswith=“end of event”

Finalmente, nós calculamos o tempo de cada transaction, usando os valores calculados

acima.

…| eval p1_duration = p2start - p1start

| eval p2_duration = (_time + duration) - p2start

Neste exemplo, nós calculamos o tempo do último evento adicionado pelo campo _time

(o tempo do primeiro evento) e adicionando uma duração a ele. Assim que soubermos o

tempo do último, nós calculamos o p2_duration como a diferença entre o último evento

e o primeiro da fase nova.

Variações

Por padrão, o comando transaction faz campos de múltiplos valores dos valores dos

campos presentes dentro de um evento de uma transação composta, mas estes valores

são de forma desordenada, em bolsas de valores de duplicados.

Por exemplo, se uma transação é feita de 4 eventos, e estes eventos tem um campo

name assim - name=Matt, name=Amy, name=Rory, name=Amy - então a transação

90

composta por estes eventos terá um campo name de múltiplos valores com o valores

“Amy”, “matt” e “Rory”. Note que perdemos a ordem em que os eventos chegaram e

também perdemos um dos “Amy”! Para manter a lista inteira de valores, em ordem, use

a opção mvlist.

Aqui, nós estaremos construindo uma transação e criando uma lista de tempo para os

campos:

… | eval times=_time | transaction id mvlist=”times”

Daqui nós podemos adicionar comandos de eval para calcular as diferenças. Nós

podemos calcular a diferença entre o primeiro e o segundo evento da transação da

seguinte maneira:

… | eval diff_1_2 = mvindex(times,1) - mvindex(times,0)

Encontrando os últimos eventos

Problema

Você precisa encontrar o último evento de cada valor único de campo. Por exemplo,

quando foi a última vez que alguém logou?

Solução

De inicio, você pode estar tentado a usar os comandos transaction ou stats. Por

exemplo, esta busca retorna, para cada userid único, o primeiro valor em cada campo:

… | stats first(*) by userid

Note que esta busca retorna o primeiro valor para cada campo visto em eventos que

tenham o mesmo userid. ele dispõe uma união de todos os eventos que tenham ID de

usuário, o que não é o que a gente quer. O que a gente quer é o primeiro evento com um

userid único. A maneira correta de fazer isto é como o comando dedup:

… | dedup userid

Variações

Se você quiser obter o mais velho (não o mais novo) evento com um userid único,

use a clausula sortby do comando dedup:

… | dedup userid sortby + _time

Encontrando eventos repetidos

Problema

Você quer agrupar todos os eventos com ocorrências repedidas de valores em ordem

para remover o barulho das reportagem e dos alertas.

91

Solução

Suponha que nós tenhamos os seguintes eventos:

2012-07-22 11:45:23 code=239

2012-07-22 11:45:25 code=773

2012-07-22 11:45:26 code=-1

2012-07-22 11:45:27 code=-1

2012-07-22 11:45:28 code=-1

2012-07-22 11:45:29 code=292

2012-07-22 11:45:30 code=292

2012-07-22 11:45:32 code=-1

2012-07-22 11:45:33 code=444

2012-07-22 11:45:35 code=-1

2012-07-22 11:45:36 code=-1

O seu objetivo é pegar 7 eventos, um de cada valor de código em uma linha: 239, 773,

-1, 292, -1, 444, -1. Você pode se sentir tentado a usar o comando transaction da

seguinte maneira:

… | transaction code

Usando o transaction aqui é um caso de usar a ferramenta errada para o trabalho.

As long as we don’t really care about the number of repeated runs of

duplicates, the more straightforward approach is to use dedup, which

removes duplicates. By default, dedup will remove all duplicate events

(where an event is a duplicate if it has the same values for the specified

fields). But that’s not what we want; we want to remove duplicates that

appear in a cluster. To do this, dedup has a consecutive=true option that

tells it to remove only duplicates that are consecutive.

Enquanto a gente não precisar se preocupar com o número de ocorrências duplicadas, a

forma mais rápida é usar o dedup, que remove duplicatas. Por padrão, o dedup irá

remover todos os eventos duplicados (onde um evento duplicado conta como um evento

com o mesmo valor para o campo especificado). Mas isto não é o que a gente quer; nós

queremos remover as duplicatas que aparecem no bolo. Para fazer isto, o dedup tem

uma opção chamada consecutive=true diz para remover somente as duplicatas

seguidas.

92

… | dedup code consecutive=true

Tempo entre transações

Problema

Você quer determinar o tempo entre transações, como quanto tempo faz entre as visitas

ao seu site.

Solução

Suponha que tenhamos uma busca básica de transaction que agrupa todos os eventos

por um certo usuário (par de clientip-cookie), mas dividir a transação quando o usuário

ficar inativo por mais de 10 minutos:

… | transaction clientip, cookie maxpause=10m

No final, o nosso objetivo é calcular, para cada par de clientip-cookie, a diferença de

tempo entre o fim de uma transação e o inicio de tempo de uma nova transação (em

outras palavras, anterior em caso de eventos retornados).

A diferença de tempo é o espaço entre as transações. Por exemplo, suponha que a

gente tenha duas pseudo transações, retornadas na ordem de mais recente para

menos recente:

T1: start=10:30 end=10:40 clientip=a cookie=x

T2: start=10:10 end=10:20 clientip=a cookie=x

O espaço entre estas duas transações é a diferença entre o tempo de inicio de T1 (10:30)

e o tempo fim do tempo de T2 (10:20), ou seja, 10 minutos.

O resto desta receita explica como calcular estes valores.

Primeiro, nós precisamos calcular o tempo final de cada transação, mantendo em mente

que a timestamp da transação é o tempo em que o primeiro evento ocorreu e a duração é

o numero de segundos passados entre o primeiro e o último evento da transação:

… | eval end_time = _time + duration

Em seguida, nós precisamos adicionar o tempo de inicio da transação anterior (mais

recente) de cada transação. Isto irá nos permitir calcular a diferença entre o tempo de

inicio da transação anterior e a transação calculada.

end_time.

Para fazer isto nós podemos usar o streamstats o último valor do tempo de início

(_time) visto em uma janela deslizando de uma única transação - global=false and

window=1 - e para ignorar o evento atualmente na janela - current=false. Em efeito,

nós instruímos streamstats para olhar somente nos valores do evento anterior.

Finalmente, note que nós estamos especificando esta janela somente a um usuário (par

de clientip-cookie):

93

… | streamstats first(_time) as prev_starttime

global=false window=1 current=false

by clientip, cookie

Deste ponto em diante, os campos relevantes vão parecer com isto:

T1: _time=10:00:06, duration=4, end_time=10:00:10

T2: _time=10:00:01, duration=2, end_time=10:00:03

prev_starttime=10:00:06

T3: _time=10:00:00, duration=0, end_time=10:00:01

prev_starttime=10:00:01

Agora, nós finalmente poderemos calcular a diferencia de tempo entre o inicio da

transação anterior (prev_starttime) e o calculado end_time. Esta diferença é o espaço

entre as transações, a quantidade de tempo (em segundos) passado entre duas transações

consecutivas do mesmo usuário (par de clientip-cookie).

… | eval gap_time = prev_starttime – end_time

Juntando tudo isso, a busca se torna:

… | transaction clientip, cookie maxpause=10m

| eval end_time = _time + duration

| streamstats first(_time) as prev_starttime

global=false window=1 current=false

by clientip, cookie

| eval gap_time = prev_starttime - end_time

Neste ponto, você pode reportar nos valores de gap_time. Por exemplo, qual é a maior e

a média de espaço entre transações de cada usuário?

… | stats max(gap_time) as max,

avg(gap_time) as avg

by clientip, cookie

Variações

Tendo uma série de requerimentos mais simples, nós podemos calcular os espaços de

uma forma bem mais simples. Se as únicas restrições para transações são o startswith e

o endswith - significando que não existem restrições de tempo (como maxpause=10m)

ou campo (exemplo clientip, cookie) - significando que nós podemos calcular o espaço

de tempo entre as transações simplesmente trocando os valores de startswith e

endswith.

94

Por exemplo, tendo estes eventos:

10:00:01 login

10:00:02 logout

10:00:08 login

10:00:10 logout

10:00:15 login

10:00:16 logout

Em vez de fazer:

… | transaction startswith=”login” endswith=”logout”

Nós podemos fazer os espaços entre as transações padrão (login então logout) serem a

transação em si (logout então login):

… | transaction endswith=”login” startswith=”logout”

Daqui, as transações são os espaços entre os resultados, então subseqüentemente nós

podemos calcular as estatísticas usando a função duration:

… | stats max(duration) as max, avg(duration) as avg

Outra variação em encontrar o tempo entre eventos é se você estiver interessado em

encontrar o tempo entre um evento especifico (evento A) e o seu evento seguinte

(evento B). Usando streamstats, você pode terminar o alcance de tempo entre os dois

últimos eventos, que é a diferença entre o evento atual e o evento anterior:

… | streamstats range(_time) as duration window=2

Encontrando transações especificas

Problema

Você precisa encontrar transações com valores de campo específicos.

Solução

Uma busca geral por todas as transações pode parecer com algo assim:

sourcetype=email_logs | transaction userid

Suponha, apesar de tudo, que nós queiramos identificar só aquelas transações aonde

existem um evento com os pares de campo/valor to=root e from=msmith.

Você poderia usar esta busca:

sourcetype=email_logs

| transaction userid

95

| search to=root from=msmith

O problema aqui é que você está recuperando todos os eventos deste tipo de fonte

(potencialmente bilhões), construindo todas as transações, a então jogando 99% dos

dados direto no bit bucket. Não só isto é lento, mas também é dolorosamente

ineficiente.

Você pode estar tentado em reduzir os dados entrando da seguinte maneira:

sourcetype=email_logs (to=root OR from=msmith)

| transaction userid

| search to=root from=msmith

Apesar de você não estar ineficiente mente recuperando todos os eventos de um tipo de

fonte especifico, existem ainda dois problemas adicionais. O primeiro problema é fatal:

você só está conseguindo uma fração dos eventos necessários para resolver o problema.

Especificamente, você está somente recuperando eventos que tem o campo to ou from.

Usando esta sintaxe, você está perdendo todos os outros eventos que poderiam fazer

parte da transação. Por exemplo, suponha que isto é o que toda a transação deveria

parecer:

[1] 10/15/2012 10:11:12 userid=123 to=root

[2] 10/15/2012 10:11:13 userid=123 from=msmith

[3] 10/15/2012 10:11:14 userid=123 subject=”serious error”

[4] 10/15/2012 10:11:15 userid=123 server=mailserver

[5] 10/15/2012 10:11:16 userid=123 priority=high

A pesquisa acima não vai conseguir recuperar o evento3,que tem o subject, ou o

evento4, que tem o server, e não vai ser possível para o Splunk retornar a transação

completa.

O segundo problema com esta busca é que o to=root pode ser bem comum e você

estaria recuperando eventos demais, assim construindo transações demais.

Então qual é a solução? Existem dois métodos: usando sub pesquisas e usando o

comando searchtxn.

Usando Subpesquisas

O seu objetivo é conseguir todos o valores de userid para eventos que tenham to=root,

ou from=msmith. Escolhe a condição mais rara como candidato para os valores de

userid serem conseguidos o mais rápido o possível. Vamos assumir que é o

from=msmith o mais raro:

sourcetype=email_logs from=msmith

| dedup userid

96

| fields userid

Agora que você tem os valores relevantes de userid, você pode pesquisar somente pelos

eventos que possuem estes valores e de forma mais eficiente construir as transações:

… | transaction userid

Finalmente, filtre as transações para ter certeza que elas tenham o to=root e o

from=msmith (é possível que um valor de userid seja usado para outros valores de to e

from):

… | search to=root AND from=msmith

Juntando tudo isso, com a primeira busca e a subpesquisa passando o userid para o

busca final:

[

search sourcetype=email_logs from=msmith

| dedup userid

| fields userid

]

| transaction userid

| search to=root from=msmith

Usando searchtxn

O comando searchtxn (“buscar transação”) faz o trabalho chato da subpesquisa para

você. Ele busca só os eventos necessários para construir uma transaction.

Especificamente, o searchtxn faz uma observação transitiva para localizar os campos

necessários para a transaction, fazendo as pesquisas necessárias para recuperar os

eventos necessários para a transação, então rodando a busca do transaction e finalmente

filtrando para seguir as restrições especificadas. Se nós estivesses-mos unificando

transações por mais de um campo do evento, a solução da subpesquisa ficaria

problemática. O searchtxn também determina qual a condição raiz mais rara para

conseguir os resultamos mais rapidamente. Então, a sua pesquisa por transações de e-

mail com to=root e from=msmith, simplesmente se torna:

| searchtxn email_txn to=root from=msmith

Mas o que é este email_txn no meio da busca? Isto se refere a uma definição de tipo de

transação que tem de ser criada dentro de um arquivo de configuração do Splunk -

transactiontype.conf. Neste caso, transactiontype.conf pode parecer com isso:

[email_txn]

fields=userid

97

search = sourcetype=email_logs

Rodando a busca com searchtxn vai automaticamente rodar esta busca:

sourcetype=email_logs from=msmith | dedup userid

O resultado desta busca da ao searchtxn a lista dos userids que ele pode usar para

pesquisar. Ele também roda outra pesquisa para:

sourcetype=email_logs (userid=123 OR userid=369 OR userid=

576 ...)

| transaction name=email_txn

| search to=root from=msmith

Esta busca retorna a transações “agulha no palheiro” que foram obtidas dos resultado da

busca com searchtxn.

Nota: se a lista de campos do comando transaction tivesse mais de um campo,

searchtxn iria automaticamente rodar múltiplas busca para conseguir uma observação

transitiva de todos os valores necessários.

Variações

Explore usando múltiplos campos com o comando searchtxn. Se você estiver

interessado em obter somente os eventos relevantes e não quiser que o searchtxn

construa transações com eles, use o eventsonly=true.

Encontrando eventos perto de outros eventos

Problema

Você precisa encontrar eventos antes e depois de outro evento. Suponha que você

queira procurar por logins pelo root e então fazer uma busca retroativa por logins ao

root que não tiveram sucesso assim como procurar a frente um minuto para ver se

houve alguma mudança de password.

Solução

Uma solução é usar subspesquisas e procurar a última instância deste cenário. Faça uma

subpesquisa por logins no root e retorne starttimeu e endtimeu, que então guia a busca

pai para estes limites de tempo a serem procurado por failed_login ou

password_changed do mesmo src_ip:

[

search sourcetype=login_data action=login user=root

| eval starttimeu=_time - 60

| eval endtimeu=_time + 60

98

| return starttimeu, endtimeu, src_ip

]

action=failed_login OR action=password_changed

O lado negativo desta aproximação é que ela só encontra a última instancia do login e

possivelmente falsos positivos, já que ele não distingue entre failed_logins depois ou

antes de um password_changed.

No lugar disto, o problema pode ser resolvido filtrando os eventos para somente aquele

que a gente se importa:

sourcetype=login_data ( action=login OR action=failed_login

OR action=password_changed )

A transação deveria consistir de eventos com o mesmo src_ip que começam com um

failed login failed_login e terminam com um password_changed. Ainda mais, a

transação deveria passar de 2 minutes do inicio ao fim:

… | transaction src_ip maxspan=2m

startswith=(action=failed_login)

endswith=(action=password_changed)

Finalmente, você precisa filtrar somente as transações que tem user=root.

Desde um evento de failed_login geralmente não tenha user=root (o usuário não

logou), é necessário filtrar depois da transação:

… | search user=root

Conversivamente, se fosse certeza de que todos os eventos relevantes tivessem

user=root,

isto deveria ser adicionado a clausula da busca, pulando a filtragem final (search

user=root).

Encontrando eventos depois de eventos

Problema

Você precisa pegar os três primeiros eventos logo em seguida de um evento particular

(por exemplo, um evento de login) mas não existe um evento final bem definido.

Solução

Tendo a seguinte transação ideal que começa com uma ação de login:

[1] 10:11:12 src_ip=10.0.0.5 user=root action=login

[2] 10:11:13 src_ip=10.0.0.5 user=root action=”cd /”

99

[3] 10:11:14 src_ip=10.0.0.5 user=root action=”rm -rf *”

[4] 10:11:15 src_ip=10.0.0.5 user=root server=”echo lol”

A escolha obvia para uma busca é usar um transaction que tenha como startswith a

ação de dar login:

... | transaction src_ip, user startswith=”(action=login)”

maxevents=4

O problema é que você também vai pegar transações que não tem action=login.

Por que? A opção startswith não diz ao transaction para retornar somente as transações

que realmente comecem com o valor que você instanciou. Em vez disso, ele diz ao

transaction que quando ele encontrar uma linha que se encaixe com a diretiva do

startswith, este é o início da transação. De qualquer maneira, transações também serão

compostas por diferentes valores de src_ip, não importando a condição do startswith.

Para evitar isto, basta adicionar um comando de filtragem para a busca do transaction

acima:

… | search action=login

As transações retornadas irão começar com o action=login e incluir os próximos 3

eventos com src_ip e user.

Nota: Se houverem 3 eventos ou menos entre os logins, a transação irá ser menor que 4

eventos. O comando transaction adiciona um campo de eventcount a cada transação,

que você pode usar para filtrar ainda mais suas ações.

Agrupando grupos

Problema

Você precisa construir uma transação com múltiplos campos que podem mudar de valor

com cada transação.

Solução

Suppose you want to build a transaction from these four events, unified

by the host and cookie fields:

Suponha que você queira construir uma transação destes 4 eventos, unificados pelos

campos host e cookie:

[1] host=a

[2] host=a cookie=b

[3] host=b

[4] host=b cookie=b

100

Por causa do valor de host mudar durante a transação, um simples comando transaction

lamentavelmente irá criar duas transações:

… | transaction host, cookie

Quando ele ver o evento1 e o evento2, ele irá construir uma transação com o host=a,

mas quando ele chegar ao evento3, que tem um valor diferente de hospedeiro (host=b),

ele irá colocar o evento3 e o evento4 em uma transação diferente que tenha o host=b. O

resultado é que este dois eventos são transformados em duas transações, ao em vez de

duas transações com um valor comum de cookie:

Transação1:

[1] host=a

[2] host=a cookie=b

Transação2:

[3] host=b

[4] host=b cookie=b

Você pode estar tentado a remover o campo host do comando transaction

e unificar as transações baseando-se no valor do cookie. O problema é que isto iria criar

uma transação com o evento2 e o evento4 ignorando o evento1 e o evento3 por que eles

não tem um valor de cookie.

A solução para este problema está em construir uma transação sobre outra transação:

… | transaction host, cookie | transaction cookie

O segundo comando transaction vai pegar as duas transações acima e unificar elas

usando o campo cookie.

Note que se você se importa com os campos calculados duration e eventcount, eles

agora estão incorretos. A duration depois do segundo comando transaction vai ser

diferença entre as transações que ele unifica em vez de os eventos que as compõe.

Similarmente, o eventcount vai ser o número de transações unificadas, em vez do

número correto de eventos.

Para conseguir o eventcount correto depois do primeiro comando transaction, crie um

campo chamado mycount para guardar todos os valore de eventcount, então, depois do

segundo comando transaction some todos os valores de mycount para calcular o

verdadeiro real_eventcount. Similarmente, depois do primeiro comando transaction,

recorde o tempo de início e fim de cada transação e então no segundo comando

transaction pegue o tempo de início mínimo e o tempo de fim máximo e calcule para

conseguir o real_duration:

… | transaction host, cookie

| eval mycount=eventcount

101

| eval mystart=_time

| eval myend=duration + _time

| transaction cookie mvlist=”mycount”

| eval first = min(mystart)

| eval last=max(myend)

| eval real_duration=last-first

| eval real_eventcount = sum(mycount)

102

8 Tabelas de Lookup

Estas receitas de tabelas de lookup mostrarão rapidamente soluções avançadas para os

problemas comuns do mundo real. O recurso de lookup do Splunk lhe permite

referenciar campos em um arquivo de CSV externo por campos que se encaixam em

seus dados. Usando este dados encaixados, você pode enriquecer os seus dados de

eventos com campos adicionais. Note que nós não cobrimos os lookups scriptados

externamente ou baseados em tempo.

Introdução

Estas receitas usam extensivamente três comandos de busca: lookup, inputlookup e

outputlookup.

lookup

Para cada eventos, este comando encontra as linhas que se encaixam em uma tabela de

CSV externa e retorna os valores da outras colunas, assim enriquecendo os eventos. Por

exemplo, em um evento com um valor do campo host e uma tabela que tenha os

campos host e machine_type na mesma linha, especificando …| lookup mylookup host

adiciona o valor de machine_type correspondente ao valor de host de cada evento. Por

padrão, os encaixes são sensíveis a maiúscula e não suportam coringas, mas você pode

configurar estas opções. Usando o comando lookup você encaixa valores de uma tabela

externa explicitamente. Lookups automáticos, que são montados usando o Gerenciador

do Splunk (Splunk Manager), encaixa os valores implicitamente. Para aprender mais

sobre a configuração de lookups automáticos, veja

http://splunk.com/goto/book#autolookup.

inputlookup

Este comando retorna toda a tabela de lookup como resultados de uma busca. Por

exemplo, … | inputlookup mylookup retorna como resultado de uma busca para todas as

linhas da tabela mylookup, que tem dois valores de campos: host e machine_type.

outputlookup

Você pode estar se perguntando, como eu faço para criar uma tabela de lookup. Este

comando gera uma tabela no disco com os resultados da busca atual. Por exemplo, … |

outputlookup mytable.csv salva todos os resultados em mytable.csv.

Leitura Posterior http://splunk.com/goto/book#lookuptutorial http://splunk.com/goto/book#externallookups

103

Receitas

Colocando os Valores Padrões de Lookup

Problema

Você precisa de um valor padrão de campo se um valor de evento não estiver na sua

tabela de lookup.

Solução

Existem várias soluções:

Usando um lookup explicito, Você pode simplesmente usar a função eval coalesce:

… | lookup mylookup ip | eval domain=coalesce(domain,”unknown”)

Usando lookups automáticos, existe uma configuração para isso. Vá para Manager >>

Lookups >> Lookup Definition >> mylookup, assinale a caixa do Advanced options,

e mude o seguinte:

Coloque o Minimum matches como: 1

Coloque o Default matches como: unknown

Salve as mudanças.

Usando Lookups reversos

Problema

Você precisa fazer uma busca por eventos baseados na saída de uma tabela de lookup.

Solução

O Splunk permite que você use buscas de lookups reversas, significando que você pode

procurar pelos valores das saídas de um lookup automático e o Splunk traduz isto em

uma busca pelos campos de entrada correspondentes.

Por exemplo, suponha que você uma tabela de lookup que possua uma ligação de

machine_name para owner:

machine_name, owner

webserver1,erik

dbserver7,stephen

dbserver8,amrit

104

Se os seus eventos tem um campo machine_name e você quer procurar por um owner

em particular, o erik, você pode usar uma busca custosa, como esta:

… | lookup mylookup machine_name | search owner=erik

Esta busca é custosa porque você está recuperando todos os eventos e filtrando qualquer

um que não tenha como owner o erik.

Alternativamente, você pode considerar uma busca mais eficiente, mas mais

complicada:

… [ inputlookup mylookup | search owner=erik | fields machine_

name]

Esta busca recupera todas as linhas na tabela de lookup e filtra quaisquer linhas que não

tenham o erik como o owner e retorna uma grande expressão de OR de machine_names

para o Splunk poder fazer a busca.

Mas nenhum destes é necessário. Se você criou uma tabela automática de lookups, você

pode simplesmente pedir ao Splunk que busque por owner=erik.

É isso. Efetivamente, o Splunk faz a solução das subpesquisas por traz dos panos,

gerando a busca por clausulas OR por você.

Nota: O Splunk também faz lookups invertidos para extração de campos definidos, tags

e eventtypes - você pode começar a buscar pelo valor que seria extraído, etiquetado ou

tipado e o Splunk recupera os eventos corretos.

Variações

Usando lookups automáticos e os lookups reversos incluso, você pode recriar o sistema

de etiquetas do Splunk. Por exemplo, faça um mapeamento por host para o campo

chamado host_tag. Agora você pode buscar por eventos baseados no seu host_tag e

não somente nos valores de host. Muitas pessoas acham mais fácil manter tabelas de

lookups do que usar múltiplas etiquetas do Splunk.

Usando um lookup de duas camadas

Problema

Você precisa de um lookup de duas camadas. Por exemplo, procure um endereço de IP

uma das tabelas de um hospedeiro bem conhecido e se falhar para um certo evento, só

então usar a segunda tabela, mais completa de DNS.

Solução

Depois de termos recuperado os eventos, nós fazemos nossa comparação inicial com o

local_dns.csv, um arquivo de lookup local:

105

... | lookup local_dns ip OUTPUT hostname

Se ele não encaixar, o campo hostname é nulo para este evento.

Agora nós montamos uma segunda, mais custosa comparação de lookups em eventos

que tenham o hostname nulo. Usando o OUTPUTNEW em vez do OUTPUT, o lookup só

vai busca por hostname com valor nulo.

... | lookup dnslookup ip OUTPUTNEW hostname

Juntando tudo isso:

... | lookup local_dns ip OUTPUT hostname

| lookup dnslookup ip OUTPUTNEW hostname

Usando lookups de múltiplos passos

Problema

Você precisa procurar um valor em um campo de lookup e usar o valor do campo

retorna do primeiro lookup para fazer um segundo lookup usando um arquivo de lookup

diferente.

Solução

Você pode fazer isto manualmente rodando comandos de lookup seqüenciais. Por

exemplo, se a primeira tabela de lookup pega o valor do campo A e retorna o valor do

campo B uma segunda tabela de lookup pega o valor do campo B e retorna o valor do

campo C:

… | lookup my_first_lookup A | lookup my_second_lookup B

De forma mais interessante, isto pode ser feito usando tabelas de lookup automáticas,

onde o encadeamento acontece sozinho. É imperativo, apesar de tudo, que os lookups

sejam rolados na ordem correta, usando a procedência alfanumérica para o nomes dos

campos..

Vá ao Manager >> Lookups >> Automatic lookups, e crie dois lookups automáticos,

se certificando que aquele que vai funcionar depois tem um nome com um valor mais

alto que o nome do lookup anterior. Por exemplo:

0_first_lookup = my_first_lookup A OUTPUT B

1_second_lookup = my_second_lookup B OUTPUT C

Nota: Usando o encadeamento de lookups como foi mostrado nesta receita, reverter

lookups como visto na receita “Usando lookups reversos” não vai funcionar por que o

Splunk atualmente não é capaz de reverter múltiplos passos de um lookup automático

(automaticamente convertendo o valer de campo C=baz na entrada para a busca do

valor de campo A=foo).

106

Criando uma tabela de lookup usando os resultados de

uma busca

Problema

Você quer criar uma tabela de lookup dos resultados de uma busca.

Solução

Se nós simplesmente fizéssemos: <some search> | outputlookup mylookupfile.csv

você poderia encontrar dois problemas. Primeiro, eventos que tenham muitos campos,

incluindo campos internos como _raw e _time, que você não quer que apareçam em sua

tabela de lookup. Segundo, dos campos que a gente se importa, muito provavelmente

haveriam valores duplicados entre os recuperados. Para lidar com o primeiro problema,

nós não iremos usar o comando fields porque ele é inconveniente para remover campos

internos. Em vez disso, nós iremos usar o comando table para melhor limitar os campos

que nós queremos utilizar. Para resolver o segundo problema, use o comando dedup.

Juntando tudo:

… | table field1, field2

| dedup field1

| outputlookup mylookupfile.csv

Anexando resultados a tabelas de lookup

Problema

Você precisa anexar os resultados a um lookup existente. Por exemplo, você quer criar

uma única tabela de lookup baseada nos resultados múltiplas iterações da mesma busca.

Especificamente, suponha que você quer acompanhar o último IP que cada usuário usou

para se conectar. Você por querer rodar um trabalho a cada 15 minutos para procurar

por isso e atualizar a tabela de lookup com novos usuários.

Solução

O procedimento padrão é conseguir o conjunto de resultados que você quer anexar a

tabela de lookup, usar inputlookup para anexar eles ao conteúdo atual da tabela de

lookup e usar o outputlookup para escrever o lookup. O comando parece com isso:

your_search_to_retrieve_values_needed

| fields the_interesting_fields

| inputlookup mylookup append=true

| dedup the_interesting_fields

| outputlookup mylookup

107

Primeiro, nós dissemos ao Splunk para recuperar os novos dados e manter somente os

campos necessários para a tabela de lookup. Em seguida, nós usamos o inputlookup

para anexar as fileiras existentes ao mylookup usando a opção append=true. Em

seguida nós removemos as duplicadas com o dedup. Finalmente, nós usamos o

outputlookup para aplicar todos estes resultados ao mylookup.

Variações

Suponha que você queira que a sua tabela de lookup tenha somente os valos dos últimos

30 dias. Você pode montar uma tabela local para ser atualizada diariamente usando uma

busca agendada. Quando você montar a sua busca agendada para gerar a tabela de

lookup e antes do comando outputlookup, adicionar a condição para filtrar somente até

30 dias: ... | where _time >= now() - (60*60*24*30) onde 60*60*60*24*30 é o

número de segundos em 30 dias.

Usando o exemplo anterior como base, a sua busca se torna:

your_search_to_retrieve_values_needed

| fields just_the_interesting_fields

| inputlookup mylookup append=true

| where _time >= now() - (60*60*24*30)

| outputlookup mylookup

Obviamente, você vai precisar manter o _time como um dos campos em sua tabela de

lookup.

Usando tabelas gigantes de lookup

Problema

Você tem uma tabela gigante de lookup mas quer que a performance seja mais rápida.

Solução

Quando você tem uma tabela de lookup bem grande e começa a notar que a

performance está sendo afetada, existem diversas soluções.

Primeiro, considere se você pode fazer ela ficar menor, com tabelas mais específicas.

Por exemplo, se algumas de suas busca só precisam de um pequeno conjunto de linhas e

colunas, considere montar uma tabela mais concisa para ser usada nestas buscas. A

seguinte busca reduziu o tamanho da tabela mylookup reduzindo as linhas para somente

aquelas que seriam afetadas pela busca, removendo duplicatas, removendo todas as

colunas menos as necessárias e finalmente enviando os resultados para a tabela

mylookup2.

| inputlookup mylookup

| search somecondition

108

| dedup someinputfield

| table someinputfield, someoutputfield

| outputlookup mylookup2

Se você não pode reduzir o tamanho da tabela de lookup, existem outras soluções.

Se a sua instalação do Splunk possui vários indexadores, estes indexadores

automaticamente replicarão a sua tabela de lookups. Mas se sua tabela de lookup for

muito grande (como 100MB), isto pode demorar demais.

Uma solução é se os seus pacotes são atualizados constantemente, desabilitar a

replicação de pacotes e utilizar o NFS para tornar os pacotes disponíveis para todas as

entradas.

Veja: http://splunk.com/goto/book#mount

Outra solução, se a sua tabela não muda constantemente e você não pode contar com

drives compartilhados ou montados, é usar os lookups locais.

• Para evitar que o lookup seja replicado ou distribuído, adiciona a tabela de lookup

para o replicationBlacklist no distsearch.conf.

(Veja http://splunk.com/goto/book#distributed)

• Copie o arquivo CSV da tabela de lookup para cada um dos seus índices em

$SPLUNK_HOME/etc/system/lookup

• Quando você fizer uma busca, adicione a opção local=true no comando de busca

lookup.

Nota: Definições de lookup definidas para rodar implicitamente via o props.conf por

natureza não são locais e tem de ser distribuídas aos indexadores.

Finalmente, considere evitar arquivos CSV grandes e também considere usar lookups

externos (normalmente se baseando em um script que enfileira as bases de dados).

Nota: Quando uma tabela de lookup .csv alcança um certo tamanho (10 MB por

padrão), o Splunk indexa ele para conseguir um acesso mais rápido. Por indexar o

arquivo .csv, o Splunk pode buscar ao em vez de escanear a na tabela. Para editar o

tamanho antes de ser indexado, edite a instancia do lookup no limits.conf e mude o

valor do max_memtable_bytes.

Comparando resultados com valores de lookup

Problema

Você quer comparar os valores em uma lista de lookup com aqueles em seus eventos.

Por exemplo, você tem uma tabela de lookup com o endereço de IP e quer saber que

endereços de IP ocorrem em seus dados.

Solução

109

Se eventos com um valor de campos particular são só uma pequena parcela dos seus

eventos, você pode eficientemente usar subpesquisas para achar estes eventos

relevantes. Use o inputlookup para gerar uma grande busca em OR de todos os valores

vistos em sua tabela de lookup. O tamanho de uma lista retornada de uma pesquisa pode

ter até 10,000 itens de tamanho (modificável no limits.conf).

yoursearch [ inputlookup mylookup | fields ip ]

A busca resultante parece com:

yoursearch AND ( ip=1.2.3.4 OR ip=1.2.3.5 OR ... )

Você pode testar o que a subpesquisa retorna rodando a busca que está dentro da

subpesquisa e anexando o comando format:

| inputlookup mylookup | fields ip | format

Veja: http://splunk.com/goto/book#subsearch

Variação I

Similarmente, para recuperar eventos com valores que NÃO estão em sua tabela de

lookup, use um padrão assim:

yoursearch NOT [ inputlookup mylookup | fields ip ]

que resulta em uma busca assim:

yoursearch AND NOT ( ip=1.2.3.4 OR ip=1.2.3.5 OR ... )

Variação II

Alternativamente, se você quer os valores em sua tabela de lookup que não se encaixam

com os seus dados, use:

| inputlookup mylookup

| fields ip

| search NOT [ search yoursearch | dedup ip | fields ip ]

Que pega todos os valores no lookup filtra para fora aqueles que se encaixam nos seus

dados.

Variação III

Para listas gigantes, aqui está um padrão de busca eficiente e complicado para encontrar

todos os valores em seus eventos que também esteja na sua tabela de lookup: recupere

os seus eventos e então anexe a tabela de lookup inteira aos seus eventos. Aplicando um

campo (como o marker), nós podemos detectar se um resultado (pense nisso como uma

110

‘linha’) é um evento ou uma linha na tabela de lookup. Nós podemos usar o stats para

conseguir a lista de endereços de IP que estão em ambas as listas (count>1):

yoursearch

| eval marker=data

| append [ inputlookup mylookup | eval marker=lookup ]

| stats dc(marker) as list_count by ip

| where list_count > 1

Nota: Apesar do comando append parecer estar executando uma subpesquisa, ele não

está. Não existe limite no número de resultados que podem ser anexados,

diferentemente de uma subpesquisa, que tem como padrão o limite de 10 mil resultados.

Se você tiver que usar esta técnica por um longo período de tempo, é mais eficiente usar

uma outra tabela de lookup para manter um estado de longo termo. Resumindo, agende

uma busca para uma pequena janela de tempo - como um dia - que calcule a última vez

que o IP tinha sido visto. Então, use uma combinação de inputlookup, dedup e

outputlookup para atualizar incremental mente esta tabela de lookup por um grande

período. Isto lhe da um recurso bem rápido para olhar para o estado mais recente. Veja a

receita “Anexando resultados a tabela de lookup” para algo mais específico.

Controlando os encaixes da tabela de lookup

Problema

Você tem múltiplas entradas em sua tabela de lookup para uma certa combinação de

campos de entrada e quer que o só o primeiro valor seja encaixado. Por exemplo,a sua

tabela de lookup mapeia os nomes dos hospedeiros para vários apelos de hospedeiros e

você quer só o primeiro apelido.

Solução

Por padrão, o Splunk retorna até 100 encaixes para lookups que não envolvam um

elemento de tempo. Você pode atualizar isto para que ele retorne somente um.

Usando a interface, vá para o Manager >> Lookups >> Lookup definitions e edite ou

crie a sua definição de lookup. Selecione a caixa Advanced options e coloque 1 no

Maximum matches.

Alternativamente, você pode editar o transforms.conf relacionado. Adicione max_

matches=1 na sua instancia de lookup.

Veja: http://splunk.com/goto/book#field_lookup

Variações

111

Se a sua tabela de lookups tem duplicatas e você quer remover elas, você pode limpar-la

com uma busca parecida com esta:

| inputlookup mylookup | dedup host | outputlookup mylookup

Isto elimina todos menos a primeira ocorrência distinta de cada hospedeiro no arquivo.

Encaixando IPs

Problema

Você tem uma tabela de lookup com conjuntos de endereços de IP que você quer

encaixar.

Solução

Suponha que os seus eventos tenham endereços de IP neles e você tem um tabela de

conjuntos de IPs e ISPs:

network_range, isp

220.165.96.0/19, isp_name1

220.64.192.0/19, isp_name2

...

Você pode especificar um match_type para o seu lookup. Por desventura, esta

funcionalidade não está disponível na interface mas você pode colocar no

transforms.conf.

Coloque o match_type como CIDR para o seu network_range.

Em transforms.conf:

[mylookup]

match_type = CIDR(network_range)

Veja: http://splunk.com/goto/book#transform

Variações

Os valores disponíveis do match_type são WILDCARD, CIDR e EXACT. EXACT é o

padrão e não precisa ser especificado.

Também no transforms.conf, você pode especificar se os encaixes de lookups são

sensíveis a maiúsculas (por padrão) ou não. Para que elas não fiquem sensíveis:

case_sensitive_match = False

112

Encaixando Coringas

Problema

Você precisa que a sua tabela de lookup possa se encaixar com coringas.

Solução

Suponha que você tenha uma tabela de lookups com URLs que você gostaria de

encaixar:

url, allowed

*.google.com/*, True

www.blacklist.org*, False

*/img/*jpg, False

Incluindo um caractere coringa (*) nos valores de sua tabela de lookup, você pode

direcionar ao Splunk que ele procure com os coringas.

Como em “Encaixando IPs”, você pode especificar um match_type para um lookup no

transforms.conf:

[mylookup]

match_type = WILDCARD(url)

Nota: Por padrão, o número máximo de encaixes em uma tabela de lookup é 100, então

se você tiver múltiplos valores que se encaixam, os campos de saída terão múltiplos

valores. Por exemplo, uma URL como “www.google.com/img/pix.jpg” poderia se

encaixar com a primeira e terceira linha da tabela acima, o que permitiria que o

campos se tornasse um campo de múltiplos valores com os valore de True e False.

Normalmente não é isto que você quer. Colocando a configuração do Maximum

matches como 1, o primeiro valor a se encaixar é que vai estar válido, e você pode usar

a ordem da tabela para definir a prioridade. Você pode encontrar esta configuração no

Manager >> Lookups >> Lookup definitions >> mylookup, depois selecione a caixa

Advanced options.

Variações

A primeira receita deste capítulo lidava com os valores padrão quando um lookup

falhava em se encaixar. Outra forma de lidar com isso seria com o uso de coringas. Faça

com que o último item de sua lista seja um valor de *, e coloque os encaixes mínimos e

máximos da tabela de lookup com 1.

113

Apêndice A: Básico dos Dados de

Maquina

Dados gerados por maquina a tempos vem sendo usados em centros de dados por

profissionais de TI mas só recentemente tem sido reconhecida como uma nova fonte de

ajuda para os outros departamentos. Algumas vezes chamados de dados de TI ou dados

operacionais, dados de maquina são todos os dados gerados por aplicações, servidores,

mecanismos de redes, mecanismos de segurança e outros sistemas dentro do seu grupo

de trabalho.

O universo coberto pelos dados de maquina cobre muito mais do que logs - ele inclui

dados da configuração, clickstreams, mudanças em eventos, diagnósticos, APIs, filas de

mensagens e aplicações customizadas. Estes dados são rigidamente monitorados,

baseados em uma série de tempo e em grande quantidade. Eles são gerados por quase

todos os componentes de TI e os seus formatos e fontes variam muito. Milhares de

formatos de log, muitas aplicações customizadas, que são críticos para diagnosticar

problemas de serviço, detectar perigos a segurança e demonstrar conformidade. E com a

explosão dos dispositivos conectados, a quantidade de informação sendo criada por

maquinas de todos os tipos - aparelhos GPS, etiquetas de RFID, telefones moveis,

utilitários, etc - está expandindo mais rápido do que a gente pode processar.

O valor dos dados de maquina não é novo para os profissionais de TI; eles já vem

usando isto a anos. De forma crescente, usuários do Splunk descobrem que isto também

pode ajudar a dar luz aos problemas de trabalho. Dados de maquina são na maioria das

vezes guardados em arquivos enormes e antes do Splunk, ele ficaria dormente até que

algum problema surgisse e estes arquivos teriam de ser inspecionados manualmente.

Com o Splunk, estes arquivos são indexados e usáveis.

Usuários de negócio estão acostumados a lidar com dados gerados por pessoas

participantes no processo do negócio. Geralmente, estes dados transacionais, como são

chamados, estão guardados de duas formas.

Bases de Dados Relacionais são largamente usadas para armazenar dados

transacionais. Eles guardam dados empresariais de forma estruturada, como os registros

financeiros, os registros de funcionários, manufatura, informação logística,etc. Por

design, bancos de dados relacionais são estruturados com esquemas rígidos, ou

montados a partir de formulas que descrevem a estrutura do banco de dados. Mudanças

nestes esquemas podem estragar a funcionalidade, Introduzindo uma série de atrasos e

problemas que podem trazer riscos. Para construir uma busca em uma base de dados

relacional, praticantes devem se aproveitar de um esquema alternativo.

Bases de Dados Multidimensionais são projetadas para organizar enormes grupos de

registros. O termo OLAP (Processo Analítico On-Line) se tornou quase um sinônimo de

“base de dados multidimensional”. Ferramentas de OLAP permitem ao usuário analisar

diferentes dimensões de dados multidimensionais. Bases de dados multidimensionais

são ótimas para a mineração de registros mensais, mas não para eventos em tempo real.

114

Dados de maquina estão em um nível de detalhe muito menor do que o dos dados

transacionais.

Dados transacionais podem guardar todos os dados de produto, transporte e pagamento

associados com a compra online. Os dados de maquina associados com esta compra

poderiam incluir milhares de registros, ou eventos, que acompanham cada clique do

usuário, cada pagina e imagem carregada, cada pedido de propaganda, e por ai vai.

Dados de maquina não são só sobre o resultado final, ou o destino, mas sobre toda a

jornada.

Por ser tão detalhado, os dados de maquina podem ser usados para uma grande

variedade de propósitos, No mundo da TI, dados de maquina podem, por exemplo,

ajudar a encontrar problemas e também mostrar se os sistemas estão operando dento dos

padrões. No mundo dos negócios, dados de maquina podem detectar o comportamento

de consumo e ajudar a segmentar consumidores para a criação de vários públicos alvo.

Para ajudar a você a ter uma melhor idéia da natureza dos dados de maquina, este

apêndice vai descrever superficialmente alguns dos diferentes tipos que você pode

encontrar.

Logs de Aplicação

A maioria das aplicações caseira ou em pacotes escrevem arquivos de log, muitas vezes

adicionando serviços como intermediários - WebLogic, WebSphere®, JBoss™, .NET™,

PHP, e outros. Os arquivos de log são críticos para o debuggind diário de aplicações de

produção por desenvolvedores e para o suporte de aplicação. Eles também são a melhor

maneira de reportar as atividades de negócios e usuários e em detectar fraudes porque

eles também tem todos os detalhes das transações. Quando desenvolvedores colocam a

informação de tempo em seus logs de evento, os arquivos de log também podem ser

usados para monitorar e reportar a performance da aplicação.

Logs de Acesso Web

Logs de acesso web reportam todos os pedidos processados por um servidor web - qual

é o endereço de IP do cliente de onde o pedido veio, qual foi a URL requisitada, o que a

URL referente era e os dados sobre o sucesso ou a falha do pedido. Eles são mais

comumente processados para produzir relatórios de análise de web para o marketing -

contagens diárias de visitantes, páginas mais requisitadas, etc.

Eles também são valiosos como um ponto de partida para a investigação de problemas

reportados pelos usuários porque o log de um pedido que falhou pode estabelecer o

tempo exato do erro. Logs web são bem padrões e bem estruturados. O desafio principal

é lidar com eles em seu enorme volume, como sites bem ativos tipicamente recebem

bilhões de entradas por dia como norma.

Logs de Proxy Web

Quase todas as empresas, servidoras de serviços, instituições e organizações do governo

que proporcionem aos funcionários, consumidores ou convidados com acesso a rede

115

usam algum tipo de Proxy web para controlar e monitorar o acesso. Proxies Web

registram todos os pedidos de rede que foram feitos pelo usuário através do Proxy. Eles

podem incluir nomes de usuários corporativos e URLs, Estes logs são críticos para o

monitoramento e investigação dos abusos dos “termos de serviço” ou da política de uso

de acesso web e também são componentes vitais para o monitoramento efetivo do

vazamento de dados.

Registros de Detalhes de Chamadas

Registros de Detalhes de Chamadas (CDRs), Registros de Dados de Carga e Registros

de Dados de Eventos são alguns dos nomes dados aos eventos logados por telecons e

manipuladores de rede. Os CDRs contem dados úteis sobre chamadas e serviços

passados pelo manipulador, como o número fazendo a chamada, o número recebendo a

chamada, o tempo da chamada, a duração da chamada e o tipo de chamada. Enquanto os

serviços de comunicação se movem para serviços baseados em protocolos de internet,

estes dados são também referenciados como IPDRs, contendo detalhes como o endereço

de IP, número da porta, etc. As especificações, formatos e estruturas destes arquivos

variam monstruosamente; manter o passo com todas as transmutações da forma

tradicional tem sido um desafio. Ainda assim os dados que eles contem são de extrema

importância para as contas, certificação de renda, certificação de consumidores,

firmação de parcerias, inteligência de marketing e muito mais. O Splunk rapidamente

indexa os dados e combina eles com outros dados de negócios que permitem aos

usuários a entrega de novas visões desta informações ricas em utilidade.

Dados de Clickstream

O uso de uma página web em um site é capturada em dados de clickstream. Isto dispõe

uma visão de o que o usuário está fazendo e é útil para analisar a usabilidade, o

marketing e a em pesquisas gerais. Formatos para estes dados são fora do padrão, e

ações podem ser logadas em múltiplos lugares, como no servidor web, roteadores,

servidores proxy e servidores de propaganda. Ferramentas de monitoramento

geralmente tem visões parciais dos dados de uma fonte especifica. Estatísticas de web e

depósitos de dados produzem amostras de dados, assim, perdendo completamente a

visão do comportamento e não oferecendo a possibilidade de análise em tempo real.

Enfileiramento de Mensagem

Tecnologias de enfileiramento de mensagens como TIBCO®, JMS e AquaLogic™ são

usadas para passar dados e tarefas entre os serviços e os componentes de aplicações em

uma base de publicação/inscrição. Se inscrever nestas fileiras de mensagens é uma boa

maneira de fazer debug nos problemas de aplicações complexas - você pode ver

exatamente o que o próximo componente na cadeia recebei do componente anterior.

Separadamente, fileiras de mensagens estão se tornando cada vez mais usadas como a

coluna das arquiteturas de log para aplicações.

116

Pacotes de Dados

Dados gerados por redes são processados usando ferramentas como tcpdumpe tcpflow,

que geram dados pcaps ou outras informações úteis a nível de pacote e sessão. Estas

informações são necessárias para lidar com degradação de performance, perdas por

atraso, gargalos ou atividades suspeitas que podem indicar que a rede pode estar sendo

comprometida por um ataque remoto.

Arquivos de Configuração

Não existe substituto para uma verdadeira configuração de sistema ativa em entender

como a infra-estrutura foi montada. Configurações passadas são necessárias para

debugar falhas passadas que possam ocorrer novamente. Quando as configurações

mudam, é importante sabe o que foi mudado e quando, e se a mudança foi autorizada, e

se um ofensor teve sucesso em comprometer o sistema através de backdoors, bombas

relógio ou ameaças latentes.

Logs de Auditoria de Bancos de Dados e Tabelas

Bancos de dados contem alguns dos dados mais sensíveis de uma corporação - registros

de consumidores, dados financiais, registros de pacientes, etc. Registros de auditoria de

todas as filas do banco de dados são vitais para o entendimento de quem acessou ou

mudou os dados e quando. Logs de auditoria de banco de dados são úteis para entender

como uma aplicação está usando bancos de dados para otimizar fileiras. Alguns logs de

auditoria de banco de dado são salvos em arquivos, enquanto outros são mantidos em

tabelas acessíveis com o SQL.

Logs de Auditoria do Sistema de Arquivos

Dados sensíveis que não estão nos bancos de dados estão no sistema de arquivos,

muitas vezes compartilhado. Em algumas industrias como saúde, os maiores

vazamentos de dados arriscam os registros do consumidor mantidos no sistema de

arquivos. Diferentes sistemas operacionais, ferramentas de terceiros e tecnologias de

armazenamento disponibilizam diferentes opções para acesso da auditoria para ler

dados sensíveis no nível do sistema de arquivos. Estes dados de auditoria são uma

fonte vital para o monitoramento e investigação do acesso a informações sensíveis.

Gerenciamento e APIs de Log

Cada vez mais vendedores estão expondo dados de gerenciamento crítico e logs de

eventos em APIs padronizadas e proprietárias, em vez de logar eles em arquivos. O

Checkpoint® protege os logs usando o API de Exportação de Logs do OPSEC (OPSEC

LEA). Vendedores de virtualização, incluindo VMware® e Citrix®, expõem

configurações, logs e estado do sistema com seus próprios APIs.

117

Medidas de OS, Estado e Comandos de Diagnostico

Sistemas operacionais expõem medidas críticas, como o uso de CPU e memória e as

informações de estado usando utilidades de linha de comando como o ps e o iostat no

Unix e no Linux e o perfmon no Windows. Estes dados são normalmente agregados por

ferramentas de monitoramento de servidor mas eles são raramente persistentes, mesmo

que sejam indispensáveis para a resolução de problemas, analisando tendências e

problemas latentes e investigando problemas de segurança.

Fontes de Dados de Outras Maquinas

Existem incontáveis fontes alternativas de dados de maquina importantes que nós não

temos como descrever todas, incluindo os logs de repositórios de códigos fonte, logs de

segurança física, etc. Você ainda vai precisar de um firewall e logs de IDS para reportar

as conexões de rede e os ataque. Os logs OS, incluindo o syslog do Unix e Linux e os

event logs do Windows, registram quem logou em seus servidores, que ações

administrativas eles tomaram, quando o serviço começou e acabou e quando o os

pânicos de núcleo acontecem. Os logs do DNS, DHCP e outros serviços de rede

registram quem foi associado qual endereço de IP e como os domínios foram

resolvidos. Os Syslogs dos seus roteadores, alternadores e mecanismos de rede

recordam o estado das conexões de rede as falhas de componentes críticos da rede. Os

dados de máquina são mais do que somente logs e uma gama enorme de logs alem das

soluções suportadas pelo gerenciamento de logs tradicional.

Apêndice B: Sensibilidade a

Maiúsculas

Algumas coisas no Splunk são sensíveis a maiúsculas, enquanto outras não, como é

sumarizado na tabela B-1.

Tabela B-1. Sensibilidade a Maiúscula

Apêndice B: Sensibilidade a

Algumas coisas no Splunk são sensíveis a maiúsculas, enquanto outras não, como é

1.

1. Sensibilidade a Maiúscula

118

Apêndice B: Sensibilidade a

Algumas coisas no Splunk são sensíveis a maiúsculas, enquanto outras não, como é

Apêndice C: Comandos Comuns

Aqui estão os comandos de busca mais comuns segundo os usuários finais do Splunk.

Apêndice C: Comandos Comuns

Aqui estão os comandos de busca mais comuns segundo os usuários finais do Splunk.

119

Aqui estão os comandos de busca mais comuns segundo os usuários finais do Splunk.

120

121

Apêndice D: Recursos mais usados

Nós percebemos que este livro não pode te oferecer tudo o que você precisa saber sobre

o Splunk. Aqui estão uma lista de sites para continuar os seus estudos. Estes links

também estão listados em http://splunk.com/goto/book#links.

Página de Download do Splunk

http://splunk.com/download

Documentação do Splunk http://docs.splunk.com

Comunidade do Splunk http://splunkbase.com

Documentos Criados pela Comunidade

http://innovato.com

Vídeos de Treinamento http://splunk.com/view/SP-CAAAGB6

Vídeos do Splunk http://splunk.com/videos

Blog do Splunk http://blogs.splunk.com

Splunk TV http://splunk.tv

122

Apêndice E: Guia de Referencia

Rápida do Splunk

CONCEITOS

Visão Geral

Processamento em Índice de Tempo: O Splunk lê os dados de uma fonte (source),

como um arquivo ou uma porta, em um hospedeiro (host) (“minha máquina”), classifica

esta fonte como uma sourcetype (como o syslog, o access_combined ou o apache

error), então extrai as estampas de tempos, dividindo a fonte em eventos individuais

(como logos de eventos, alertas, etc) que podem consistir de uma ou mais linhas, e

escreve cada evento um índice (index) no disco, para depois ser recuperado com uma

busca.

Processamento de Busca por Tempo: Quando uma busca começa, eventos indexados

que se encaixam são recuperados, campos (como code=404 ou user=david,...) são

extraídos do texto do evento, e o evento é classificado por como ele se encaixa nas

definições do eventtype (como error ou login). Os eventos retornados de uma busca

podem ser fortemente modificados usando o SPL para gerar relatórios que aparecem

nas dashboards.

Eventos

Um evento é uma linha de dados. Aqui está um evento de um log de web ativo:

173.26.34.223 - - [01/Jul/2009:12:05:27 -0700] “GET /trade/

app?action=logout HTTP/1.1” 200 2953

Mais especificamente, um evento é um conjunto de valos associados com uma estampa

de tempo. Enquanto muitos eventos são curtos e só tomam uma linha ou duas, outros

podem ser longos, como um documento de texto inteiro, um arquivo de configuração,

ou uma pilha de despejo em JAVA. o Splunk usa regras de quebra de linha para

determinar como ele deve dividir estes eventos para deixar a mostra nos resultados da

busca.

Fontes e Tipos de Fonte

Uma fonte é o nome do arquivo, stream, ou outro tipo de entrada de onde são tirados os

eventos - por exemplo, /var/log/messages ou UDP:514. Fontes são classificadas em

tipos de fontes, que podem ser bem conhecidas, como access_combined (servidores de

log web) ou podem ser criados na hora quando o Splunk vê uma nova fonte de dados e a

está formatando. Eventos com o mesmo tipo de fonte pode vir com diferentes fontes -

123

eventos do arquivo /var/log/messages e da entrada de syslog udp:514 podem ser

colocados no sourcetype=linux_syslog.

Hospedeiros

Um hospedeiro é o nome do dispositivo físico ou virtual de onde vem um evento.

Hospedeiros proporcionam uma forma fácil de juntar todos os eventos vindos de uma

única maquina.

Índices

Quando você adiciona dados ao Splunk, o Splunk processa ele, quebrando os dados em

eventos individuais, adiciona estampas de tempo as eventos, e armazena eles em um

índice para que os dados possam ser buscados e analisados posteriormente. Por padrão,

dados que você der ao Splunk são armazenados no índice main, mas você pode criar e

especificar outros índices para o Splunk usar para diferentes entradas de dados.

Campos

Campos são pares procuráveis de nome/valor dentro dos dados do evento. Enquanto o

Splunk processa os eventos na hora de indexar e na hora de buscar, ele automaticamente

extrai os campos. Na hora de indexar, o Splunk extrai um pequeno conjunto de campos

padrão para cada evento, incluindo o host, source e o sourcetype. Na hora da busca, o

Splunk extrai uma grande gama de campos dos dados do evento, incluindo padrões

definidos pelo usuário em pares de nome/valor óbvios como userid=jdoe.

Etiquetas

Etiquetas são apelidos para os valores dos campos. Por exemplo, se dois nomes de

hospedeiro se referirem ao mesmo computador, você pode dar a ambos os valores a

mesma etiqueta (por exemplo hal9000). Quando você buscar por tag=hal9000, o

Splunk retorna os eventos envolvendo ambos os valores de hospedeiro.

Tipos de Eventos

Tipos de eventos são etiquetas dinâmicas associadas a um evento, se ele se encaixar nos

requisitas da busca do tipo de evento. Por exemplo, se você definir um tipo de evento

chamado problem com a definição da busca como error OR warn OR fatal OR fail,

sempre que o resultado de uma busca error, warn, fatal ou fail, o evento tem um par de

campo/valor eventtype com eventtype=problem. Se você estiver procurando por login,

os logins com problemas serão anotados como eventtype=problem. Tipos de eventos

são uma forma de busca por referencias cruzadas em eventos na hora de buscar.

Reportagens e Quadros

Resultados de uma busca com informação de formatação (como uma tabela ou quadro)

são informalmente referidos como reportagens e múltiplas reportagens podem ser

colocadas em uma página em comum, chamada quadro.

124

Apps

Apps são uma coleção de configurações do Splunk, objetos e códigos. Os Apps

permitem que você construa diferentes ambientes que se baseiam no Splunk. Você pode

ter um app para lidar com problemas em um servidor de e-mail, um outro app para

análise web, etc.

Permissões/Usuários/Funções

Objetos salvos no Splunk, como as savedsearches, os eventtypes, as reports e as tags,

enriquecem os seus dados, fazendo eles mais fáceis de buscar e entender. Estes objetos

tem permissões e podem ser mantidos privados ou compartilhados com outros usuários

a partir de suas funções (como administrador, reforço ou usuário). Uma função é um

conjunto de capacidades que você define, como se uma função em particular pode

adicionar dados ou editar um relatório. O Splunk com licença livre não suporta

autenticação de usuários..

Transações

Uma transação é um grupo de eventos considerados como um para facilitar a análise.

Por exemplo, por um usuário de um sistema de compras online gerar múltiplos eventos

de acesso web com o mesmo ID de sessão, por ser conveniente agrupar todos estes

eventos em uma transação. Com um eventos de transação, é mais fácil gerar estatísticas

como por quanto tempo o cliente ficou fazendo as compras, quantos itens ele comprou,

que compradores compraram itens e devolveram, etc.

Despachante/Indexador

A despachante(forwarder)

para o indexador central do Splunk ou para um grupo de

indexador dispõe a capacidade de indexação para dados locais e remotos.

SPL

Uma busca é uma série de comandos e argumentos, encadeados com um caractere de

barra (|) que pega a saída de um comando e alimenta o próximo.

search-args | cmd1 cmd

Comandos de Busca são usados para pegar os dados indexados e filtrar informação não

desejada, extraindo mais informações, calculando valores, transformam

estatisticamente analisa os resultados. Os resultados da busca que são recuperados dos

índices podem ser pensados como uma tabela criada de forma dinâmica. Cada comando

Despachante/Indexador

despachante(forwarder) é uma versão do Splunk que permite que você envie d

central do Splunk ou para um grupo de indexadores(indexer)

dispõe a capacidade de indexação para dados locais e remotos.

é uma série de comandos e argumentos, encadeados com um caractere de

que pega a saída de um comando e alimenta o próximo.

args | cmd1 cmd-args | cmd2 cmd-args | ...

são usados para pegar os dados indexados e filtrar informação não

desejada, extraindo mais informações, calculando valores, transformam

estatisticamente analisa os resultados. Os resultados da busca que são recuperados dos

índices podem ser pensados como uma tabela criada de forma dinâmica. Cada comando

125

é uma versão do Splunk que permite que você envie dados

indexadores(indexer). Um

é uma série de comandos e argumentos, encadeados com um caractere de

são usados para pegar os dados indexados e filtrar informação não

desejada, extraindo mais informações, calculando valores, transformam eles e

estatisticamente analisa os resultados. Os resultados da busca que são recuperados dos

índices podem ser pensados como uma tabela criada de forma dinâmica. Cada comando

126

de busca redefine a forma da tabela. Cada evento indexado é uma linha, com colunas

para cada valor. Colunas podem incluir informações básicas sobre os dados extraídos

dinamicamente na hora da busca.

No cabeçalho de cada busca está um comando de busca-por-eventos-no-índice

implícito, que poderia ser usado para buscar por palavras chave (como error),

expressões booleanas (como (error OR failure) NOT success), frases (como “database

error”), coringas (como fail* que se encaixa com fail, fails e failure), valores de campos

(como code=404), diferenças (como code!=404 ou code>200), um campo tendo

qualquer valor ou valor nenhum (como code=* ou NOT code=*). Por exemplo, esta

busca:

sourcetype=”access_combined” error | top 10 uri

recupera os eventos indexados no access_combined do disco que contenham a palavra

error (os AND está implícito na busca), e então para estes eventos, reportar os 10 valore

de URI mais comuns.

Sub-pesquisas

Uma sub-pesquisa é um argumento para um comando que faz a sua própria busca,

retornando estes resultados para o comando pai como valores de um argumento. Sub-

pesquisas são encapsuladas em colchetes. Por exemplo, este comando encontra todos os

eventos do syslog do usuário com que teve o último erro de login:

sourcetype=syslog [search login error | return user]

Note que a sub-pesquisa retorna só um valor de usuário pois por padrão o comando

return retorna somente um valor, apesar de que existem opções para ele retornar mais

valores (como | return 5 user).

Modificadores de Tempo Relativos

Apesar de usar janelas de tempo customizadas na interface de usuário, você pode

especificar em suas buscas a janela de tempo dos eventos recuperados com os

modificadores de busca latest e earliest. Os tempos relativos são especificados com um

conjunto de caracteres que indicam a janela de tempo (inteiros e unidades) e,

opcionalmente, uma unidade tempo arredondada:

[+|-]<time_integer><time_unit>@<snap_time_unit>

Por exemplo, error earliest=-1d@d latest=-1h@h recupera eventos contendo o error

que de ontem (cortado a meia noite) até a última hora (certado pela hora).

Unidades de Tempo: Especificado como segundo (s), minuto (m), hora (h), dia (d),

semana (w), mês (mon), quarto (q) ou ano (y). O valor precedente é por padrão 1 (como

o m é o mesmo que 1m).

Corte: Indica a aproximação do a qual o tempo que você pode usar para o

arredondamento. O corte arredonda para o tempo mais recente que não seja depois do

tempo especificado. Por exemplo, se agora for 11:59:00 e você quer ”cortar” por horas

(@h), você corta para 11:00, não 12:00. Você pode cortar para um dia da semana,

também; use o @w0 para Domingo,

COMANDOS COMUNS DE BUSCA

), você corta para 11:00, não 12:00. Você pode cortar para um dia da semana,

para Domingo, @w1 para Segunda, e assim vai.

COMANDOS COMUNS DE BUSCA

127

), você corta para 11:00, não 12:00. Você pode cortar para um dia da semana,

Otimizando Buscas

A chave para uma busca mais rápida é limitar os dados que são lidos no disco para o

mínimo possível e então filtrar os dados o mais cedo o

processar a menor quantidade de dados.

Particione os dados em índices se você raramente faz buscas através de múltiplos tipos

de dados. Por exemplo, coloque os dados da web em um índice e os dados do firewall

em outro.

Mais dicas:

• Procure especificamente o que você quer (

• Limite a janela de tempo da busca (como

• Filtre os campos desnecessários o mais cedo o possível..

• Filtre os resultados o mais cedo o possível antes de fazer os

• Para busca que geram reportagens, use a visão de

Avançado), e não a visão de

• Desligue o botão de

necessário.

• Use os índices do sumário para

• Certifique-se de que o I/O do seu disco é o mais rápido que você tem disponível.

EXEMPLOS DE BUSCA

A chave para uma busca mais rápida é limitar os dados que são lidos no disco para o

mínimo possível e então filtrar os dados o mais cedo o possível para conseguir

processar a menor quantidade de dados.

Particione os dados em índices se você raramente faz buscas através de múltiplos tipos

de dados. Por exemplo, coloque os dados da web em um índice e os dados do firewall

Procure especificamente o que você quer (fatal_error, não *error*).

• Limite a janela de tempo da busca (como -1h e não -1w).

• Filtre os campos desnecessários o mais cedo o possível..

• Filtre os resultados o mais cedo o possível antes de fazer os cálculos.

• Para busca que geram reportagens, use a visão de Advanced Charting(Gráfico

, e não a visão de Timeline(Linha do Tempo), que calcula linhas do tempo.

• Desligue o botão de Field Discovery(Descoberta de Campos) quando não for

• Use os índices do sumário para pré calcular os valores mais comumente usados.

se de que o I/O do seu disco é o mais rápido que você tem disponível.

EXEMPLOS DE BUSCA

128

A chave para uma busca mais rápida é limitar os dados que são lidos no disco para o

possível para conseguir

Particione os dados em índices se você raramente faz buscas através de múltiplos tipos

de dados. Por exemplo, coloque os dados da web em um índice e os dados do firewall

Advanced Charting(Gráfico

, que calcula linhas do tempo.

quando não for

os valores mais comumente usados.

se de que o I/O do seu disco é o mais rápido que você tem disponível.

129

130

131

FUNÇÔES EVAL

O comando eval calcula uma expressão o coloca o resultado em um campo (com

eval force = mass * acceleration”

entende, em adição dos operadores

strings (como ‘...| eval

NOT XOR < > <= >= != = == LIKE).

Tabela de Funções do EVAL

calcula uma expressão o coloca o resultado em um campo (com

eval force = mass * acceleration”). A seguinte tabela lista as funções que o

entende, em adição dos operadores aritméticos básicos (+ - * / %), concatenação de

name = last . “, “ . last’) e operações booleanas (AND OR

XOR < > <= >= != = == LIKE).

132

calcula uma expressão o coloca o resultado em um campo (com “...|

). A seguinte tabela lista as funções que o eval

* / %), concatenação de

) e operações booleanas (AND OR

133

134

135

136

FUNÇÕES COMUNS DO STATS

Funções estatísticas comuns como

campos podem ser feitos de coringas

campos delay e xdelay.

FUNÇÕES COMUNS DO STATS

Funções estatísticas comuns como os comandos chart, stats e timechart. Os nomes

campos podem ser feitos de coringas, então avg(*delay) pode calcular a média dos

137

Os nomes dos

pode calcular a média dos

EXPRESSÕES REGULARES

Expressões regulares são úteis em várias áreas, incluindo nos comandos de busca

e rex; funções do eval como

EXPRESSÕES REGULARES

Expressões regulares são úteis em várias áreas, incluindo nos comandos de busca

como match() e replace(); e na extração de campos..

138

Expressões regulares são úteis em várias áreas, incluindo nos comandos de busca regex

FUNÇÕES COMUNS DO STRPTIME DO SPLUNK

As formatações strptime são

estampando o tempo nos dados dos eventos.

FUNÇÕES COMUNS DO STRPTIME DO SPLUNK

As formatações strptime são úteis para as funções do eval strftime() e strptime()

estampando o tempo nos dados dos eventos.

139

strptime() e

140