7 Ficheros XML de consultas: parte común

Este capítulo describe la parte del formato de los ficheros de consultas que es igual para todos los motores. Lo que depende de cada motor (cómo se escribe la operación sobre la fuente y de dónde sale cada valor) se describe en los capítulos 9, 10 y 11.

7.1 Qué es común y qué depende del motor#

Un fichero XML de consultas tiene siempre la misma estructura: un elemento raíz <Queries> con declaraciones globales y una lista de consultas. Cada consulta combina elementos comunes con elementos propios del motor:

<Queries engine="...">                        <!-- común -->

    <environment name="..." default="..."/>   <!-- común -->
    <script language="...">...</script>       <!-- común -->
    <context .../>                            <!-- solo Database -->
    <authentication ...>...</authentication>  <!-- solo Webservice -->

    <query name="..." module="..." ...>       <!-- común + atributos del motor -->
        <sql>...</sql>                        <!-- solo Database -->
        <url>...</url>                        <!-- solo Webservice -->
        <parameter order="..." .../>          <!-- común + atributos del motor -->
        <item name="..." .../>                <!-- común + atributos del motor -->
        <field name="..." .../>               <!-- común + atributos del motor -->
        <script>...</script>                  <!-- común -->
    </query>

</Queries>

La tabla 7.1 resume qué elementos y atributos existen en cada motor.

Tabla 7.1. Elementos y atributos por motor

Elemento / atributo Database Webserv. MQTT Sección
Nivel <Queries>
<Queries engine query databbix> sí sí sí 7.3
<environment> sí sí sí 7.4
<script> sí sí sí 7.5
<context> sí — — 9.5
<authentication> — sí — 10.6
Consulta <query>
name, module, maxCache, maxExecTime sí sí sí 7.6
discovery="yes" sí sí sí 7.9
type="Constant" sí sí sí 7.10
select="FILTER|BIND" sí — — 9.4
type="REST|SOAP", transport, encode — sí — 10.3
<sql>, <default> sí — — 9.3
<url>, <base>, <transform> — sí — 10.3
<method>, <argument> — sí (SOAP) — 10.4
<parameter>
order, value, type sí sí sí 7.8
context sí — — 9.5
column, bind sí — — 9.4
path, urlparameter — sí — 10.3
<item>
name, transform, default, built_in sí sí sí* 7.7
value solo en consultas constantes 7.10
column sí — — 9.4
path, type — sí — 10.3
<field> (descubrimientos)
name sí sí sí 7.9
column, context sí — — 9.4.4
path — sí — 10.3.4
* En MQTT los nombres de ítem son fijos (capítulo 11).

7.2 Reglas generales#

  • Los nombres de elementos y atributos no distinguen mayúsculas de minúsculas (<Queries> y <queries> son equivalentes).

  • Un atributo o elemento desconocido, o que no corresponde al motor, es un error: el monitor no arranca y el error aparece en su log.

  • Conviene escribir el texto de las consultas y los scripts dentro de una sección <![CDATA[ ... ]]> para no tener que escapar <, > ni &.

  • Si un monitor carga varios ficheros (varias líneas QueryFile), todos deben ser del mismo motor. Los nombres de consulta y de ítem deben ser únicos en el conjunto de ficheros.

7.3 El elemento <Queries>#

Es el elemento raíz y admite estos atributos:

Atributo Descripción
engine Motor: Database (defecto), Webservice o MQTT. Debe coincidir con General.Engine del monitor.
query Versión mínima del formato de consultas que exige el fichero. La versión actual es 2.5.0.
databbix Versión mínima de Databbix que exige el fichero.

Si la versión instalada es menor que la exigida, el monitor no arranca y lo indica en el log.

7.4 Variables de entorno: <environment>#

Las variables de entorno permiten parametrizar un XML para reutilizarlo en varias instalaciones: nombres de esquema, bases de datos, contextos…

<environment name="SvmSchema" default="svm920"/>

Se usan con la sintaxis ${Nombre}. Dónde se sustituyen depende del motor: en Database, en el texto SQL, en los atributos de contextos, <default> y <parameter>, y en las condiciones de <when> con environment(’Nombre’); en Webservice, en el texto de los elementos <header> de las autenticaciones HTTPAuth.

<sql><![CDATA[
    select count(*) as n from ${SvmSchema}.f986110
    ]]>
</sql>

El valor de una variable se toma de la primera de estas fuentes que la defina:

  1. Environment en el fichero .conf del monitor.

  2. Environment en databbix.conf.

  3. El atributo default del <environment> en el XML.

Por ejemplo, para que un monitor use el esquema svm910:

[General]
Environment = SvmSchema=svm910

Una variable sin definir se sustituye por una cadena vacía.

7.5 Scripts: <script>#

Un <script> contiene funciones en JavaScript o Python que se usan para transformar valores o respuestas. Se puede poner en el nivel de <Queries>, y entonces está disponible en todas las consultas, o dentro de un <query>, y entonces solo está disponible en esa consulta.

<script language="Javascript"><![CDATA[
    function toUnix(fecha) {
        return Math.round(Date.parse(fecha) / 1000);
    }
    ]]>
</script>

Todos los scripts de una colección de consultas deben usar el mismo lenguaje. El capítulo 12 explica cómo programarlos.

7.6 La consulta: <query>#

7.6.1 Atributos comunes#

Atributo Descripción
name Obligatorio. Nombre único de la consulta. Aparece en el log y en queryexplorer.
module Obligatorio. Módulo al que pertenece la consulta.
discovery yes para una consulta de descubrimiento (LLD).
type Constant para una consulta de valores constantes. En el motor Webservice, además, REST o SOAP.
maxCache Vida máxima en caché de los resultados de esta consulta, en segundos. La vida efectiva es el menor valor entre este y MaxCache del monitor.
maxExecTime Umbral en segundos a partir del cual se registra un aviso de ejecución lenta. Si no se indica, se usa MaxQueryExecTimeLog.

7.6.2 Tipos de consulta por motor#

Motor Tipo Qué hace
Todos Constante Devuelve valores fijos del XML.
Descubrimiento Genera el JSON de una regla LLD de Zabbix.
Database Básica Una sentencia SQL que devuelve una fila.
Filtro Una sentencia que devuelve muchas filas; la clave elige la fila.
Bind La clave se pasa a la sentencia como variable.
Webservice REST Llamada HTTP con respuesta JSON; la clave se puede pasar en la URL o usar como filtro.
SOAP Llamada SOAP con argumentos fijos.
MQTT Valor Último valor publicado en un topic.

7.7 El elemento <item>#

Cada <item> declara un ítem de Zabbix que produce la consulta. Estos son sus atributos comunes; cada motor añade los atributos que indican de dónde sale el valor (column en Database, path y type en Webservice).

Atributo Descripción
name Obligatorio. Clave del ítem en Zabbix, sin parámetros. Debe ser única entre todas las consultas cargadas.
transform Función que transforma el valor antes de enviarlo, con la forma Lenguaje:función (por ejemplo, Javascript:toUnix). Véase el capítulo 12.
default Valor que se envía si el dato buscado no existe (la fila de una consulta de filtro o la ruta de una respuesta JSON).
built_in Ítem interno de la consulta: exec_time (tiempo de ejecución en segundos) o exec_success (1 si la última ejecución terminó bien, 0 si no).

Un mismo dato puede alimentar varios ítems con nombres distintos, por ejemplo para mantener una clave antigua y una nueva a la vez:

<item name="tez.ora.queryversion" column="version"/>
<item name="ts.db.queryversion"   column="version"/>

7.8 El elemento <parameter>#

Relaciona cada parámetro de la clave de Zabbix con la consulta. Estos son los atributos comunes; el atributo que dice para qué se usa el parámetro depende del motor (column, bind o context en Database; path o urlparameter en Webservice).

Atributo Descripción
order Posición del parámetro en la clave del ítem, empezando en 1.
value Valor fijo, en lugar de tomarlo de la clave. Es incompatible con order.
type STRING (defecto) o INT. Con INT, el valor se compara o se envía como número.

Los parámetros de la clave se separan solo por comas y se eliminan los espacios de los extremos. No se interpretan comillas, así que un parámetro no puede contener comas.

7.9 Consultas de descubrimiento#

En todos los motores, una consulta con discovery="yes" produce el JSON de una regla de descubrimiento de bajo nivel de Zabbix:

{"data":[ {"{#MACRO1}":"valor", "{#MACRO2}":"valor"}, ... ]}
  • Cada entidad descubierta (una fila, un elemento de un array JSON, un topic) es un elemento de data.

  • Cada <field> define una macro: el atributo name es el nombre de la macro sin {# ni }, y el atributo propio del motor indica de dónde sale su valor.

  • Los <item> de un descubrimiento solo llevan name y, opcionalmente, transform; en ese caso la función recibe el JSON completo (sección 12.5).

7.10 Consultas constantes#

Con type="Constant", la consulta no accede a la fuente de datos: cada <item> devuelve el valor de su atributo value. Funcionan con cualquier motor y se suelen usar para publicar la versión del fichero de consultas:

<query name="JDEVersion" module="JDE" type="Constant">
    <item name="ts.jde.queryversion" value="$Id: manual-databbix.tex 2699 2026-10-28 12:19:58Z bruno $"/>
</query>