Áú»¢¶Ä²©

5 §°§Ò§ß§Ñ§â§å§Ø§Ö§ß§Ú§Ö §ã §Ú§ã§á§à§Ý§î§Ù§à§Ó§Ñ§ß§Ú§Ö§Þ ODBC SQL §Ù§Ñ§á§â§à§ã§à§Ó

§°§Ò§Ù§à§â

§¿§ä§à§ä §ä§Ú§á §ß§Ú§Ù§Ü§à§å§â§à§Ó§ß§Ö§Ó§à§Ô§à §à§Ò§ß§Ñ§â§å§Ø§Ö§ß§Ú§ñ §à§ã§å§ë§Ö§ã§ä§Ó§Ý§ñ§Ö§ä§ã§ñ §ã §Ú§ã§á§à§Ý§î§Ù§à§Ó§Ñ§ß§Ú§Ö§Þ SQL §Ù§Ñ§á§â§à§ã§à§Ó, §á§à§Ý§å§é§Ö§ß§ß§í§Ö §â§Ö§Ù§å§Ý§î§ä§Ñ§ä§í §Ü§à§ä§à§â§í§ç §Ñ§Ó§ä§à§Þ§Ñ§ä§Ú§é§Ö§ã§Ü§Ú §á§â§Ö§à§Ò§â§Ñ§Ù§å§ð§ä§ã§ñ §Ó §à§Ò§ì§Ö§Ü§ä JSON, §á§â§Ú§Ô§à§Õ§ß§í§Û §Õ§Ý§ñ §ß§Ú§Ù§Ü§à§å§â§à§Ó§ß§Ö§Ó§à§Ô§à §à§Ò§ß§Ñ§â§å§Ø§Ö§ß§Ú§ñ.

§¬§Ý§ð§é §ï§Ý§Ö§Þ§Ö§ß§ä§Ñ §Õ§Ñ§ß§ß§í§ç

SQL §Ù§Ñ§á§â§à§ã§í §Ó§í§á§à§Ý§ß§ñ§ð§ä§ã§ñ §á§â§Ú §á§à§Þ§à§ë§Ú §ï§Ý§Ö§Þ§Ö§ß§ä§à§Ó §Õ§Ñ§ß§ß§í§ç §ä§Ú§á§Ñ "§®§à§ß§Ú§ä§à§â §Ò§Ñ§Ù §Õ§Ñ§ß§ß§í§ç". §´§Ñ§Ü §é§ä§à, §Ò§à§Ý§î§ê§Ñ§ñ §é§Ñ§ã§ä§î §å§Ü§Ñ§Ù§Ñ§ß§Ú§Û §ã§à §ã§ä§â§Ñ§ß§Ú§è§í ODBC §Þ§à§ß§Ú§ä§à§â§Ú§ß§Ô§Ñ §á§â§Ú§Þ§Ö§ß§Ú§Þ§Ñ §Ü §á§à§Ý§å§é§Ö§ß§Ú§ð §â§Ñ§Ò§à§ä§Ñ§ð§ë§Ö§Ô§à "§®§à§ß§Ú§ä§à§â§Ñ §Ò§Ñ§Ù §Õ§Ñ§ß§ß§í§ç" §á§â§Ñ§Ó§Ú§Ý§Ñ §à§Ò§ß§Ñ§â§å§Ø§Ö§ß§Ú§ñ, §Ö§Õ§Ú§ß§ã§ä§Ó§Ö§ß§ß§Ñ§ñ §â§Ñ§Ù§ß§Ú§è§Ñ §Ý§Ú§ê§î §Ó §ä§à§Þ, §é§ä§à §ß§Ö§à§Ò§ç§à§Õ§Ú§Þ§à §Ú§ã§á§à§Ý§î§Ù§à§Ó§Ñ§ä§î §Ü§Ý§ð§é

db.odbc.discovery[<§à§á§Ú§ã§Ñ§ß§Ú§Ö>,<dsn>]

§Ó§Þ§Ö§ã§ä§à "db.odbc.select[<§à§á§Ú§ã§Ñ§ß§Ú§Ö>,<dsn>]".

§°§Ò§ß§Ñ§â§å§Ø§Ö§ß§Ú§Ö §ã §Ú§ã§á§à§Ý§î§Ù§à§Ó§Ñ§ß§Ú§Ö§Þ SQL §Ù§Ñ§á§â§à§ã§à§Ó §á§à§Õ§Õ§Ö§â§Ø§Ú§Ó§Ñ§Ö§ä§ã§ñ §ß§Ñ§é§Ú§ß§Ñ§ñ §ã Áú»¢¶Ä²© §ã§Ö§â§Ó§Ö§â§Ñ/§á§â§à§Ü§ã§Ú 3.0.

§£ §Ü§Ñ§é§Ö§ã§ä§Ó§Ö §á§â§Ñ§Ü§ä§Ú§é§Ö§ã§Ü§à§Ô§à §á§â§Ú§Þ§Ö§â§Ñ, §Ú§Ý§Ý§ð§ã§ä§â§Ú§â§å§ð§ë§Ö§Ô§à §Ü§Ñ§Ü SQL §Ù§Ñ§á§â§à§ã §ä§â§Ñ§ß§ã§æ§à§â§Þ§Ú§â§å§Ö§ä§ã§ñ §Ó JSON, §â§Ñ§ã§ã§Þ§à§ä§â§Ú§Þ §ß§Ú§Ù§Ü§à§å§â§à§Ó§ß§Ö§Ó§à§Ö §à§Ò§ß§Ñ§â§å§Ø§Ö§ß§Ú§ñ Áú»¢¶Ä²© §á§â§à§Ü§ã§Ú, §Ó§í§á§à§Ý§ß§Ú§Ó ODBC §Ù§Ñ§á§â§à§ã §Ó Áú»¢¶Ä²© §Ò§Ñ§Ù§å §Õ§Ñ§ß§ß§í§ç. §°§ß §Þ§à§Ø§Ö§ä §Ò§í§ä§î §á§à§Ý§Ö§Ù§Ö§ß §Õ§Ý§ñ §Ñ§Ó§ä§à§Þ§Ñ§ä§Ú§é§Ö§ã§Ü§à§Ô§à §ã§à§Ù§Õ§Ñ§ß§Ú§ñ §Ó§ß§å§ä§â§Ö§ß§ß§Ú§ç §ï§Ý§Ö§Þ§Ö§ß§ä§à§Ó §Õ§Ñ§ß§ß§í§ç "zabbix[proxy,<§Ú§Þ§ñ>,lastaccess]", §é§ä§à§Ò§í §ß§Ñ§Ò§Ý§ð§Õ§Ñ§ä§î §Ü§Ñ§Ü§Ú§Ö §á§â§à§Ü§ã§Ú §Ø§Ú§Ó§í.

§¥§Ñ§Ó§Ñ§Û§ä§Ö §ß§Ñ§é§ß§Ö§Þ §ã §ß§Ñ§ã§ä§â§à§Û§Ü§Ú §á§â§Ñ§Ó§Ú§Ý§Ñ §à§Ò§ß§Ñ§â§å§Ø§Ö§ß§Ú§ñ:

discovery_rule_odbc.png

§©§Õ§Ö§ã§î §Ú§ã§á§à§Ý§î§Ù§å§Ö§ä§ã§ñ §ã§Ý§Ö§Õ§å§ð§ë§Ú§Û §á§â§ñ§Þ§à§Û §Ù§Ñ§á§â§à§ã §Ó §Ò§Ñ§Ù§å §Õ§Ñ§ß§ß§í§ç Áú»¢¶Ä²© §Õ§Ý§ñ §Ó§í§Ò§à§â§Ü§Ú §Ó§ã§Ö§ç Áú»¢¶Ä²© §á§â§à§Ü§ã§Ú §Ó§Þ§Ö§ã§ä§Ö §ã §Ü§à§Ý§Ú§é§Ö§ã§ä§Ó§à§Þ §å§Ù§Ý§à§Ó §ã§Ö§ä§Ú, §Ù§Ñ §Ü§à§ä§à§â§í§Þ§Ú §ï§ä§Ú §á§â§à§Ü§ã§Ú §ß§Ñ§Ò§Ý§ð§Õ§Ñ§ð§ä. §¬§à§Ý§Ú§é§Ö§ã§ä§Ó§à §å§Ù§Ý§à§Ó §ã§Ö§ä§Ú §Þ§à§Ø§ß§à §Ú§ã§á§à§Ý§î§Ù§à§Ó§Ñ§ä§î, §ß§Ñ§á§â§Ú§Þ§Ö§â, §Õ§Ý§ñ §æ§Ú§Ý§î§ä§â§Ñ§è§Ú§Ú §á§å§ã§ä§í§ç §á§â§à§Ü§ã§Ú:

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;
       +---------+-------+
       | host    | count |
       +---------+-------+
       | Japan 1 |     5 |
       | Japan 2 |    12 |
       | Latvia  |     3 |
       +---------+-------+
       3 rows in set (0.01 sec)

§¢§Ý§Ñ§Ô§à§Õ§Ñ§â§ñ §Ó§ß§å§ä§â§Ö§ß§ß§Ö§Þ§å §Þ§Ö§ç§Ñ§ß§Ú§Ù§Þ§å §à§Ò§â§Ñ§Ò§à§ä§Ü§Ú §ï§Ý§Ö§Þ§Ö§ß§ä§Ñ §Õ§Ñ§ß§ß§í§ç "db.odbc.discovery[]", §â§Ö§Ù§å§Ý§î§ä§Ñ§ä §ï§ä§à§Ô§à §Ù§Ñ§á§â§à§ã§Ñ §Ñ§Ó§ä§à§Þ§Ñ§ä§Ú§é§Ö§ã§Ü§Ú §á§â§Ö§à§Ò§â§Ñ§Ù§å§Ö§ä§ã§ñ §Ó §ã§Ý§Ö§Õ§å§ð§ë§Ú§Û JSON:

{
           "data": [
               {
                   "{#HOST}": "Japan 1",
                   "{#COUNT}": "5"
               },
               {
                   "{#HOST}": "Japan 2",
                   "{#COUNT}": "12"
               },
               {
                   "{#HOST}": "Latvia",
                   "{#COUNT}": "3"
               }
           ]
       }

§£§Ú§Õ§ß§à, §é§ä§à §Ú§Þ§Ö§ß§Ñ §Ü§à§Ý§à§ß§à§Ü §ã§ä§Ñ§ß§à§Ó§ñ§ä§ã§ñ §Ú§Þ§Ö§ß§Ñ§Þ§Ú §Þ§Ñ§Ü§â§à§ã§à§Ó §Ú §Ó§í§Ò§â§Ñ§ß§ß§í§Ö §ã§ä§â§à§Ü§Ú §ã§ä§Ñ§ß§à§Ó§ñ§ä§ã§ñ §Ù§ß§Ñ§é§Ö§ß§Ú§ñ§Þ§Ú §ï§ä§Ú§ç §Þ§Ñ§Ü§â§à§ã§à§Ó.

§¦§ã§Ý§Ú §â§Ö§Ù§å§Ý§î§ä§Ñ§ä §á§â§Ö§à§Ò§â§Ñ§Ù§à§Ó§Ñ§ß§Ú§ñ §Ú§Þ§Ö§ß§Ú §Ü§à§Ý§à§ß§Ü§Ú §Ó §Ú§Þ§ñ §Þ§Ñ§Ü§â§à§ã§Ñ §ß§Ö§à§é§Ö§Ó§Ú§Õ§Ö§ß, §á§â§Ö§Õ§Ý§Ñ§Ô§Ñ§Ö§ä§ã§ñ §Ú§ã§á§à§Ý§î§Ù§à§Ó§Ñ§ä§î §Ñ§Ý§Ú§Ñ§ã§í §Ü §Ú§Þ§Ö§ß§Ñ§Þ §Ü§à§Ý§à§ß§à§Ü, §ä§Ñ§Ü §Ø§Ö §Ü§Ñ§Ü "COUNT(h2.host) AS count" §Ó §á§â§Ú§Þ§Ö§â§Ö §Ó§í§ê§Ö.

§£ §ã§Ý§å§é§Ñ§Ö, §Ö§ã§Ý§Ú §Ú§Þ§ñ §Ü§à§Ý§à§ß§Ü§Ú §ß§Ö §å§Õ§Ñ§Ö§ä§ã§ñ §ã§Ü§à§ß§Ó§Ö§â§ä§Ú§â§à§Ó§Ñ§ä§î §Ó §Õ§à§á§å§ã§ä§Ú§Þ§à§Ö §Ú§Þ§ñ §Þ§Ñ§Ü§â§à§ã§Ñ, §á§â§Ñ§Ó§Ú§Ý§à §à§Ò§ß§Ñ§â§å§Ø§Ö§ß§Ú§ñ §ã§ä§Ñ§ß§à§Ó§Ú§ä§ã§ñ §ß§Ö§á§à§Õ§Õ§Ö§â§Ø§Ú§Ó§Ñ§Ö§Þ§í§Þ §ã §Õ§Ö§ä§Ñ§Ý§î§ß§í§Þ §ã§à§à§Ò§ë§Ö§ß§Ú§Ö§Þ §à§Ò §à§ê§Ú§Ò§Ü§Ö §Ü§Ñ§Ü§à§Û §ß§à§Þ§Ö§â §Ü§à§Ý§à§ß§Ü§Ú §ß§Ö §å§Õ§Ñ§Ý§à§ã§î §á§â§Ö§à§Ò§â§Ñ§Ù§à§Ó§Ñ§ä§î. §¦§ã§Ý§Ú §Ø§Ö§Ý§Ñ§ä§Ö§Ý§î§ß§Ñ §Õ§à§á§à§Ý§ß§Ú§ä§Ö§Ý§î§ß§Ñ§ñ §á§à§Þ§à§ë§î, §á§à§Ý§å§é§Ö§ß§ß§í§Ö §Ú§Þ§Ö§ß§Ñ §Ü§à§Ý§à§ß§Ü§Ú §à§ä§â§Ñ§Ø§Ñ§ð§ä§ã§ñ §á§â§Ú DebugLevel=4 §Ó §æ§Ñ§Û§Ý§Ö §Ø§å§â§ß§Ñ§Ý§Ñ Áú»¢¶Ä²© §ã§Ö§â§Ó§Ö§â§Ñ:

$ grep db.odbc.discovery /tmp/zabbix_server.log
        ...
        23876:20150114:153410.856 In db_odbc_discovery() query:'SELECT h1.host, COUNT(h2.host) FROM hosts h1 LEFT JOIN hosts h2 ON h1.hostid = h2.proxy_hostid WHERE h1.status IN (5, 6) GROUP BY h1.host;'
        23876:20150114:153410.860 db_odbc_discovery() column[1]:'host'
        23876:20150114:153410.860 db_odbc_discovery() column[2]:'COUNT(h2.host)'
        23876:20150114:153410.860 End of db_odbc_discovery():NOTSUPPORTED
        23876:20150114:153410.860 Item [Áú»¢¶Ä²© server:db.odbc.discovery[proxies,{$DSN}]] error: Cannot convert column #2 name to macro.

§´§Ö§á§Ö§â§î, §Ü§à§Ô§Õ§Ñ §Þ§í §á§à§ß§Ú§Þ§Ñ§Ö§Þ §Ü§Ñ§Ü SQL §Ù§Ñ§á§â§à§ã §ä§â§Ñ§ß§ã§æ§à§â§Þ§Ú§â§å§Ö§ä§ã§ñ §Ó JSON §à§Ò§ì§Ö§Ü§ä, §Þ§í §Þ§à§Ø§Ö§Þ §Ú§ã§á§à§Ý§î§Ù§à§Ó§Ñ§ä§î §Þ§Ñ§Ü§â§à§ã {#HOST} §Ó §á§â§à§ä§à§ä§Ú§á§Ñ§ç §ï§Ý§Ö§Þ§Ö§ß§ä§à§Ó §Õ§Ñ§ß§ß§í§ç:

item_prototype_odbc.png

§¬§Ñ§Ü §ä§à§Ý§î§Ü§à §à§Ò§ß§Ñ§â§å§Ø§Ö§ß§Ú§Ö §Ò§å§Õ§Ö§ä §Ó§í§á§à§Ý§ß§Ö§ß§à, §ï§Ý§Ö§Þ§Ö§ß§ä §Õ§Ñ§ß§ß§í§ç §Ò§å§Õ§Ö§ä §ã§à§Ù§Õ§Ñ§ß §á§à §Ü§Ñ§Ø§Õ§à§Þ§å §á§â§à§Ü§ã§Ú:

discovered_items_odbc.png