GT-IMAV Manual da Aplicação - GT-IMAV - Segunda Fase
Transcrição
GT-IMAV Manual da Aplicação - GT-IMAV - Segunda Fase
GT-IMAV Manual da Aplicação Versão 1.12 Identificação do Documento Projeto GT-IMAV – Grupo de Trabalho em Instrumentação e Monitoração para Aplicações de Vídeo Cliente RNP Coordenador do projeto Regina Melo Silveira Controle de Versões Data Versão Responsável Alterações 10/06/2013 1.0 Lucas Chigami Versão Inicial 12/06/2013 1.1 Hélcio M. Pimentel Complementação 13/06/2013 1.2 Reinaldo Matushima Complementação e Revisão 24/09/2013 1.6 Hélcio M. Pimentel Atualização 24/09/2013 1.7 Lucas Chigami Complementação e Revisão 25/09/2013 1.8 Hélcio M. Pimentel Correções e Complementações 25/09/2013 1.9 Lucas Chigami Complementação e Revisão 29/09/2013 1.10 Reinaldo Matushima Revisão e complementação 30/09/2013 1.11 Lucas Chigami Complementação imagens 30/09/2013 1.12 Reinaldo Matushima Revisão 2 Sumário Lista de Figuras ................................................................................................................................................... 5 1. 2. Introdução .................................................................................................................................................. 6 1.1. Público Alvo ........................................................................................................................................ 7 1.2. Documentos relacionados ................................................................................................................. 8 1.3. Organização do documento ............................................................................................................... 8 Visão Geral ................................................................................................................................................. 9 2.1. 2.1.1. Base transacional ......................................................................................................................... 11 2.1.2. Base dimensional ......................................................................................................................... 12 2.2. 3. 4. Modelo de Dados ............................................................................................................................. 10 Módulos de Monitoração das aplicações ........................................................................................ 14 2.2.1. Módulo de Monitoração de Eventos do Player ....................................................................... 15 2.2.2. Módulo de Monitoração dos Eventos de página ..................................................................... 16 2.3. Módulo de Monitoramento do Servidor de Vídeo .......................................................................... 16 2.4. Módulo de Monitoramento do Transmissor de Vídeo .................................................................... 17 2.5. Módulo de Análise - Gráficos e Relatórios ....................................................................................... 18 2.6. Módulo de Gerenciamento de Aplicações ....................................................................................... 19 Integração / Desenvolvimento ................................................................................................................. 21 3.1. Módulo de Monitoração do Player .................................................................................................. 21 3.2. Módulo de Monitoração da Aplicação Web .................................................................................... 23 Instalação ................................................................................................................................................. 30 4.1. Agentes de Monitoramento de Eventos .......................................................................................... 30 4.1.1. Instalação dos Agentes de Monitoramento e do Componente RESTful Monitor Bridge ........ 31 4.1.2. Configuração dos Agentes de Monitoramento do Servidor e Transmissor ............................. 36 4.1.3. Configuração do protocolo SNMP ............................................................................................ 39 4.1.4. Configuração do componente RESTful Monitor Bridge ........................................................... 39 3 4.2. 4.2.1. Configuração do Coletor .......................................................................................................... 41 4.2.2. Módulo de Gerenciamento ...................................................................................................... 42 4.3. 5. Coletor.............................................................................................................................................. 41 Pentaho ............................................................................................................................................ 43 4.3.1. Utilização das ferramentas de Relatório .................................................................................. 43 4.3.2. Pentaho BI Server ..................................................................................................................... 44 4.3.3. Módulo Kettle........................................................................................................................... 46 Considerações .......................................................................................................................................... 48 Anexo I - Monitoramento por serviço SNMP de JDVoD e JDLive..................................................................... 49 Coleta de Informações de Transmissão de Vídeo .................................................................................... 49 Coleta de Informações de Máquina ......................................................................................................... 53 Referências ....................................................................................................................................................... 57 4 Lista de Figuras Figura 1 – Piloto fase 1 - Integração LMS ........................................................................................................... 6 Figura 2 – Piloto fase 2 – Integração Video@RNP ............................................................................................. 7 Figura 3 – Componentes do serviço de monitoração ...................................................................................... 10 Figura 4 - Base de dados transacional – Tabelas para armazenamento dos dados coletados ........................ 11 Figura 5 - Base de dados transacional – Tabelas para gerenciamento de aplicações monitoradas ................ 12 Figura 6 - Base de dados dimensional – Dimensões básicas........................................................................... 12 Figura 7 - Base de dados dimensional – Relação entre dimensões ................................................................ 13 Figura 8 - Base de dados dimensional – Tabelas Fato...................................................................................... 14 Figura 9 - Tela de Relatórios............................................................................................................................. 18 Figura 10 - Tela do Pentaho Report Design ...................................................................................................... 19 Figura 11 - Módulo de Gerenciamento – Clientes e aplicações....................................................................... 20 Figura 12 - Módulo de Gerenciamento - Parâmetros de uma aplicação ......................................................... 20 Figura 13 - Diagrama da arquitetura dos agentes de coleta dos dados de máquina e transmissor................ 31 Figura 14 - Tela do sistema de gerenciamento ................................................................................................ 42 Figura 15 - Tela de administração Pentaho ..................................................................................................... 43 Figura 16 - Tela de Exemplo da Interface WEB ................................................................................................ 44 Figura 17 - Tela Principal Pentaho ................................................................................................................... 45 Figura 18 - Tela de edição ................................................................................................................................ 46 Figura 19 - Tela da ferramenta Kettle .............................................................................................................. 47 5 1. Introdução O projeto GT-IMAV elaborou um conjunto de mecanismos e ferramentas que permitem monitorar e mensurar diferentes parâmetros para que seja possível ter uma a visão clara sobre a efetividade do consumo de vídeo, assim como estimar o chamado “viewer engagement”. Na primeira fase do projeto, as ferramentas desenvolvidas foram avaliadas dentro de um cenário de utilização do vídeo como um instrumento para o ensino/aprendizado. Para tal, foi realizada uma integração do serviço junto a uma ferramenta de Learning Management System (LMS) da USP. Neste primeiro piloto, testes foram realizados junto a grupos de alunos de forma a avaliar, fazendo uso do serviço, a efetividade do vídeo como material de apoio ao ensino. A Figura 1 apresenta uma ilustração simplificada da avaliação efetuada na primeira fase do projeto. Basicamente, a partir de alguns cenários controlados, foi feito um comparativo de absorção de conteúdo por parte das turmas (turma que teve acesso aos vídeos e turma de controle que não teve acesso ao ambiente). Figura 1 – Piloto fase 1 - Integração LMS Na segunda fase do projeto, focou-se na evolução das ferramentas desenvolvidas, trabalhando melhor a escalabilidade da solução e incorporando mecanismos de controle e ferramentas de gerenciamento para apoio à administração do serviço. Para validar o serviço proposto dentro de um cenário de uso da RNP, o piloto consistiu em integrar o serviço de monitoração desenvolvido ao serviço de vídeo da RNP, o Video@RNP. Para tal, os módulos de monitoração desenvolvidos foram integrados ao diferentes elementos que compõem a plataforma de vídeo da RNP, a saber, (1) portal de vídeo, para avaliar o comportamento de acesso ao vídeo 6 e (2) servidores e (3) transmissores, de forma a avaliar o uso da infraestrutura de distribuição de vídeo, permitindo cruzar assim informações de consumo dos usuários com informações de demanda de uso infraestrutura, possibilitando avaliar de forma mais ampla o serviço de vídeo. A Figura 2 ilustra a integração realizada. Figura 2 – Piloto fase 2 – Integração Video@RNP Este documento visa apresentar os principais passos para instalação do serviço desenvolvido. Nele são apresentados os passos necessários para a instalação dos diferentes módulos que compõem o serviço de monitoração. 1.1. Público Alvo Este documento destina-se tanto às pessoas que são responsáveis pelo gerenciamento dos conteúdos, para uma visão da sua aceitação, como administradores responsáveis pela operação da infraestrutura utilizada 7 pelo sistema de transmissão de vídeo, para uma visão de uso de recursos, além dos desenvolvedores das aplicações que desejem utilizar as ferramentas de monitoramento, instrumentando suas aplicações de vídeo. 1.2. Documentos relacionados 1) Proposta do GT-IMAV submetida à RNP; 2) Relatório de Planejamento - Detalhamento das atividades (RP1); 3) Relatório Técnico – Proposta de Protótipo (RT2); 4) Relatório Técnico – Validação do Protótipo (RT3); 5) Relatório de Planejamento - Detalhamento das atividades (RP5); 6) Relatório de Planejamento – Implantação Piloto (RP6). 1.3. Organização do documento Este documento está organizado em 5 capítulos, no capítulo 2 é realizada uma apresentação da visão geral do projeto. O capítulo 3 apresenta detalhamentos do desenvolvimento realizado e informações para integração dos módulos de monitoração. O capítulo 4 mostra os procedimentos para realizar a instalação e configuração para colocar o serviço em operação. Finalizando, o capítulo 5 apresenta informações com relação ao uso da ferramenta Pentaho de análise de dados e geração dos relatórios. 8 2. Visão Geral No projeto GT-IMAV foi elaborado, especificado e implementado um conjunto de módulos e ferramentas para realizar o monitoramento de vários aspectos de um sistema de distribuição de vídeo pela Internet. São eles: 1. Módulo de monitoração da aplicação: compreende plug-ins desenvolvidos para suportar a monitoração das páginas web com vídeos e o player de vídeo em si. Através destes plug-ins é possível monitorar detalhadamente o comportamento do usuário quanto ao consumo do vídeo; 2. Módulo de monitoramento do servidor de vídeo: permite avaliar informações dos servidores que compõem a infraestrutura de distribuição de vídeo. Ao cruzar informações de consumo com informações da infraestrutura, é possível correlacionar diversos parâmetros, fornecendo subsídios importantes para possibilitar a manutenção e operação adequada da infraestrutura; 3. Módulo de monitoramento do transmissor de vídeo: permite avaliar mais profundamente as condições de operação da infraestrutura de distribuição de vídeo. Avaliando os transmissores, dados detalhados como por exemplo, número de sessões ativas, permitem, juntamente com dados de monitoramento do servidor onde o transmissor opera, dar uma visão mais precisa sobre o nível de uso da rede de vídeo. Dados como ponto de saturação da rede podem ser acompanhados mais de perto, permitindo uma gerência mais ativa dos recursos, permitindo um provisionamento mais adequado de infraestrutura e consequentemente, melhor qualidade de experiência para o usuário final; 4. Receptor: módulo responsável por persistir as informações coletadas e enviadas por cada um dos módulos de monitoramento descritos previamente. Representa um dos pontos mais críticos da aplicação, por ser responsável por receber uma grande massa de informações. Ele é responsável basicamente por alguns controles de segurança e fazer a persistência das informações para que possam ser tratadas e analisadas em um segundo momento; 5. Kettle/Pentaho: correspondem a ferramentas que foram utilizadas na concepção do serviço para apoiar respectivamente no processo de tratamento das informações armazenadas pelo coletor e por processar as informações, permitindo a geração de relatórios de análise de consumo. 9 Figura 3 – Componentes do serviço de monitoração A Figura 3 ilustra cada um dos componentes descritos, exibindo como eles se relacionam. O intuito na concepção do projeto em desenvolvimento é a concepção de um serviço que permita ao mesmo tempo ser utilizado por: RNP: de forma a mensurar o consumo dos conteúdos do serviço Video@RNP, por meio de sua rede de distribuição de vídeo (RVD), fornecendo suporte a tomadas de decisões para a operação da rede e em novos investimentos para a infraestrutura; Universidades: como meio de avaliar a efetividade do uso de vídeo nas ações de ensino e aprendizagem, permitindo a definição de evoluções e melhorias nessas ações; TVs Universitárias (RITU) e TVs públicas: de modo a avaliar o consumo e aceitação de produções audiovisuais, com possibilidade de serem classificadas e usadas da melhor maneira por essas emissoras televisivas. 2.1. Modelo de Dados O serviço de monitoração é composto de dois bancos de dados: 1. Transacional: representa a base de dados onde são persistidas as informações coletadas pelos módulos de monitoração e persistidas pelo receptor. Representa um local de “passagem” onde os dados ficam antes de serem tratados e movidos para a base dimensional; 10 2. Dimensional: periodicamente os dados recebidos e armazenados na base de dados transacional são processados e movimentados para a base de dados dimensional. A base dimensional está estruturada de uma forma mais adequada para permitir a realização de análises sobre os dados monitorados. 2.1.1. Base transacional A base de dados transacional se caracteriza pela modelagem simplificada. Nela os dados são armazenados da forma “cru”, da mesma forma como são recebidos. Apesar da arquitetura de recepção ter sido concebida para ser o mais facilmente escalável possível, ela é um dos pontos críticos do serviço. Assim, o processo de persistência precisa ser simplificado de forma a ser realizado da forma mais rápida possível. Figura 4 - Base de dados transacional – Tabelas para armazenamento dos dados coletados A Figura 4 ilustra as tabelas utilizadas para persistência dos dados coletados. Segue detalhadamento das tabelas: 1. Infocollect_watch: representa a tabela onde é armazenada as informações de identificação dos dados recebidos (metadados principais, exemplo, identificação do usuário, vídeo e aplicação monitorada). Um novo registro é gerado para cada nova monitoração que é realizada. Associada a uma monitoração são armazenadas os dados complementares (Infocollect_auxdata) e eventos (Infocollect_eventinfo) e associados à nova monitoração; 2. Infocollect_auxdata: tabela utilizada para armazenar metadados adicionais em relação à monitoração realizada (cada aplicação pode enviar metadados adicionais conforme interesse); 3. Infocollect_eventinfo: corresponde à tabela onde são armazenados todos os eventos monitorados. É nesta tabela que são armazenados os dados monitorados em si (eventos de player, de página, informações de servidores e transmissores). 11 A base de dados transacional é composta de outras tabelas auxiliares, estas para uso interno do coletor. A seguir (Figura 5) são apresentadas as tabelas utilizadas para gerenciamento das aplicações monitoradas: 1. app_manager_client: utilizada para armazenar informações de clientes do serviço. Basicamente as instituições que foram usuárias do serviço; 2. app_manager_application: armazenamento de aplicações de vídeo monitoradas. Cada cliente pode ter diversas aplicações monitoradas (ex. USP é um cliente e tem duas aplicações monitoradas, o IPTV e o eAulas da USP); 3. app_manager_responsible: dados da pessoa responsável por cada aplicação monitorada. Figura 5 - Base de dados transacional – Tabelas para gerenciamento de aplicações monitoradas A base de dados transacional possui ainda algumas tabelas auxiliares de uso interno. 2.1.2. Base dimensional Após serem tratados pelo Kettle, os dados armazenados na base de dados transacional são movimentados para a base dimensional. Basicamente os dados da base transacional são analisados e salvos em um conjunto de tabelas específicas, de forma a facilitar a análise e geração de relatórios. A Figura 6 apresenta as tabelas dimensionais básicas. Consiste nas tabelas com dados referentes a cada dimensão monitorada. Figura 6 - Base de dados dimensional – Dimensões básicas As tabelas dimensionais básicas são: 1. dim_client: dados de identificação do cliente monitorado (ex. USP, Unicamp); 12 2. dim_application: identificação da aplicação monitorada (no caso da USP teríamos o IPTV e o eAulas, no caso da RNP o Video@RNP e o Videoaula@RNP); 3. dim_video: identificação do vídeo cuja visualização foi monitorada; 4. dim_user: identificação do usuário que visualizou o vídeo; 5. dim_streamer: identificação dos servidores de transmissão monitorados; 6. dim_host: identificação das máquinas monitoradas. Além destas tabelas dimensionais, há também algumas tabelas de relacionamento entre dimensões. Estas são apresentadas a seguir: Figura 7 - Base de dados dimensional – Relação entre dimensões 1. dim_client_application: relação das instituições clientes e as aplicações monitoradas; 2. dim_client_video: relação entre cada cliente e os vídeos monitorados; 3. dim_user_video: relação entre o usuário e o vídeo. Além das tabelas dimensionais, há também as tabelas fato. São as tabelas que contém os detalhes dos eventos monitorados. São elas: 1. fact_streamer: informações coletadas dos transmissores de vídeo (ex. número de sessões ativas); 2. fact_consuption: informações consolidadas sobre cada vídeo monitorado (seja informações obtidas da aplicação ou do player de vídeo); 3. fact_consumption_time: informações consolidadas sobre cada evento do vídeo monitorado, com a inclusão da informação do tempo de início e término de cada evento; 4. fact_host: informações coletadas das máquinas que compõem a infraestrutura de distribuição de vídeo (cpu, memória, etc.). 13 Figura 8 - Base de dados dimensional – Tabelas Fato 2.2. Módulos de Monitoração das aplicações Os eventos das aplicações de vídeos são monitorados por meio de dois plug-ins em JavaScript. Um deles, o Page Collect, é específico para monitoramento de ações na página em que o vídeo é exibido. Esse plug-in basicamente monitora eventos como, por exemplo, eventos de compartilhamento, de submissões de formulários para avaliações, comentários e enquetes, bem como de botões de gostar ou não gostar do vídeo. Com isso é possível verificar a interação do usuário com a aplicação do vídeo, extraindo informações quando ao engajamento do usuário. O outro plug-in, o Player Collect, é destinado a obter, junto ao player de vídeo, informações referentes a como o vídeo está sendo consumido (por exemplo, se o usuário está vendo em full screen, se o usuário fez seek no vídeo, se o vídeo está em mute, tempo para carregar o vídeo, etc.). Fazendo uso desses dois plug-ins é possível obter uma gama extensa de métricas de consumo, que são utilizadas para gerar uma série de análises e relatórios possíveis, com base em interesses dos usuários do serviço de monitoração. O nível de informações que pode ser obtido depende do nível de integração realizado. Os plug-ins permitem que as aplicações enviem informações adicionais de interesse, de forma que se possa gerar análises e relatórios mais avançados. 14 Outro ponto que depende das aplicações são os tipos de ferramentas disponibilizadas junto aos vídeos. O plug-in Page Collect prevê a coleta de informações diversas, tais como recomendações, votos em enquetes e avaliações, conforme mencionado. No entanto, para conseguir tais informações, é necessário que a aplicação possua tais ferramentas. Além disso, podem ser necessários ajustes para compatibilizar o plug-in à forma como cada ferramenta foi desenvolvida. 2.2.1. Módulo de Monitoração de Eventos do Player O player de vídeo representa o principal componente dentro de um sistema de vídeo, portanto um sistema de monitoração de vídeo não poderia deixar de capturar eventos que ocorrem nele. Para atingir esse fim, foi desenvolvido o plug-in Player Collect. Para o desenvolvimento desse plug-in, utilizou-se como referência um dos mais utilizados players gratuitos disponíveis atualmente, o jwPlayer[1]. Atualmente os seguintes eventos estão sendo monitorados pelo plug-in: Mouse Over Video: usuário passou o cursor sobre a área de vídeo; Mouse Left Video: usuário saiu com o cursor sobre a área de vídeo; User Left Video: a janela (ou aba) no navegador onde o vídeo está sendo executado passou a ser inativa; User Returned Video: a janela (ou aba) no navegador onde o vídeo está sendo executado passou a ser ativa; Video On Frame: o vídeo encontra-se enquadrado na tela do usuário (mais de 30% de sua altura); Video Out Of Frame: o vídeo encontra-se fora do enquadramento na tela do usuário (menos de 30% de sua altura); Buffer Change: indica quantitativamente em termos percentuais o carregamento do vídeo pelo player para a sua execução; Full Screen: indica que o usuário selecionou a exibição em tela cheia do vídeo; Mute: indica que o usuário selecionou o botão para cortar o áudio do vídeo; Play: indica que o usuário selecionou o botão para iniciar a reprodução do vídeo; Pause: indica que o usuário selecionou o botão para pausar a execução do vídeo; Seek: indica que o usuário selecionou manualmente, através da barra de execução do player de vídeo, um determinado trecho; Buffering State: indica a situação do carregamento do vídeo em buffer; Complete: indica que o player reproduziu totalmente o conteúdo do vídeo; Resize: indica a alteração das dimensões do vídeo; Meta Data Recovery: indica o envio do vídeo para o player das informações de metadados presentes no arquivo de vídeo; 15 Player Error: indica em caso de existência do erro e da mensagem referente a esse erro; Todos os eventos são monitorados e enviados para o coletor com o horário em que ocorreu o evento e o instante dentro do vídeo em que a informação foi coletada. 2.2.2. Módulo de Monitoração dos Eventos de página A página da aplicação Web pode apresentar algumas ferramentas de interação que permitam avaliar a qualidade do consumo de um vídeo. O plug-in responsável pela monitoração destes eventos, o Page Collect, foi desenvolvido de forma a ser genérico o suficiente para contemplar os principais elementos presentes nesse tipo de aplicação. São eles: Share: o compartilhamento (Share) trata os eventos referentes aos componentes específicos para o compartilhamento do conteúdo exibido através das redes sociais; Comment: os comentários (Comment) são os componentes muito presentes em qualquer aplicação de vídeo em que se pode deixar qualquer tipo de observação, análise, perguntas, ou qualquer tipo de informação na forma de texto; Eval: as avaliações (Evaluation) visam quantificar a qualidade de algum parâmetro, e no caso desta aplicação de validação foram escolhidos o conteúdo do vídeo e a qualidade da transmissão do mesmo; Poll: a enquete (Poll) baseia-se em um conjunto de perguntas em que cada uma dessas traz um conjunto de respostas, cabendo ao usuário respondê-las de acordo com o entendimento sobre o conteúdo do vídeo; Dislike: o “não gostei” (Dislike) corresponde a permitir ao usuário demonstrar que não gostou do vídeo; Like: o “gostei” (Like) corresponde a permitir ao usuário demonstrar que gostou do vídeo. Por fim, informações sobre a avaliação sobre o entendimento do conteúdo do vídeo são inseridas e enviadas por meio deste mesmo módulo. Além desses parâmetros, informações referentes ao perfil de usuário também podem ser enviadas por meio desse módulo, possibilitando análises e relatórios bem mais ricos. 2.3. Módulo de Monitoramento do Servidor de Vídeo As informações referentes aos servidores de distribuição de vídeo podem auxiliar tanto na análise do consumo dos fluxos de vídeo, bem como podem representar uma valiosa ferramenta de operação, monitoração e manutenção de um sistema (como suporte a dimensionamento adequado, etc.). Os parâmetros que foram levantados e analisados como relevantes a serem monitorados foram: Host Name: identificador da máquina a ser monitorada; 16 CPU Used: porcentagem de utilização do recurso de CPU; CPU Info: informações referentes à identificação da CPU, como modelo, fabricante; Memo Used: porcentagem de utilização do recurso de memória RAM; Memo Total Size: tamanho total de memória disponível, em KB; Memo Swap Used: porcentagem de utilização do recurso de memória SWAP; Memo Info: informações referentes à identificação da memória, como modelo, fabricante; Net Used: porcentagem de utilização do recurso de rede; Net Bandwidth: largura de banda total disponível, em Mbps; Disk Used: porcentagem de utilização do recurso de armazenamento em disco; Disk Total Size: tamanho total disponível de armazenamento em disco, em KB; Net RX: quantidade total, em bytes, de dados recebidos pela interface de rede; Net TX: quantidade total, em bytes, de dados transmitidos pela interface de rede; Net Info: identificação da interface de rede. O módulo responsável pela coleta desses parâmetros pode utilizar o protocolo SNMP[2] para realizar o monitoramento e coleta das informações desejadas, mas também permite tal acesso via HTTP. 2.4. Módulo de Monitoramento do Transmissor de Vídeo O transmissor de vídeo é o principal componente dentro da infraestrutura de um serviço de distribuição de vídeo, logo as informações monitoradas nele possuem um valor muito grande para a análise do desempenho do sistema como um todo. As informações que um transmissor monitora podem variar de acordo com a implementação do próprio transmissor de vídeo. Em nosso protótipo de serviço foram utilizados os transmissores (JDVoD e JDLive) desenvolvidos para o portal de vídeo da RNP, cujos parâmetros básicos disponíveis são: Host Name: identificador da máquina onde o transmissor está instalado; Session Num: quantidade total de sessões conectadas ao transmissor; Live Sessions: quantidade de sessões no modo “ao vivo” conectadas ao transmissor; VoD Sessions: quantidade de sessões no modo “sob demanda” conectadas ao transmissor; Live User Num: quantidade de usuários conectados ao transmissor sendo atendidos por sessões no modo “ao vivo”; VoD User Num: quantidade de usuários conectados ao transmissor sendo atendidos por sessões no modo “sob demanda”; RX: taxa de recepção de dados; TX: taxa de transmissão de dados; 17 Vale ressaltar que esse módulo possui compatibilidade com os transmissores desenvolvidos para o sistema Video@RNP junto ao LAVID[3], necessitando um mapeamento para os parâmetros definidos com as informações providas por esse transmissor. 2.5. Módulo de Análise - Gráficos e Relatórios Para realizar a análise, interpretação, refinamento e exibição dos resultados dos dados monitorados consolidados, foram levantadas algumas ferramentas gratuitas que oferecessem recursos que atendam às necessidades deste cenário de utilização. Dentre estas, as ferramentas escolhidas foram o Pentaho Community Edition[4] e o Kettle. Estas soluções consistem em um conjunto de ferramentas para Business Intelligence. O primeiro é responsável pelo gerenciamento dos gráficos e relatórios através de uma interface WEB. Já a segunda ferramenta é responsável pela parte conhecida como ETL (Extraction, Transformation and Loading), com essa ferramenta é possível realizar a análise, tratamento e extração dos dados para que possam ser utilizados pela ferramenta de exibição dos gráficos e relatórios. Na Figura 9 podemos observar uma tela de exemplo da aplicação de gerenciamento de gráficos do Pentaho, com alguns dados que foram coletados durante os testes no cenário de validação do sistema. Figura 9 - Tela de Relatórios 18 A versão utilizada dessa ferramenta permite uma customização da sua interface, além de permitir que novas funcionalidades sejam agregadas através da instalação de plug-ins disponíveis no próprio site da ferramenta. Uma dessas ferramentas que foram agregadas a suíte de relatórios foi o Pentaho Report Designer[5]. A ferramenta Pentaho Report Designer é uma aplicação desktop especifica para a elaboração de relatórios, gráficos e tabelas. Na Figura 10 podemos ver um exemplo de relatório que foi desenvolvido dentro da ferramenta, que posteriormente foi exportada para a suíte Pentaho para exibição. Figura 10 - Tela do Pentaho Report Design 2.6. Módulo de Gerenciamento de Aplicações Representa ambiente web desenvolvido para prover mecanismo para gerenciamento das aplicações de vídeos monitoradas. Através do ambiente são gerenciadas: Informações dos clientes: informações das instituições usuárias do serviço de monitoração. Como exemplo de clientes, podemos ter a USP ou a própria RNP; Informações das aplicações: informações das aplicações de vídeo das instituições que fizerem uso do serviço. Como exemplos de aplicações, para o caso da RNP, poderíamos ter o Video@RNP e o Videoaula@RNP. Para o caso da USP, poderíamos ter o IPTV da USP ou o e-Aulas da USP. O objetivo deste ambiente é gerenciar não somente as informações dos clientes e aplicações de vídeos, mas o gerenciamento de informações de controle necessárias para a provisão dos mecanismos de segurança do serviço de monitoração. 19 A Figura 11 e a Figura 12 ilustram o módulo de gerenciamento das informações das aplicações de vídeos monitoradas. Na primeira figura são exibidas as aplicações de um determinado cliente (no exemplo, a própria RNP) e as aplicações monitoradas. Figura 11 - Módulo de Gerenciamento – Clientes e aplicações Figura 12 - Módulo de Gerenciamento - Parâmetros de uma aplicação 20 3. Integração / Desenvolvimento A coleta das informações é feita por um conjunto de ferramentas que devem estar localizadas junto às suas correspondentes fontes, e muitas vezes essa comunicação entre aplicação e ferramenta de monitoramento requer uma customização para que os eventos que se desejem coletar sejam monitorados corretamente. Para realizar essa customização, é necessário realizar configurações que serão detalhadas a seguir. Dentro do conjunto de ferramentas e módulos, os que possuem tais implicações são os plug-ins de coleta, ou seja, os componentes de monitoração do player (Player Collect) e da aplicação Web (Page Collect). 3.1. Módulo de Monitoração do Player Conforme apresentado, para realizar o monitoramento dos eventos específicos do player de vídeo, tomouse como base o player jwPlayer, e foi desenvolvido o componente Player Collect, implementado em “playercollect.js”, que é o responsável pela monitoração e envio dos dados referentes ao player de vídeo. Para instanciar o player, deve-se chamar o seguinte script na página, da forma que for mais conveniente para o usuário. function generate_player(){ //jwplayer setup jwplayer('container').setup({ flashplayer: '/player.swf', file: document.getElementById('videourl').value, height: 123, width: 456, autoplay: true, plugins: { '<PLUGIN URL>' : { collector_url: '<collectorUrl>', id_client: '<clientId>', id_application: '<applicationId>', id_user: '<userId>', id_video:'<videoId>', //javascript object with auxdata key-value pairs //(e.g.:{user_access_level: 3} ) 21 aux_data: { ... } } } }); } Onde: '<PLUGIN URL>': deve ser substituído pelo endereço URL onde o plug-in está localizado; collector_url: '<collectorUrl>': endereço URL correspondente ao coletor; id_client: '<clientId>': Id do cliente monitorável; id_application: '<applicationId>': Id da aplicação de vídeo; id_user: '<userId>': (Opcional) Id do usuário no contexto da aplicação; id_video: '<videoId>': Id do vídeo/conteúdo; aux_data: {myauxdata: 'myvalue', myotherdata: 'myothervalue', yetanotherdata: 'yetanothervalue'}: aceita um JSON que com dados auxiliares, como informações de perfil do usuário ou de tipo de transmissão do vídeo (ao vivo ou sob demanda) por exemplo. Os seguintes métodos foram criados no desenvolvimento deste plug-in: PlayerCollect(player, config): construtor do plug-in do player, os argumentos são o objeto do player jwplayer e as configurações; getConfigData: constrói dados internos a partir das configurações, como os dados de cabeçalho de mensagem de eventos, por exemplo; setup(evt): instala o plug-in no player, é uma função de call-back para o status de pronto do player setIframe(): constrói o elemento dom do iFrame; feedbackListener(evt): quando o objeto monitorável (watch) é criado, via uma solicitação Ajax dentro do iFrame do coletor, é enviada uma mensagem de feedback de modo a poder finalizar a função periódica; send_message_to_iframe(type=’event_info’, obj): formata e posta mensagem à janela do iFrame; 22 createWatch(): tentar criar um watch, ou seja, objeto com as informações monitoráveis. Este método é um call-back para a função periódica createWatchFN; sendEventInfo(name, eventInfo={}): formata e posta a mensagem da ocorrência do evento para o iFrame; bindPlayerEvents(): faz um binding dos eventos. Todos os eventos são enviados ao iFrame; isPlaying(): verifica se o player está ativamente executando o vídeo; frameChecker(): função para monitorar se o vídeo está atualmente no frame. Não funcionará se o vídeo não estiver sendo mostrado de dentro de um iFrame. 3.2. Módulo de Monitoração da Aplicação Web Novamente, conforme apresentado, o componente responsável pela monitoração dos eventos dos componentes da página da aplicação é o Page Collect implementado em “pagecollect.js”. A seguir serão detalhadas as customizações necessárias para o correto mapeamento dos componentes a serem monitorados por essa ferramenta. Para instanciar o componente de coleta é preciso referenciá-lo na página por meio da seguinte instrução: <script type="text/javascript" src="<PLUGIN URL>"></script> Em seguida deve-se criar um script para inicialização de suas configurações, como no exemplo a seguir: <script type="text/javascript"> function loadPageCollectPlugin(){ var pageConfigs= {}; pageConfigs.id_client = '<clientId>'; pageConfigs.id_application = '<applicationId>'; pageConfigs.id_user = '<userId>'; pageConfigs.id_video = '<videoId>'; pageConfigs.collector_url = '<collectorUrl>'; pageConfigs.aux_data = { ... }; var page_collect = new infocollect.PageCollect(pageConfigs, true); 23 page_collect.start(); } </script> Novamente, como ocorre no caso do plug-in do player, em aux_data pode-se colocar informações de perfil do usuário e/ou do tipo de transmissão caso precisem ser associados à transmissão de vídeo, por exemplo. Para que esse script seja executado, deve se invocá-lo no evento de carregamento da página: <body onload="loadPageCollectPlugin();"> Com essa configuração, é possível monitorar eventos de enquetes, avaliações, comentários e redes sociais. As seguintes informações serão enviadas com a utilização deste plug-in: Enquetes: PollEvent = 104 { "name" : "104", "eventInfo":{ title : "Enquete sobre qualidade", fields : [ {question : "Avalie a qualidade da apresentação (transmissão do vídeo)", value : "Ruim", correct = "" }, {question:" Avalie a qualidade do conteúdo exposto", value : "Bom", correct = ""} ], "time":1341488216440 } } Avaliações: EvalEvent = 103 { "name" : "103", "eventInfo":{ 24 title : "Avaliação do conteúdo", fields : [ {question : "Ondas S são aquelas que ", value : "opcao1", correct = "opcao3" }, {question : "Na camiseta do professor está desenhado", value : "opcao4", correct = "opcao4"} ], "time":1341488167787 } } Comentários: CommentEvent = 102 { "name" : "102", "eventInfo":{ title : "", fields : [ {question : "", value : "eu não vou comentar", correct = "" }, ], "time":1341488118923 } } Redes Sociais: ShareEvent = 101 Google o Hover: usuário passa o mouse sobre o botão de +1. { "name": "101", "time": 456789, 25 "eventInfo": { "social_network":"google_plus", "social_pluging":"plusone_button", "action":"hover", "target":"http://www.rnp.br/" } } o Confirm: aparece ou desaparece uma bolha de confirmação. { "name": "101", "time": 456789, "eventInfo": { "social_network":"google_plus", "social_pluging":"plusone_button", "action":"confirm", "target":"http://www.rnp.br/" } } o On: usuário faz +1. { "name": "101", "time": 456789, "eventInfo": { "social_network":"google_plus", "social_pluging":"plusone_button", "action":"on", "target":"http://www.rnp.br/" } } 26 o Off: usuário desfaz +1. { "name": "101", "time": 456789, "eventInfo": { "social_network":"google_plus", "social_pluging":"plusone_button", "action":"off", "target":"http://www.rnp.br/" } } Facebook o Unlike: usuário não gosta de algum conteúdo. { "name": "101", "time": 456789, "eventInfo": { "social_network":"facebook", "social_pluging":"like_button", "action":"unlike", "target":"http://www.rnp.br/" } } o Like: usuário gosta de algum conteúdo. { "name": "101", "time": 456789, "eventInfo": { 27 "social_network":"facebook", "social_pluging":"like_button", "action":"like", "target":"http://www.rnp.br/" } } o Send message: usuário envia uma mensagem. { "name": "101", "time": 456789, "eventInfo": { "social_network":"facebook", "social_pluging":"send_button", "action":"send_message", "target":"http://www.rnp.br/" } } Twitter o Click: usuário clica no botão do twitter. { "name": "101", "time": 456789, "eventInfo": { "social_network":"twitter", "social_pluging":"tweet_button", "action":"unlike", "target":"http://www.rnp.br/" } } 28 Os seguintes métodos foram criados no desenvolvimento deste plug-in: PageCollect(config, prevent_default_submit): construtor do plug-in de página, os argumentos são as configurações e uma flag que indica se o prevent default do submit será executado ou não; setIframe(): constroi o elemento dom do iFrame; setMessageToIframe(obj): envia mensagem, obj, ao iFrame; setIframe(): constroi o elemento dom do iFrame; sendData(data, evt_name): envia os dados ao Iframe. Argumentos são os dados e o tipo de evento; bindFacebookEvents(): realiza um bind com os eventos do botão do Facebook; bindPageEvents(): realiza um bind com os eventos dos elementos de formulário da página; bindLikeEvents(): realiza um bind com os eventos do botão de curtir da página de vídeo; bindTwitterEvents(): realiza um bind com os eventos do botão do Twitter; bindGooglePlusEvents(): realiza um bind com os eventos do botão do Google Plus; bindLinkedInEvents(): realiza um bind com os eventos do botão do LinkedIn; start(): inicializa todos os binds do plugin da página. 29 4. Instalação As ferramentas que compõem o protótipo do serviço de monitoramento trabalham de forma hierárquica, onde o fluxo das informações inicia-se nas fontes de coleta, que enviam os dados para o coletor, que, por sua vez, tem que enviá-los para que sejam persistidos em base de dados e que possam ser consumidos pela ferramenta que realiza a análise e interpretação dos dados. Por fim, a ferramenta de gerenciamento de relatórios torna possível a visualização do resultado da análise dos dados na forma de gráficos e relatórios. Neste capitulo serão abordadas as etapas que compõem o processo de instalação de cada ferramenta, adotando a mesma hierarquia dos dados coletados. As ferramentas que serão abordadas neste capítulo possuem requisitos técnicos que variam de acordo com o escopo das informações. Portanto, serão abordados aqui procedimentos que envolvem execução de comandos UNIX para a instalação de alguns componentes. Para tanto, são requeridos conhecimentos básicos de configuração de parâmetros de rede para a comunicação entre os componentes, além de conhecimentos básicos de informações referentes à configuração de um computador, como processador, memória, disco rígido, entre outros. 4.1. Agentes de Monitoramento de Eventos O sistema de monitoramento elaborado pelo projeto GT-IMAV consiste em diversos módulos e ferramentas que se comunicam entre si para que no final uma ferramenta de análise possa capturar diversas informações de monitoramento e possa montar relatórios e tabelas dessas informações consolidadas. Dentro desse conjunto de ferramentas e módulos, os denominados agentes de monitoramento de eventos são os que iniciam o fluxo de captura dos dados brutos dentro do sistema de monitoramento, portanto nada mais justo iniciar os procedimentos de instalação pelos mesmos. Estes agentes são responsáveis pela captura das informações referentes ao transmissor de vídeo e ao servidor que hospeda o sistema de transmissão de vídeo. A Figura 13 apresenta a arquitetura proposta para a coleta dos dados de máquina e transmissor através dos agentes, lembrando que este cenário refere-se a apenas uma única instância, onde é possível escalar este cenário para múltiplas instâncias. Para realizar o acesso às informações pelo protocolo SNMP, os agentes necessitam de módulos intermediários, os chamados bridges, que funcionam como proxies de comunicação entre os protocolos SNMP e HTTP, pois os agentes coletam tais informações por meio do protocolo HTTP, usando o estilo arquitetural REST (Representational State Transfer)[6]. Para esse fim, foi desenvolvido o componente RESTful Monitor Bridge que acessa o serviço SNMP das fontes e repassa as informações de monitoração ao agente Multi Monitor Agent, que por sua vez, as reencaminham ao módulo do Coletor. 30 Figura 13 - Diagrama da arquitetura dos agentes de coleta dos dados de máquina e transmissor O procedimento de instalação desses agentes baseia-se na execução de um script, que por sua vez realiza a descompactação dos módulos necessários, assim como a configuração dos mesmos de acordo com a sua função dentro do sistema de monitoramento e coleta. 4.1.1. Instalação dos Agentes de Monitoramento e do Componente RESTful Monitor Bridge O componente RESTful Monitor Bridge obtém as informações fornecidas pelo serviço SNMP da máquina monitorada, em outras palavras, o agente de monitoramento consulta o RESTful Monitor Bridge e esse realiza uma consulta ao serviço SNMP da máquina. Atualmente há duas formas de se realizar a instalação dos agentes e do RESTful Monitor Bridge, a saber, por meio de um instalador ou simplesmente descompactando os pacotes desses componentes. O arquivo compactado que contém o RESTful Monitor Bridge é o restful-mon-bridge.tar.gz que possui a hierarquia de pastas: bin: contém os executáveis e os binários do componente; conf: contém os arquivos de configuração; lib: contém as bibliotecas das quais o componente é dependente; output: contém diversos arquivos estáticos utilizados pelo componente. 31 Analogamente, o arquivo compactado que contém o Multi Monitor Agent é o multi-mon-agent.tar.gz que segue a mesma hierarquia de pastas. O instalador, denominado fab-agents-installer, foi elaborado para facilitar o processo de instalação, desinstalação e configuração de tais componentes e também do serviço SNMP. Ele faz uso do framework denominado Fabric[7], que é uma biblioteca Python e ferramenta de linha de comando que permite a automatização na instalação de aplicações localmente ou remotamente (via SSH[8]), e também pode ser utilizado para tarefas de administração de sistemas. No arquivo de configuração fabsettings.py. do Fabric, estão contidas as informações principais para instalações remotas ou locais. Essas informações são as seguintes: REMOTE_HOST: endereço IP para acesso via ssh; REMOTE_USER: nome de usuário para acesso via ssh; REMOTE_PASSWORD: senha correspondente; REMOTE_SSH_PORT: porta correspondente; LOCAL_DIR_NAME: local com os pacotes dos componentes; REMOTE_INSTALLATION_PATH: local em que os componentes serão instalados, por exemplo, em “/usr/local/java/gtimav/”. Dos requisitos para esse instalador são o serviço SSH e o Fabric no servidor alvo, tanto remoto quanto local. Para a instalação desses componentes, execute os seguintes comandos (o servidor SSH deve ser instalado na máquina alvo de instalação, já o Fabric precisa estar disponível na máquina em que o instalador vai ser executado): sudo apt-get install fabric sudo apt-get install openssh-server Com o Fabric instalado, o instalador dos agentes deverá ser iniciado executando o seguinte comando dentro da pasta principal do instalador: fab install Em seu menu, o instalador exibirá as opções: What do you want to do? 1: Install 2: Configure 3: Uninstall 32 4: Exit Sendo que: 1. Install: para entrar no menu para instalação dos componentes; 2. Configure: para entrar no menu de configuração dos componentes; 3. Uninstall: para entrar no menu de desinstalação dos componentes; 4. Exit: para sair do instalador Ao entrar no menu Install, será apresentada uma listagem dos componentes que podem ser instalados ou configurados: Enter the option you want to configure: 1: Multi monitor agent 2: Restful monitor bridge 3: Snmp service 4: Exit Analogamente, os menus de desinstalação e configuração apresentam as mesmas opções. A seguir explicamos como podem ser feitas as configurações dos componentes a partir do instalador de maneira automatizada. Maiores detalhes sobre a semântica das configurações serão explanadas nas seções subsequentes. As configurações do Multi Monitor Agent podem ser feitas da seguinte forma, após a escolha da opção correspondente no menu do instalador, conforme o exemplo: What do you want to do? 1: Install 2: Configure 3: Uninstall 4: Exit Option: 2 Enter the option you want to configure: 1: Multi monitor agent 2: Restful monitor bridge 3: Snmp service 33 4: Exit Option: 1 [192.168.1.86] sudo: rm /usr/local/java/gtimav/multi-mon-agent/conf/multi-mon-agent.xml [192.168.1.86] out: sudo password: [192.168.1.86] sudo: touch /usr/local/java/gtimav/multi-mon-agent/conf/multi-mon-agent.xml [192.168.1.86] out: sudo password: [192.168.1.86] sudo: echo '<?xml version="1.0" encoding="UTF-8" ?>' >> /usr/local/java/gtimav/multi-monagent/conf/multi-mon-agent.xml [192.168.1.86] out: sudo password: [192.168.1.86] sudo: echo '<agents>' >> /usr/local/java/gtimav/multi-mon-agent/conf/multi-mon-agent.xml [192.168.1.86] out: sudo password: Write ? or help to get some assistance Configuring agent description: [Agent 1] Configuring agent request period: [60000] Configuring source url: http://localhost:8081/gt-imav/snmp/sysinfo Configuring Collector url: http://localhost:8000/watch_generic/ Configuring source type: HOST Configuring client identifier: 523849d314740518878cd949 Configuring application identifier: 523849fe14740518878cd94a Configuring user: manager Configuring password: manager Configuring Backup Agent, attempts for send message: [3] Configuring Backup Agent, period between attempts for send message: [10000] Configuring Backup Agent, max number of messages in the repository: [1000] Configuring repository path: [../backup] Configure logs path: [../logs] Configuring logs pattern: [[%p|%d{dd-MMM-yyyy | HH:mm:ss}] %m %c %n] Configuring logs files size: [5MB] Analogamente, as configurações do RESTful Monitor Bridge seguem os seguintes passos de exemplo: What do you want to do? 34 1: Install 2: Configure 3: Uninstall 4: Exit Option: 2 Enter the option you want to configure: 1: Multi monitor agent 2: Restful monitor bridge 3: Snmp service 4: Exit Option: 2 RMB user: snmpuser RMB password: snmppassword Novamente de maneira análoga, o serviço SNMP (SNMP Service) pode ser configurado com os seguintes passos de exemplo: What do you want to do? 1: Install 2: Configure 3: Uninstall 4: Exit Option: 2 Enter the option you want to configure: 1: Multi monitor agent 2: Restful monitor bridge 3: Snmp service 4: Exit Option: 3 [192.168.1.86] run: dpkg-query -W -f='${Status} ' snmp [192.168.1.86] out: install ok installed 35 [192.168.1.86] run: dpkg-query -W -f='${Status} ' snmpd [192.168.1.86] out: install ok installed [192.168.1.86] run: dpkg-query -W -f='${Status} ' snmp-mibs-downloader [192.168.1.86] out: install ok installed [192.168.1.86] sudo: test -e "$(echo /etc/snmp/snmpd.conf)" [192.168.1.86] out: sudo password: Configuring snmpd.conf Access control for SNMP Service SNMP user: snmpuser SNMP password: snmppassword Re-password: snmppassword Encryption method for SNMP password: [MD5] Partition to monitoring: [/] É importante frisar que caso o usuário opte pela configuração do serviço SNMP, o instalador verificará a existência de um arquivo de configuração padrão do SNMP, mais especificamente pelo arquivo snmpd.conf no diretório /etc/snmp. Caso o arquivo já exista, então o script irá criar um novo arquivo de configuração chamado snmpd.conf.gtimav, caso contrário ele irá simplesmente salvar as novas configurações no arquivo padrão. 4.1.2. Configuração dos Agentes de Monitoramento do Servidor e Transmissor O arquivo de configuração é instalado na pasta “.../multi-mon-agent/conf” do Multi Monitor Agent, e é denominado multi-mon-agent.xml e possui as configurações principais utilizadas por cada um de seus agentes de monitoramento. Os parâmetros configuráveis para os agentes são: id: identificador numérico do agente; description: descrição do agente; port-listen: porta de escuta em modo servidor; mode: define o estado de funcionamento do agente. Os valores possíveis para esse parâmetro são CLIENT e SERVER. Basicamente esta configuração determina se o agente solicita informações de uma 36 fonte (CLIENT), ou se aguarda o envio dessa informação por uma fonte (SERVER). Por padrão este parâmetro está configurado para CLIENT e não deve ser alterado no momento; request-period: período em milissegundos, que o agente usa para solicitar informações da fonte; source-url: endereço URL que o Agente usa para solicitar informação da fonte. (ex. http://localhost:8081/gt-imav/snmp/oids/streamer, http://localhost:8081gt-imav/snmp/oids/host); collector-url: endereço URL que o Agente usa para enviar informação para o coletor. (ex. http://localhost:8000/watch_generic/); sourcetype: configuração do tipo de informação a qual a informação pertence, podendo variar no caso destes agentes entre HOST ou STREAMER; idclient: nome do (sistema) cliente monitorável, que é utilizado para identificação da fonte de coleta das informações, e especificada no modelo de dados; idapplication: nome da aplicação, que é utilizado para identificação da fonte de coleta, e especificada no modelo de dados; user: nome do usuário para autenticação na fonte; password: senha do usuário para autenticação na fonte; filters: são utilizados para fazer tratamento dos valores (ou inserções) de métricas. Com os filtros é possível modificar o tipo do valor da métrica, como passar de inteiro para string, por exemplo, ou então inserir alguma métrica com um valor default que não exista na fonte de dados (essa opção é importante, pois as métricas precisam existir por requisito dos ETLs quando esses realizam o parsing dessas informações). Os filtros possuem subparâmetros, tais como: o key: métrica a ser inserida ou a ter seu valor tratado; o type: tipo ao qual o valor da métrica será convertido; o default-value: valor padrão a ser posto no valor da métrica, caso ela não exista na fonte de monitoração; o regex: este parâmetro é utilizado caso se queira realizar a substituição do valor da métrica por algum outro, para tal é preciso indicar o padrão a ser buscado no valor da métrica para a substituição. Esse parâmetro possui subparâmetros: pattern: padrão a ser procurado para a substituição, podendo ser uma expressão regular ou o valor exato. Um exemplo seria a expressão regular “/\d+” para substituir algum valor string em que se queira encontrar e modificar qualquer valor numérico após o caracter “/”; replace-value: valor pelo qual o valor original da métrica deverá ser substituído. 37 Além desses parâmetros, os seguintes podem ser configurados de maneira global (localizado na tag <global>) ou de maneira específica para cada agente: Configurações de backup (no caso de falha de comunicação com o sistema de coleta): o send-message-attempts: número de tentativas que usa a classe BackupAgent para reenviar uma mensagem para o coletor; o send-message-attempts-period: período em milissegundos entre tentativas de envio das informações coletadas para o coletor; o repository-path: endereço no sistema de arquivos onde serão guardadas as mensagens que falharam na entrega ao coletor. Configurações de log: o path: caminho do diretório em que o arquivo de log será criado; o pattern: padrão das mensagens de log; o max-file-size: tamanho máximo dos arquivos de log. As bibliotecas utilizadas pelos agentes são instaladas em “.../multi-mon-agent/lib”. Os arquivos executáveis são encontrados em “.../multi-mon-agent/bin”. Entre os executáveis temos os seguintes arquivos: multi-mon-agent.jar (principal executável Java); multi-mon-agent.sh (script que inicializa o executável Java); Por fim, temos a pasta onde são armazenadas as informações que por algum motivo não puderam ser enviadas e foram armazenadas localmente para envio posterior. Está localizado em “.../multi-monagent/backup”. Dentro desta pasta temos o arquivo: agent_[<identificação do agente>].xml (armazena dados que não puderam ser enviados no momento da coleta para um dado agente, ex.: agent_1.xml para o agente de id igual a 1); Para executar o agente de monitoramento, navegue até a pasta onde se encontra o executável, e execute os seguintes comandos: Para iniciar: sudo ./multi-mon-agent.sh start; Para verificar a situação de execução do agente: sudo ./multi-mon-agent.sh status; Para parar: sudo ./multi-mon-agent.sh stop; Neste ponto cabe uma observação com relação ao agente de monitoramento de máquina que pode utilizar o protocolo SNMP do Linux. Para o correto funcionamento deste componente, é necessário que o sistema operacional esteja devidamente configurado para a utilização deste protocolo, para tanto são necessários alguns passos que serão detalhados em seguida. 38 4.1.3. Configuração do protocolo SNMP Os comandos a seguir foram validados em um sistema executando um Ubuntu Server 12.04.3 LTS, ou seja, caso necessite realizar os procedimentos em outro ambiente consulte a documentação específica do sistema operacional. Inicialmente instalar o serviço SNMP na máquina com os seguintes comandos: sudo apt-get install snmp snmpd snmp-mibs-downloader Após a instalação, será necessária a configuração do serviço que acabou de ser instalado através da edição do arquivo /etc/snmp/snmpd.conf com as seguintes diretivas: createuser [nome de usuário] MD5 “[senha]” No argumento [nome de usuário] será o usuário que terá acesso as informações disponibilizadas pelo protocolo SNPM, e o campo [senha] deverá corresponder a senha para o acesso, que deverá estar codificada utilizando o algoritmo MD5[9]. rouser [nome de usuário] (Full read-only access for SNMPv3) Nesse argumento deverá ser informado o mesmo usuário definido no item anterior, para configurar um acesso com privilégios restritos a somente leitura dos dados. disk [caminho] [espaço mínimo] E por fim o parâmetro [caminho] configura o caminho onde a partição a ser monitorada está montada (utilizado para o monitoramento das informações relacionadas ao disco rígido), e [espaço mínimo] especifica o tamanho mínimo para que o sistema emita um alerta, podendo ser preenchido um valor absoluto ou uma porcentagem do tamanho total da partição configurada. 4.1.4. Configuração do componente RESTful Monitor Bridge Os arquivos de configuração são instalados na pasta “.../restful-mon-bridge/conf” do RESTful Monitor Bridge, a qual possui, dentre outros, os seguintes arquivos: app-config.xml: configuração do contexto web no servidor de aplicativos, Jetty. Especifica a localização dos recursos REST na aplicação, as restrições de acesso, método de autenticação etc.; log4j.properties: define o comportamento dos registros (logs) da aplicação; realm.properties: especifica usuários, grupos e senhas para o acesso à aplicação; 39 snmp.properties: especifica usuários, grupos, senhas e outros dados para o acesso ao serviço SNMP; <nome-do-recurso>.properties: usado para estender a informação básica fornecida pela aplicação. O nome do recurso é importante, pois é utilizado na URL de busca das informações, por exemplo, digamos que o arquivo seja streamer.properties, a URL de busca será algo como http://localhost:8081/gt-imav/snmp/oids/streamer. Caso se queira acessar métricas específicas do serviço SNMP do Linux para informações de máquina, é importante frisar que no campo source_url na configuração dos agentes (“.../multi-mon-agent/conf/multimon-agent.xml”) do Multi Monitor Agent, é possível configurá-lo para o recurso específico “http://localhost:8081/gt-imav/snmp/sysinfo”, que já retorna os dados básicos de HOST, sem a necessidade da configuração do arquivo <nome-do-recurso>.properties. Os principais parâmetros configuráveis no arquivo snmp.properties que são utilizados para acesso ao serviço SNMP são os seguintes: ip-address: endereço IP do servidor que possui o serviço SNMP; port: porta para o serviço SNMP. Os demais parâmetros poderiam ser utilizados em cenários mais específicos do uso do serviço SNMP, para mais informações sugere-se consultar documentação específica desse serviço. Os arquivos <nome-do-recurso>.properties relacionam os OIDs a serem consultados do serviço SNMP. Os OIDs são relacionados como chave-valor, sendo a chave o nome ou etiqueta para indicar qual métrica está sendo monitorada e seu valor é o OID correspondente. Por exemplo, uma chave poderia ser “ n_requests” para indicar o número de solicitações ao serviço de transmissão sob demanda, e seu valor deverá ser um OID, que nesse caso seria “.1.3.6.1.4.1.9998.1.5.0”. Dessa forma, é possível acrescentar ou remover os OIDs a serem usados na monitoração arbitrariamente, porém é recomendado não retirar nenhum dos OIDs que já estão presentes no arquivo de configuração padrão, pois a falta de um destes parâmetros acarretará em inconsistências de análise e geração de gráficos e tabelas. As bibliotecas utilizadas pelos agentes são instaladas em “.../restful-mon-bridge/lib”. Os arquivos executáveis são encontrados em “.../restful-mon-bridge/bin”. Entre os executáveis temos os seguintes arquivos: restful-mon-bridge.jar (principal executável Java); restful-mon-bridge.sh (script que inicializa o executável Java); 40 Para executar o agente de monitoramento, navegue até a pasta onde se encontra o executável, e execute os seguintes comandos: Para iniciar: sudo ./restful-mon-bridge.sh start; Para verificar a situação de execução do agente: sudo ./restful-mon-bridge.sh status; Para parar: sudo ./restful-mon-bridge.sh stop; No anexo há um caso de uso para configuração dos agentes num cenário utilizando o serviço SNMP dos transmissores JDVoD e JDLive. 4.2. Coletor A instalação do componente responsável pela coleta e persistência das informações em base de dados compreende além do próprio serviço, uma série de módulos auxiliares que foram acoplados ao serviço de coleta, com o objetivo de torná-lo escalável, robusto e com uma alta confiabilidade contra falhas de diversas naturezas. Essas melhorias foram necessárias devido à importância desse componente dentro da arquitetura geral do sistema, sendo ele o centro de toda a cadeia de coleta e análise do projeto. A instalação deste componente envolve os seguintes comandos, que devem ser executados em um shell Unix. A instalação foi validada no sistema operacional Ubuntu Server 12.04.2 LTS 64-bits. sudo apt-get install subversion sudo mkdir -p /srv/InfoCollect sudo chown `whoami` /srv/InfoCollect svn co https://143.107.111.253/svn/LARC_Projects/trunk/GTIMAV/trunk/InfoCollect/ /srv/InfoCollect cd /srv/InfoCollect 4.2.1. Configuração do Coletor A configuração deste componente baseia-se na edição de um arquivo e a criação de um outro na raiz da instalação do projeto. Inicialmente copie o arquivo com o seguinte comando: cp local_settings.py-dist local_settings.py Feito a cópia, edite o arquivo com o editor de sua preferência com os parâmetros de conexão com a base de dados onde serão persistidas as informações coletadas. Completada a configuração para conexão com o banco de dados, devemos informar ao sistema o modo de execução que desejamos. Isso é feito através do comando: 41 echo “production” > .infocollect_env Feito isso, basta executar o seguinte comando para iniciar o módulo do coletor: sh scripts/bootstrap.sh Nesse momento, o sistema de coleta deverá estar funcionando e pronto para receber os dados monitorados. 4.2.2. Módulo de Gerenciamento O módulo de gerenciamento foi desenvolvido para realizar o gerenciamento das aplicações que serão monitoradas pelo sistema de monitoramento. A Figura 14 mostra a tela de gerenciamento com algumas aplicações cadastradas, e portanto, monitoradas pelo sistema. Figura 14 - Tela do sistema de gerenciamento Esse módulo é de extrema importância dentro do sistema de monitoramento, pois agrega além da função gerencial, uma camada de segurança ao sistema, impedindo que qualquer sistema ou agente externo com ciência da URL de coleta envie dados falsos de monitoramento, poluindo assim a análise final dentro dos relatórios, além de impedir ataques do tipo “negação de serviço”. O gerenciamento das aplicações monitoradas é feito através da geração de identificadores gerados por esse módulo, e que devem ser utilizados dentro dos agentes de monitoramento desenvolvidos pelo projeto, e documentados nesse manual. Para a utilização desses identificadores, consultar a seção correspondente ao agente de coleta a ser configurado com esses identificadores. 42 4.3. Pentaho O pacote que é responsável pela instalação do Pentaho consiste em dois arquivos, o install.sh e o biserverce-3.10.0-stable.tar.gz. A instalação consiste em executar o script install.sh tomando o cuidado de executálo na mesma pasta onde se encontra o arquivo compactado biserver-ce-3.10.0-stable.tar.gz. Assim que a execução seja finalizada, será criada a pasta biserver-ce-3.10.0-stable, onde estarão localizados os arquivos start.sh, stop.sh, ctools-installer.sh, além de duas pastas, administration-console e biserver-ce. Para a execução deste módulo, será necessário apenas ter uma instalação Java rodando no sistema operacional, e basta executar o script start.sh para iniciar o sistema, e o script stop.sh realiza a parada do sistema. Figura 15 - Tela de administração Pentaho A configuração deste ambiente é feita através da interface WEB acessando o endereço da aplicação de administração deste sistema. A Figura 15 mostra a tela que será apresentada assim que for realizado o acesso. Por padrão, este sistema utiliza a porta 8099 para essa interface, utilizando as credencias admin/password. 4.3.1. Utilização das ferramentas de Relatório A finalidade principal deste projeto baseia-se na monitoração de eventos e na elaboração e exibição de gráficos e relatórios gerados a partir das informações que foram coletadas pelos agentes de monitoramento. 43 Com esse intuito foi escolhida a ferramenta Pentaho Community, que além de ser gratuita, possuía o melhor conjunto de recursos que poderiam ser utilizadas no contexto do projeto. Dentro da suíte de ferramentas que o Pentaho Community disponibiliza, foram utilizadas duas ferramentas para este projeto, o Pentaho BI Server, responsável pelo gerenciamento dos relatórios montados, e o Kettle, que é a ferramenta responsável por realizar a fase de análise e tratamento dos dados coletados. 4.3.2. Pentaho BI Server A interface principal da ferramenta utiliza uma interface WEB para o gerenciamento da apresentação dos relatórios. A Figura 16 mostra um exemplo de um relatório aberto dentro da interface WEB do sistema de gerenciamento WEB do Pentaho. Figura 16 - Tela de Exemplo da Interface WEB 44 O pacote disponibilizado pelo projeto já possui uma customização visual, onde foram alteradas algumas cores na interface principal, além da inclusão do logo do projeto no canto superior direito. A Figura 17 mostra a tela inicial do sistema Pentaho assim que o usuário insere suas credencias de acesso. Além das alterações visuais, já foram incorporados nesse pacote algumas ferramentas adicionais que não estão disponíveis na versão que é distribuída por padrão pelo site do Pentaho. Figura 17 - Tela Principal Pentaho O ambiente WEB do Pentaho disponibiliza além da visualização dos gráficos e relatórios, ferramentas que possibilitam a elaboração de outros, necessitando para tal conhecimentos de comandos SQL para realizar consultas das informações que se deseje visualizar na forma de gráficos e tabelas, além de conceitos de CSS para diagramar os componentes dentro do espaço do relatório. A Figura 18 mostra a tela que é utilizada para a edição dos relatórios, mostrando os componentes disponíveis para utilização. 45 Figura 18 - Tela de edição Este ambiente possui dois grupos de relatórios, os relatórios padrão e os customizados. Os relatórios do tipo padrão são aqueles que apresentam as métricas que o grupo classificou como genéricas, onde qualquer sistema de vídeo possui e estão sendo monitoradas. Já os relatórios customizados são aqueles em que apresentam informações que de certa forma são únicas a uma certa aplicação de vídeo, ou que apresentam relacionamentos entre certos parâmetros monitorados pelo sistema que são de interesse para determinados públicos. Vale ressaltar que este tipo de relatório não é disponibilizado por padrão nesse ambiente, necessitando a sua confecção de acordo com a sua necessidade. 4.3.3. Módulo Kettle As informações coletadas pelos módulos são enviadas ao coletor, que por sua vez persiste os dados em um banco de dados. Porém para a exibição dos mesmos em forma de gráficos e relatórios, é necessária uma etapa anterior à consulta do Pentaho BI Server, que consiste em realizar uma análise e interpretação das informações coletadas. Com essa finalidade foi utilizada a ferramenta Kettle presente na suíte do Pentaho. 46 Figura 19 - Tela da ferramenta Kettle A Figura 19 mostra um exemplo de uma das diversas tarefas que foram programados na ferramenta para realizar a análise dos dados referentes ao consumo do vídeo. Pode-se notar que a ferramenta utiliza o conceito de blocos funcionais, onde cada um desses blocos é responsável por uma tarefa especifica, e ao interligarmos todos esses blocos, são realizadas todas as análises e interpretações necessárias para a tarefa. 47 5. Considerações Este documento representa o manual que reflete o status trabalho desenvolvido até a presente data. Algumas alterações podem ter sido realizados eventualmente decorrente de evoluções no projeto. Para mais informações, consultar a equipe técnica do projeto. 48 Anexo I - Monitoramento por serviço SNMP de JDVoD e JDLive Apresenta indicação de configuração do serviço desenvolvido pelo GTIMAV para monitoração dos transmissores de Vídeo Sob Demanda (JDVoD) e Vídeo ao Vivo (JDLive) que compõem o serviço vídeo da RNP (Video@RNP). Coleta de Informações de Transmissão de Vídeo Configuração Módulo RESTful-Mon-Bridge Configuração do componente Restful-Mon-Bridge a ser adotada para coleta de informações de serviço VoD no arquivo vod.properties (ou live.properties para o JDLive): vod_user_num=.1.3.6.1.4.1.9998.1.7.0 tx=.1.3.6.1.4.1.9998.1.11.0 start_time=.1.3.6.1.4.1.9998.1.3.0 n_requests=.1.3.6.1.4.1.9998.1.5.0 n_requests_failed=.1.3.6.1.4.1.9998.1.6.0 n_max_clients=.1.3.6.1.4.1.9998.1.8.0 n_cache_hits=.1.3.6.1.4.1.9998.1.9.0 n_cache_miss=.1.3.6.1.4.1.9998.1.10.0 tx_min=.1.3.6.1.4.1.9998.1.12.0 tx_max=.1.3.6.1.4.1.9998.1.13.0 tx_std_dev=.1.3.6.1.4.1.9998.1.14.0 tx_max_all=.1.3.6.1.4.1.9998.1.15.0 id_streamer=.1.3.6.1.4.1.29091.1.1.1.1.13.1.3.1 Caso o serviço for JDLive, use a métrica live_user_num em lugar de vod_user_num. Conforme se pode observar, há algumas métricas a mais que as básicas já apresentadas, a semântica dessas métricas é a seguinte: n_requests_failed: número de requests negados o início do serviço; tx_min: taxa mínima de transferência dentre todos os clientes atualmente conectados (kbit/s); tx_max_all: taxa máxima de transferência observada desde o início do serviço (kbit/s); 49 n_max_clients: número de clientes máximo observado desde o início do serviço; tx_std_dev: desvio padrão amostral da taxa de transferência dentre todos os clientes atualmente conectados (kbit/s); n_cache_miss: número absoluto de miss na cache desde o início do serviço (Cache não reflete o conceito do JDLive); tx_max: taxa máxima de transferência dentre todos os clientes atualmente conectados (kbit/s); n_requests: número de requests recebidos desde o início do serviço; n_cache_hits: número absoluto de hits na cache desde o início do serviço (Cache não reflete o conceito do JDLive); start_time: data e hora do início do serviço. Configuração Módulo Multi-Mon-Agent A seguir exemplo de configuração do componente Multi-Mon-Agent para coleta de informações de serviços VoD ou Live no arquivo multi-mon-agent.xml: <agent> <id>1</id> <description>Agent for dvod monitoring</description> <port-listen>0</port-listen> <mode>CLIENT</mode> <request-period>20000</request-period> <source-url>http://localhost:8081/gt-imav/snmp/oids/vod</source-url> <collector-url>http://172.20.5.40:80/watch_generic/</collector-url> <request-method>POST</request-method> <referer>http://172.20.5.76</referer> <sourcetype>streamer</sourcetype> <idclient>51e5552314740546f0e612b9</idclient> <idapplication>51e5598a1474057c68d24022</idapplication> <user>manager</user> <password>manager</password> <backup-agent> 50 <send-message-attempts>3</send-message-attempts> <send-message-attempts-period>10000</send-message-attempts-period> <repository-max-number-messages>1000</repository-max-number-messages> <repository-path>../backup</repository-path> </backup-agent> <log> <path>../logs</path> <pattern>[%p|%d{dd-MMM-yyyy | HH:mm:ss}] %m %c %n</pattern> <max-file-size>5MB</max-file-size> </log> <filters> <attribute-filter> <key>rx</key> <type>STRING</type> <default-value></default-value> </attribute-filter> <attribute-filter> <key>tx</key> <type>STRING</type> </attribute-filter> <attribute-filter> <key>id_streamer</key> <type>STRING</type> <regex> <pattern>/\d+</pattern> <replace-value></replace-value> </regex> </attribute-filter> <attribute-filter> <key>live_sessions</key> 51 <type>STRING</type> <default-value></default-value> </attribute-filter> <attribute-filter> <key>vod_sessions</key> <type>STRING</type> <default-value></default-value> </attribute-filter> <attribute-filter> <key>live_user_num</key> <type>STRING</type> <default-value></default-value> </attribute-filter> <attribute-filter> <key>vod_user_num</key> <type>STRING</type> </attribute-filter> <attribute-filter> <key>sessions_num</key> <type>STRING</type> <default-value></default-value> </attribute-filter> <attribute-filter> <key>start_time</key> <type>TIMESTAMP_AS_STRING</type> <source-format>dd/MM/yyyy - HH:mm:ss</source-format> </attribute-filter> </filters> </agent> Caso o serviço for JDLive, o campo source_url substitua por: 52 <source-url>http://localhost:8081/gt-imav/snmp/oids/live</source-url> Coleta de Informações de Máquina Configuração Módulo RESTful-Mon-Bridge Configuração do componente Restful-Mon-Bridge a ser adotada para coleta de informações de máquina pelo serviço SNMP do JDLive ou JDVoD no arquivo host.properties (basta a configuração em apenas um dos serviços, pois tais métricas estão disponibilizadas por ambos transmissores): cpu_info=.1.3.6.1.4.1.9998.1.20.0 cpu_used=.1.3.6.1.4.1.9998.1.21.0 memo_total_size=.1.3.6.1.4.1.9998.1.23.0 memo_used=.1.3.6.1.4.1.9998.1.24.0 memory_max_usage=.1.3.6.1.4.1.9998.1.25.0 cpu_max_usage=.1.3.6.1.4.1.9998.1.22.0 threshold_cpu=.1.3.6.1.4.1.9998.1.26.0 threshold_memory=.1.3.6.1.4.1.9998.1.27.0 hostname=.1.3.6.1.4.1.29091.1.1.1.1.13.1.3.1 Conforme se pode observar, há algumas métricas a mais que as básicas já apresentadas, a semântica dessas métricas é a seguinte: threshold_memory: limite máximo de Memory configurado após o qual clientes são rejeitados (%); memory_max_usage: nível de memória máximo desde o início do serviço; cpu_max_usage: nível instantâneo de uso da CPU (média de todas as CPU) (%); threshold_cpu: limite máximo de CPU configurado após o qual clientes são rejeitados (%). Configuração Módulo Multi-Mon-Agent A seguir exemplo de configuração do componente Multi-Mon-Agent para coleta de informações de máquina a partir do serviço SNMP do JDVoD ou JDLive no arquivo multi-mon-agent.xml: <agent> <id>2</id> <description>Agent for host (via dvod) monitoring</description> <port-listen>0</port-listen> <mode>CLIENT</mode> 53 <request-period>20000</request-period> <source-url>http://localhost:8081/gt-imav/snmp/oids/host</source-url> <collector-url>http://172.20.5.40:80/watch_generic/</collector-url> <request-method>POST</request-method> <referer>Erro! A referência de hiperlink não é válida.> <sourcetype>streamer</sourcetype> <idclient>51e5552314740546f0e612b9</idclient> <idapplication>51e5598a1474057c68d24022</idapplication> <user>manager</user> <password>manager</password> <backup-agent> <send-message-attempts>3</send-message-attempts> <send-message-attempts-period>10000</send-message-attempts-period> <repository-max-number-messages>1000</repository-max-number-messages> <repository-path>../backup</repository-path> </backup-agent> <log> <path>../logs</path> <pattern>[%p|%d{dd-MMM-yyyy | HH:mm:ss}] %m %c %n</pattern> <max-file-size>5MB</max-file-size> </log> <filters> <attribute-filter> <key>net_rx</key> <type>STRING</type> <default-value></default-value> </attribute-filter> <attribute-filter> <key>net_tx</key> <type>STRING</type> 54 <default-value></default-value> </attribute-filter> <attribute-filter> <key>hostname</key> <type>STRING</type> <regex> <pattern>/\d+</pattern> <replace-value></replace-value> </regex> </attribute-filter> <attribute-filter> <key>cpu_info</key> <type>STRING</type> <default-value></default-value> </attribute-filter> <attribute-filter> <key>cpu_used</key> <type>STRING</type> <default-value></default-value> </attribute-filter> <attribute-filter> <key>memo_used</key> <type>STRING</type> <default-value></default-value> </attribute-filter> <attribute-filter> <key>memo_total_size</key> <type>STRING</type> <default-value></default-value> </attribute-filter> 55 <attribute-filter> <key>memo_swap_used</key> <type>STRING</type> <default-value></default-value> </attribute-filter> <attribute-filter> <key>disk_total_size</key> <type>STRING</type> <default-value></default-value> </attribute-filter> <attribute-filter> <key>disk_used</key> <type>STRING</type> <default-value></default-value> </attribute-filter> <attribute-filter> <key>net_info</key> <type>STRING</type> <default-value></default-value> </attribute-filter> <attribute-filter> <key>net_bandwidth</key> <type>STRING</type> <default-value></default-value> </attribute-filter> </filters> </agent> 56 Referências [1] http://www.longtailvideo.com/players/ (acesso em 06/08/2012) [2] http://www.snmp.com/ (acesso em 07/08/2012) [3] http://www.lavid.ufpb.br/ (acesso em 10/06/2013) [4] http://community.pentaho.com/ (acesso em 08/08/2012) [5] http://reporting.pentaho.com/report_designer.php (acesso em 12/06/2013) [6] http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm (acesso em 25/09/2013) [7] http://docs.fabfile.org/en/1.8/ (acesso em 25/09/2013) [8] http://tools.ietf.org/html/rfc4252 (acesso em 25/09/2013) [9] http://www.ietf.org/rfc/rfc1321.txt (acesso em 20/08/2012) 57