ODBC-monitoring komt overeen met het Database monitor itemtype in de Zabbix-frontend.
ODBC is een middle-ware API in de programmeertaal C voor het benaderen van databasebeheersystemen (DBMS). Het ODBC-concept is ontwikkeld door Microsoft en later overgebracht naar andere platforms.
Zabbix kan elke database bevragen die wordt ondersteund door ODBC. Om dit te doen, maakt Zabbix geen directe verbinding met de databases, maar gebruikt het de ODBC-interface en drivers die zijn geconfigureerd in ODBC. Deze functie maakt efficiëntere monitoring van verschillende databases mogelijk voor meerdere doeleinden - bijvoorbeeld het controleren van specifieke database-wachtrijen, gebruiksstatisitieken en dergelijke. Zabbix ondersteunt unixODBC, wat een van de meest gebruikte open source ODBC API-implementaties is.
Zie ook de bekende problemen voor ODBC-controles.
De aanbevolen manier om unixODBC te installeren is door de standaard pakketbronnen van het Linux-besturingssysteem te gebruiken. In de meest populaire Linux-distributies is unixODBC standaard opgenomen in het pakketrepository. Als het niet beschikbaar is, kan het worden verkregen via de unixODBC-website: http://www.unixodbc.org/download.html.
Het installeren van unixODBC op RedHat/Fedora-gebaseerde systemen met behulp van het dnf-pakketbeheer:
shell> dnf -y install unixODBC unixODBC-devel
Het installeren van unixODBC op SUSE-gebaseerde systemen met behulp van het zypper-pakketbeheer:
# zypper in unixODBC-devel
Het unixODBC-devel-pakket is nodig om Zabbix te compileren met unixODBC-ondersteuning.
De aanbevolen manier om unixODBC te installeren is door de standaard pakketbronnen van het Linux-besturingssysteem te gebruiken. In de meest populaire Linux-distributies is unixODBC standaard opgenomen in het pakketrepository. Als het niet beschikbaar is, kan het worden verkregen via de unixODBC-website: http://www.unixodbc.org/download.html.
Het installeren van unixODBC op RedHat/Fedora-gebaseerde systemen met behulp van het dnf-pakketbeheer:
shell> dnf -y install unixODBC unixODBC-devel
Het installeren van unixODBC op SUSE-gebaseerde systemen met behulp van het zypper-pakketbeheer:
# zypper in unixODBC-devel
Het unixODBC-devel-pakket is nodig om Zabbix te compileren met unixODBC-ondersteuning.
De ODBC-configuratie wordt uitgevoerd door de odbcinst.ini- en odbc.ini-bestanden aan te passen. Om de locatie van het configuratiebestand te verifiëren, typt u:
shell> odbcinst -j
odbcinst.ini wordt gebruikt om de geïnstalleerde ODBC-database-stuurprogramma's op te lijsten:
Parameterdetails:
Attribuut | Beschrijving |
---|---|
mysql | Naam van het database-stuurprogramma. |
Description | Omschrijving van het database-stuurprogramma. |
Driver | Locatie van de bibliotheek van het database-stuurprogramma. |
odbc.ini wordt gebruikt om gegevensbronnen te definiëren:
[test]
Description = MySQL testdatabase
Driver = mysql
Server = 127.0.0.1
User = root
Password =
Port = 3306
Database = zabbix
Parameterdetails:
Attribuut | Beschrijving |
---|---|
test | Naam van de gegevensbron (DSN). |
Description | Omschrijving van de gegevensbron. |
Driver | Naam van het database-stuurprogramma - zoals gespecificeerd in odbcinst.ini |
Server | IP/DNS van de databaseserver. |
User | Databasegebruiker voor verbinding. |
Password | Wachtwoord van de databasegebruiker. |
Port | Verbindingspoort van de database. |
Database | Naam van de database. |
Om te controleren of de ODBC-verbinding succesvol werkt, moet een verbinding met de database worden getest. Dit kan worden gedaan met het hulpprogramma isql (inbegrepen in het unixODBC-pakket):
shell> isql test
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
Om ODBC-ondersteuning in te schakelen, moet Zabbix worden gecompileerd met de volgende vlag:
Lees meer over het installeren van Zabbix vanuit de broncode.
Configureer een database monitoring item.
Alle verplichte invoervelden zijn gemarkeerd met een rode asterisk.
Specifiek voor database monitoring items moet je het volgende invoeren:
Type | Selecteer hier Database monitor. |
Key | Voer een van de twee ondersteunde item keys in: db.odbc.select[<unieke korte beschrijving>,<dsn>,<connection string>] - dit item is bedoeld om één waarde terug te geven, namelijk de eerste kolom van de eerste rij van het resultaat van de SQL-query. Als een query meer dan één kolom teruggeeft, wordt alleen de eerste kolom gelezen. Als een query meer dan één regel teruggeeft, wordt alleen de eerste regel gelezen. db.odbc.get[<unieke korte beschrijving>,<dsn>,<connection string>] - dit item kan meerdere rijen/kolommen in JSON-formaat teruggeven. Hierdoor kan het worden gebruikt als een master-item dat alle gegevens in één systeemaanroep verzamelt, terwijl JSONPath-preprocessing kan worden gebruikt in afhankelijke items om individuele waarden te extraheren. Zie een voorbeeld van het geretourneerde formaat dat wordt gebruikt in low-level discovery. Dit item wordt ondersteund sinds Zabbix 4.4. De unieke beschrijving dient om het item te identificeren in triggers, enzovoort. Hoewel dsn en connection string optionele parameters zijn, moet ten minste één van hen aanwezig zijn. Als zowel de gegevensbronnaam (DSN) als de verbindingsreeks zijn gedefinieerd, wordt de DSN genegeerd.De gegevensbronnaam, indien gebruikt, moet worden ingesteld zoals gespecificeerd in odbc.ini. De verbindingsreeks kan driver-specifieke argumenten bevatten. Voorbeeld (verbinding voor MySQL ODBC-driver 5): => db.odbc.get[MySQL voorbeeld,,"Driver=/usr/local/lib/libmyodbc5a.so;Database=master;Server=127.0.0.1;Port=3306"] |
Gebruikersnaam | Voer de gebruikersnaam voor de database in. Deze parameter is optioneel als de gebruiker is gespecificeerd in odbc.ini. Als een verbindingsreeks wordt gebruikt en het veld Gebruikersnaam niet leeg is, wordt het toegevoegd aan de verbindingsreeks als UID=<gebruiker> |
Wachtwoord | Voer het wachtwoord van de databasegebruiker in. Deze parameter is optioneel als het wachtwoord is gespecificeerd in odbc.ini. Als een verbindingsreeks wordt gebruikt en het veld Wachtwoord niet leeg is, wordt het toegevoegd aan de verbindingsreeks als PWD=<wachtwoord> .Als een wachtwoord een puntkomma bevat, moet het worden omhuld door accolades, bijvoorbeeld: Wachtwoord: {P?;)*woord} (als het feitelijke wachtwoord P?;)*woord is) Het wachtwoord wordt na de gebruikersnaam aan de verbindingsreeks toegevoegd als: UID=<gebruikersnaam>;PWD={P?;)*woord} Om de resulterende string te testen, voer je uit: isql -v -k 'Driver=libmaodbc.so;Database=zabbix;UID=zabbix;PWD={P?;)*woord}' |
SQL-query | Voer de SQL-query in. Let op dat bij het db.odbc.select[] item de query slechts één waarde mag retourneren. |
Type informatie | Het is belangrijk om te weten welk type informatie wordt geretourneerd door de query, zodat dit hier correct wordt geselecteerd. Bij een onjuist type informatie wordt het item niet ondersteund. |
select ...
. De syntaxis van de query hangt af van het RDBMS dat ze zal verwerken. De syntaxis van een aanvraag naar een opgeslagen procedure moet beginnen met het trefwoord call
.ODBC-foutmeldingen zijn gestructureerd in velden om gedetailleerde informatie te verstrekken. Bijvoorbeeld:
Kan ODBC-query niet uitvoeren: [SQL_ERROR]:[42601][7][ERROR: syntax error at or near ";"; Error while executing the query]
└───────────┬───────────┘ └────┬────┘ └──┬──┘└─────────────────────────────┬─────────────────────────────────────┘
│ │ │ └─ Native foutcode └─ Native foutbericht
│ │ └─ SQLState
└─ Zabbix bericht └─ ODBC retourcode
Merk op dat de lengte van het foutbericht beperkt is tot 2048 bytes, dus het bericht kan worden afgekapt. Als er meer dan één ODBC-diagnostisch record is, probeert Zabbix ze samen te voegen (gescheiden door |
) zolang de lengtelimiet dat toelaat.