Mostrando las entradas con la etiqueta monitoreo. Mostrar todas las entradas
Mostrando las entradas con la etiqueta monitoreo. Mostrar todas las entradas

lunes, enero 11, 2021

Zabbix: Notificaciones via Telegram

Zabbix tiene una integración incluida con Telegram. Para activarla debemos primero  obtener el token de Telegram para interactuar con la API. Para esto puedes seguir este tutorial link.

Ya obtenido el token debemos crear un grupo en Telegram y también obtener su ID. Esto lo puedes obtener, ingresando al grupo y como muestra la imagen siguiente.


Ya teniendo ambos datos, Token y ID de grupo, vamos a Zabbix a configurar.

Primero debemos activar el tipo de medio. Para esto ingresamos a Administration → Media Types. Buscamos Telegram y hacemos clic.

En este lugar agregamos el Token y guardamos (Update)


Ya tenemos configurado Zabbix de forma global. Ahora debemos configurar las notificaciones a un usuario. Para esto vamos a Users Settings → Media y hacemos clic en agregar.


Aquí seleccionamos el Type: Telegram y Send to: -ID de grupo. Ademas podemos definir el nivel de severidad de las alarmas que nos llegaran. Recomiendo activar solo las de mayor gravedad.






domingo, enero 10, 2021

Instalacion de Zabbix en Ubuntu Server 20.04

 Zabbix es una herramienta de monitoreo muy potente y totalmente libre, que te permitirá tener visualización del comportamiento de tu red y servicios, a través de agentes instalados en los equipos o  protocolos como SNMP y WMI.

La arquitectura de Zabbix esta compuesta por los siguientes componentes:

Zabbix Server: pieza principal de Zabbix, sus tareas principales son:

  • Recolectar y analizar los datos.
  • gestionar la base de datos.
  • generar las alarmas.

Servidor de base de datos:  Guarda toda la información de Zabbix, ya se configuraciones como datos históricos de los equipos

Zabbix Frontend: Es toda la interface web de Zabbix, que permite la visualización de la información y la configuración de Zabbix.

Agente: Zabbix incluye una pieza de software que se instala en los equipos a monitorear. El cual extrae los parámetros y los enviá a Zabbix. Normalmente el agente se instala en servidores Windows o Linux.



Dashboard de Zabbix

Instalación de Zabbix

Vamos a instalar a través de paquetes .deb Zabbix 5.0 (es la versión LTS actual con suporte hasta 2025), esto incluirá Zabbix Server, Zabbix frontend y el agente.

wget https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.0-1+$(lsb_release -sc)_all.deb 
sudo dpkg -i zabbix-release_5.0-1+$(lsb_release -sc)_all.deb 
sudo apt update 
sudo apt -y install zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-agent

Mas información sobre el ciclo de vida de Zabbix la pueden encontrar aquí

 

Instalación de bases de datos 

Debemos instalar la base de datos. Importante, debemos crear tus propias claves para MariaDB y no utilizar las que aquí usamos ya que son solo de ejemplo.

sudo apt -y install mariadb-common mariadb-server-10.3 mariadb-client-10.3

Ya instalado el servidor de base datos debemos configurar que inicie al arranque del servidor:

sudo systemctl start mariadb 
sudo systemctl enable mariadb

Configuraciones de clave para bases de datos

Eejecutamos el proceso de cambio de clave para MariaDB.

sudo mysql_secure_installation

Enter current password for root (enter for none): Press the Enter 
Set root password? [Y/n]: Y 
New password: <Ingrese clave de root para base de datos> 
Re-enter new password: <Ingrese clave de root para base de datos> 
Remove anonymous users? [Y/n]: Y 
Disallow root login remotely? [Y/n]: Y 
Remove test database and access to it? [Y/n]:  Y 
Reload privilege tables now? [Y/n]:  Y


Creacion de base  de datos e importacion de esquema

sudo mysql -uroot -p'claverootDB' -e "create database zabbix character set utf8 collate utf8_bin;" 

sudo mysql -uroot -p'claverootDB' -e "grant all privileges on zabbix.* to zabbix@localhost identified by 'claveZabbixDB';"

importamos el esquema

sudo mysql -uroot -p'claverootDB' zabbix -e "set global innodb_strict_mode='OFF';"
sudo zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p'claveZabbixDB' zabbix 
sudo mysql -uroot -p'claverootDB' zabbix -e "set global innodb_strict_mode='ON';"

Configuramos clave de base de datos en Zabbix

Debemos editar el archivo zabbix_server.conf, el cual es el archivo principal de Zabbix. Este se ubica en /etc/zabbix/zabbix_server.conf y agregar la clave de usuario zabbix de la base de datos:

DBPassword=claveZabbixDB

y guardamos.

Ahora debemos reiniciar los servicios de Zabbix y configurar para que puedan iniciar junto con el servidor:

sudo systemctl restart zabbix-server zabbix-agent 
sudo systemctl enable zabbix-server zabbix-agent

Configuración de Apache

Debemos editar el archivo /etc/zabbix/apache.conf y descomentar 2 lineas que comienzan con:


# php_value date.timezone Europe/Riga

 y dejarlas asi, dependiendo de tu zona horaria:

php_value date.timezone America/Santiago
 

y reiniciamos  Apache y ademas lo agregamos al arranque:

sudo systemctl restart apache2
sudo systemctl enable apache2


Final: configuración de Zabbix Frontend

Ahora debemos ingresar a la ver de Zabbix, a través de la URL http://ip_del_servidor/zabbix. El unico dato que necesitamos ingresar es la clave de la base de datos.





Ya hemos realizado la instalacion ahora debes ingresar a Zabbix con las credenciales por defecto Admin/zabbix



miércoles, agosto 26, 2020

Notificaciones a traves de Telegram con Python

 Realice un pequeño script para enviar notificaciones vía telegram. En este caso lo utilizamos para enviar notificaciones de Pandora FMS (https://pandorafms.com/).

El primer paso es obtener el token de Telegram para interactuar con la API. Para esto seguir este tutorial link. Ya obtenida la información podemos utilizar el siguiente script:

 

  
   
import sys
import request

bot_token = 'token_telegram'
bot_chatID = 'id_grupo'

tipo=sys.argv[1]
sitio=sys.argv[2]
agente=sys.argv[3]
url=sys.argv[4]
"""Funcion para envio de notificacion via telegram"""
def telegram_bot_sendtext(bot_token,bot_chatID,bot_message):
   
 send_text = 'https://api.telegram.org/bot' + bot_token + 
'/sendMessage?chat_id=' + bot_chatID + 
'&parse_mode=Markdown&text=' + bot_message

    response = requests.get(send_text)
    return response.json()

if tipo=="1":
   
 telegram_bot_sendtext(bot_token,bot_chatID,"\U000026A0 *Equipo Caido* 
\U000026A0 \nSitio: " + sitio +  "\nEquipo: " + agente +  "\nLink: [" + 
url+ "]("+ url+")")

else:
    
telegram_bot_sendtext(bot_token,bot_chatID,"\U0001F37B *Equipo 
Recuperado* \U0001F37B \nSitio: " + sitio +  " \nEquipo: " + agente +  
"\nLink: [" + url+ "]("+ url+")")   

El script recibe 4 parámetros:

  • tipo: pueden ser de tipo 1, es equipo caído, y tipo diferente es equipo recuperado
  • Sitio: en este caso el lugar donde se encuentra el equipo
  • Agente: nombre del equipo caído
  • url: se envía un link a definir por la notificación

 

Estas imágenes muestra como llegan las alarmas






jueves, agosto 20, 2020

Extraer informacion de Cisco DNA Center con Python

 Aquí les muestro y explico como extraer información de la API Assurance del Cisco DNA Center como pasos principales los siguientes:

  • definimos el body  y el header de la consulta, lo principal es que consultamos por los últimos 5 minutos.
  • Nos autenticamos con el DNA Center a traves de la función de autenticacion
  • Realizamos el request para obtener la información
  • Y al final la información la transformamos en un dataframe de Pandas.
  
    
#!/usr/bin/python3
import requests
import json
import pandas as pd
from pandas.io.json import json_normalize
from requests.auth import HTTPBasicAuth
import time
from datetime import datetime
headers = {
              'content-type': "application/json",
              'x-auth-token': ""
          }
### definimos rango de tiempo inicio(atras) y fin(ahora)
### en hora unix y en milisegundos
ahora=int(time.time()*1000)
atras= ahora - (5*60*1000)


### Este es el cuerpo de la consulta donde se filtra por fecha 
### y por tipo
body='{"startTime":'+str(atras)+',"endTime":'+str(ahora)+',"limit":1000,"offset":1,"filters":{"kpi":[{"kpiAttr":"LAST_UPDATED","condition":[{"name":"decr","value":[]}]}],"scoreType":[],"devType":["WIRELESS"],"typeIdList":["__global__"]}}'


### Funcion login DNA
def dnac_login(host, username, password):
    url = "https://{}/api/system/v1/auth/token".format(host)
    response = requests.request("POST", url, auth=HTTPBasicAuth(username, password), verify=False)
    return response.json()["Token"]


## Me registro en el DNA y obtengo token
token = dnac_login("Ip_DNA:port", "user", "password")
### Consulta la API /api/assurance/v1/host
### utilizamos el token obtenido y el body creado al principio
url="https://Ip_DNA:port/api/assurance/v1/host"
headers["x-auth-token"] = token


### hacemos la consulta
response = requests.post(url, headers=headers, data=body, verify=False)
 

### Transformo la respuesta en un dataframe
response.json()['response']
df = json_normalize(response.json()['response'])
    
 

Comandos para Elasticsearch

Consultar indices:

curl -XGET "http://localhost:9200/_cat/indices"
Crear indice:

curl -X PUT "localhost:9200/servidor-1"

Eliminar indice:

curl -X DELETE "http://localhost:9200/servidor-1"
 
Eliminar multiples indices:

curl -X DELETE "http://localhost:9200/servidor-*"

lunes, agosto 17, 2020

Crear agentes en Pandora FMS via API

Aqui explicare un script en Python hecho para agregar de manera automática, basados en un csv, agentes a Pandora FMS y ademas agregarles el monitoreo básico.


Formato CSV

nombre,ip,descripcion,grupo,os
Router1,172.22.1.1,Router sucursal A,1,1
Router2,172.22.1.2,Router sucursal B,1,1

Router3,172.22.1.3,Router sucursal C,1,1

 Router4,172.22.1.4,Router sucursal D,1,1


Importante deben estar creados los grupos y sistemas operativos primero, y despues obtener el id de cada uno para llevar el csv.

Ahora debemos configurar la clave de la API de Pandora FMS y ademas permitir la ip de donde vamos a ejecutar el script.



El script:



 import requests
 import pandas as pd

 df=pd.read_csv("listado_agentes.csv") 

for index, row in df.iterrows():
    nombre = row['nombre']
    ip = row['ip']
    grupo = row['grupo']
    os = row['os']
    descripcion = row['descripcion']
    autenticacion = "apipass=_clave_api&user=admin&pass=pandora"
    pagina_api= "http://IP_Pandora/pandora_console/include/api.php"
    url=f"{pagina_api}?op=set&op2=new_agent&other={nombre}|{ip}|0|{grupo}|0|0|300|{os}|localhost.localdomain|8|10||{descripcion}|1&other_mode=url_encode_separator_|&{autenticacion}"
    #print(url)
    r = requests.get(url, stream=True)
    agente=r.text
    print(r.text)
    plantilla_modulo="2"
    url2=f"{pagina_api}?op=set&op2=apply_module_template&id={plantilla_modulo}&id2={agente}&{autenticacion}"
    r2 = requests.get(url2, stream=True)
    print(r2.text)