Configuração Dynatrace com AWS

Essa atividade é necessária quando precisamos integrar o Dynatrace com a cloud publica da AWS. 

Guia passo a passo

Etapas necessárias:

  • Configurações AWS
  • Configurações no Dynatrace

As configurações na console do IAM AWS devem ser seguidas igualmente como o tutorial, para evitar falhas de acesso/coleta.

Configurações AWS: 

Criar usuário para o Dynatrace. 

Dentro da Console da AWS em IAM criar um usuário para o Dynatrace. 

Clicar em adicionar usuário

Colocar por Exemplo o nome: “Dynatrace_monitoring_user”, para uma melhor identificação.

Na parte de definir limite de permissões configure conforme sua regra de negócio.

Informação

A partir deste ponto será criada uma nova police para acesso.

Obs.: Neste ambiente de testes não existiam polices de usuário criadas.

Observe que nesta parte é possível dar permissão ao serviço que se deseja liberar o acesso. Abaixo estou concedendo acesso para a EC2, API Gateway, S3, CloudWatch, Lambda.

Para está politica defini o nome para: “Dynatrace_monitoring_policy”.

Em seguida basta clicar em criar.  

Essa será a saída: 

Se achar pertinente colocar uma TAG para identificar o usuário e suas funções ficara a critério.

Podemos usar estes dados para controlar recursos ou mesmo permissões. 

Recomendado usar essa TAG

Chave: dynatrace-monitored

Value: true

Agora adicione o usuário

Copie as respectivas chaves!

É possível definir o que será monitorado com a criação de chaves, conforme exemplo.

Abaixo segue exemplo de configuração

Aqui segue um arquivo .json com todas as regras necessárias para obter as métricas da AWS. 

{
“Version”: “2012-10-17”,
“Statement”: [
{
“Effect”: “Allow”,
“Action”: [
“autoscaling:DescribeAutoScalingGroups”,
“cloudwatch:GetMetricData”,
“ec2:DescribeAvailabilityZones”,
“ec2:DescribeInstances”,
“ec2:DescribeVolumes”,
“elasticloadbalancing:DescribeLoadBalancers”,
“elasticloadbalancing:DescribeTags”,
“elasticloadbalancing:DescribeInstanceHealth”,
“elasticloadbalancing:DescribeListeners”,
“elasticloadbalancing:DescribeRules”,
“elasticloadbalancing:DescribeTargetHealth”,
“rds:DescribeDBInstances”,
“rds:DescribeEvents”,
“rds:ListTagsForResource”,
“dynamodb:ListTables”,
“dynamodb:ListTagsOfResource”,
“lambda:ListFunctions”,
“lambda:ListTags”,
“elasticbeanstalk:DescribeEnvironments”,
“elasticbeanstalk:DescribeEnvironmentResources”,
“s3:ListAllMyBuckets”,
“sts:GetCallerIdentity”,
“cloudformation:ListStackResources”,
“tag:GetResources”,
“tag:GetTagKeys”,
“cloudwatch:ListMetrics”,
“kinesisvideo:ListStreams”,
“sns:ListTopics”,
“sqs:ListQueues”,
“ec2:DescribeNatGateways”,
“ec2:DescribeSpotFleetRequests”,
“kinesis:ListStreams”,
“es:ListDomainNames”,
“cloudfront:ListDistributions”,
“firehose:ListDeliveryStreams”,
“elasticmapreduce:ListClusters”,
“kinesisanalytics:ListApplications”,
“elasticache:DescribeCacheClusters”,
“elasticfilesystem:DescribeFileSystems”,
“ecs:ListClusters”,
“redshift:DescribeClusters”,
“rds:DescribeDBClusters”,
“apigateway:GET”
],
“Resource”: “*”
}
]
}

Configurações no Dynatrace

Para realizar a configuração no Dynatrace basta acessar: 

Settings→Cloud and Virtualization→AWS Logo em seguida configurar conforme imagem abaixo: 

Aqui é necessário informar 

Nome da Conexão: {Colocar um nome logico conforme a subscription}

Access Key ID: {Pertinente ao usuário criado nos passos anteriores}

Secret access Key: {Criada nos passos anteriores}

Resources monitoring method: {Alterar para, Monitor resources selected by tag}

Essa opção define que somente componentes que tenham essa TAG serão monitoradas. 

Ao finalizar clique em salvar. 

Após alguns minutos já teremos as métricas capturadas.

Agora o ambiente AWS já está disponível e eventos a nível cloud serão identificados. 

Integrar uma aplicação React Native com o Dynatrace

Bem meus amigos, hoje resolvi voltar um pouco as raízes e com isso fazer algo um pouco diferente.

E o que seria diferente?

Montar a minha primeira app em React Native e de cara já integrá lo ao Dynatrace para acompanhar todas as métricas do usuário 😮

Incrível não é mesmo

Mãos a massa então Sayajin

Primeiro como vou focar na questão de integração então parto do pressuposto que você já tenha um aplicativo em React Native criado, caso não tenha tem um video legal do Canal Programador BR no YouTube, então segue o pessoal e monta a sua App beleza!

Inicialmente vamos precisar instalar o plugin do Dynatrace na aplicação.

No terminal na pasta raiz do app (no meu caso estou usando o terminal a partir do vscode).

Digite: npm i @dynatrace/react-native-plugin

Aguarde até terminar o download do plugin.

Exemplo da saída

Versões

Para versão: 0.60.0 ou superior: npm install @dynatrace/react-native-plugin

Versão inferior a 0.60.0: react-native install @dynatrace/react-native-plugin

No meu exemplo estou na 0.62

Na sequência rode o comando: npm install @dynatrace/react-native-plugin

Exemplo da saída

Registrar o Dynatrace no transformer

No diretório raiz do seu projeto, crie ou estenda (> = RN 0.59) metro.config.js (> = RN 0.57 – 0.58) rn-cli.config.js para que ele contenha a propriedade transformer.babelTransformerPath.

Abra o metro.config.js e adicione o Dynatrace conforme indicado abaixo:

babelTransformerPath: require.resolve(‘@dynatrace/react-native-plugin/lib/dynatrace-transformer’)

reporter: require(“@dynatrace/react-native-plugin/lib/dynatrace-reporter”)

Por fim agora precisamos obter o arquivo com as definições da própria instalação do seu Dynatrace.

No dynatrace, vá até Deploy e em Mobile app monitoring

Clique em Set up mobile monitoring 

Coloque um nome para o aplicativo no meu exemplo deixei testeReact

Clique em Create mobile app

Essa é a tela inicial, aqui é possível definir thresholds da aplicação e quantidade de dados capturados por Default vem definido em 100% aqui recomendo ajustar conforme a necessidade do negócio, atente se que quanto maior a captura maior o custo.

Em seguida clique em Instrumentation wizard 

Em seguida em React Native

Em seguida o que interessa para nós é o terceiro passo

Clique em Download dynatrace.config.js para fazer o Download do Arquivo.

Importe!

O arquivo já vem configurado para o seu enviroment do Dynatrace na qual já está definido o nome da aplicação e informações da instância da ferramenta.

Copie o arquivo para a raiz do projeto.

NOTA: Caso o mesmo já exista devido a instalação do plugin apenas substitua.

Ok, vamos o build e rodar o app

Digite no terminal: npm run instrumentDynatrace

Em seguida: npx react-native run-android

Aguarde até terminar

Finalizado, agora o seu aplicativo já está configurado.

Vamos ver os resultados.

Em aplicações na console Dynatrace localize a App que criou

Acesse e veja os dados aparecendo.

Agora é só aguardar.

Porém ainda é possível melhorar o Dynatrace permite adicionar ações personalizada para o aplicativo e ir muito além em suas analises.

Porém esse ponto vou deixar para outro tutorial futuro.

Espero que tenha contribuído mais um pouco com a comunidade e qualquer dúvida podem perguntar

Abraços e sucesso pessoal.

Monitorar conexões ativas com UserParameter

Geralmente quando a gente precisa trabalhar com user UserParameter já bate um desespero principalmente pra quem está começando.

E acreditem é perfeitamente normal, depois passa.

Mas hoje vamos mudar um pouco essa situação e criar um monitoramento de “Conexões Ativas” e de brinde vamos definir a porta em que queremos ter essa informação segregada.

No exemplo vou realizar essa configuração em uma maquina Windows Server 2016.

E vou criar um item no Host alvo do Zabbix.

Primeiro Passo – adicionar o UserParameter.

Nota: nos comandos usados pelo UserParameter, estarei usando o netstat 

Pra quem não conhece clique aqui.

Primeiro vamos testar o netstat

Abra o CMD do Windows e digite: netstat -ano | find /C "ESTABLISHED"

Mas então o que fizemos?

Sendo direto usamos o netstat – ano (para trazer todas as noxexões)

o find /C “ESTABLISHED” (contar todas as conexões estabelecidas)

O resultado na minha maquina foi de 67 conexões ativas.

Muito simples não é mesmo?

Agora vamos para o Zabbix Agent que está rodando no servidor.

Lá você deve incluir o seguinte argumento:

“Recomendo incluir na sessão de parameter (se atente as informações comentadas)”

UserParameter=sockstat.tcp.inuse.count, netstat -ano | find /C "ESTABLISHED"

Após incluir o argumento, salve o arquivo e reinicie o Zabbix Agent.

E vamos ao Zabbix agora.

Você deve ter observado que colocamos alguns dados a mais no argumento e isso é simples de entender.

UserParameter=sockstat.tcp.inuse.count, netstat -ano | find /C “ESTABLISHED”

O Primeiro informa que é um UserParameter

Na sequência a chave do parâmetro e um dos mais importantes dados.

Por fim o comando que será executado.

Com isso já conseguimos seguir para criação do item conforme exemplo.

Neste ponto você deve colocar o nome do Item.

Selecionar o type para Zabbix agent, tenha ciência que é um pre req. para esse monitoramento.

Key: Deve ser incluído o valor da chave que foi criada no passo anterior.

Type of information, deve seguir o tipo de dado obtido neste caso um inteiro.

Units, defina como sockets.

Update interval: Conforme a sua regra de negocio exigir.

No fim clique em Add, aguarde alguns instantes e o valor ficara disponível na ferramenta.

Exemplo abaixo:

Perfeito, concluímos o monitoramento das conexões usando o UserParameter.

Agora como prometido vou passar para vocês o Parâmetro para obter o valor por porta:

UserParameter=sockstat.tcp.count6005, netstat -an | find “6005” /c

Observem que a unica diferença foi adicionar a porta, muito simples.

Atente-se que os parâmetros são incluídos nos arquivos de configuração do Agent Ok.

Surpresa

Para que todos fiquem felizes.

Abaixo vou deixar uma listinha com todos os UserParameter que utilizo, assim já facilita pra quem esta começando e serve para estudo também, espero que aproveitem.

  • UserParameter=sockstat.sockets, netstat -ano | find /V “hola” /C
  • UserParameter=sockstat.tcp.inuse, netstat -ano | findstr ESTABLISHED
  • UserParameter=sockstat.tcp.inuse.count, netstat -ano | find /C “ESTABLISHED”
  • UserParameter=sockstat.tcp.orphan, netstat -ano | findstr CLOSE_WAIT
  • UserParameter=sockstat.tcp.orphan.count, netstat -ano | find /C “CLOSE_WAIT”
  • UserParameter=sockstat.tcp.timewait, netstat -ano | findstr TIME_WAIT
  • UserParameter=sockstat.tcp.timewait.count, netstat -ano | find /C “TIME_WAIT”
  • UserParameter=sockstat.tcp.allocated, netstat -ano | findstr LISTENING
  • UserParameter=sockstat.tcp.allocated.count, netstat -ano | find /C “LISTENING”
  • UserParameter=sockstat.udp.inuse, netstat -ano | findstr UDP
  • UserParameter=sockstat.udp.inuse.count, netstat -ano | find /C “UDP”

É isso pessoal, espero que o conteúdo ajude a quem está com esse tipo de duvida, porque apesar de simples no inicio de carreira considero um dos pontos mais complexos.

Abraços e bons estudos.

Zabbix-Proxy SQLite

Olá pessoal tudo bom com ocês rsrs.

Alguns amigos me perguntaram sobre como instalar um Zabbix Proxy, usando o SQLite e assim facilitando a vida quando o assunto e fazer a gestão de mais um banco.

Conceito do Proxie:

Um Proxy Zabbix pode coletar dados de performance e disponibilidade em nome do Zabbix Server. Desta forma o proxy transfere para sí parte da carga de processamento de coletar os dados que normalmente seria atribuída ao Zabbix Server.

Além disso, usar um proxy é a forma mais fácil de implementar uma monitoração com configuração centralizada, mas coleta distribuída, onde os agentes e proxies se reportam a um Zabbix Server e os dados são armazenados de forma centralizada.

Um Zabbix proxy pode ser usado para:

  • Monitorar localizações remotas
  • Monitorar localizações com conexão instável
  • Reduzir a carga de processamento no Zabbix Server quando este tem que monitorar milhares de dispositivos
  • Simplificar a manutenção da monitoração distribuída

O proxy requer apenas uma conexão com o Zabbix Server. Desta forma fica mais simples de se configurar as regras de firewall.

O Zabbix proxy precisa utilizar um banco de dados em separado. Se ele for configurado para usar o mesmo BD do Zabbix Server irá corromper a configuração.

Todos os dados coletados pelo proxy são armazenados de forma local temporariamente antes de transmiti-los para o Zabbix Server. Desta forma nenhum dado será perdido se ocorrerem problemas temporários de comunicação entre as partes. Os parâmetros ProxyLocalBuffer e ProxyOfflineBuffer no arquivo de configuração do proxy controlam a quantidade de dados que pode ser guardada localmente.

O Zabbix proxy é um coletor de dados. Ele não calcula triggers, processa eventos ou enviar alertas. Para uma visão geral do que um proxy é capaz de fazer, revise a tabela a seguir:

Funcionalidade Suportado pelo proxy
Itens
Zabbix agent checks (passivo) Sim
Zabbix agent checks (ativo) Sim 1
Simple checks Sim
Trapper items Sim
SNMP checks Sim
SNMP traps Sim
IPMI checks Sim
JMX checks Sim
Monitoração de logs Sim
Verificações internas Sim
SSH checks Sim
Telnet checks Sim
External checks Sim
Monitoração web Sim
Descoberta de rede Sim
Autobusca Sim
Calcular triggers Não
Processar eventos Não
Enviar alertas Não
Comandos remotos Não

Então vamos colocar a mão na massa.

“Dessa vez vou passar todo o descritivo de uma vez, o mesmo será realizado no CentOS”

Partindo do princípio que você já possui um servidor rodando o CentOS 7 (versão que vou utilizar neste exemplo).   

1. Instalar utilitários 
   
    yum install net-tools vim nano epel-release wget -y
 

2. Desabilitar SELINUX
   
    cat /etc/selinux/config
    vim /etc/selinux/config
    SELINUX=disabled
    reboot

 

3. Instalar repositório e pacotes do Zabbix 
   
    rpm -ivh http://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-release-4.2-2.el7.noarch.rpm
 

4. Instalar pacotes do Zabbix

   yum install zabbix-proxy-sqlite3 zabbix-agent zabbix-get zabbix-sender –y

6. Criar diretório do banco de dados
   
    mkdir /var/lib/zabbix
    cd /var/lib/
    chown zabbix. -R zabbix/

7. Editando o arquivo de configuração do Zabbix Proxy
   
    vim /etc/zabbix/zabbix_proxy.conf

– Edite os parametros:
     – ProxyMode=0
     – Server=<IP_ZABBIX_SERVER>
     – Hostname=<NOME_PROXY_QUE_SERA_CADASTRADO_NO_ZABBIX_SERVER>
     – DBName=/var/lib/zabbix/zabbix.db
     – DBUser=zabbix
     – ConfigFrequency=120 (apenas a primeira vez. Depois que se comunicar, pode eixar o valor padrão)
     – DataSenderFrequency=1 # Tempo de envio para o server em segundos
     – ProxyOfflineBuffer=24 # Tempo de buffer se o proxy ficar down.
 

8. Configurando inicialização e iniciando o serviço

    systemctl start zabbix-proxy
   systemctl enable zabbix-proxy
   systemctl status zabbix-proxy

9. Configurando o Zabbix Agent

   – Edite o arquivo /etc/zabbix/zabbix_agentd.conf
   
    vim /etc/zabbix/zabbix_agentd.conf
   
   – Edite os parametros:
     – Server=IP-DO-SERVIDOR
     – ServerActive=IP-DO-SERVIDOR
     – #Hostname=Zabbix server
  
   – Configurando inicialização e iniciando o Zabbix Agent
    
    systemctl enable zabbix-agent
    systemctl start zabbix-agent
    systemctl status zabbix-agent

Após todo esse processo, o Proxy estará ativo e bastando apenas configurar o mesmo na interface do Zabbix como mostrado abaixo:

Para configurar um proxy:

Acesse Administração → Proxies

Clique no botão Criar proxy

A aba Criptografia permite que as comunicações com o proxy sejam mais seguras.

Configuração do host

Você pode associar a monitoração de um host para que seja feita através de um proxy simplesmente modificando a configuração do host, usando o campo Monitorado pelo proxy.

O processo de atualização em massa de hosts é outra forma de especificar quais hosts serão monitorados por um proxy.

Com isso terminamos esse pequeno artigo sobre Zabbix Proxy e assim fechando mais uma etapa do Ciclo Zabbix.

Abraço a todos e boa semana.

Criando um Zabbix Proxy

Pessoal, tudo bom com vocês?

Bem hoje vou falar de um tema super importante quando falamos de Zabbix que é o Zabbix-Proxy.

E porque isso é importante?

Simples, primeiro dividir carga, segundo segregar a coleta do processamento, dessa forma o Proxy fica responsável pela coleta dos dados e o server unicamente pelo processamento.

Instalando o Zabbix-Proxy

Para configurar esse Proxy vou usar um Linux – CentOS 7.

Primeiramente vamos adicionar o repo do Zabbix.

rpm --import http://repo.zabbix.com/RPM-GPG-KEY-ZABBIX
rpm -Uvh https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-release-4.2-2.el7.noarch.rpm

Perfeito agora vamos instalar o Zabbix-Proxy

yum install zabbix-proxy-mysql

Como banco de dados vou utilizar o Maria-db que usa a mesma engine do MySQL porém este é gratuito mesmo para fins corporativos.

yum install mariadb-server

Apos a instalação do DB vamos colocar na inicialização do sistema para iniciar.

systemctl enable mariadb && systemctl start mariadb

Agora vamos iniciar as configurações iniciais do MariaDB e definir o password do “root”

mysql_secure_installation
mysql -u root -p

Em seguida devemos criar a base do Zabbix-Proxy (lembre-se que deve estar logado no banco para isso)

create database zabbix_proxy;

Agora vamos dar privilegio total para o usuário do Zabbix na base do zabbix_proxy.

grant all privileges on zabbix_proxy.* to zabbix_user@localhost identified by 'zabbix' ;
flush privileges;
exit;

Agora temos que importar o schema  e os dados para o banco.

# zcat /usr/share/doc/zabbix-proxy-mysql*/schema.sql.gz | mysql -u zabbix_user zabbix_proxy -p

Agora devemos configurar o Zabbix proxy para acesso ao banco.

“Aqui vou utilizar o editor nano, mas fique a vontade para usar o que melhor te atenda como vi ou vim por exemplo. “

Os arquivos de configuração encontram-se em:

nano /etc/zabbix/zabbix_proxy.conf

O que deve ser alterado é

Server=(IP do Zabbix Server)
Hostname=(Nome do Zabbix-Proxy)
DBName=zabbix_proxy
DBUser=zabbix_user
DBPassword=zabbix

Libere as seguintes entradas no OS.

firewall-cmd --permanent --add-port=10050/tcp
firewall-cmd --permanent --add-port=10051/tcp
firewall-cmd --reload

Agora vamos adicionar o serviço na inicialização e inicializar o mesmo.

systemctl enable zabbix-proxy
systemctl start zabbix-proxy

Agora observe o log do Zabbix Proxy para garantir que tudo esteja bem:

cat /var/log/zabbix/zabbix_proxy.log

Você também pode garantir que o servidor esteja executando com isso:

netstat -anp | grep zabbix_proxy

Configurar o Zabbix Proxy no Zabbix Server

  • Vá para: Administração → Proxies
  • Clique em Criar proxy

Modo ativo -> o proxy será o que se conectará ao servidor e enviará os dados.

Modo passivo -> o servidor será o único a se conectar ao servidor e obterá os dados.

hosts proxy -> é o servidor que você deseja monitorar através do servidor proxy

Você também pode definir a comunicação de criptografia (recomendado)

Bem por hoje é isso amigos, qualquer duvida fiquem a vontade para me perguntar.

Abraços.

Usando o Zabbix Sender

Olá pessoal, quanto tempo não é verdade.

Já estava com saudades de escrever os artigos, mas graças a Deus, e um bom planejamento as demandas se estabilizaram na empresa, então posso ajudar contribuindo um pouco mais com a comunidade.

Mas para que serve isso?

Assim surge uma perguntar crucial, qual o motivo de usar isso? Um agente instalado não seria melhor?

Ok, jovem! Como um professor meu falava: “ cada caso é um caso.”

Realmente se a intenção é realizar monitoramento de infra estrutura clássica (servidores, rede, etc), não faz sentido a principio.

Porém, imagine a seguinte situação, você possui uma aplicação em Python que faz alguma rotina (exemplo comparação de dados), e ao final ela devolve um valor (ok, not ok), e é necessário ter esse retorno de uma forma muito rápida.

Imaginando isso, seria inviável salvar essa informação em um Banco de dados e em seguida para criar um sensor na ferramenta e ler o dado, indo mais além, criar mais um step na aplicação que poderia ser uma API para ler o valor do banco e na sequência usar o Zabbix para chamar o endpoint e aí sim ter a métrica.

Nesta situação, é o que uso no Zabbix Sender é interessante, porque você elimina diversos steps e manda a informação direto para o monitoramento.

“Para quem tem mais conhecimento em rede o Sender se assemelha a um Trap SNMP”

Depois da explicação “básica”, vamos ao que interessa, que é: Zabbix Sender com Python. 🙂

Primeiro temos que criar um host no Zabbix (Não é necessário configurações especiais)

O próximo passo é criar um item conforme as imagens abaixo:

Clique em create item

Para as configurações:

Name: Coloque o nome do item que vai monitorar, aqui estou usando Trapper Item

Type: Zabbix trapper

Key: Coloque um identificador de fácil compreensão sem espaços (essa informação será usada mais tarde no python, anote!), no meu caso usei: sendertrap.

Perfeito! Já possuimos tudo o que precisamos, agora vamos ao nosso grande pequeno script.

Aqui vou utilizar o VSCode mas pode usar a IDE que achar melhor 🙂

Primeiramente vamos instalar os módulos necessários com o comando:
pip install py-zabbix

Agora importe o modulo da seguinte forma:
from pyzabbix import ZabbixMetric, ZabbixSender

Para enviar a métrica faça isso:

packet = [ ZabbixMetric(‘NOME_DO_HOST_CRIADO’, ‘sendertrap’, valor),]

Neste estágio você pode observar que passei uma variável “valor”, isso porque não vou passar o dado fixo, claro se quiser fazer isso basta trocar a variável pelo valor de sua preferência.

Por fim vamos encaminhar os dados para o Zabbix:
result = ZabbixSender(zabbix_server=’192.168.120.96′, zabbix_port=10051, use_config=None, chunk_size=250, socket_wrapper=None, timeout=10).send(packet)

Observe que não existe segredos aqui passamos o endereço do Server Zabbix ou Zabbix Proxy (no meu caso é um Zabbix Proxy, que é a melhor opção sempre).

Observe que não existe segredos aqui, passamos o endereço do Server Zabbix ou Zabbix Proxy (no meu caso é um Zabbix Proxy, que é a melhor opção sempre).

O Script inteiro fica dessa forma: 

O Script inteiro fica dessa forma:

Link GitHub

Se prestar atenção vai observar que tem uma adição que entrega o valor 8 (1+8) para a variável “valor”, vou fazer algumas execuções com valores maiores e menores para ver o resultado.


Bem é isso ai pessoal, tudo funcionando.

Espero que as dicas de hoje possam ajudar e qualquer duvida fiquem a vontade para perguntar.

Link para fonte no github: https://github.com/rafapil/zabbix_sender

Github e Android Studio Part 2

Bom, depois de certo tempo afastado para arrumar algumas questões referente ao meu trabalho, vamos dar um start na segunda parte do nosso post sobre Github e Android Studio.

Como eu habilito o controle de versionamento no Android Studio? Simples…

Primeiro, vá até VCS, clique em Enable version Control Integration, irá abrir uma pequena tela, com um combo box para selecionar o sistema de versionamento, escolha o Github.

Selecionando a opção do Github, dando ok, ele define o repositório do seu app, que fica na pasta AndroidStudioProjects/nome-do-app , como um repositório local versionado, podem reparar que todos os arquivos da sua aplicação irão ficar vermelhos, isso significa que eles ainda não foram commitados.

Agora, será  necessário criar um repositório remoto, que é chamado de origin. Para que seja enviado para o Github, deve ser acessado o menu VCS, podem reparar que ele possui  novas opções, uma delas se chama Import into Version Control. Em seu submenu, clique em Share Project on GitHub, será solicitado a sua senha do Github, irá abrir uma tela informando o nome do repositório remoto no GitHub, como dito anteriormente, o nome remoto padrão é origin.

Caso queira adicionar alguma descrição em seu projeto, terá uma área disponível texto para preencher, além disso tem um checkbox a ser marcado, caso seu projeto seja privado. Depois que tudo estiver preenchido clique em Share.

Com todos os procedimento realizados, irá aparecer uma mensagem na IDE, dizendo que o diretório foi criado, isso significa que todos os seus arquivos foram enviados para o repositório remoto.

Vai aparecer uma tela informando os arquivos que vão ser enviados ao GitHub e um campo de texto para colocar uma mensagem inicial.

Para enviar arquivos que foram modificados, basta clicar com o botão direito no arquivo ou na pasta raiz do projeto, caso seja mais de um arquivo vá na opção Git e depois em Commit Directory, vai abrir uma tela com a lista dos arquivos modificados, poderá adicionar uma mensagem nesse commit, para que possa identificar o que foi mudado naquele arquivo por último, depois clique no botão azul chamado Commit, apenas coloque a seta do mouse em cima dele que irá aparecer outras opções, escolha Commit and Push, vai aparecer a tela do Push, clique neste botão, logo depois disso as atualizações do seu código estarão seguras no seu repositório remoto no GitHub, sem precisar dar uma linha de código no console.

Logo que você Commita direto na IDE, é possível ver em tempo real as informações no repositório remoto do seu GitHub.

Bem pessoal por hoje é isso, logo mais trago a última parte.

E Muito obrigado a todos pelos Feedbacks.

Github e Android Studio Part 1

No post de hoje vou falar de uma duvida que escuto constantemente principalmente de quem está iniciando que é, como usar o GitHub no Android Studio.

Esse artigo é destinado para quem não possuem um conhecimento com versionamento e git, mas espero que todos possam tirar algum proveito das informações.

Para não ficar extremamente longo esse post vou dividir o mesmo em três partes, essa sendo a mais simples e voltada para quem está iniciando e quer apenas fazer um clone de algum repositório no Github.

Lets go.

Bem a primeira coisa que você deve ter em mente é para usar o GitHub terá que ter o Git instalado, então faça o Download em: https://git-scm.com/downloads (faça o download conforme sua plataforma, porém vou realizar o processo no Windows, caso alguém queira ajuda pra configurar no Linux ou MAC deixe nos comentários, quem sabe não rola outro post).

Então vamos instalar o Git












Checkout

Primeiro vamos baixar um projeto ja criado no github, vamos clicar em Check out project from Version Control

Agora vamos clicar em GitHub

Agora vamos fazer o login com o nosso usuario do github.

Caso você já tenha realizado login outra vez a tela apresentada será essa, pedindo o caminho (URL) do repositório.

Apos o login efetuado, vamos definir os seguintes ponto

  1. Git Repository URL: URL do projeto no github
  2. Directory: Diretorio onde vai ficar salvo o projeto
  3. Apos preencher os 2 campos, vamos clicar em Clone

Caso aparece esse dialog de confirmação, clique em Yes

Projeto baixado com sucesso e já configurado para realizar qualquer procedimento do git.

Commit

No android studio para realizarmos o comando de commit, iremos clicar no seguinte ícone

Sera mostrado um dialog com os arquivos que foram alterados, basta clicar em Commit e suas alteração subirão para o servidor.

Push

Vamos agora efetuar o comando de Push, para baixar as alterações do servidor para seu repositório local, vamos clicar no seguinte ícone.

No dialog que sera apresentado vamos marcar a opção Branch Default e Using Stash e vamos clicar em OK

Em seguida sera dado inicio a atualização do projeto.

Status dos arquivos em um projeto com a configuração do git

realizar o processo de commit, esse arquivo não ira para o repositório remoto.

Arquivo adicionado no projeto e já foi preparado para o git, quando você realizar o processo de commit, esse arquivo ira para o repositório remoto.

Arquivo quando foi realizado alguma modificação

 

 

Então por hora é isso colegas. 

Como mencionei no inicio deste post vou ter que dividir em três partes porque tem bastante coisa, mas assim creio que ficara mais simples pra quem está começando, e também para aqueles que já tem uma certa experiência. 

 

Bem é isso e até a próxima. (Android Wins rs)

Zabbix Criar SLA Tree

Olá colegas, hoje quero falar de uma necessidade que surgiu do nada aqui na empresa, que foi criar a arvore de SLA do Zabbix.

Quando chegou o pedido ele foi dessa forma, precisamos disso para amanhã, então respirei fundo e pensei como posso fazer isso rápido, eu tenho mais de mil itens monitorados na ferramenta.

A solução foi usar o nosso amigo Python e um pouco de criatividade com os códigos rsrs.

Então sem demoras vamos a melhor parte que é fazer isso funcionar.

OBS. Neste código vou postar como remover a arvore antiga e criar uma nova se o seu caso for como o meu em que não existe a arvore de SLA mantenha comentado o trecho do “def” que remove a mesma ok, outro ponto recomendo fortemente que teste e ajuste o fonte se necessário usando alguma ferramenta que não esteja em produção. E deixo claro que qualquer erro, ou problema é exclusivamente de sua responsabilidade. 

Primeiramente vamos conectar no Zabbix.

import urllib.request as urllib2

from zabbix_api import ZabbixAPI

zapi = ZabbixAPI(server=”http://192.168.120.193/zabbix”)

zapi.login(“Admin”, “senha do usuario”) 

Agora criar as def para Grupos, Hosts, Triggers e Itens

def obterGrupos():

    hostgroups = zapi.hostgroup.get({ “output”: “extend”, “real_hosts”: True })

    listaGrupos = []

    for x in hostgroups: listaGrupos += [x[‘name’]]

    return listaGrupos

def obterGrupoId(nomeGrupo):

     groupId = zapi.hostgroup.get({ “output”: “extend”, “filter”: { “name”: nomeGrupo } })[0][‘groupid’]

     return groupId

def obterHosts(nomeGrupo):

    hosts_grupo = zapi.host.get({ “groupids”: obterGrupoId(nomeGrupo), “output”: [ “host” ] })

    listaHosts = []

    for x in hosts_grupo: listaHosts += [x[‘host’]]

    return listaHosts

def obterHostId(nomeHost):

    hostId = zapi.host.get({ “output”: “hostid”, “filter”: { “host”: nomeHost } })[0][‘hostid’]

    return hostId

def obterTriggersHosts(nomeHost):

    triggers = zapi.trigger.get({ “hostids”: obterHostId(nomeHost), “expandDescription”: “true”, “expandComment”: “true”, “expandExpression”: “true” })

    for x in triggers: print (x[‘description’])

def obterItens(nomeHost):

    itens = zapi.item.get({ “hostids”: obterHostId(nomeHost), “with_triggers”: True, “selectTriggers”: “extend” })

    listaItens = []

    for x in itens: listaItens += [x[‘name’]]

    return listaItens

def obterItemTriggerId(nomeHost,nomeItem):

    triggerId = zapi.item.get({ “output”: “triggers”,”hostids”: obterHostId(nomeHost), “with_triggers”: True, “selectTriggers”: “triggerid”, “filter”: { “name”: nomeItem } })[0][‘triggers’][0][‘triggerid’]

    return triggerId

E a partir desse ponto vamos começar as def para criar a
arvore de SLA

def criarServicosPai(nomeGrupo):

    zapi.service.create({ “name”: nomeGrupo, “algorithm”: “1”,”showsla”: “1”, “goodsla”: “99.99”, “sortorder”: “1” })

def obterServicosPai(nomeGrupo):

    parentId = zapi.service.get({ “selectParent”: “extend”, “selectTrigger”: “extend”, “expandExpression”: “true”, “filter”: { “name”: nomeGrupo }})[0][‘serviceid’]

    return parentId

def criarServicosFilho(nomeHost,nomeGrupo):

    zapi.service.create({ “name”: nomeHost, “algorithm”: “1”, “showsla”: “1”, “goodsla”: “99.99”, “sortorder”: “1”, “parentid”: obterServicosPai(nomeGrupo)})

def obterServicosFilho(nomeHost):

    parentIdChild = zapi.service.get({ “selectParent”: “extend”, “selectTrigger”: “extend”, “expandExpression”: “true”, “filter”: { “name”: nomeHost } })[0][‘serviceid’]

    return parentIdChild

def criarItensServicos(nomeHost,nomeItem):

    zapi.service.create({ “name”: nomeItem, “algorithm”: “1”, “showsla”: “1”, “goodsla”: “99.99”, “sortorder”: “1”, “parentid”: obterServicosFilho(nomeHost), “triggerid”: obterItemTriggerId(nomeHost,nomeItem)})

def obterServicos():

    itServices = zapi.service.get({ “selectParent”: “extend”, “selectTrigger”: “extend” })

    listaServicos = []

    for x in itServices: listaServicos += [x[‘serviceid’]]

    return listaServicos

Neste ponto vou criar um def que remove a arvore de SLA
antiga.

def removerArvoreServicos():

    for x in obterServicos():

        zapi.service.deletedependencies([x])

        zapi.service.delete([x])

Por fim criamos a nossa nova arvore de SLA com nossos itens
e triggers

def criarArvoreServicos():

    # removerArvoreServicos()

    for nomeGrupo in obterGrupos():

        criarServicosPai(nomeGrupo)

        for nomeHost in obterHosts(nomeGrupo):

            criarServicosFilho(nomeHost, nomeGrupo)

            for nomeItem in obterItens(nomeHost):

                criarItensServicos(nomeHost, nomeItem)

criarArvoreServicos()

Observem que assim como mencionei acima, deixei a função responsável por deletar a arvore antiga comentada. (Tomem cuidado com essa opção)

No fim vocês terão um resultado semelhante a este:

Por hora é isso pessoal, espero que todos tenham gostado e caso queiram dar uma força, curtam lá no linkedin.

Abraços.

Zabbix – Desabilitar itens não suportados.

Ter itens não suportados no Zabbix é um problema que comumente enfrentamos, pois em muitos casos um determinado template pode possuir sensores não suportados por nossos devices.

O que não é um problema a nível de usuário que apenas usa a ferramenta, agora quando pensamos em performance isso muda completamente o cenário.

Bem então o que devemos fazer? Desabilitar estes itens correto?

A resposta é sim.

Mas observe o seguinte case desabilitar manualmente pode ser uma solução quando falamos de poucos hosts, agora imagine que a ferramenta tenha 5000 hosts ativos, quanto tempo levaria para entrar em cada um destes e desativar o que não foi suportado?

Seria algo muito inviável.

“Pessoal somente um adendo que foi passado por um dos melhores especialistas Zabbix do país. É interessante tratar os itens suportados, desabilitar na minha visão são em casos extremos, se o device não suporte uma ou outra OID, a solução é filtrar via regexp esse ambiente para não criar os itens ou dividir em templates.

Por Jorge Pretel”

Então que tal criar um simples script em Python para resolver toda essa situação?

Provavelmente você deve se perguntar, mas é possível fazer isso? Minha resposta é sim, o Zabbix permite que diversas ações administrativas sejam realizadas por sua API o que permite em muitos casos um ganho de tempo incrível assim como customizações para facilitar a o máximo a vida do administrador.

Partindo para o código:

Você vai precisar do seu editor preferido para trabalhar com Python, aqui estou usando o Visual Studio Code (ferramenta gratuita e fácil de usar).

Python 3.0

Biblioteca ZabbixAPI (pode efetuar o download em: https://pypi.org/project/zabbix-api/ ou instalar a mesma usando o comando pip # pip install zabbix-api).

O primeiro bloco temos os imports necessários:

Um print que mostra a versão da ferramenta

No segundo temos o endereço do servidor Zabbix o usuário e senha que serão usados.

E logo em seguida a variável resultado que recebe os valores de zapi.item.get

Observe que na solicitação estou deixando o groupids definido isso porque quero apenas desabilitar valores não suportados neste grupo.

Caso deseje executar para todo o parque basta omitir essa linha (comentar).

Abaixo temos a opção “monitored”: True (ela por si só já tem o significado declarado, que é apenas verificar hosts ativos no Zabbix). Por fim temos um laço que vare o resultado e imprime no console o id dos itens desabilitados.

Se desejar poderá incluir outros dados na saída para uma melhor identificação.

Então com estas poucas linhas um trabalho que poderia ser muito oneroso se torna extremamente simples.

Espero ter ajudado com essa pequena dica.

E logo estaremos de volta com mais novidades.