12 Descoberta emprant consultes ODBC SQL

Vista general

Aquest tipus de descoberta de baix nivell es realitza mitjançant consultes SQL, els resultats de les quals es transformen automàticament en un objecte JSON adequat per a la descoberta de baix nivell.

clau d'element

Les consultes SQL es realitzen mitjançant un element de tipus "Monitoratge de bases de dades". Per tant, la majoria de les instruccions de la pàgina monitoratge ODBC s'apliquen per obtindre una regla de descoberta de "monitoratge de bases de dades" que funcioni.

Es poden emprar dues claus d'elements a les regles de descoberta "Monitoratge de bases de dades":

  • db.odbc.discovery[<descripció curta única>,<dsn>,<cadena de connexió>] - aquest element transforma el resultat de la consulta SQL en una matriu JSON, transformant els noms de columna de la consulta donant lloc a noms de macro de descoberta de baix nivell associats amb valors de camp descoberts. Aquestes macros es poden emprar per crear prototips d'elements, triggers, etc. Veieu també: emprar odb.odbc.discovery.

  • db.odbc.get[<descripció curta única>,<dsn>,<cadena de connexió>] - aquest element transforma el resultat de la consulta SQL en una matriu JSON, conservant l'origen dels noms de columna de la resultat de la consulta com el nom del camp en JSON associat amb els valors descoberts. En comparació amb db.odbc.discovery[], aquest element no crea macros de descoberta de baix nivell al JSON retornat, de manera que no cal comprovar si els noms de columnes poden ser noms de macro vàlids . Les macros de descoberta de baix nivell es poden definir com una passa addicional si cal, emprant la funció macro LLD personalitzada amb JSONPath apuntant als valors descoberts al JSON retornat. Veieu també: emprant db.odbc.get.

Emprant db.odbc.discovery

Com a exemple pràctic per il·lustrar com la consulta SQL es transforma en JSON, considereu la descoberta de baix nivell dels proxys Zabbix mitjançant la realització d'una consulta ODBC a la base de dades Zabbix. Això és útil per a la creació automàtica d'elements interns "zabbix[proxy,<nom>,lastaccess]" per monitorar quins proxys són actius.

Comencem amb la configuració de la regla de descoberta:

lld_rule_odbc.png

Tots els camps d'entrada obligatoris són marcats amb un asterisc vermell.

Aquí, la següent consulta directa a la base de dades Zabbix s'empra per triar tots els proxys Zabbix, juntament amb el nombre d'equips que monitoren. El nombre d'equips es pot emprar, per exemple, per filtrar els proxys buits:

mysql> SELECT h1.host, COUNT(h2.host) AS count FROM hosts h1 LEFT JOIN hosts h2 ON h1.hostid = h2.proxy_hostid WHERE h1.status IN (5, 6) GROUP BY h1.host;
            +---------+-------+
            | equip | recompte |
            +---------+-------+
            | Japonès 1 | 5 |
            | Japonès 2 | 12 |
            | Letònia | 3 |
            +---------+-------+
            3 files en conjunt (0,01 segons)

Gràcies al funcionament intern de l'element “db.odbc.discovery[,{$DSN}]”, el resultat d'aquesta consulta es transforma automàticament en el següent JSON:

[
            {
                "{#HOST}": "Japó1",
                "{#COUNT}": "5"
            },
            {
                "{#HOST}": "Japó 2",
                "{#COUNT}": "12"
            },
            {
                "{#HOST}": "Letònia",
                "{#COUNT}": "3"
            }
       ]

Podem veure que els noms de les columnes es converteixen en noms de macro i les fileres triades es converteixen en els valors d'aquestes macros.

Si no és obvi com convertir un nom de columna en un nom de macro, es recomana emprar àlies de columna com ara "COUNT(h2.host) AS count" a l'exemple anterior. Si un nom de columna no es pot convertir en un nom de macro vàlid, la regla de descoberta no s'admet, amb el missatge d'error que detalla el nombre de columna ofensiu. Si cal més ajuda, els noms de columnes obtinguts es proporcionen a DebugLevel=4 al fitxer de registre del servidor Zabbix:

     $ grep db.odbc.discovery /tmp/zabbix_server.log
             ...
             23876:20150114:153410.856 A la consulta db_odbc_discovery(): 'SELECT h1.host, COUNT(h2.host) FROM hosts h1 LEFT JOIN hosts h2 ON h1.hostid = h2.proxy_hostid WHERE h1.BY6 GROUP IN (GRUP) h1.host;'
             23876:20150114:153410.860 db_odbc_discovery() columna[1]:'amfitrió'
             23876:20150114:153410.860 db_odbc_discovery() column[2]:'COUNT(h2.host)'
             23876:20150114:153410.860 Final de db_odbc_discovery():NOTSUPPORTED
             23876:20150114:153410.860 Error de l'element [Servidor Zabbix:db.odbc.discovery[proxies,{$DSN}]]: no es pot convertir el nom de la columna 2 a macro.

Ara que entenem com es transforma una consulta SQL en un objecte JSON, podem emprar la macro {#HOST} als prototips d'elements:

item_prototype_odbc.png

Un cop descobert, es crearà un element per a cada proxy:

discovered_items_odbc1.png

Emprant db.odbc.get

Emprant db.odbc.get[,{$DSN}] i el següent exemple:

    mysql> SELECT h1.host, COUNT(h2.host) AS count FROM hosts h1 LEFT JOIN hosts h2 ON h1.hostid = h2.proxy_hostid WHERE h1.status IN (5, 6) GROUP BY h1.host;
           +---------+-------+
           | equip | recompte |
           +---------+-------+
           | Japan 1 |     5 |
           | Japan 2 |    12 |
           | Latvia  |     3 |
           +---------+-------+
           3 rows in set (0.01 sec)

el JSON que retornarà:

[
           {
               "host": "Japan 1",
               "count": "5"
           },
           {
               "host": "Japan 2",
               "count": "12"
           },
           {
               "host": "Latvia",
               "count": "3"
           }
       ]

Com podeu veure, no hi ha macros de descoberta de baix nivell. Tanmateix, es poden crear macros de descoberta personalitzades de baix nivell a la pestanya LLD Macros d'una regla de descoberta mitjançant JSONPath, per exemple:

     {#HOST} → $.host

Ara aquesta macro {#HOST} es pot emprar a prototips d'elements:

item_prototype_odbc.png