Elastic Btracker
Índice
Ambientes
Configuração: Tabela PARAMETRO do BlueMonitor
https://wiki.mstech.com.br/index.php/BlueMonitorAPI#Inventory
Aplicativos úteis
Sense - Google Chrome https://chrome.google.com/webstore/detail/sense-beta/lhjgkmllcaadmopgmanpapmpjgmfcfig
Plugin client rest, parecido com o PostMan, facilita as queries para o elasticSearch
Criando mapeamento (estrutura do índice)
Criando o índice chamado "bluemonitor", e o mapeamento chamado "report":
no Sense:
URL: http://192.168.46.12:9200 Body:
PUT bluemonitor { "aliases": {}, "mappings": { "report": { "properties": { "activeWindowName": { "type": "keyword" }, "activeWindowTitle": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "diretoriaID": { "type": "keyword" }, "diretoriaName": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "finalUseTimeStamp": { "type": "date" }, "macAddress": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "peopleName": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "processList": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "schoolID": { "type": "keyword" }, "schoolName": { "type": "keyword" }, "systemOSVersion": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "timeSpent": { "type": "long" }, "userName": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "userType": { "type": "keyword" } } } } }
Gravando um documento no formato Btracker no Elastic
Server (url): http://192.168.46.12:9200/
Body:
POST /bluemonitor/report { "userName": "marriely.garcia", "peopleName": "", "processList": null, "activeWindowName": "chrome", "activeWindowTitle": "Guia para geração de relatórios de bugs do Youtrack - MSTECH wiki - Google Chrome", "macAddress": "00:00:00:00:00:00:00:E0 | 78:2B:CB:C3:1E:55 | 00:00:00:00:00:00:00:E0 | 00:15:5D:C4:73:C5 | ", "finalUseTimeStamp": "2016-11-24T09:15:31Z", "timeSpent": 1, "systemOSVersion": "Windows 8.1 6.3", "schoolID": "30333", "schoolName": "ESCOLA DA VIDA ", "schoolNameCode": "30333|||ESCOLA DA VIDA ", "diretoriaID": "20111", "diretoriaName": "BONIFACIO", "userLogin": "Emerson", "userType": "aluno" }
Apagando todos os documentos do mapeamento
Server (url): http://192.168.46.12:9200 body:
DELETE bluemonitor
Listando registros (GET)
- no browser: http://192.168.46.3:9200/bluemonitor/report/_search
- no Sense:
(o sense considera os espaços e quebras de linha, caso tenha algo errado, ele não dá o comando)
GET bluemonitor/report/_search { "query": { "match_all": {} } }
Correção Erros
Caso o serviço não esteja iniciando, verificar primeiro:
1 - services.msc -> Serviço Elastic está iniciado?
1a - Se iniciar, atualize a tela do services.msc algumas vezes com o F5, se ele parar de rodar, é porque pode estar com incompatibilidade de IPs.
2 - Abrir o arquivo "elasticsearch.yml" NO WORDPAD (NÃO USAR NOTEPAD) em Elastic\config, vá para a última linha, verifique o IP, e se o mesmo pode ser usado. é o IP de saída, por onde as outras máquinas vão acessar o server elastic.
3 - Ir nas configurações de rede: Painel de Controle\Rede e Internet\Conexões de Rede
localize a rede ativa atual, botão direito -> Propriedades -> Protocolo TCP/IP Versão 4 (TCP/IPv4) -> Propriedades.
4 - Marcar: "usar o seguinte endereço de IP"; a - Endereço IP: (o mesmo do elasticsearch.yml): ex: 192.168.46.12 b - Máscara de sub-rede: 255.255.255.0 c - 192.168.46.1 d - Usar os seguintes endereços de servidor DNS -> servidor dns preferencial: 192.168.250.1
Caso não funcione, ou você não saiba o IP correto de saída, consulte o GTI.
Introdução (Histórico e-mails)
Em 8 de fevereiro de 2017 13:36, Thiago Froes <thiago.froes@mstech.com.br> escreveu: Olá Casella, tudo bem?
Segue abaixo a estrutura do índice que criamos nos ambiente de homologação e produção que obtiveram sucesso na execução dos relatórios:
/*******************************************************************************/ Criar Indice /*******************************************************************************/ PUT bluemonitor { "aliases": {}, "mappings": { "report": { "properties": { "activeWindowName": { "type": "keyword" }, "activeWindowTitle": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "diretoriaID": { "type": "keyword" }, "diretoriaName": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "finalUseTimeStamp": { "type": "date" }, "macAddress": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "peopleName": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "processList": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "schoolID": { "type": "keyword" }, "schoolName": { "type": "keyword" }, "systemOSVersion": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "timeSpent": { "type": "long" }, "userName": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "userType": { "type": "keyword" } } } } }
Obrigado
2016-12-27 17:50 GMT-02:00 André Ruz <andre.ruz@mstech.com.br>:
Depois que o Casella enviou pra mim o commando put que o btracker gera, suportando também o json que o Antônio enviou no e-mail abaixo:
PUT: http://10.17.15.150:9200/bluemonitor
{ "mappings":{ "report":{ "properties":{ "finalUseTimeStamp":{ "format":"dateOptionalTime", "type":"date" }, "processList":{ "index":"not_analyzed", "type":"string" }, "timeSpent":{ "type":"keyword" }, "peopleName":{ "index":"not_analyzed", "type":"string" }, "systemOSVersion":{ "index":"not_analyzed", "type":"string" }, "diretoriaID":{ "index":"not_analyzed", "type":"keyword" }, "userName":{ "index":"not_analyzed", "type":"string" }, "schoolNameCode":{ "index":"not_analyzed", "type":"string" }, "activeWindowName":{ "index":"not_analyzed", "type":"string" }, "activeWindowTitle":{ "index":"not_analyzed", "type":"string" }, "userLogin":{ "index":"not_analyzed", "type":"string" }, "macAddress":{ "index":"not_analyzed", "type":"string" }, "diretoriaName":{ "index":"not_analyzed", "type":"string" }, "schoolID":{ "index":"not_analyzed", "type":"keyword" }, "userType":{ "index":"not_analyzed", "type":"keyword" }, "schoolName":{ "index":"not_analyzed", "type":"string" } } } } }
A configuração ocorreu com sucesso. Ainda temos pendente de um problema com um dos filtros que no nosso ambiente de backup funciona, mas na homologação ainda não deu certo. Fora isso, o retorno aparentemente mostrado na página foi realizado com sucesso.
André Ruz
Estratégias Tecnológicas
Cel. +55 14 98809-8569
Tel. +55 14 3235-5500
mstech [ www.mstech.com.br ]
Antes de imprimir, pense em sua responsabilidade com o meio ambiente
De: Bruno Fernandes Casella [1] Enviada em: terça-feira, 27 de dezembro de 2016 16:16 Para: André de Oliveira Ruz <andre.ruz@mstech.com.br> Cc: Thiago Favarin Froes <thiago.froes@mstech.com.br> Assunto: Re: Re: Bluemonitor - Relatórios de uso de aplicações (btracker)
Apenas para deixar claro que configurar o elastic apenas com o comando do PUT do email, vai dar erro.
Bruno Fernandes Casella Desenvolvimento Diretoria de Operações
Tel. (14) 3235-5500 - Ramal 5590 mstech [ www.mstech.com.br ] Antes de imprimir, pense em sua
responsabilidade com o meio ambiente
2016-12-27 12:17 GMT-02:00 André de Oliveira Ruz <andre.ruz@mstech.com.br>:
Mensagem original --------
Assunto:
Re: Bluemonitor - Relatórios de uso de aplicações (btracker)
Data:
05/12/2016 12:36
De:
Antonio Filho <antonio.filho@mstech.com.br>
Para:
Arnaldo Gerner Rosa <arnaldo.gerner@mstech.com.br>, andre.ruz@mstech.com.br
ERRATA: Em MAPEAMENTO ELASTIC SEARCH, favor considere realizar o comando PUT com a URL contendo o índice bluemonitor, caso bluemonitor tenha sido o nome do índice escolhido. Exemplo: http://192.168.44.3:9200/bluemonitor
Em 05/12/2016 11:21, Antonio Filho escreveu:
Olá, bom dia.
Gerei a #38 e última versão do BlueMonitorSSO-Dev, versão 5.5.10.2. Publiquei esta versão no TS-IIS03. Para o pacote dessa nova versão faz-se necessário alterar o Web.config do Bluemonitor e mapear o índice e tipo utilizados no Elastic Search, assim como dizem as linhas abaixo.
WEB.CONFIG
No Web.config do Bluemonitor é necessário incluir a chave "urlElasticSearchBTracker" dentro da tag appSettings, e o valor dela deve ser a URL completa do servidor do Elastic Search, apontando para o índice utilizado pelo BTracker, e com o protocolo. Se o índice utilizado no Elastic Search se chama bluemonitor, e o serviço está em http://192.168.44.3:9200, a URL seria: http://192.168.44.3:9200/bluemonitor
<appSettings> <add key="urlElasticSearchBTracker" value="http://192.168.44.3:9200/bluemonitor"/> </appSettings>
MAPEAMENTO ELASTIC SEARCH
Quando o serviço do Elastic Search estiver respondendo por um IP e porta, por exemplo http://192.168.44.3:9200, se o índice escolhido se chamar bluemonitor e o tipo do documento btracker_app, então execute um comando PUT para a URL http://192.168.44.3:9200 com o JSON abaixo para mapear os dados e possibilitar a utilização dos "relatórios do btracker" no Bluemonitor.
{ "mappings": { "btracker_app": { "properties": { "diretoriaID": { "type": "keyword", "index": "not_analyzed" }, "schoolID": { "type": "keyword", "index": "not_analyzed" }, "userType": { "type": "keyword", "index": "not_analyzed" }, "timeSpent": { "type": "keyword" } } } } }
Abaixo estão algumas observações e notas que considero importantes e/o necessárias.
TESTES
Acredito que mais testes com volumes diferentes de dados deveriam ter sido executados, porém como o tempo não permitiu, a Halana e eu focamos em testar os relatórios com uma massa de dados que permitisse a análise e constatasse a precisão dos cálculos para o resultado esperado nos modelos propostos pelo requisito.
PERFORMANCE DO ELASTIC SEARCH
Tamanho do documento
Os documentos que estão sendo gerados e salvos no Elastic Search pelo BTracker tem atributos iguais aos que estão abaixo.
{ "userName": "marriely.garcia", "peopleName": "", "processList": null, "activeWindowName": "chrome", "activeWindowTitle": "Guia para geração de relatórios de bugs do Youtrack - MSTECH wiki - Google Chrome", "macAddress": "00:00:00:00:00:00:00:E0 | 78:2B:CB:C3:1E:55 | 00:00:00:00:00:00:00:E0 | 00:15:5D:C4:73:C5 | ", "finalUseTimeStamp": "2016-11-24T09:15:31Z", "timeSpent": 1, "systemOSVersion": "Windows 8.1 6.3", "schoolID": "30333", "schoolName": "ESCOLA DA VIDA ", "schoolNameCode": "30333|||ESCOLA DA VIDA ", "diretoriaID": "20111", "diretoriaName": "BONIFACIO", "userLogin": "Emerson", "userType": "aluno" }
Porém, para desenvolver todos os relatórios do BTracker, estou utilizando apenas as propriedades abaixo.
{ "activeWindowName": "chrome", "timeSpent": 1, "schoolID": "30333", "diretoriaID": "20111", "userType": "aluno" }
O propósito de cada atributo é:
"activeWindowName" = Identificar a aplicação que foi utilizada "timeSpent" = Contabilizar o tempo de utilização da aplicação em minutos "schoolID" = Identificar a escola pertencente a uma diretoria "diretoriaID": Identificar a diretoria de uma escola "userType": Identificar o tipo de usuário que utilizou a aplicação
Aconselho não salvar o restante do documento que não está sendo utilizado desde que não tenham planos de consultá-los mais tarde, para outros propósitos ou mesmo em relatórios, preferencialmente associados aos atributos que utilizei. O motivo é que não se preocupar com isso é um erro, visto que a indexação do Elastic Search pode consumir o disco rígido e memória RAM de maneira inapropriada, dependendo do volume de dados que armazena e utiliza, principalmente em operações de agregação e ordenação - que estão sendo utilizados nos relatórios do BTracker - e também pela falta de tempo em analisar se o Elastic Search está configurado adequadamente para a nossa necessidade de uso, como explica um pouco o próprio blog oficial da ferramenta: https://www.elastic.co/blog/elasticsearch-storage-the-true-story
Atualização automática de dados
Caso necessário mais tarde fazer com que o relatório seja atualizado automaticamente, definindo uma periodicidade de atualização, causando a sensação de que está trabalhando e exibindo dados em tempo real, o VueJS foi utilizado para agilizar o bind de dados na view, principalmente se forem desenvolvidos campos de pesquisa, filtros ou botões de ordenação, e comandos da api de pesquisa (_search) do Elastic Search estão sendo utilizados para diminuir o tráfego de dados na rede, e custo de processamento de dados no servidor do Bluemonitor e browser do cliente; o que não precisa ser mudado caso não seja necessário atualizar os dados periodicamente. Porém, para agilizar a abertura dos relatórios, faz-se necessário melhorar a consulta de dados ou mudar a estratégia de armazenamento de diretorias e escolas do Bluemonitor, pois os dados são cacheados após a primeira consulta, sempre que o usuário acessa o relatório pela primeira vez, após autenticar-se no sistema, mas o primeiro acesso é sempre muito lento.
Quaisquer dúvidas sobre como realizar os procedimentos acima, estou à disposição.
Att, Antônio Marcos
Comandos Python (DarthFaker)
App para gerar uma massa de dados em um índice pré-existente no server elastic.
Instalação
- baixar o Python v 2.7.13: https://www.python.org/ftp/python/2.7.13/python-2.7.13.msi - instalar
Compilando
Abrir o gitbash, ir na raiz da aplicação onde tem o arquivo __init__.py (exemplo)
ruz@MS-N2437 MINGW64 /c/Documents and Settings/ruz/Documents/Ruz/MSTECH/BlueMonitorapi/Inventario/elasticsearch/elasticsearch
, e digitar:
python __init__.py
caso venha a mensagem de erro de que não foi possível encontrar o nome 'python', talvez foi por causa da instalação, em que ele não ficou como variável de ambiente, então digite:
/c/Python27/python.exe __init__.py
Importando módulos externos
Caso dê erro de importação, é necessário importar o módulo. Ex:
Erro:
Traceback (most recent call last): File "__init__.py", line 5, in <module> from darthfaker import Faker
Executar o instalador de módulos externos do Python, o "easy_install.exe":
/c/Python27/Scripts/easy_install.exe elasticsearch
até acabar todos os erros.
Busca
No git bash, entrar na pasta raiz que será efetuada a busca e entrar:
$ grep -nir activeWindowName *
Neste exemplo, ele busca pelas ocorrências "activeWindowName" em todos os arquivos da pasta corrente e subpastas de onde está sendo executado.