Tabla de Contenidos

Referencia para el desarrollo de Pandora FMS

Arquitectura general del código de Pandora FMS

Para una explicación aparte y detallada acerca de la estructura de la base de datos de Pandora FMS vaya al artículo Ingeniería de Pandora FMS.

Cómo hacer los enlaces compatibles

Para todos los links, es necesario usar la función ui_get_full_url. Previamente al llamado de la función es necesario incluir functions_ui.php.

$url_refresh = ui_get_full_url();
$url = ui_get_full_url("/relative/path/file_script.php");
<?php
  ...
  $url = ui_get_full_url("/relative/path/file_script.php");
  ...
?>

<script type="text/javascript>
  ...
  jQuery.post ('<?php $url; ?>',
    {
     ...
    });
 ...
</script>
echo '<form method="post" action="index.php?param=111?param=222?param=333?param=444?param=555?param=666">';

Puntos de entrada de ejecución de Pandora Console

Pandora Console solo dispone de unos cuantos puntos de entrada de ejecución de la aplicación web, a diferencia de otras aplicaciones web, como por ejemplo:

Instalación

Este punto de entrada es para realizar una instalación de Pandora Console y la base de datos. Una vez finalizada la instalación Pandora Console solicita el borrado del fichero por seguridad.

install.php

Ejecución Normal

Toda interacción de los usuarios en la consola la realizan por este punto de entrada.

index.php

Peticiones AJAX

En todas las peticiones Ajax se chequean los permisos de usuario: Para hacerlas coherentes y fáciles de mantener se realizan a través de este fichero pasando por método GET o POST el parámetro page la dirección relativa del script a ejecutar.

ajax.php

Consola móvil

Para los terminales móviles que disponen de una pantalla sensiblemente mas pequeña que el monitor de un ordenador, Pandora FMS dispone de una versión reducida de la consola para estos dispositivos, reducida tanto en aspecto visual como simplificada en su funcionalidad.

mobile/index.php

API

Pandora FMS dispone de una API de tipo REST con la que terceras aplicaciones pueden interaccionar a través de un canal simple por el puerto 80 y con el protocolo HTTP/HTTPS.

El fortalecimiento de este script es por medio de tres parámetros, validando los tres:

include/api.php

Casos especiales

Dentro de Pandora Console hay varios casos especiales para puntos de entrada, normalmente por evitar inicio de sesión o procesamientos generales que se hacen en el punto de entrada principal (index.php del raíz).

Extensión Tareas Cron

Esta extensión por medio de un comando wget en el cron puede ejecutar las tareas de cron que se le han asignado sin pedir inicio de sesión de forma interactiva. Por supuesto el conjunto de tareas está delimitado y conocido impidiendo la ejecución de código malicioso sin inicio de sesión.

enterprise/extensions/cron/cron.php
Consola visual vista externa

Este genera una página con la vista de una consola visual a pantalla completa sin ser necesario un inicio de sesión, aunque para autentificación si es necesario un hash generado para cada vista que se publique de esta manera.

operation/visual_console/public_console.php
Consola Networkmap Popup detalle

Un formulario emergente que muestra la vista en detalle de un agente que tiene un ítem en el Consola Networkmap. Para autentificarse usa la session del usuario autenticado en el Pandora Console.

enterprise/operation/agentes/networkmap_enterprise.popup.php
Gráfica de módulos Popup

Un formulario emergente que muestra una gráfica de un modulo al detalle y que permite también configurar varios parámetros de visualización. Para la autenticación utiliza los datos el usuario que ha iniciado sesión en el Pandora Console.

operation/agentes/stat_win.php
Gráficas estáticas

Las gráficas estáticas son ficheros de imagen que se generan por medio de scripts PHP, los datos a mostrar, si son extensos se guardan serializados en un fichero especial que procesa el script, este fichero tiene un tiempo de vida para evitar accesos maliciosos y ataques por DOS. Para la ejecución de este script no es necesario estar autentificado en Pandora FMS.

include/graphs/fgraph.php
Informes

Informe en CSV

El script genera un fichero de texto que contiene los datos CSV, para la autentificación usa los datos del usuario conectado.

enterprise/operation/reporting/reporting_viewer_csv.php

Informe en PDF

El script genera un fichero de texto que contiene los datos PDF, para la autenticación usa los datos del usuario conectado.

enterprise/operation/reporting/reporting_viewer_pdf.php
Eventos

Eventos sonoros Popup

Ventana de Popup que está revisando periódicamente si existe algún evento para mostrarlo de forma sonora y visual.La autentificación es por medio de los datos del usuario que ha iniciado sesión en Pandora Console.

operation/events/sound_events.php

Eventos en CSV

El script genera un fichero de texto que contiene los datos CSV, para la autentificación usa los datos del usuario conectado.

operation/events/export_csv.php

Eventos en RSS

El script genera un fichero de texto que contiene los datos CSV, para la autentificación usa los datos del usuario conectado con un hash que va como parámetro.

operation/events/events_rss.php

Funciones básicas para obtener estado de agente, módulo y grupos

Criterio para Estados y codificación en la base de datos

Descripción de estados del agente:

Código interno del estado en la BBDD:

Agentes

Funciones de Estado

Estas funciones devuelven el número de módulos y alertas disparadas de un agente aplicando un filtro de forma opcional.

Todas las funciones tienen la opción filter que fue añadido para hacer la función más flexible. El contenido del filtro se añade al final de la consulta SQL en todas las funciones. Con el filtro puede añadir cláusulas SQL específicas para crear filtros usando las tablas: tagente_estado, tagente y tagente_modulo.


agents_monitor_critical($id_agent, $filter='')

Devuelve el número de módulos en estado crítico para el agente.


agents_monitor_warning ($id_agent, $filter ='')

Devuelve el número de módulos en estado advertencia para el agente.


agents_monitor_unknown ($id_agent, $filter ='')

Devuelve el número de módulos en estado desconocido para el agente.


agents_monitor_ok ($id_agent, $filter ='')

Devuelve el número de módulos en estado normal para el agente.


agents_get_alerts_fired ($id_agent, $filter ='')

Devuelve el número de alertas disparadas para el agente.

Funciones auxiliares

Estas funciones realizan tareas relacionadas con los agentes para algunas vistas:


agents_tree_view_alert_img ($alert_fired)

Devuelve la ruta de la imagen de alerta usada en la vista Tree View.


agetns_tree_view_status_img ($critical, $warning, $unknown)

Devuelve la rutta de la imagen para el estado del agente usada en al vista Tree View.


Grupos

Estas funciones devuelven las estadísticas de agentes y módulos para los grupos de agentes definidos en Pandora FMS.

Las funciones del servidor y la consola deben usar las mismas consultas SQL para asegurar que el resultado es calculado de la misma forma.

Funciones del servidor

pandora_group_statistics

Esta función calcula las estadísticas de grupo si el parámetro Use realtime statistics está desactivado.

Funciones de la consola

Grupos

Las funciones de la consola calculan las estadísticas en base a una matriz de grupos de agentes.

Estas funciones no usan los agentes o módulos deshabilitados:


groups_agent_unknown ($group_array)

Devuelve en número de agentes en estado desconocido para los grupos dados.


groups_agent_ok ($group_array)

Devuelve en número de agentes en estado normal para los grupos dados.


groups_agent_critical ($group_array)

Devuelve en número de agentes en estado crítico para los grupos dados.


groups_agent_warning ($group_array)

Devuelve en número de agentes en estado advertencia para los grupos dados.


Módulos

Estas funciones calculan las estadísticas para los módulos. No usan los módulos o agentes deshabilitados:


groups_monitor_not_init ($group_array)

Devuelve el número de módulos con estado no inicializado para los grupos dados.


groups_monitor_ok ($group_array)

Devuelve el número de módulos con estado normal para los grupos dados.


groups_monitor_critical ($group_array)

Devuelve el número de módulos con estado crítico para los grupos dados.


groups_monitor_warning ($group_array)

Devuelve el número de módulos con estado advertencia para los grupos dados.


groups_monitor_unknown ($group_array)

Devuelve el número de módulos con estado desconocido para los grupos dados.


groups_monitor_alerts ($group_array)

Devuelve el número de módulos con alertas para los grupos dados.


groups_monitor_fired_alerts ($group_array)

Devuelve el número de módulos con alertas disparadas para los grupos dados.

Módulos

Estas funciones devuelve las estadísticas en base al nombre del módulo. No tienen en cuenta los agentes y módulos deshabilitados.

modules_agents_unknown ($module_name)

Devuelve el número de agentes en estado desconocido que tienen un módulo con el nombre dado.


modules_agents_ok ($module_name)

Devuelve el número de agentes en estado normal que tienen un módulo con el nombre dado.


modules_agents_critical ($module_name)

Devuelve el número de agentes en estado crítico que tienen un módulo con el nombre dado.


modules_agents_warning ($module_name)

Devuelve el número de agentes en estado advertencia que tienen un módulo con el nombre dado.


Estas funciones devuelven las estadísticas usando como filtro el grupo de módulo. No tiene en cuenta agentes o módulos deshabilitados:


modules_group_agent_unknown ($module_group)

Devuelve el número de agentes con estado desconocido que tienen módulos que pertenecen al grupo de módulos dado.


modules_group_agent_ok ($module_group)

Devuelve el número de agentes con estado normal que tienen módulos que pertenecen al grupo de módulos dado.


modules_group_agent_critical ($module_group)

Devuelve el número de agentes con estado crítico que tienen módulos que pertenecen al grupo de módulos dado.


modules_group_agent_warning ($module_group)

Devuelve el número de agentes con estado advertencia que tienen módulos que pertenecen al grupo de módulos dado.

Políticas

Estas funciones devuelven el número de agentes para cada estado y política dada. No usan los agentes y módulos deshabilitados para calcular el resultado.

policies_agents_critical ($id_policy)

Devuelve el número de agentes con estado crítico que pertenecen a una política dada.


policies_agents_ok ($id_policy)

Devuelve el número de agentes con estado normal que pertenecen a una política dada.


policies_agents_unknown ($id_policy)

Devuelve el número de agentes con estado desconocido que pertenecen a una política dada.


policies_agents_warning ($id_policy)

Devuelve el número de agentes con estado advertencia que pertenecen a una política dada.

OS

Estas funciones calculan las estadísticas para los agentes en base los Sistemas Operativos a los que pertenecen. No usan agentes o módulos deshabilitados.

os_agents_critical ($id_os)

Devuelve el número de agentes en estado crítico que pertenecen al Sistema Operativo dado.


os_agents_ok($id_os)

Devuelve el número de agentes en estado normal que pertenecen al Sistema Operativo dado.


os_agents_warning ($id_os)

Devuelve el número de agentes en estado advertencia que pertenecen al Sistema Operativo dado.


os_agents_unknown ($id_os)

Devuelve el número de agentes en estado desconocido que pertenecen al Sistema Operativo dado.

Desarrollo y ampliación

La mayoría de las ampliaciones han sido descritas como anexos independientes, especializados para creación de plugin de servidor, plugins de agente Unix, y extensiones de la Consola web. En este capítulo se describe como colaborar en Pandora FMS y como compilar el agente de Windows desde las fuentes.

Colaborar con el proyecto Pandora FMS

Este proyecto lo mantienen desarrolladores voluntarios con sus colaboraciones. Nuevos desarrolladores, redactores de documentación, o personas que quieran ayudar será siempre bienvenidas. Una buena manera de empezar es subscribiéndose a nuestras listas de correo y/o al foro.

Bugs / Fallos

Informar acerca de posibles errores nos ayuda a mejorar Pandora FMS. Por favor, antes de enviar un informe de error, revise nuestra base de datos de bugs.

Listas de correo

Las listas de correo son una excelente manera de mantenerse al día por correo electrónico. Tenemos una lista de correo pública para usuarios y anuncios (con poco tráfico) y una lista de correo de desarrollo para discusiones técnicas y notificaciones (a veces diarias) del desarrollo mediante el sistema automático de notificación de nuestro GIT (Sistema de control de versión de código).

Compilación del agente de Windows desde el código

Obtener la última versión del código

Para obtener la última versión del código es imprescindible hacerlo descargando las fuentes del repositorio de código GitHub, donde tenemos publicado el repositorio oficial de Pandora FMS.

API de Pandora FMS

Existe una API externa de Pandora FMS para poder enlazar terceras aplicaciones con Pandora FMS, tanto para obtener información de Pandora FMS como para introducir información dentro de Pandora FMS. Toda esta documentación está en el apéndice de API Externa de Pandora FMS.

Formato de los ficheros de datos XML

Conocer el formato de los XML de datos de Pandora FMS puede ayudar a mejorar los plugins de agente, crear agentes personalizados o simplemente enviar ficheros XML personalizados al servidor de datos de Pandora FMS.

Como cualquier documento XML, el fichero de datos debe comenzar con una declaración XML:

<?xml version='1.0' encoding='UTF-8'?>

A continuación viene el elemento agent_data que define al agente que envía los datos. Soporta los siguientes atributos:

A continuación se necesita un elemento module por cada módulo, y se pueden anidar los siguientes elementos para definir el módulo:

Estos tokens solo funcionaran para plugins del dataserver.

Cualquier otro elemento se salvará como información extendida del módulo en la base de datos de Pandora FMS. Un módulo deberá tener al menos un elemento name, type y data, por ejemplo:

  <module>
    <name>CPU</name>
    <description>CPU usage percentage</description>
    <type>generic_data</type>
    <data>21</data>
  </module>

Puede haber cualquier número de elementos en un fichero de datos XML antes de cerrar la etiqueta agent_data.

Hay un caso especial de XML multiitem, basado en una lista de datos. Esto se aplica únicamente a datos de tipo cadena. El XML sería algo parecido a esto:

<module>
 <type>async_string</type>
 <datalist>
   <data><value><![CDATA[xxxxx]]></value></data>
   <data><value><![CDATA[yyyyy]]></value></data>
   <data><value><![CDATA[zzzzz]]></value></data>
 </datalist>
</module>

Se puede especificar una marca de tiempo para cada valor:

<module>
 <type>async_string</type>
 <datalist>
   <data>
     <value><![CDATA[xxxxx]]></value>
     <timestamp>1970-01-01 00:00:00</timestamp>
   </data>
   <data>
     <value><![CDATA[yyyyy]]></value>
     <timestamp>1970-01-01 00:00:01</timestamp>
   </data>
   <data>
     <value><![CDATA[zzzzz]]></value>
     <timestamp>1970-01-01 00:00:02</timestamp>
   </data>
 </datalist>
 </module>

Volver al Índice de Documentación Pandora FMS