Visualizações Avançadas e Administração
Aula 5 de 5
Vega/Vega-Lite — Visualizações Customizadas
Vega e Vega-Lite são gramáticas visuais declarativas que permitem criar visualizações totalmente customizadas no Kibana.
Vega-Lite — Sintaxe Simplificada
json { "": "https://vega.github.io/schema/vega-lite/v5.json", "title": "Vendas por Categoria", "data": { "url": { "%context%": true, "%timefield%": "@timestamp", "index": "produtos", "body": { "size": 0, "aggs": { "categorias": { "terms": { "field": "categoria", "size": 10 }, "aggs": { "receita": { "sum": { "field": "preco" } } } } } } }, "format": { "property": "aggregations.categorias.buckets" } }, "encoding": { "x": { "field": "key", "type": "nominal", "title": "Categoria" }, "y": { "field": "receita.value", "type": "quantitative", "title": "Receita" } }, "layer": [ { "mark": { "type": "bar", "color": "#4bc0c0" } }, { "mark": { "type": "text", "dy": -5, "color": "black" }, "encoding": { "text": { "field": "receita.value", "type": "quantitative", "format": "$,.0f" } } } ] }
Vega — Controle Total
json { "": "https://vega.github.io/schema/vega/v5.json", "title": "Dashboard Interativo", "data": [ { "name": "vendas", "url": { "%context%": true, "%timefield%": "@timestamp", "index": "vendas", "body": { "size": 500, "query": { "match_all": {} }, "_source": ["data", "valor", "produto"] } }, "format": { "property": "hits.hits" } } ], "signals": [ { "name": "threshold", "value": 1000, "bind": { "input": "range", "min": 0, "max": 5000, "step": 100, "name": "Threshold de valor:" } } ], "marks": [ { "type": "symbol", "from": { "data": "vendas" }, "encode": { "enter": { "x": { "field": "_source.data", "type": "temporal" }, "y": { "field": "_source.valor", "type": "quantitative" }, "fill": [ { "test": "datum._source.valor > threshold", "value": "red" }, { "value": "steelblue" } ], "size": { "value": 100 } } } } ] }
Signals — Interatividade no Vega
json { "signals": [ { "name": "zoom", "value": 1, "bind": { "input": "range", "min": 0.5, "max": 5, "step": 0.1 } }, { "name": "filtro_categoria", "bind": { "input": "select", "options": ["", "eletronicos", "moveis", "livros"] } } ] }
Dashboard-only Mode
O Dashboard-only mode restringe usuários a apenas visualizar dashboards, sem acesso a edição ou configuração.
`yaml
kibana.yml — Modo restrito
Crie role com privilégios:
- dashboard: read
- visualization: read
- index_patterns: read
- discover: none
- canvas: none
- maps: none
Atribua a role "dashboard_viewer" a usuários não-admin
`
Reporting — Exportação
Configuração de Reporting
`yaml
kibana.yml
xpack.reporting.enabled: true xpack.reporting.capture.maxAttempts: 3 xpack.reporting.csv.maxSizeBytes: 10485760 xpack.reporting.queue.timeout: 120000 `
Exportar para PDF/PNG
`ash
Via UI: Dashboard > Share > PDF or PNG
Opções: layout (print/optimize), tamanho
Via API
POST kbn:/api/reporting/generate/pdf { "jobParams": { "objects": [ { "type": "dashboard", "id": "dashboard-id" } ], "title": "Relatório Mensal", "layout": { "id": "print" } } }
Verificar status
GET kbn:/api/reporting/jobs/download/{jobId}
Download
GET kbn:/api/reporting/jobs/download/{jobId}?format=pdf `
Exportar CSV
`ash
Discover > Share > CSV
Via API:
POST kbn:/api/reporting/generate/csv { "jobParams": { "searchSourceId": "search-id", "columns": ["timestamp", "status", "mensagem"], "title": "Exportação de Logs" } } `
Spaces — Multi-tenancy
Spaces permitem criar workspaces isolados dentro do Kibana.
`json // Criar space POST kbn:/api/spaces/space { "id": "financeiro", "name": "Financeiro", "description": "Dashboards e relatórios do financeiro", "color": "#00bfb3", "initials": "FN", "disabledFeatures": ["apm", "ml", "canvas", "security"] }
// Atribuir feature visibility POST kbn:/api/spaces/space { "id": "devops", "name": "DevOps", "description": "Monitoramento de infraestrutura", "disabledFeatures": ["siem", "canvas", "discover"] } `
Dev Tools — Console e Ferramentas
Console
Console é um playground interativo para APIs do Elasticsearch:
`json // Exemplo de requisição no Console GET /produtos/_search { "query": { "match": { "nome": "notebook" } } }
// Múltiplas requisições PUT /teste {} `
Painless Lab
Painless Lab permite testar scripts Painless:
painless // Exemplo: cálculo de desconto double preco = doc['preco'].value; double desconto = params.desconto; return preco * (1 - desconto / 100);
Search Profiler
Search Profiler analisa performance de queries:
json // Execute query com profiler GET /produtos/_search { "profile": true, "query": { "match": { "nome": "notebook" } } }
Grok Debugger
Grok Debugger ajuda a criar e testar padrões Grok para parsing de logs:
`ash
Entrada de exemplo
192.168.1.1 GET /index.html 200 1234
Padrão Grok
%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:status} %{NUMBER:bytes} `
Saved Objects — Export/Import
`ash
Exportar todos objetos de um space
POST kbn:/api/saved_objects/_export { "type": ["dashboard", "visualization", "index-pattern", "search"], "includeReferencesDeep": true }
Importar
POST kbn:/api/saved_objects/_import { "overwrite": true, "createNewCopies": false }
Body: multipart/form-data com arquivo .ndjson
`
Lab: Admin Dashboard Completo
`ash
1. Crie uma visualização Vega-Lite customizada
2. Configure um space "Financeiro" com features limitadas
3. Exporte um dashboard em PDF via API
4. Use o Console para testar queries do Elasticsearch
5. Teste o Search Profiler em uma query lenta
6. Crie um Grok pattern para log de acesso web
7. Exporte todos saved objects como .ndjson
curl -X POST "http://localhost:5601/api/reporting/generate/pdf"
-H "Content-Type: application/json"
-d '{"jobParams": {"objects": [{"type": "dashboard", "id": "meu-dashboard"}], "layout": {"id": "print"}}}'
`
Vega, Spaces, Reporting e Dev Tools elevam o Kibana de ferramenta de visualização a plataforma completa de análise, multi-tenancy e administração.