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 Zabbixhttp://blog.infradev.com.br/monitorar-nfs-pelo-zabbix/

7 comments so far

  1. Estevao Alves on

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

    • Daniel Bauermann on

      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.

  2. Claudio Branco on

    Olá Daniel,
    Também ganho o mesmo erro que o Estevão.
    A versão que utilizo é a 4.4.6.

    • Daniel Bauermann on

      Olá Claudio!

      Acabei de atualizar o texto do post, colocando um template para a versão 3.

      Acredito que conseguirão importar sem problemas.

      • Claudio Branco on

        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.

      • Daniel Bauermann on

        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)?

  3. Claudio Branco on

    Obrigado Daniel.
    Importado com sucesso.


Deixe um comentário