Monitorando CIFS com Zabbix
Tenho usado o Zabbix como ferramenta de monitoramento a bastante tempo. Além da excelência da própria ferramenta, o que sempre me surpreende positivamente é o suporte da comunidade e a diversidade de soluções encontradas. Não foi diferente desta vez!
Precisei fazer o monitoramento de pontos de montagem CIFS de um cliente (na real achei que eram NFS!). Comecei a pesquisar por soluções que detectasse os pontos de montagem para que eu não precisasse adicioná-los.
Neste artigo [1] do blog Infradev – DevOps & Monitoring encontrei uma excelente solução para o meu problema, no entanto, era para NFS (usarei para necessidades futuras!). Com algumas pequenas adaptações, trouxe a solução para a minha necessidade (CIFS).
A seguir descrevo as modificações, bem como o template que eu criei, baseado na solução original [1].
As modificações não diferem muito da solução original, mas deixo aqui para facilitar a reimplementação da mesma e para minhas consultas futuras.
1. Criar o arquivo /etc/zabbix/zabbix_agentd.d/cifs.conf com o seguinte conteúdo:
UserParameter=cifs.discovery,/bin/mount -l -t cifs | /bin/awk 'BEGIN { FS=OFS=" "; ORS = ""; print "{\42data\42:["; } { print "{\42{#CIFSMOUNT}\42: \42" $3 "\42}" } END { print "]}"; }' | /bin/sed "s^}{^},{^g" UserParameter=cifs.verify.mount[*],/bin/mountpoint -q '$1' && echo 1 || echo 0
2. Alterar o arquivo de configuração do agente (zabbix_agentd.conf) no computador que será monitorado, adicionando a seguinte linha (caso já não esteja incluída e descomentada):
Include=/etc/zabbix/zabbix_agentd.conf.d/
3. Reiniciar o agente
4. Importar o template abaixo (salve em um arquivo e importe-o) no Zabbix
<?xml version="1.0" encoding="UTF-8"?> <zabbix_export> <version>2.0</version> <date>2017-06-28T12:31:06Z</date> <groups> <group> <name>Templates</name> </group> </groups> <templates> <template> <template>Template CIFS Linux</template> <name>Template CIFS Linux</name> <groups> <group> <name>Templates</name> </group> </groups> <applications> <application> <name>Network filesystems</name> </application> </applications> <items/> <discovery_rules> <discovery_rule> <name>CIFS Discovery</name> <type>0</type> <snmp_community/> <snmp_oid/> <key>cifs.discovery</key> <delay>3600</delay> <status>0</status> <allowed_hosts/> <snmpv3_contextname/> <snmpv3_securityname/> <snmpv3_securitylevel>0</snmpv3_securitylevel> <snmpv3_authprotocol>0</snmpv3_authprotocol> <snmpv3_authpassphrase/> <snmpv3_privprotocol>0</snmpv3_privprotocol> <snmpv3_privpassphrase/> <delay_flex/> <params/> <ipmi_sensor/> <authtype>0</authtype> <username/> <password/> <publickey/> <privatekey/> <port/> <filter>:</filter> <lifetime>30</lifetime> <description/> <item_prototypes> <item_prototype> <name>CIFS Mount: {#CIFSMOUNT}</name> <type>0</type> <snmp_community/> <multiplier>0</multiplier> <snmp_oid/> <key>cifs.verify.mount[{#CIFSMOUNT}]</key> <delay>3600</delay> <history>7</history> <trends>365</trends> <status>0</status> <value_type>3</value_type> <allowed_hosts/> <units/> <delta>0</delta> <snmpv3_contextname/> <snmpv3_securityname/> <snmpv3_securitylevel>0</snmpv3_securitylevel> <snmpv3_authprotocol>0</snmpv3_authprotocol> <snmpv3_authpassphrase/> <snmpv3_privprotocol>0</snmpv3_privprotocol> <snmpv3_privpassphrase/> <formula>1</formula> <delay_flex/> <params/> <ipmi_sensor/> <data_type>0</data_type> <authtype>0</authtype> <username/> <password/> <publickey/> <privatekey/> <port/> <description/> <inventory_link>0</inventory_link> <applications> <application> <name>Network filesystems</name> </application> </applications> <valuemap/> </item_prototype> </item_prototypes> <trigger_prototypes> <trigger_prototype> <expression>{Template CIFS Linux:cifs.verify.mount[{#CIFSMOUNT}].last()}=0</expression> <name>CIFS is Unmounted: {#CIFSMOUNT}</name> <url/> <status>0</status> <priority>0</priority> <description/> <type>0</type> </trigger_prototype> </trigger_prototypes> <graph_prototypes/> <host_prototypes/> </discovery_rule> </discovery_rules> <macros/> <templates/> <screens/> </template> </templates> </zabbix_export>
5. Relacione o template aos hosts desejados.
Diferente da solução original, eu monitoro/computo estatísticas do CIFS. Somente descubro pontos de montagem e monitoro se os mesmos estão montados.
Template para a versão 3.0 do Zabbix:
<?xml version="1.0" encoding="UTF-8"?> <zabbix_export> <version>3.0</version> <date>2020-08-04T20:32:32Z</date> <groups> <group> <name>Templates</name> </group> </groups> <templates> <template> <template>Template CIFS Linux</template> <name>Template CIFS Linux</name> <description/> <groups> <group> <name>Templates</name> </group> </groups> <applications> <application> <name>Network filesystems</name> </application> </applications> <items/> <discovery_rules> <discovery_rule> <name>CIFS Discovery</name> <type>0</type> <snmp_community/> <snmp_oid/> <key>cifs.discovery</key> <delay>3600</delay> <status>0</status> <allowed_hosts/> <snmpv3_contextname/> <snmpv3_securityname/> <snmpv3_securitylevel>0</snmpv3_securitylevel> <snmpv3_authprotocol>0</snmpv3_authprotocol> <snmpv3_authpassphrase/> <snmpv3_privprotocol>0</snmpv3_privprotocol> <snmpv3_privpassphrase/> <delay_flex/> <params/> <ipmi_sensor/> <authtype>0</authtype> <username/> <password/> <publickey/> <privatekey/> <port/> <filter> <evaltype>0</evaltype> <formula/> <conditions/> </filter> <lifetime>30</lifetime> <description/> <item_prototypes> <item_prototype> <name>CIFS Mount: {#CIFSMOUNT}</name> <type>0</type> <snmp_community/> <multiplier>0</multiplier> <snmp_oid/> <key>cifs.verify.mount[{#CIFSMOUNT}]</key> <delay>3600</delay> <history>7</history> <trends>365</trends> <status>0</status> <value_type>3</value_type> <allowed_hosts/> <units/> <delta>0</delta> <snmpv3_contextname/> <snmpv3_securityname/> <snmpv3_securitylevel>0</snmpv3_securitylevel> <snmpv3_authprotocol>0</snmpv3_authprotocol> <snmpv3_authpassphrase/> <snmpv3_privprotocol>0</snmpv3_privprotocol> <snmpv3_privpassphrase/> <formula>1</formula> <delay_flex/> <params/> <ipmi_sensor/> <data_type>0</data_type> <authtype>0</authtype> <username/> <password/> <publickey/> <privatekey/> <port/> <description/> <inventory_link>0</inventory_link> <applications> <application> <name>Network filesystems</name> </application> </applications> <valuemap/> <logtimefmt/> <application_prototypes/> </item_prototype> </item_prototypes> <trigger_prototypes> <trigger_prototype> <expression>{Template CIFS Linux:cifs.verify.mount[{#CIFSMOUNT}].last()}=0</expression> <name>CIFS is Unmounted: {#CIFSMOUNT}</name> <url/> <status>0</status> <priority>3</priority> <description/> <type>0</type> <dependencies/> </trigger_prototype> </trigger_prototypes> <graph_prototypes/> <host_prototypes/> </discovery_rule> </discovery_rules> <macros/> <templates/> <screens/> </template> </templates> </zabbix_export>
[Atualizado em 04/08/2020]
Referências:
[1] Monitorar NFS pelo Zabbix – http://blog.infradev.com.br/monitorar-nfs-pelo-zabbix/
Bom dia, poderia me ajudar? quando vou importart o templete ele apresenta esse erro:
“Tag inválida “/ zabbix_export / templates / template (1) / discovery_rules / discovery_rule (1) / item_prototypes / item_prototype (1)”: a tag “logtimefmt” está ausente.”
Olá Estevao!
Em qual versão de Zabbix estás importando?
Eu fiz este template na época do 2.0. Posso exportar em uma versão mais recente (já fiz a atualização do meu Zabbix depois disso). Talvez seja este o detalhe que esteja faltando…
Confirme pra mim tua versão de Zabbix.
Olá Daniel,
Também ganho o mesmo erro que o Estevão.
A versão que utilizo é a 4.4.6.
Olá Claudio!
Acabei de atualizar o texto do post, colocando um template para a versão 3.
Acredito que conseguirão importar sem problemas.
Bom dia Daniel,
Tentei importar o template e apresentou o erro.
“O protótipo de trigger possui expressão inválida. O host “Template CIFS Linux – Anaue” não existe ou você não possui acesso a este host.”
Agradeço sua ajuda.
Claudio,
Desculpe-me, cometi um equívoco e subi algo errado. Acabei de corrigir! Podes tentar importar novamente (com a versão que acabei de atualizar)?
Obrigado Daniel.
Importado com sucesso.