Elastic Btracker

De MSTECH wiki
Ir para: navegação, pesquisa

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)

(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.

PUT http://192.168.44.3:9200

{
  "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.