* Para realizar monitoramento em um IC (Item de configuração), é necessario seguir os passos abaixo:
1 - Cadastrar um Host group, acesse o console do Zabbix e clique em Configuration > Host groups > Create host group
2 - Cadastrar um Templates, acesse o console do Zabbix e clique em Configuration > Templates > Create template
2.1 - Criar os Applications, Items Triggers, Graphs,Sceens, Discovery e Web
3 - Cadastrar o Host, acesse o console do Zabbix e clique em Configuration > Hosts > Create host
3.1 - Definir a group
3.2 - Definir a interface
3.3 - Link com o/os Template
3.4 - Criar os Applications, Items Triggers, Graphs,Sceens, Discovery e Web caso não seja atendido pelo template.
* Cadastro inicial
Host groups / Templates / Hosts / Maintenance / Actions
* Cadastro Web scenarios
https://www.youtube.com/watch?v=O8R9cQIF_R4
* Acesse uma conta Users e ajuste o parâmetro Media para qual email será enviado.
* Criar o host
Nome: <Hostname>
Group: <Change_group>
Agent interfaces: <IP> Port: 0
Template: Template ICMP Ping
Update
- Link
* Realize a instalação do pacote SNMP
# apt-get install snmp snmp-mibs-downloader
* Ajuste a configuração do SNMP
# vi /etc/snmp/snmp.conf
# mibs : <- comente a linha
* Realize o dowload das MIBS
# download-mibs
* Reinicie o serviço Zabbix Server
# /etc/init.d/zabbix-server restart
* O comando abaixo testa a captura das informações
# snmpwalk -v2c -c <COMMUNITY> <IP> <ATRIBUTOS>
OPCIONAL
# snmpwalk -v2c -c public 10.0.0.45 | head -5
iso.3.6.1.2.1.1.1.0 = STRING: "HP V1910-48G Switch Software Version 5.20, Release 1513P85
Copyright(c) 2010-2014 Hewlett-Packard Development Company, L.P."
iso.3.6.1.2.1.1.2.0 = OID: iso.3.6.1.4.1.25506.11.1.85
iso.3.6.1.2.1.1.3.0 = Timeticks: (163731915) 18 days, 22:48:39.15
iso.3.6.1.2.1.1.4.0 = STRING: "SUPORTE TECNICO"
# snmpwalk -v2c -c public 10.0.0.45 iso.3.6.1.2.1.1.4.0
iso.3.6.1.2.1.1.4.0 = STRING: "SUPORTE TECNICO"
* Alguns links 1 / 2 / 3 de referencias que auxiliaram na captura de valores para a criação de template e triggers.
* No link e possivel encontrar templates, modules e mais.
Server
* Para que o gerenciamento JMX funcione é necessário Instalar o pacote do agent JAVA no Zabbix Server
# apt-get install -t jessie-backports openjdk-8-jdk-headless
# apt-get install zabbix-java-gateway
# vi /etc/zabbix/zabbix_server.conf
JavaGateway=127.0.0.1
JavaGatewayPort=10052
StartJavaPollers=5
Timeout=15 -> Ajustado para 20 pois conexoes externas a rede requerem mais tempo
# systemctl enable zabbix-java-gateway.service
# systemctl restart zabbix-java-gateway.service
* Verifique o funcionamento se a porta esta escutando
# netstat -anp | grep 10052
Cliente
* Configuração no serviço Wildfly-9.0.2-final, adicione ao final do arquivo standalone.conf
# vi /home/wildfly/bin/standalone.conf
if [ "x$JBOSS_MODULES_SYSTEM_PKGS" = "x" ]; then
JBOSS_MODULES_SYSTEM_PKGS="org.jboss.byteman,org.jboss.logmanager"
fi
JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=<IP_SERVER_Wildfly> -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.rmi.port=12346 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.util.logging.manager=org.jboss.logmanager.LogManager -Xbootclasspath/p:/home/wildfly/modules/system/layers/base/org/jboss/log4j/logmanager/main/log4j-jboss-logmanager-1.1.2.Final.jar -Xbootclasspath/p:/home/wildfly/modules/system/layers/base/org/jboss/logmanager/main/jboss-logmanager-2.0.0.Final.jar"
* Configuração no serviço Wildfly-10.0.0-final, adicione ao final do arquivo standalone.conf
# vi /home/wildfly/bin/standalone.conf
if [ "x$JBOSS_MODULES_SYSTEM_PKGS" = "x" ]; then
JBOSS_MODULES_SYSTEM_PKGS="org.jboss.byteman,org.jboss.logmanager"
fi
JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=<IP_SERVER_Wildfly> -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.rmi.port=12346 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.util.logging.manager=org.jboss.logmanager.LogManager -Xbootclasspath/p:/home/wildfly/modules/system/layers/base/org/jboss/log4j/logmanager/main/log4j-jboss-logmanager-1.1.2.Final.jar -Xbootclasspath/p:/home/wildfly/modules/system/layers/base/org/jboss/logmanager/main/jboss-logmanager-2.0.3.Final.jar"
* Liberar no firewall as portas
INPUT TCP 12345 e 12346
* Reinicie o serviço Wildfly
# /etc/init.d/wildfly-init-debian.sh restart
* Configure o host no Zabbix para conectar nas portas de comunicação
* O Zabbix utiliza a URI para comunicação
service:jmx:rmi:///jndi/rmi://<IP>:12345/jmxrmi
* Importar o template JMX
* Criada Trigger de monitoramento
# vi /tomcat/bin/setenv.sh
export JAVA_OPTS="${JAVA_OPTS} -Djava.rmi.server.hostname=<IP_SERVER> -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.rmi.port=12346 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
# cd /home/wildfly
# wget http://zorka.io/files/zorka-1.0.15.zip
# unzip zorka-1.0.15.zip
# mv zorka-1.0.15 zorka
# cd zorka
# vi zorka/zorka.properties
scripts = jvm.bsh, zabbix.bsh, jboss/jboss7.bsh
zorka.spy.compute.frames = yes
zabbix.server.addr = 10.0.0.61
zabbix.listen.port = 10055
zorka.hostname = wildfly
# vi bin/standalone.conf
if [ "x$JBOSS_MODULES_SYSTEM_PKGS" = "x" ]; then
JBOSS_MODULES_SYSTEM_PKGS="org.jboss.byteman,com.jitlogic.zorka.core.spy"
fi
# No final do arquivo adicionar a linha abaixo
JAVA_OPTS="$JAVA_OPTS -javaagent:/home/wildfly/zorka/zorka.jar=/home/wildfly/zorka"
* Reinicie o serviço Wildfly
# /etc/init.d/wildfly-init-debian.sh restart
* Criar o host com configuração de agente apontando para o agente Zabbix(10050) e para o agent Zorka(10055), conforme abaixo:
* Importar os templates Zorka para monitoramento, no diretório descompactado do Zorka existe o diretório template.
* Templates adicionados:
Template_Zorka_JVM <- este template tem link com o Template App Zabbix Agent
Template_Zorka_JBoss7_RequestProcessors
Template_Zorka_JBoss7_Servlets
* Para monitorar a database MS SQL Server, baixar o template e importar no servidor Zabbix.
* No servidor com MS SQL Server liberar no firewall a porta 10050 e/ou o executavel zabbix_agentd.exe
* Adicionar o template ao host que será monitorado e usará o Zabbix Agent para coletar.
* Valores padrão para triggers.
MySQL
* O monitoramento de MySQL faz uso do Zabbix-Agent, portanto a única porta a ser utilizada e a do próprio Zabbix-Agent.
* Criar e ajustar permissão de acesso a usuário para monitorar
msql -u root -p
> GRANT USAGE ON *.* TO 'monitor'@'127.0.0.1' IDENTIFIED BY '<SENHA>'; <- USAGE é sem privilegios
> flush privileges;
Nota: Para a senha não usar caracteres especiais, pois possivelmente ira ter falha na ação de pesquisa.
Link: 1 /
# apt-get install socat
* No servidor do com HAProxy
# cd /home
# git clone https://github.com/anapsix/zabbix-haproxy.git
Ou
# wget https://github.com/anapsix/zabbix-haproxy/archive/master.zip
* Copie para o arquivo userparameter_haproxy.conf para o diretório zabbix_agentd.conf.d
# cd /home/zabbix-haproxy/
# cp -a userparameter_haproxy.conf /etc/zabbix/zabbix_agentd.conf.d/
* No arquivo /etc/zabbix/zabbix_agentd.conf verifique se a linha Include=/etc/zabbix/zabbix_agentd.conf.d/ esta descomentada.
* Copie os arquivos haproxy_discovery.sh e haproxy_stats.sh para o diretório /usr/local/bin
# cp -a haproxy_discovery.sh haproxy_stats.sh /usr/local/bin/
* No arquivo de configuração do HAProxy altere a linha stats socket
# vi /etc/haproxy/haproxy.cfg
De:
stats socket /var/run/haproxy/admin.sock mode 660 level admin
Para:
stats socket /var/run/haproxy/info.sock mode 666 level user
* Reinicie o Zabbix Agent
* No servidor Zabbix
* Baixe o pacote do Zabbix-HAProxy, porem o template.xml que acompanha apresentou problemas e foi atualizado no link.
* Importe o template e ajuste a macro {$HAPROXY_SOCK} = /var/run/haproxy/info.sock
* Aplique no host desejado
- Referencia 1 / 2
* No servidor XenServer caso tenha realizada a instalação dos pacotes SNMP execute a atualização
# download-mibs
* Acesse via SSH o servidor XenServer
* Edite o arquivo de configuração de firewall e adicione a linha abaixo antes da linha de REJECT
# vi /etc/sysconfig/iptables
# Monitoramento
-A RH-Firewall-1-INPUT -m conntrack --ctstate NEW -m udp -p udp --dport 161 -j ACCEPT
* Reinicie o serviço de firewall
# service iptables restart
* Edite o arquivo de configuração do SNMP e ajuste para a COMMUNITY de sua estrutura
# vi /etc/snmp/snmpd.conf
com2sec notConfigUser default <COMMUNITY>
...
syslocation Datacenter001
syscontact SuporteTecnico <suportetecnico@domain.com>
* Reiniciar o serviço SNMP e ative para iniciar automaticamente.
# service snmpd restart
# chkconfig snmpd on
http://monitoringartist.github.io/zabbix-switch-template-generator/
* Ajuste as configurações do Bind conforme.
* Baixar o plugin do repositório
# git clone https://github.com/Prototype-X/Zabbix-Bind9-Statistics-Collection.git
* Copie o userparameter_bind.conf para /etc/zabbix/zabbix_agentd.conf.d
* Copie o script bind-stats.py para /usr/local/bin/ (Ou outro local, mas será necessario alterar o conteudo do arquivo userparameter_bind.conf)
* Ajuste a permissão
# chmod 755 /usr/local/bin/bind-stats.py
* Importe o xml template para o Zabbix (zbx_bind_statistics_template_v3.xml para Zabbix 3.X.X)
* Realizei a criação do Template ATS AP7730 devido a não encontrar nenhum para este modelo. Talvez seja necessário criar os mapeamentos, segue imagem abaixo demonstrando:
Load Battery
* Criada Trigger de monitoramento do tempo de carga da bateria
* Criada Action para alerta diário (86400 sec) caso nível da bateria seja alcançado
* No link do Zabbix Share tem o compartilhamento do template para NGINX.
* O agente zabbix deve estar instalado e configurado, pois é pré-requisito para uso .
* Ajustar o site default do NGINX ativando a função Status.
server {
listen 80;
server_name _;
...
location /stub_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
}
* Valide a configuração e reinicie o NGINX
# nginx -t
# /etc/init.d/nginx restart
* Para validar acesse http://<IPSERVER>/stub_status
* Criar a conexão entre o Zabbix e o serviço NGINX
# vi /etc/zabbix/zabbix_agentd.conf.d/userparameter_nginx.conf
UserParameter=nginx.status[*],/usr/local/bin/nginx_stats.sh $1
* Criar o diretório
# mkdir -p /srv/zabbix/libexec
* Criar o script de coleta em /usr/local/bin/nginx_stats.sh e ajustar os parâmetros em negrito
#!/bin/bash
HOST="127.0.0.1" <- Ajustar a porta conforme necessário
PORT="80" <- Ajustar a porta conforme necessário
stub_status=stub_status
function check() {
/bin/pidof nginx | wc -l
}
function active() {
/usr/bin/curl -s "http://$HOST:$PORT/${stub_status}/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
}
function accepts() {
/usr/bin/curl -s "http://$HOST:$PORT/${stub_status}/" 2>/dev/null| awk NR==3 | awk '{print $1}'
}
function handled() {
/usr/bin/curl -s "http://$HOST:$PORT/${stub_status}/" 2>/dev/null| awk NR==3 | awk '{print $2}'
}
function requests() {
/usr/bin/curl -s "http://$HOST:$PORT/${stub_status}/" 2>/dev/null| awk NR==3 | awk '{print $3}'
}
function reading() {
/usr/bin/curl -s "http://$HOST:$PORT/${stub_status}/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
}
function writing() {
/usr/bin/curl -s "http://$HOST:$PORT/${stub_status}/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
}
function waiting() {
/usr/bin/curl -s "http://$HOST:$PORT/${stub_status}/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
}
case "$1" in
check)
check
;;
active)
active
;;
accepts)
accepts
;;
handled)
handled
;;
requests)
requests
;;
reading)
reading
;;
writing)
writing
;;
waiting)
waiting
;;
*)
echo $"Usage $0 {check|active|accepts|handled|requests|reading|writing|waiting}"
exit
esac
* Ajustar as permissões
# chmod +x /usr/local/bin/nginx_stats.sh
* Testar a coleta
# /usr/local/bin/nginx_stats.sh accepts
39220
Ou
# curl -s "http://localhost:81/stub_status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
* Caso nos testes apresente <body, ajustar o valor abaixo no site default conforme necessário.
Para:
server _;
Ou para:
server localhost;
* Reiniciar o Zabbix Agent
# /etc/init.d/zabbix-agent restart
* Avalie as informações coletadas no Zabbix.
Nota: Antigo local de armazenamento /srv/zabbix/libexec/nginx.sh
* Instalar o pacote
# apt-get install sshpass
* Acessar Zabbix server e baixar o pacote
# wget https://github.com/pacotudel/Zabbix-IBM-V3700/archive/master.zip
# unzip master.zip
# cd Zabbix-IBM-V3700-master/
* Mova e altere a permissão
# cp v3700_status.sh /usr/lib/zabbix/externalscripts/
# chmod +x /usr/lib/zabbix/externalscripts/v3700_status.sh
* Acesse o storage v3700 e crie usuario com perfil monitor
* Realize acesso por ssh do servidor Zabbix ao storage v3700
* Acesse o arquivo .ssh/known_hosts do usuario corrente que acessou e copie a chave
* Crie o arquivo know_hosts em:
# touch /var/lib/zabbix/.ssh/known_hosts
* Cole a chave no arquivo criado
Nota: O servidor Zabbix deve estar liberado na regra de OUTPUT para a porta 22/TCP
* Importe o template
* Configure a macro do template importado com as informações:
{$CABIP1} = <IP ou hostname>
{$CABUSER} = <USER>
{$CABPASS} = <PASSWORD>
De
vm.memory.size[available]
Para
vm.memory.size[free]
* Essa alteração ocorreu pois o linux estava capturando três valores referentes a memoria, sendo eles os parâmetros free+cached+buffers, com essa alteração mostra somente o que esta sendo consumindo da memória física.
* Acessar Services > SNMP e ajuste a configuração conforme necessário:
* No Zabbix criar um Host e habilitar a opção de monitoramento por SNMP, lembrando de ajustar a macro {$SNMP_COMMUNITY} com a Community utilizada na configuração do pfSense.
1 / 2 / 3
* Quando apresenta a mensagem "Too many process" é possível ajustar dinamicamente conforme a alteração abaixo:
De:
{Template OS Linux:proc.num[].avg(5m)}>300
Para:
{Template OS Linux:proc.num[].avg(5m)}>{$TRIGGER_THRESHOLD_PROCESSES_RUNNING}
* A primeira para realizar o monitoramento do CoreOS, acesse o console CoreOS e execute :
# docker run -d \
--restart=always \
--name zabbix-agent-NEW \
-p 10050:10050 \
-e ZBX_SERVER_HOST="IP_SERVER" \
zabbix/zabbix-agent:latest
* Após subir o container com o serviço, crie o host e associe o Template OS Linux.
* A segunda para monitorar o CoreOS e os Containers
* No servidor Zabbix instale as dependencias
# apt-get install netcat jq
* Acesse o console do CoreOS e execute:
# docker run -d \
--restart=always \
--name zabbix-agent \
-p 10050:10050 \
-m 20m \
-v /proc:/host/proc:ro \
-v /sys:/host/sys:ro \
-v /dev:/host/dev:ro \
-v /etc:/host/etc:ro \
-v /var/run/docker.sock:/host/var/run/docker.sock \
--env ZABBIX_SERVER=10.0.0.61 \
digiapulssi/docker-zabbix-agent
*No servidor Zabbix importe o template do docker e adicione um host e associe os templates "Template OS Linux, Template Docker - digiapulssi"
Throughput Switch
* Este template esta atendendo ao switch HP 1910 e 1920 que possue 77G de trafego
* Crie um template
* Crie os itens que irão compor o template
Name: Throughput Switch IN
Type: Calculated
Key: IfInOctets
Formula:
last("ifInOctets[1 Gigabit - Level]")
+last("ifInOctets[2 Gigabit - Level]")
....
+last("ifInOctets[52 Gigabit - Level]")
Type of information: Numeric (unsigned)
Units: bps
Update interval: 1m
History storage period: 1w
Name: Throughput Switch OUT
Type: Calculated
Key: IfOutOctets
Formula:
last("ifOutOctets[1 Gigabit - Level]")
+last("ifOutOctets[2 Gigabit - Level]")
....
+last("ifOutOctets[52 Gigabit - Level]")
Type of information: Numeric (unsigned)
Units: bps
Update interval: 1m
History storage period: 1w
* Caso deseje criar uma trigger para avisar quando alcançar os limites, segue um exemplo:
Name: Throughput IN {HOST.NAME} > 70G
Severity: Warning
Expression: {SWITCH_THROUGHPUT_52P:ifInOctets.last()}>75161927680
Name: Throughput OUT {HOST.NAME} > 70G
Severity: Warning
Expression: {SWITCH_THROUGHPUT_52P:ifOutOctets.last()}>75161927680
* Crie um gráfico para melhor visualizar os valores coletados
* Trigger para latencia de ping acima de 50ms
* Verifique no arquivo de configuração do zabbix_server.conf onde é o local de armazenamento dos scripts de alerta. Para este caso é /usr/lib/zabbix/alertscripts.
* Crie o arquivo e ajuste o script de de envio de mensagens SMS
# vi /usr/lib/zabbix/alertscripts/sms.sh
#!/bin/bash
/usr/bin/wget -O- "http://<IP_GSM_KHOMP>/sms/enviaSMS.php?numero=${1}&msg=${2}:${3}"
#/usr/bin/curl "http://<IP_GSM_KHOMP>/sms/enviaSMS.php?numero=${1}&msg=${2}:${3}"
* Ajuste as permissões
# chmod 755 /usr/lib/zabbix/alertscripts/sms.sh
* Criar um Media Types associando ao script criado e com os parâmetros de macros necessários.
* Realize a associação do Media Types a um usuário em Administration/Users/<USUÁRIO>/Media e ajuste conforme necessário. No campo Send to insira o ddd e o numero de celular que deseja receber SMS.
* Passos para configurar uma Action, para a realização desdes é preciso ter configurardo o Host groups e Media types.
1 - Em User groups criar um User groups e após em Permissions selecionar e associar os Host groups com permissão de Read para acesso.
2 - Em Users criar um usuario e após em Media configurar a forma de comunicação (Email, SMS, ...), em Permission definir o User type como Zabbix User e confirmar o aceso ao grupo como Read.
* Crie uma Actions conforme abaixo e ajuste as Conditions.
* Ajustando o campo Steps para 1-0 e Step duration para 60, será enviada mensagens a cada 60 segundos até que o serviço mude para o status OK.
* Agora em Configuration/Actions, crie uma Actions que ira ser utilizada para encaminhar email
* Agora e so aguardar a chegar as notificações de Alerta via SMS ou Email.
* Escalar caso não cumprimento no primeiro nivel.
* Utilizando o caso acima, basta criar um novo Action operations e ajustar os passos para uma quantidade de tempo a frente. Foi configurado no Steps como 1 para enviar mensagem SMS a cada 60 segundos, então some mais 1+60 e crie uma nova Action operations com o valor de 61-0 e encaminhamento de email para o Boss. Pronto, caso em uma hora não for resolvida a situação o Boss ira ser notificado.
* As portas que podem ou não ser liberadas para que o Zabbix busque as informações
- Cliente
INPUT TCP/UDP 10050 <- Agent
INPUT TCP/UDP 10051 <- Trapper
INPUT TCP 10052 <- JMX
INPUT TCP 10055 <- Zorka
INPUT TCP 12345,12346 <- Wildfly
- Server (10050,10052,10055,12345,12346)
$IPT -A INPUT -p tcp -s $NETINT -m multiport --dport 22,53,80,443 -i $IFINT -j ACCEPT
$IPT -A INPUT -p udp -s $NETINT -m multiport --dport 53 -i $IFINT -j ACCEPT
$IPT -A OUTPUT -p tcp -d $ANY -m multiport --dport 53,80,123,389,443,587,10050,12345,12346 -o $IFINT -j ACCEPT
$IPT -A OUTPUT -p udp -d $ANY -m multiport --dport 53,161 -o $IFINT -j ACCEPT
*
https://github.com/janssenlima/api-zabbix
# apt-get install python-pip git
# pip install zabbix-api
Downloading/unpacking zabbix-api
Downloading zabbix-api-0.4.tar.gz
Running setup.py (path:/tmp/pip-build-_UALjD/zabbix-api/setup.py) egg_info for package zabbix-api
Installing collected packages: zabbix-api
Running setup.py install for zabbix-api
Successfully installed zabbix-api
Cleaning up...
# git clone https://github.com/janssenlima/api-zabbix
# cd api-zabbix/conf
# vi vars.py
ZBX_SERVER="http://SEU.ZABBIX.SERVER"
ZBX_USER="USUARIO"
ZBX_PASS="SENHA"
# cd ..
# vi itservices_zabbix.py
add the IP of your Zabbix Server
zapi = ZabbixAPI(server="http://<ip_of_server>/zabbix")
# add your access credentials
zapi.login("<user>", "<password>")
https://www.youtube.com/watch?v=ScKlF0ICVYA