Crash no Zabbix quando utilizado monitoramento ODBC

Em meados da Conference Zabbix Latam 2016, preparando minha palestra para a mesma, na qual iria utilizar ODBC, de repente :O

Zabbix IS NOT RUNNING! :O 

Pois bem, sim, existe um problema em compatibilidades das versões do UnixODBC  e Mysql Connector com o Zabbix, no qual, quando iniciamos o monitoramento do mesmo, imediatamente o serviço do Zabbix fica indisponível, na época me recordo ter alterado a versão, o problema foi resolvido, entretanto não investiguei a fundo as exatas versões e testes.

Na segunda semana de abril, preparando minha palestra para Zabbix Conference Latam 2018, na qual também irei demostrar itens que dependem do ODBC, instalo, ok, inicio o monitoramento teste de ODBC, e?

Zabbix IS NOT RUNNING! :O

OK! Sabia que era um possível problema de versão (novamente), entretanto fui analisar os logs detalhadamente:

 

7372:20180411:020817.578 In substitute_key_macros() data:’db.odbc.select[test,zabbix]’
7372:20180411:020817.578 End of substitute_key_macros():SUCCEED data:’db.odbc.select[test,zabbix]’
7372:20180411:020817.578 In get_value() key:’db.odbc.select[test,zabbix]’
7372:20180411:020817.578 In get_value_db() key_orig:’db.odbc.select[test,zabbix]’ query:’select count(*) from hosts’
7372:20180411:020817.578 In zbx_odbc_connect() dsn:’zabbix’ user:’root’
7372:20180411:020817.585 14: /usr/lib64/libmyodbc5a.so(myodbc_init+0xa2) [0x7f1047d11352]
7372:20180411:020817.585 13: /usr/lib64/libmyodbc5a.so(my_SQLAllocEnv+0x1c) [0x7f1047d14e1c]
7372:20180411:020817.585 12: /lib64/libodbc.so.2(+0xd8dc) [0x7f1057fa18dc]
7372:20180411:020817.585 11: /lib64/libodbc.so.2(SQLConnect+0x1a7) [0x7f1057fa3af7]
7372:20180411:020817.585 10: /usr/sbin/zabbix_server: poller #2 [got 0 values in 0.000314 sec, getting values](zbx_odbc_connect+0x1ad) [0x562b27197e43]
7372:20180411:020817.586 7f1047a83000-7f1047a93000 r-xp 00000000 fd:01 11838 /usr/lib64/libodbcinst.so.2.0.0
7372:20180411:020817.586 7f1047a93000-7f1047c93000 —p 00010000 fd:01 11838 /usr/lib64/libodbcinst.so.2.0.0
7372:20180411:020817.586 7f1047c93000-7f1047c94000 r–p 00010000 fd:01 11838 /usr/lib64/libodbcinst.so.2.0.0
7372:20180411:020817.586 7f1047c94000-7f1047c95000 rw-p 00011000 fd:01 11838 /usr/lib64/libodbcinst.so.2.0.0
7372:20180411:020817.586 7f1047c95000-7f10480ac000 r-xp 00000000 fd:01 20619 /usr/lib64/libmyodbc5a.so
7372:20180411:020817.586 7f10480ac000-7f10482ac000 —p 00417000 fd:01 20619 /usr/lib64/libmyodbc5a.so
7372:20180411:020817.586 7f10482ac000-7f10482b4000 r–p 00417000 fd:01 20619 /usr/lib64/libmyodbc5a.so
7372:20180411:020817.586 7f10482b4000-7f1048337000 rw-p 0041f000 fd:01 20619 /usr/lib64/libmyodbc5a.so
7372:20180411:020817.595 7f1057f94000-7f1057ff4000 r-xp 00000000 fd:01 11829 /usr/lib64/libodbc.so.2.0.0
7372:20180411:020817.595 7f1057ff4000-7f10581f3000 —p 00060000 fd:01 11829 /usr/lib64/libodbc.so.2.0.0
7372:20180411:020817.595 7f10581f3000-7f10581f4000 r–p 0005f000 fd:01 11829 /usr/lib64/libodbc.so.2.0.0
7372:20180411:020817.595 7f10581f4000-7f10581fb000 rw-p 00060000 fd:01 11829 /usr/lib64/libodbc.so.2.0.0

A tudo que parece, sim, o problema de versões continua, antes de atualizar, resolvei enviar também para o time de engenheiros da Zabbix SIA, então vamos lá:

Versão do Zabbix:

4.0.0 alpha 2

Versão do Sistema Operacional:

CentOS 7.4.1708 (Core)

Versões dos requisitos e ODBC:

mysql-connector-odbc-5.3.10-1.el7.x86_64

unixODBC-devel-2.3.1-11.el7.x86_64

unixODBC-2.3.1-11.el7.x86_64

A reposta da Zabbix SIA, foi sobre a incompatibilidade de versões, drives e itens relacionados ao mesmo!

Ok! Vamos verificar e testar, qual pacote está impactando o mesmo, em primeiro teste, realizei a remoção do mysql-connector-odbc-5.3.10-1.el7.x86_64, em navegação até o site, no oficial, essa seria a ultima versão do connector odbc, então vamos fazer um downgrade.

  • Remover mysql-connector-odbc-5.3.10-1.el7.x86_64
  • Instalar o antecessor mysql-connector-odbc-5.2.6-1.el6.x86_64

Feito! Restart no serviço do Zabbix e vamos aos logs em Debug=4

Resultado: 

20522:20180411:160208.076 End of substitute_key_macros():SUCCEED data:’db.odbc.select[test,zabbix]’

 20522:20180411:160208.076 In get_value() key:’db.odbc.select[test,zabbix]’

 20522:20180411:160208.076 In get_value_db() key_orig:’db.odbc.select[test,zabbix]’ query:’select count(*) from hosts’

 20522:20180411:160208.076 In zbx_odbc_connect() dsn:’zabbix’ user:’root’

 20522:20180411:160208.081 zbx_odbc_connect() connected to MySQL(5.7.21) using libmyodbc5a.so(05.02.0006)

 20522:20180411:160208.081 End of zbx_odbc_connect()

 20522:20180411:160208.081 In zbx_odbc_select() query:’select count(*) from hosts’

 20522:20180411:160208.082 End of zbx_odbc_select()

 20522:20180411:160208.082 In zbx_odbc_query_result_to_string()

 20522:20180411:160208.082 In zbx_odbc_fetch()

 20522:20180411:160208.082 End of zbx_odbc_fetch()

 20522:20180411:160208.082 End of zbx_odbc_query_result_to_string():SUCCEED

Coleta ODBC em funcionamento e Zabbix no AR 😛

Espero que ajude alguém, compartilhe suas experiências com ODBC e Zabbix para que possa ajudar outros amigos nos comentários abaixo!

Grande Abraço!