Splunk + Docker + Serilog + C#
Com o Splunk você pode pesquisar, monitorar e analisar dados.
Veja em…
Nesse post vamos subir o Splunk no Docker, gravar log, pesquisar e montar um gráfico.
Docker
Você pode obter o docker no link abaixo:
Caso queira se aprofundar na CLI segue…
Caso precise de mais detalhes sobre a instalação no Mac, Linux ou Windows, segue…
Nosso primeiro passo é criar o arquivo docker compose para subirmos o container com o Splunk, veja abaixo:
version: "3.6"
services:
so1:
image: splunk/splunk:latest
container_name: so1
environment:
- SPLUNK_START_ARGS=--accept-license
- SPLUNK_HEC_TOKEN=abcd1234
- SPLUNK_PASSWORD=123456
ports:
- 8000:8000
- 8088:8088
A primeira consideração a fazer é, veja que além da porta 8000, é importante também mapear a porta 8088, ela é usada para a captura de dados via service collector. E você pode dar um nome diferente para seu container.
Já a variável SPLUNK_HEC_TOKEN nesse momento é opcional, após subir o container você incluir o token diretamente pela interface web.
Salve o arquivo com o nome docker-compose.yml. Após isso abre seu console, entre no diretório onde se encontra o arquivo e digite o comando…
docker-compose up
No seu console será listado uma série de comandos para subir o container. Para conferir os detalhes do container, abra uma nova aba no seu console o comando abaixo…
docker container ps
Com o container em execução abra seu navegador e digite…
http://localhost:8000/
Você vera a pagina inicial do Splunk. Entre com o usuário admin e senha que você definiu no docker-compose.yml
Ao fazer o login você verá a página inicial do Splunk.
Agora iremos criar um novo token HEC para usar o service collector. Siga o caminho Settings > Monitor > HTTP Event Collector. No formulário que aparece digite o nome do token, os demais campos são opcionais, clique em Next > Review > Submit. O token irá aparecer no campo Token Value, copie e guarde. Veja o caminho com as imagens abaixo…
Você pode verificar seus tokens criados no seguinte caminho, Settings > Data Inputs > HTTP Event Collector.
Um alteração que iremos fazer para nosso exemplo é desabilitar o SSL. Na página onde os tokens são exibidos, clique no botão Global Settings conforme imagem acima e desabilite o SSL, conforme imagem abaixo…
Após essa alteração, você pode criar uma aplicação para gravar no Splunk. Para esse exemplo criei uma aplicação Console no Visual Studio, nós iremos utilizar o Serilog para enviar logs para o Splunk, para isso instale o seguintes pacotes…
<package id="Serilog" version="2.12.0" />
<package id="Serilog.Enrichers.Context" version="4.6.0" />
<package id="Serilog.Sinks.PeriodicBatching" version="2.3.0" />
<package id="Serilog.Sinks.Splunk" version="3.7.0" />
Para saber saber mais sobre o Serilog e logs no Splunk veja…
Após isso, na sua aplicação você pode criar um método parecido com o que segue abaixo…
class Program
{
static void Main(string[] args)
{
try
{
Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.WriteTo.EventCollector("http://localhost:8088/services/collector", "5692bf5b-bd30-46dd-b7fd-6d832debb754")
.CreateLogger();
var log = new Logs() { Sistema = "Sistema1", Data = DateTime.Now, StackTrace = "StackTrace", Messagem = "Mensagem" };
var objLog = JsonConvert.SerializeObject(log);
Log.Logger.Information(objLog);
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.WriteLine("");
Console.WriteLine(ex.StackTrace);
Console.ReadLine();
}
}
}
Não esqueça de incluir o seu token no método EventCollector().
Após você pode conferir seu log no diretamente no Splunk.
Veja que no campo de pesquisa eu digitei source=”http:novotoken”, porém a linguagem do Splunk a Search Processing Language (SPL) é bastante vasta. Você pode começar a aprender mais em…
Com um pouco de pesquisa você irá encontrar muitas páginas e tutoriais dedicados a explicar a SPL.
Dashboard
Para criarmos o Dashboard, considere o cenário em que esteja gravando um array de objetos JSON para montar o seu gráfico, existem diversos cenários para isso. Vou montar um exemplo genérico, mas você pode adaptar facilmente para seu cenário.
Criei classe Analise e preenchi da seguinte forma…
var sistema = new List<Analise>
{
new Analise() { Sistema = "Sistema2", Data = DateTime.Now, Descricao = "Acessos", Total = 15 },
new Analise() { Sistema = "Sistema2", Data = DateTime.Now, Descricao = "Erros", Total = 7 },
new Analise() { Sistema = "Sistema2", Data = DateTime.Now, Descricao = "Finalizados", Total = 22 },
new Analise() { Sistema = "Sistema2", Data = DateTime.Now, Descricao = "Devolvidos", Total = 3 },
};
E gravei no Splunk usando o Serilog…
Repare que o JSON gravado é uma string, e não objeto JSON gravado diretamente no Splunk. Se fosse um objeto JSON a query para montar uma tabela seria extremamente simples, ficaria algo como…
YOUR_SEARCH | table Descricao Total
Porém nesse caso a query fica um pouco mais complicada, segue abaixo…
YOUR_SEARCH
| eval Response=MessageTemplate
| eval x=ltrim(Response,"[")
| eval n=rtrim(x, "]")
| eval temp=split(n,"},")
| mvexpand temp
| eval y=ltrim(temp,",")
| eval testData=mvindex(y,-1)
| rex field=testData Descricao\"\:\"(?<Descricao>\w+)
| rex field=testData \"Total\":(?<Total>\d+)
| table Descricao, Total
Repare que, primeiramente tratamos a string, é feito também um split para quebrar em várias linhas, após isso, usamos regex para obter os campos que queremos, então com o comando table exibimos o resultado…
Temos o cenário onde os dados com essa estrutura podem ser gravados minuto a minuto por exemplo, nesse caso com essa query, você verá uma tabela com os itens repetidos, para realizar a soma e obter o total utilize a query abaixo, com modificação na última linha.
YOUR_SEARCH
| eval Response=MessageTemplate
| eval x=ltrim(Response,"[")
| eval n=rtrim(x, "]")
| eval temp=split(n,"},")
| mvexpand temp
| eval y=ltrim(temp,",")
| eval testData=mvindex(y,-1)
| rex field=testData Descricao\"\:\"(?<Descricao>\w+)
| rex field=testData \"Total\":(?<Total>\d+)
| stats sum(Total) as Total by Descricao
Agora podemos criar o Dashboard a partir dessa query. Vá em Dashboard > Create New Dashboard > Preencha Dashboard Title > Selecione Classic Dashboard > Create.
Irá aparece um Dash vazio, basta adicionar um Painel.
Cole a query e clique em Add to Dashbord…
Veja o resultado abaixo…
Com isso você pode personalizar o Dashboard, alterar a query e fazer algumas outras modificações, você adicionar outros gráficos e etc.
Para saber mais sobre a criação de Dashboard no Splunk veja…
E existem diversos outros tutorais na web!
Espero que tenha curtido e até a próxima!!
Abraços.