Advertising:

Zabbix de 0 a 100: Difference between revisions

From Zabbix-ES
Jump to navigation Jump to search
Line 843: Line 843:
  Connections to host    : '''PSK'''
  Connections to host    : '''PSK'''
  Connections from host  : '''PSK'''
  Connections from host  : '''PSK'''
  PSK identity          : OpenWebinars
  PSK identity          : Zabbix2020
  PSK                    : 79da666f7eab34055953b3ee48f58a5486fda5a6e8c286452752824c63386c79
  PSK                    : 79da666f7eab34055953b3ee48f58a5486fda5a6e8c286452752824c63386c79
   
   

Revision as of 15:51, 7 August 2020

Seccion

Introducción

Presentación

Mi nombre es Mariano Obarrio Miles, soy Lic. en Informática y desde hace varios años estoy trabajando con Zabbix, cuento con las certificaciones de Zabbix Certified Professional y Expert. 

Actualmente trabajo como Administrador de sistemas y soy responsable de la administración y monitorización de toda la infraestructura Hardware y Software en mi actual trabajo.
Nombre  : Mariano J. Obarrio Miles
Estudios: Licenciado en Informática
          Universidad Argentina de la Empresa

          Zabbix Certified Professional
          Zabbix Certified Specialist




LinkedIn: https://www.linkedin.com/in/mobarrio
Twitter : https://twitter.com/mariano_obarrio

Objetivo del Curso

El objetivo de este curso es introducirnos en Zabbix que es una herramienta de monitorizacion de nivel empresarial, esto quiere decir que cumple con los niveles de excelencia que son requeridos dentro de una organización es robusto, flexible y muy fiable.
Al finalizar el curso obtendréis los conocimientos necesarios para poder instalar y administrar Zabbix, conocer su arquitectura y las características que ofrece y explotarlas de la mejor forma posible.
La modalidad del curso es generalmente practica, realizaremos instalaciones, configuraciones y laboratorios donde aplicaremos los conocimientos adquiridos.

Herramientas necesarias

Bueno para poder realizar esta formación será necesario contar con conocimientos básicos de Linux, ya que editaremos ficheros o reiniciaremos servicios desde línea de comando, no so preocupeis que todo es muy fácil.
Otro requisito es tener un ordenador con acceso a Internet para poder descargar las imágenes de Vagrant y un cliente ssh tipo Putty o SecureCRT para poder acceder a ellas.
En el siguiente MAPY os muestro la infraestructura que desplegará Vagrant y como nos conectaremos a ella.
MAPY de Infraestructura
Trabajaremos con 3 maquinas virtuales que se desplegaran con Vagrant sobre Virtualbox, no es necesario grandes conocimientos de Vagrant o de Virtualbox para poder preparar el entorno, pero si os interesa, hay un curso en OpenWebinars muy bueno y rápido de realizar impartido por Alberto Molina se llama Curso Online de Vagrant.

Ahora os explicaré para qué utilizaremos estas máquinas:

 - La primer máquina la utilizaremos para para instalar y configurar Zabbix Server, PostgreSQL y Zabbix Frontend.

 - La segunda la utilizaremos para monitorizarla, hacer pruebas y también probar algunas características avanzadas que comentaremos más adelante como el Auto-Registration. 

 - La tercera máquina la utilizaremos para ver como instalar y configurar un Zabbix Proxy.
Aquí debajo os dejo los links para poder poder descargar todo el software necesario:
 - Cliente SSH tipo Putty o SecureCRT (https://www.putty.org/)
  Nota: Si utilkizmos putty podemos tambien bajarnos el software TTYPlus
 
 - Virtualbox + Extension Pack (https://www.virtualbox.org/wiki/Downloads)
   Nota: Importante Virtualbox no funciona si tenemos habilitada la característica de windows de Hyper-V, hay que deshabilitarla.
   Nota: La última versión de Vagrant 2.2.6 al momento del curso solo funciona con VirtualBox 5.2.36 (released January 14 2020)
 
 - Vagrant  (https://www.vagrantup.com/downloads.html)

Descarga material necesario

Download Putty
Download Vagrant
- Ficheros de Vagrant para crear la infraestructura
# git clone https://bitbucket.org/mobarrio/zabbix-infraestructure.git

Seccion

Despliegue y Conectividad

Despliegue de la infraestructura

Clonaremos el repositorio desde BitBucket para poder crear la infraestructura.
# git clone https://bitbucket.org/mobarrio/zabbix-infraestructure.git
 - Vagrantfile         <- Vagrantfile con los datos necesarios para el despliegue de la infraestructura. 
 - provisioning.sh     <- Archivo para provisionar las máquinas virtuales.
 - Vagrant-Help.txt    <- Pequeña ayuda con comandos de Vagrant útiles.
 - ResponseTimeCURL.sh <- Script para tomar tiempos de acceso a una WEB
 - update-motd.sh      <- Script para personalizar el MOTD  
Importante: Dentro del Vagrantfile está comentada la definición del plugin para conectarnos a través de un proxy. 
Si este es el caso, descomentamos esas líneas y definimos el proxy correctamente.
Bueno vamos a comenzar con el despliegue. Abrimos una terminal con CMD y nos posicionamos en el directorio donde estén los ficheros.

D:\>cd zabbix-infraestructure
- Ejecutamos el comando vagrant up para desplegar el entorno del curso.

D:\Temp\Curso-Zabbix-Vagrantfiles>vagrant up

Configurar la conexión al entorno

Vía Vagrant

C:> vagrant ssh zbxsrv01
C:> vagrant ssh zbxclient01

Vía Putty

Configuramos la conexión con el Zabbix Server
Configuramos la conexión con un Client Linux
Aceptamos la clave
Usuario: root - Password: vagrant

Solución de problemas

Reset de password en PostgreSQL si la perdimos

# sudo -u postgres psql zabbix
> ALTER USER zabbix WITH PASSWORD 'Z4bb1x'; 

Desactivar Hiper-V para utilizar VirtualBox

Opción vía CMD
Abrir un CMD como Administrador
C:> bcdedit /set hypervisorlaunchtype off
The operation completed successfully.
Nota: También tiene que estar activo en la BIOS las opciones de virtualizacion ver: VT-x is disabled

Nota: Para activarlo nuevamente ejecutamos bcdedit /set hypervisorlaunchtype auto

Desactivar la Feature SANDBOX de Windows 10 para poder utilizar VirtualBox

Opción vía Powershell
Desde un PowerShell (Admin)
PS C:\windows\system32> Disable-WindowsOptionalFeature –FeatureName "Containers-DisposableClientVM" -Online
Nota: Para activarlo nuevamente ejecutamos Enable-WindowsOptionalFeature –FeatureName "Containers-DisposableClientVM" -All -Online
Opción vía CMD
Abrir un CMD como Administrador
C:> Dism /online /Disable-Feature /FeatureName:"Containers-DisposableClientVM"
Nota: Para activarlo nuevamente ejecutamos Dism /online /Enable-Feature /FeatureName:"Containers-DisposableClientVM" -All

Seccion

Un poco de historia y conceptos generales

¿Que es Zabbix?

Zabbix es una herramienta de software pensada para la empresa y diseñada para monitorizar en tiempo real millones de métricas y recolectar datos de decenas de miles de dispositivos como pueden ser:
Fuente Zabbix SIA
 Zabbix es Open Source, no tiene coste ni limite de dispositivos a monitorizar, esta desarrollado principalmente en C y utiliza la licencia GNU GPL version 2.
Zabbix Professional Services

Un poco de historia antes de ponernos a trabajar

ZABBIX es un software que fue desarrollado por Alexei Vladishev en el año 1998 y en el año 2001 fue liberado para el publico después de 3 años en el 2004 se obtuvo la primera versión estable. Ya pasaron mas de 15 años y a día de hoy van por la versión 4.4. Con esto podemos decir que es un software muy maduro.
Fuente Wikipedia
ZABBIX suele lanzar versiones LTS (Long Term Support) que son todas las terminadas en .0 y versiones intermedias que cuentan con 6 meses de soporte y estas son las versiones .2 y .4. Como comente antes actualmente liberaron la versión 4.4 que es una versión intermedia, se supone que es la anterior a que liberen la versión 5.0 que está prevista para Marzo del 2020.

Road Map

¿Por qué usar Zabbix?

- Es flexible, permite interactuar con todo tipo de elementos, a los cuales puede monitorizar vía agentes (multi-plataforma), HTTP, SNMP, JMX, IPMI o con custom scripts.

- Es Open Source y sin coste.

- No tiene límites en los elementos a monitorizar.

- Reduce el OPEX (Costos de operación) ya que con la detección pronta de problemas, el escalado de los mismos o la auto resolución de ellos, minimizamos el impacto reduciendo el tiempo de inactividad en entornos críticos.

- El acceso es vía una interfaz es web desarrollada en PHP.

- Podemos visualizar los datos monitorizados en tiempo real.

¿Quienes son los usuarios de Zabbix?

Customers and Users

Seccion

Instalación del servidor de Zabbix

Introducción

ZABBIX es un software modular, se pueden instalar todos sus componentes en un mismo host o por separado. Como vemos en la diapositiva, la solución consta de tres partes principales, el server, el front y la base de datos, adicionalmente tenemos los proxys y los agentes que dan flexibilidad a la monitorizacion ya que incorporan muchas funciones muy útiles.
Arquitectura de Zabbix

Requerimientos de Hardware

Los requerimientos de hardware no son grandes, aunque el mayor impacto es sobre la base de datos. Si procesamos miles de valores por segundo, seguramente necesitaremos buenos discos que puedan soportar la alta carga que esto representa.
Requerimientos
Ahora que ya sabemos como esta compuesto ZABBIX, procederemos a instalar los diferentes componentes. Comenzando por la Base de Datos.

Instalación de PostgreSQL y Apache

ZABBIX Soporta diferentes bases de datos como PostgreSQL, MySQL, Oracle, IBM DB2 y SQLite. Particularmente SQLite se utiliza muy a menudo en la configuración de los Proxys. Otro dato importante es que las instalaciones se reparten casi el 99% entre PostgreSQL y MySQL y el 1% restantes en Oracle y DB2.
En este curso nosotros utilizaremos PostgreSQL como motor de base de datos para nuestra instalación. 
Para comenzar, nos conectaremos a la máquina de ZBXSRV01 (IP: 10.0.100.100) via Putty o con Vagrant SSH

Download PostgreSQL para Centos/7
# yum install -y httpd
# yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# yum install -y postgresql11 postgresql11-server

# /usr/pgsql-11/bin/postgresql-11-setup initdb
# vi /var/lib/pgsql/11/data/pg_hba.conf
# TYPE  DATABASE        USER            ADDRESS                 METHOD

local   all             all                                     trust <-- Actualizamos de PEER a TRUST o MD5
host    all             all             127.0.0.1/32            trust
host    all             all             ::1/128                 trust
# systemctl enable postgresql-11
# systemctl start postgresql-11
# systemctl status postgresql-11

Instalación de Zabbix Server

- yum install zabbix-server-XXXX - Donde XXXX es la DB a la que utilizará para guardar los datos.

# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
# yum clean all
# yum install -y zabbix-server-pgsql zabbix-agent
# yum install -y centos-release-scl
# vi /etc/yum.repos.d/zabbix.repo
  [zabbix-frontend]
  ...
  enabled=1
  ...
# yum install -y zabbix-web-pgsql-scl zabbix-apache-conf-scl
# sudo -u postgres createuser --pwprompt zabbix
could not change directory to "/root": Permission denied
Enter password for new role: Z4bb1x 
Enter it again: Z4bb1x 

# sudo -u postgres createdb -O zabbix zabbix
# zcat /usr/share/doc/zabbix-server-pgsql*/create.sql.gz | sudo -u zabbix psql zabbix
Paquetes de SQL necesarios para la instalación de la base de datos
- schema.sql
- images.sql
- data.sql 

Nota: Todos incluidos en create.sql.gz

Conexión con la BBDD desde Zabbix server

Al instalar el zabbix server se auto-configuran los siguientes parámetros de la base de datos.
# vi /etc/zabbix/zabbix_server.conf
DBHost=localhost    <---- IP del servidor donde esta la base de datos
DBName=zabbix       <---- Nombre de la base de datos
DBUser=zabbix       <---- Nombre del Usuario para conectar con la base de datos
DBPassword=Z4bb1x   <---- Contraseña del usuario para conectarnos a la base de datos

Configuracion zona Horaria en Zabbix 5.X

# vi /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
php_value[date.timezone] = Europe/Madrid

Arranque de Zabbix Server, Zabbix FE, HTTPD (Apache) y PHP-fpm

# systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm
# systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm
# systemctl status zabbix-server zabbix-agent httpd rh-php72-php-fpm

Seccion

Configuración del Frontend

Introducción

- Es importante destacar que el Zabbix Frontend ataca directamente a la base de datos con lo cual no necesita que el server esté activo salgo para alguna consulta puntual que solo la puede responder el server como el número de ítems procesados.
Paquetes de SQL necesarios para la instalación de la base de datos
- zabbix-web-XXXX - Donde XXXX es la DB a la que conectara

Configuración de la zona horaria

La infraestructura que utilizamos está configurada con la zona horaria de Europa/Madrid, si vosotros estáis en otra zona horaria, con el comando timedatectl list-timezones podemos ver todas las zonas horarias disponibles y con el comando timedatectl set-timezone podemos actualizarla.
# timedatectl list-timezones
# timedatectl set-timezone Europe/Madrid

Zabbix 5.X

# vi /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
php_value[date.timezone] = Europe/Madrid

Zabbix 4.X y anteriores

# vi /etc/httpd/conf.d/zabbix.conf
#
# Zabbix monitoring system php web frontend
#

Alias /zabbix /usr/share/zabbix

<Directory "/usr/share/zabbix">
    Options FollowSymLinks
    AllowOverride None
    Require all granted

    <IfModule mod_php5.c>
        php_value max_execution_time 300
        php_value memory_limit 128M
        php_value post_max_size 16M
        php_value upload_max_filesize 2M
        php_value max_input_time 300
        php_value max_input_vars 10000
        php_value always_populate_raw_post_data -1
        php_value date.timezone Europe/Madrid    <--- Descomentar y actualizar
    </IfModule>
</Directory>

<Directory "/usr/share/zabbix/conf">
    Require all denied
</Directory>

<Directory "/usr/share/zabbix/app">
    Require all denied
</Directory>

<Directory "/usr/share/zabbix/include">
    Require all denied
</Directory>

<Directory "/usr/share/zabbix/local">
    Require all denied
</Directory>

Instalación Gráfica del frontend

En el browser abrir la URL de Zabbix: http://10.0.100.100/zabbix  <-- ATENCION
Parametros de PHP  <-- ATENCION
Una vez instalado el frontend, este conecta directamente contra la base de datos, ya que algunas consultas las realiza sin necesidad de pasar por el Zabbix Server. La configuración de la conexión esta en el fichero /etc/zabbix/web/zabbix.conf.php

# cat /etc/zabbix/web/zabbix.conf.php
<?php
// Zabbix GUI configuration file.
global $DB;

$DB['TYPE']     = 'POSTGRESQL';
$DB['SERVER']   = 'localhost'; <----- IP donde esta la BBDD instalada
$DB['PORT']     = '0';
$DB['DATABASE'] = 'zabbix'; <----- Nombre de la base de datos
$DB['USER']     = 'zabbix'; <----- Nombre del usuario
$DB['PASSWORD'] = 'Z4bb1x'; <----- Contraseña del usuario
$DB['DOUBLE_IEEE754'] = 'true';  <----- Contraseña Nuevo parametro de zabbix 5.X importante cuando actualizamos de versiones anteriores.
// Schema name. Used for IBM DB2 and PostgreSQL.
$DB['SCHEMA'] = ;

$ZBX_SERVER      = 'localhost'; <----- IP del Zabbix Server
$ZBX_SERVER_PORT = '10051';     <----- Puerto en que escucha
$ZBX_SERVER_NAME = 'zbxsrv01';  <----- Nombre del Zabbix Server

$IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG;

TIP: Re-dirección de la página default

Para evitar que se muestre la pagina de APACHE cuando entramos en Zabbix sin poner la ruta completa en el navegador, creamos una pagina de inicio que nos redirecciona a la ruta por defecto de zabbix.
Es recomendable no modificar el path que trae zabbix por defecto, ya que algunas aplicaciones externas a Zabbix atacan la URL de la API por defecto y si la cambiamos puede que no funciones.

# cat <<EOF >/var/www/html/index.html 
<html>
  <head>
    <title>Zabbix Server</title>
    <meta http-equiv="refresh" content="0; URL=http://10.0.100.100/zabbix">
    <meta name="keywords" content="automatic redirection">
  </head>
  <body></body>
</html>
EOF

Arranque de Zabbix Server, Zabbix FE, HTTPD (Apache) y PHP-fpm

# systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm
# systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm
# systemctl status zabbix-server zabbix-agent httpd rh-php72-php-fpm

El archivo de configuración /etc/zabbix/zabbix_server.conf

Descripcion de las opciones del Server

Tomamos un Snapshot del Server (CMD Vagrant)

C:\> vagrant snapshot save zbxsrv01 zbxsrv01-snap-0001

Seccion

Entorno gráfico

Introducción

El entorno gráfico está desarrollado en PHP. Generalmente es lo que más cuesta cuando comenzamos a trabajar con ZABBIX, a pesar de que realmente no es complejo tiende a que nos compliquemos y estemos dando vueltas por el, buscando opciones que no encontramos. 

Es importante destacar que generalmente se puede llegar a la misma información desde diferentes ángulos, eso hacer que parezca más complicado de lo que es.
 
Una de las cosas que también nos suele dar dolores de cabeza es que hay menús dentro de las opciones que están más escondidos y cuando las buscamos no los encontramos. Estas dos cosas suelen frustrar mucho a la gente que comienza con ZABBIX.

Luego de mucho tiempo de utilizarlo, les aseguro que se pasaran gran parte del tiempo entre 2 y 5 opciones de todas las que tiene y el resto las utilizaran más esporádicamente.
WEB Interface

Monitoring

Dashboard

En esta opción podemos visualizar información genera del sistema. Podemos personalizar las dashboards o crear nuevas. 
Tenemos un conjunto de widgets predefinidos. En esta Dashboard podemos visualizar algunos de ellos como el widget de System Information, el de clock que muestra el reloj que vemos, el  de host availability, el de problems by severity, o el de problems. Pero también podemos incluir Mapas o gráficos

Problems

A mi parecer esta opción de menú es la mas importante junto con "Latest Data", ya que nos muestra todos los triggers que aparecen en nuestro sistema. 
Si aplicamos los filtros adecuados, fácilmente podemos ver que esta pasando y así monitorizar mucho mejor nuestra plataforma.

Overview

Nos ofrece una visión general del estado de los triggers o realiza una comparación de datos entre varios hosts agregándolos.

Las opciones disponibles son 

  - Seleccionar todos los hosts o un grupo especifico de hosts groups desde la opción de Group dropdown

  - Seleccionar que tipo de información vamos a visualizar. (Triggers o datos) en el Type dropdown
 
  - Seleccionar si la visualización sera horizontal (Left) o vertical (Top) en el Host location dropdown

Web

En esta opción obtenemos información de los WEB scenarios.  Ya explicaremos mas adelante que son los web scenarios y para que los utilizamos.
Los hosts que están des-habilitados aparecerán en rojo.

Latest Data

Esta opción es muy utilizada, ya que podemos ver los últimos valores recolectados por los items y también acceder a gráficos o datos históricos.

Si algun ítem esta fallando, también nos dará información de porque falla y así poder solventar el problema.

Graphs

En esta sección podemos visualizar gráficos personalizados para los items que estamos recolectando.

Screens

En esta sección podemos configurar, administrar y visualizar los screens globales y los slide shows. Así como asignar los permisos de quien puede o no visualizarlos.

Esencialmente en un screen podemos agrupar información de diferentes fuentes para visualizarla rápidamente. Crear screen no es complicado y suele ser bastante intuitivo. El screen es una tabla y en cada fila o columna podemos definir elementos predefinidos que queremos que se visualicen.

Los Slides Shows son una agrupación de screens que se visualizarán en pantalla con una duración determinada.
Source: Zabbix SIA
NOTA:A nivel de Dashbords, Screens y Gráficos en general, Zabbix esta realizando un esfuerzo grande en mejorar, cada año hay nuevas mejoras en estos puntos. Así y todo, es muy recomendable a día de hoy potenciar Zabbix con Grafana que es una herramienta pensada para esto. La visualización de los datos es mucho mas profesional y tiene una gama de plugins que potencia muchísimo esta parte.

Maps

En esta sección podemos ver, configurar y administrar mapas de red. Agrupar diferentes componentes de nuestra infraestructura y ver como se están comportando. Un Mapa puede ser incorporado dentro de un Screen.
En el Zabbix Summit 2019, pudimos ver una mapa de red creado por la empresa NTT COM Solutions en 3D, insertado dentro de un Screen que mostraba una infraestructura de comunicaciones en tiempo real, con el trafico entre los nodos que realmente era impresionante.
Source: ZabbixSummit2019 NTT COM Solutions

Discovery

En esta sección podemos visualizar el resultado de los discoverys realizados. Los mismos son ordenados por las reglas de discovery.
 Si no aplicamos ningún filtro, se visualizaran todos los discoverys habilitados. 

Los discoverys los utilizamos para descubrir maquinas o elementos aplicando diferentes patrones o chequeos. El que trae zabbix por default busca en un rango de red especifico las maquinas que tengan un agente de zabbix instalado.

Services

Esta sección vemos el estatus de la infraestructura o de los servicios de negocio. 

La idea es poder obtener una visión de mas alto nivel (negocio) de la infraestructura que monitorizamos. 

A nivel de negocio no suele interesar el detalle de que host esta generando problemas o que componente esta mal, sino si este afecta o no la disponibilidad del servicio, lo que comúnmente llamamos SLA.
Source: Zabbix Documentation

Inventory

Inventario: Esta opción es muy poco utilizada, Por defecto esta desactivada, pero no se pude 
configurar de forma Manual o Automática. Como en nombre lo dice recolecta información y de los hosts y la 
almacena dentro del inventario de ZABBIX.

Overview

Podemos visualizar por agrupaciones de campos del inventario.

Hosts

Visualizamos todos los hosts con su información inventariada y podemos filtrarlos por los campos del inventario.
- General para todo el sistema
Administration -> General -> Other -> Inventory
- Particular para un host
Configuration -> Host -> Inventory
Manual: Lo tenemos que cargar nosotros manualmente.
Automático: Utiliza la información que recolecta de agentes para popular el dato automáticamente 
dentro del inventario. 
Cuando definimos Templates, podemos decirle que el item recolectado sea populado dentro del inventario. 
Para esto seleccionamos 
el item y vamos al campo "Populates host inventory field" ahi seleccionamos con que campo vamos a 
realizar el macheo o emparejamiento y de esta forma cuando recolecte la informacion automaticamente 
populara la información dentro del inventario.
Nota: Los campos dentro del inventario son un poco genéricos y en general poco útiles, podemos ajustar los nombres del inventario a algunos que sean mas representativos para nosotros
FILE: /usr/share/zabbix/include/hosts.inc.php --> $inventoryFields array donde podemos cambiar los nombres de los campos.

Reports

System information

Availability report

Triggers top 100

Audit

Action log

Notifications

Configuration

Host groups

Templates

Hosts

Maintenance

Actions

Event correlation

En esta sección los usuarios pueden configurar y mantener las reglas de correlación de los eventos de zabbix.

La correlación de eventos nos permite enfocarnos en la causa raíz del problema y se basa en los TAGS que definimos en los triggers. 

Por ejemplo si tenemos una caída de un switch, tendríamos muchos hosts informando por errores de conectividad, con la correlación de eventos podemos determinar que estos errores son producidos por la caída del switch y de esta forma nos centramos solamente en ese problema, ya que el resto se solventara cuando este este OK nuevamente.

Discovery

Services

Administration

General

Proxies

Authentication

User groups

Users

Media types

Scripts

[FALTA TERMINAR]
Es el módulo para administrar y mantener el registro de los scripts globales del sistema.

Los script pueden ayudarnos a ejecutar acciones sobre un HOST ya que se pueden invocar desde diferentes partes de la interfaz web: Dashboards, Latest data, Triggers, Eventos o Mapas, tambien pueden ser invocados desde las acciones. De esta forma podemos hacer que dependiendo de una condición predeterminada se ejecute una accion. 

TRABAJAR MÁS: Por ejemplo si se detecta un fichero en el server, ejecutamos una actualización de la aplicación.

Estos scripts se pueden ejecutar en el Zabbix Server, en el Zabbix Proxy o en los Zabbix Agents.

Queue

Seccion

Que es un Hosts, una Macros y Host groups

Introducción

Host: Es el dispositivo que queremos monitorizar. Para poder crear un HOST necesitamos como mínimo definir un grupo de atributos, como un Nombre, asignarlo a un grupo y definir al menos una interfaz.

      El tipo de interfaz dependera de como queramos monitorizar el Host y los disponibles son con un Agente de Zabbix, vía SNMP, JMX o IPMI. 

     En el siguiente capítulo instalaremos y configuraremos un Zabbix Agent para monitorizar un Host Linux. 
Templates: Aquí enlazamos los templates (plantillas) que este host tendrá. Ya veremos más adelante que son las plantillas y cómo crear una desde cero.
IPMI: Definiciones para la conexión vía IPMP como Autenticación, Privilegios Usuario y Password.
Tags: Aquí definimos Tags para el Host en cuestión. Un Tag es una etiqueta que luego podremos utilizar para realizar diferentes acciones como filtrado de problemas por tag, correlación de eventos por tags, etc.
Macros: Aquí definimos las Macros a nivel de Host que podemos utilizar. La macro no es más que una variable donde almacenamos información que luego utilizaremos. A continuación hablaremos un poco más en detalle sobre las Macros, que tipos hay y donde se definen.
Inventory: Definimos como trabajara el Host con el inventario.
Encryption: Definimos los parámetros de encriptación con los que el Zabbix Agent se conectara con el Zabbix Server.

Macros

Hay macros de sistema que ya están definidas, macros que se definen y utilizan en los Low Level Discovery y las de Usuario que podemos crear nosotros. Dependiendo del tipo de Macro que sea, tienen un formato diferente:

  {MACRO}  Macro del sistema, se pueden utilizar en funciones, triggers, etc. Sistema

  {#MACRO} Macros de LLD (low-level discovery) Se definen y utilizan en los Low-Level Discoverys LDD Macros

  {$MACRO} Macros de Usuario. Estas las definimos nosotros a nivel de Host, Template o Zabbix Server. Usuario
Las MACROS de Usuario se pueden definir dentro de los Hosts, en los templates o a nivel general de Zabbix Server. Dependiendo de donde se definan unas tienen precedencia sobre las otras.

- MACROS Generales:    Son las de nivel más alto y se definen en Administration > General > Macros

- MACROS de Templates: Son las de nivel intermedio, se definen dentro del Template. Ya lo veremos en el próximo capítulo.

- MACROS de Host:      Son las de nivel más bajo y se definen dentro del Host. 
Ejemplo: Si definimos la macro {$SNMP_COMMUNITY} a nivel de host, en el template y de forma general. Zabbix utilizara la del Host primero, si esta no existe, utilizara la del template y sino la General.

Host Groups

Los host groups son una agrupación lógica de hosts. Luego se podrán utilizar en distintas opciones para agrupar o filtrar por ellos.

Sección

Creación de un Host e Instalación del Agente

Introducción

Los Agentes de Zabbix están desarrollados en C++ y una de las mejores cosas que tienen es que el bajo footprint, esto quiere decir que la carga que generan en el sistema es muy baja. Actualmente está en desarrollo una versión 2 del Agente, desarrollada en Go y se espera sea lanzada con Zabbix 5. Los agentes mantienen compatibilidad hacia atrás, es decir podemos utilizar agentes antiguos con versiones de Zabbix más modernas. El problema de esto es que no contaremos con las últimas funciones implementadas en ellos.
Antes de instalar el agente comentaremos los diferentes modos de trabajar que el agente nos ofrece.

Modos en que trabajan los agentes e Instalación

Pasivo (pull)
El agente Pasivo (PULL) es el más común, está instalado en el host, escucha en el puerto 10050 y espera a que el server de Zabbix le solicite algo, cuando llega la petición, la resuelve y contesta el resultado.

 La mayor parte de los templates tienen sus ítems configurados con Agente Pasivo. En este modo es el server quien solicita al agente la información. 
Para que funcione correctamente, el agente tiene que apuntar al servidor de Zabbix opción Server= de su archivo de configuración.
Activo (push)
El agente Activo (PUSH), al iniciarse solicita al server que está escuchando en el puerto 10051 que tiene que monitorizar, el server le responde y a partir de este momento es totalmente autónomo, enviará la información por su cuenta cada X tiempo, por defecto son 120s, esto se puede modificar con la opción RefreshActiveChecks= del archivo de configuración del agente. 

Configurar un ítem como agente activo es mucho mejor de cara al rendimiento del server ya que lo descarga de la responsabilidad de estar solicitando la información a todos los clientes periódicamente ya que son ellos los que la reportan.

Otro punto importante es que para configurar el agente en modo activo, es necesario definir explícitamente el Hostname, si este no existe en el server de zabbix exactamente con el mismo nombre, este no será capaz de enviar la información de lo que tiene que monitorizar, si el Hostname no existe intentara con el HostnameItem y si este tampoco existe por default utiliza system.hostname (que es un hostname -a).

También es importante configurar cual es el server que escucha en modo activo y esto se realiza ajustando la opción ServerActive= en el archivo de configuración del agente.

Hay diferentes funciones según se configure el agente (Activo/Pasivo), por ejemplo si queremos analizar un log, en busca de un error y reportarlo si lo encuentra, este ítem se tiene que configurar como Agente Activo.
Nota: Los problemas generales de comunicación entre agente y server suelen ser por: Firewall, SELinux, o mala definición entre el nombre del host y el definido en el zabbix server, este último se soluciona fácilmente si utilizamos el Auto-discovery.
Nota: Si el agente está configurado en modo Activo y queremos que vuelva a solicitar la información al server sin esperar el tiempo pre configurado, simplemente tenemos que reiniciar el agente.
Nota: Comentar los UserParameters que extienden la funcionalidad del agente.

Instalación del Agente

# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
# yum clean all
# yum install -y zabbix-agent
# systemctl enable zabbix-agent

Creamos un SNAP de zbxclient01 (CMD VAGRANT)

C:\> vagrant snapshot save zbxclient01  zbxclient01-snap-0001

Laboratorio 1: Configuración Manual del Zabbix Agente

[root@zbxclient01 ~]# cat <<EOF >/etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=3
Server=10.0.100.100,127.0.0.1
ServerActive=10.0.100.100
Hostname=zbxclient01
Include=/etc/zabbix/zabbix_agentd.d/*.conf
EOF

[root@zbxclient01 ~]# systemctl restart zabbix-agent.service

[root@zbxclient01 ~]# tail -f /var/log/zabbix/zabbix_agentd.log 
 12294:20200122:191707.380 TLS support:           YES
 12294:20200122:191707.380 **************************
 12294:20200122:191707.380 using configuration file: /etc/zabbix/zabbix_agentd.conf
 12294:20200122:191707.381 agent #0 started [main process]
 12295:20200122:191707.381 agent #1 started [collector]
 12296:20200122:191707.381 agent #2 started [listener #1]
 12299:20200122:191707.381 agent #5 started [active checks #1]
 12297:20200122:191707.382 agent #3 started [listener #2]
 12298:20200122:191707.384 agent #4 started [listener #3]
 12299:20200122:191707.438 no active checks on server [10.0.100.100:10051]: host [zbxclient01] not found
 Creación manual del Host
CONFIGURATION > HOSTS > CREATE HOST
Host name             : zbxclient01
Groups                : Linux servers
Agent interfaces      : 
   IP Address         : 10.0.100.101
   Connect to         : IP
   Port               : 10050
Configuramos Nombre e IP del Agente
Verificamos si el Agente de zbxclient01 ya puede conectar
[root@zbxclient01 ~]# systemctl restart zabbix-agent.service

[root@zbxclient01 ~]# tail -f /var/log/zabbix/zabbix_agentd.log 
12325:20200122:192415.833 IPv6 support:          YES
12325:20200122:192415.833 TLS support:           YES
12325:20200122:192415.833 **************************
12325:20200122:192415.833 using configuration file: /etc/zabbix/zabbix_agentd.conf
12325:20200122:192415.833 agent #0 started [main process]
12326:20200122:192415.833 agent #1 started [collector]
12327:20200122:192415.833 agent #2 started [listener #1]
12329:20200122:192415.834 agent #4 started [listener #3]
12328:20200122:192415.835 agent #3 started [listener #2]
12330:20200122:192415.836 agent #5 started [active checks #1]
Nota: Como vemos ya no sale el mensaje de HOST NOT FOUND

Laboratorio 2: Configuración Automática del Zabbix Agente

Antes de ponernos a configurar un Agente, vamos a ver una de las funcionalidades que tiene Zabbix que realmente nos ayuda muchísimo con la gestión de los Agentes.

Que es la Auto-registracion

Esta funcionalidad de Auto Registration, en realidad es una acción que se ejecuta cuando un cliente arranca, en el momento informa al server de que está vivo y le pasa información como el nombre, la ip y entre otros datos el HostMetadata que es lo que utilizaremos para configurar la acción de auto-registracion. 
El HostMetadata no es más que un string de 0-255 caracteres en formato UTF-8. Con lo cual puede ser cualquier tipo de texto, particularmente a mi me gusta usar un hash de tipo MD5 que es único. 
Antes que nada eliminamos el HOST: zbxclient01 que creamos manualmente
CONFIGURATION > HOSTS > Eliminamos zbxclient01
Generación del HASH de Auto-Registración 

[root@zbxsrv01 ~]# echo zabbix2020| md5sum    
97d7c2030d2ccf29f059f4c24a8c0796  -

Este hash 97d7c2030d2ccf29f059f4c24a8c0796 lo utilizaremos tanto en la configuración del zabbix Client para que el lo informe al Zabbix Server y en el Zabbix Server para crear la Acción de Auto Registración.
Desde el Zabbix Frontend crearemos una nueva acción de tipo Auto Registración
CONFIGURATION > ACTIONS > EVENT SOURCE: Auto Registration -> CREATE ACTION
Creamos una nueva acción de tipo Auto-Registration
Name           : Auto-Registration Linux
New condition  : Host metadata - contains - 97d7c2030d2ccf29f059f4c24a8c0796
Operations     :
   Details     : Add to host groups: Discovered hosts
   Details     : Link to templates: Template Module ICMP Ping
                       Link to templates: Template OS Linux by Zabbix Agent
   Details     : Set host inventory mode: Automatic
Forzamos al server a que relea la configuración
[root@zbxsrv01 ~]# zabbix_server -R config_cache_reload

Configuración en el lado del Zabbix Agent

# cat <<EOF >/etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=3
Server=10.0.100.100,127.0.0.1
ServerActive=10.0.100.100
Hostname=zbxclient01
HostMetadata=97d7c2030d2ccf29f059f4c24a8c0796
Include=/etc/zabbix/zabbix_agentd.d/*.conf
EOF

# systemctl start zabbix-agent.service

Creamos un SNAP de zbxclient01 y zbxsrv01 (CMD VAGRANT)

C:\> vagrant snapshot save zbxclient01 zbxclient01-auto-registration-snap-0002
C:\> vagrant snapshot save zbxsrv01 zbxsrv01-auto-registration-snap-0002

Laboratorio 3: UserParameters

Introduccion

Algunas veces queremos extender las funcionalidades del agente con chequeos que no esta predefinidos en el propio agente. Para esto tenemos los User Parameters. Estos parámetros se cargan vía la configuración del agente al momento del arranque del mismo.

Hay varias opciones en la configuración del agente que afectan al funcionamiento de la ejecución de los mismos como AllowRoot, UserParameter e Include.
AllowRoot Permite que el agente se ejecute como ROOT, por defecto esta desactivado y el agente se ejecuta con el usuario zabbix.

UserParameter Definición del parámetro.

Include Incluye ficheros individuales o todos los ficheros en un directorio.
Los userparameters se pueden definir directamente en el archivo de configuración del zabbix_agent.conf o podemos crear fichero agrupando userparameters según funcionalidades.
Se recomienda hacer esto último, es decir crear diferentes ficheros dentro del directorio /etc/zabbix/zabbix_agentd.d/ e incluirlos todos via la sentencia include.

Preparamos el Agente para que cargue los parametros nuevos UserParameters

# cat <<EOF >/etc/zabbix/zabbix_agentd.conf
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.0.100.100,127.0.0.1   <--- Importante Localhost para poder conectarlos localmente con zabbix_get
ServerActive=10.0.100.100
Hostname=zbxclient01
HostMetadata=97d7c2030d2ccf29f059f4c24a8c0796
Include=/etc/zabbix/zabbix_agentd.d/*.conf
EOF
[root@zbxclient01 ~]# systemctl restart zabbix-agent.service 
[root@zbxclient01 ~]# systemctl status zabbix-agent.service

La estructura del fichero de Parámetros

La estructura
UserParameter=<clave>,<comando>
Clave   : Es un identificador único. Puede contener parámetros lo que flexibiliza los mismos. Para que acepte parámetros, creamos la clave y seguidamente incluimos [*]. Cada parámetro se pasará desde el Zabbix Server separado por comas y se utilizan dentro del comando reemplazandolos por las macros $1..$9.

Comando : Es el comando que el zabbix agent ejecutará.
Este ejemplo crea un parámetro llamado clustat que utilizaremos más adelante.

[root@zbxclient01]# cat <<EOF >/etc/zabbix/zabbix_agentd.d/userparameter_clustat.conf
UserParameter=clustat[*],echo \$1
EOF
El Zabbix Agent ejecutaría el parámetro anterior de la siguiente forma

Definición: UserParameter=clustat[*],echo $1
Llamada   : clustat["Hola mundo"]
Ejecución : echo "Hola Mundo"
Retorno   : Hola Mundo
Este ejemplo monitoriza el estado de los Sockets en un Linux

[root@zbxclient01]# cat <<EOF >/etc/zabbix/zabbix_agentd.d/userparameter_sockstat.conf
UserParameter=sockstat.sockets,cat /proc/net/sockstat|grep sockets|cut -d' ' -f 3
UserParameter=sockstat.tcp.inuse,cat /proc/net/sockstat|grep TCP|cut -d' ' -f 3
UserParameter=sockstat.tcp.orphan,cat /proc/net/sockstat|grep TCP|cut -d' ' -f 5
UserParameter=sockstat.tcp.timewait,cat /proc/net/sockstat|grep TCP|cut -d' ' -f 7
UserParameter=sockstat.tcp.allocated,cat /proc/net/sockstat|grep TCP|cut -d' ' -f 9
UserParameter=sockstat.tcp.mem,cat /proc/net/sockstat|grep TCP|cut -d' ' -f 11
UserParameter=sockstat.udp.inuse,cat /proc/net/sockstat|grep UDP:|cut -d' ' -f 3
UserParameter=sockstat.udp.mem,cat /proc/net/sockstat|grep UDP:|cut -d' ' -f 5
EOF
Este ejemplo monitoriza diferentes opciones como el numero de ficheros abiertos, el numero de procesos, el estado de servicios o el estado del servicio de NTP

[root@zbxclient01]# cat <<EOF >/etc/zabbix/zabbix_agentd.d/userparameter_general.conf
UserParameter=linux.openfiles,/usr/sbin/lsof | /usr/bin/wc -l
UserParameter=linux.process,/usr/bin/ps -ef | /usr/bin/wc -l
UserParameter=linux.service.status[*],/usr/bin/systemctl is-active \$1 -q ; echo '{"status":'\$?'}'
UserParameter=linux.ntp.status,(([ -x /usr/bin/chronyc ] && /usr/bin/chronyc tracking | egrep -ic "Leap status.*Normal") || ([ -x /usr/sbin/ntpq ] && /usr/sbin/ntpq -pn 2>/dev/null | egrep -c "^\*") || echo 0 )
EOF
Reiniciamos el zabbix_agent para que relea los userparameters.

[root@zbxclient01]# systemctl restart zabbix-agent.service
[root@zbxclient01]# systemctl status zabbix-agent.service

Test

[root@zbxclient01 ~]# yum install -y zabbix-get <- El zabbix_get nos permitirá simular una petición al agente vía línea de comandos.

[root@zbxclient01 ~]# zabbix_get -s 127.0.0.1 -k clustat[3]

[root@zbxclient01 ~]# zabbix_get -s 127.0.0.1 -k clustat["Hola Mundo"]

[root@zbxclient01 ~]# zabbix_get -s 127.0.0.1 -k clustat["Hola","Mundo"] <- $1: Hola, $2: Mundo

[root@zbxclient01 ~]# zabbix_get -s 127.0.0.1 -k linux.process
   Comando a ejecutar: /usr/bin/ps -ef | /usr/bin/wc -l

[root@zbxclient01 ~]# zabbix_get -s 127.0.0.1 -k linux.openfiles
   Comando a ejecutar: /usr/sbin/lsof | /usr/bin/wc -l

Laboratorio 4: Configuración del Agente con Encripción

Generación de clave PSK

# mkdir -p /etc/zabbix/ssl/keys
# openssl rand -hex 32 >/etc/zabbix/ssl/keys/zabbix_psk
# cat /etc/zabbix/ssl/keys/zabbix_psk

Preparamos el Agente para que se comunique con el server

# vi /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=3
Server=10.0.100.100,127.0.0.1   <--- Importante Localhost para poder conectarlos localmente con zabbix_get y probar la Encripción
ServerActive=10.0.100.100
Hostname=zbxclient01
HostMetadata=97d7c2030d2ccf29f059f4c24a8c0796
Include=/etc/zabbix/zabbix_agentd.d/*.conf

TLSConnect=psk                     <--- Como conecta el agente con el Zabbix Server. 
TLSAccept=unencrypted,psk          <--- Que tipo de conecciones se aceptan desde el Zabbix server.
TLSPSKIdentity=Zabbix2020
TLSPSKFile=/etc/zabbix/ssl/keys/zabbix_psk
# systemctl restart zabbix-agent.service

La encripción que utilizara el server para conectarse con el Agente/Proxy

CONFIGURATION > HOSTS > ZBXCLIENT01 > Encryption
Connections to host    : PSK
Connections from host  : PSK
PSK identity           : Zabbix2020
PSK                    : 79da666f7eab34055953b3ee48f58a5486fda5a6e8c286452752824c63386c79

Hacemos click en UPDATE
Configuración en el Zabbix Server
Estado del cliente con la encripcion activa

Test

# yum install -y zabbix-get
# zabbix_get -s 127.0.0.1 -k agent.ping --tls-connect psk --tls-psk-identity OpenWebinars --tls-psk-file /etc/zabbix/ssl/keys/zabbix_psk

El archivo de configuración /etc/zabbix/zabbix_agent.conf

Descripcion de las opciones del Agente

Sección

...PENDIENTE DE NUEVOS CAPÍTULOS...