Áú»¢¶Ä²©

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 Áú»¢¶Ä²© mitjan?ant la realitzaci¨® d'una consulta ODBC a la base de dades Áú»¢¶Ä²©. 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 Áú»¢¶Ä²© s'empra per triar tots els proxys Áú»¢¶Ä²©, 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}": &±ç³Ü´Ç³Ù;´³²¹±è¨®1&±ç³Ü´Ç³Ù;,
                "{#COUNT}": "5"
            },
            {
                "{#HOST}": "Jap¨® 2",
                "{#COUNT}": "12"
            },
            {
                "{#HOST}": &±ç³Ü´Ç³Ù;³¢±ð³Ù¨°²Ô¾±²¹&±ç³Ü´Ç³Ù;,
                "{#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 Áú»¢¶Ä²©:

     $ 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 Áú»¢¶Ä²©: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