Ruby Ping es un programa que hace ping a una lista de servidores de un archivo y si existe un error de conexión manda un correo electrónico al administrador.
Anteriormente ya había desarrollado algo similar en bash, pero ahora quise hacerlo en Ruby y añadirle algunas mejoras.
La primera es que este script toma los datos de un archivo en formato CSV, es decir, separado por comas. Un archivo como este se puede generar muy fácilmente usando LibreOffice o Excel.
Primero el nombre del equipo y luego la dirección IP del mismo. Esto sirve para que sean más claros los mensajes que manda el script.
En el caso de que Ruby Ping llegara a encontrar algún error de conexión, manda un correo electrónico al administrador avisándole de la falla.
Parámetros del script
Configurar el script es muy sencillo, solo tiene 4 parámetros:
- ARCHIVO Que es la ruta al archivo que contiene el listado de servidores en formato CSV.
- CORREO_ORIGEN El correo de origen, lo puse como parámetro por si quieren aplicar alguna especie de filtro personalizado en su programa de correo electrónico.
- CORREO_DESTINO El correo a donde quieren que lleguen las alertas.
- SERVIDOR_SMTP Y por último el servidor SMTP que van a utilizar para mandar los correos.
#!/usr/bin/env ruby # RubyPing # ======================================================================= # Hace ping a una lista de servidores de un archivo y si existe un error # manda un correo electrónico al administrador. # # Este programa es software libre. Puede redistribuirlo y/o # modificarlo bajo los términos de la Licencia Pública General # de GNU según es publicada por la Free Software Foundation, # bien de la versión 2 de dicha Licencia o bien (según su # elección) de cualquier versión posterior. # # Este programa se distribuye con la esperanza de que sea # útil, pero SIN NINGUNA GARANTÍA, incluso sin la garantía # MERCANTIL implícita o sin garantizar la CONVENIENCIA PARA UN # PROPÓSITO PARTICULAR. Para más detalles, véase la Licencia # Pública General de GNU. # # Autor: LinuxmanR4 inguanzo@gmail.com https://linuxmanr4.com # versión 0.1 # ======================================================================= require 'timeout' require 'socket' require 'csv' require 'net/smtp' # Reemplazar por los parámetros de su instalación ARCHIVO = "/home/usuario/directorio/servidores_csv.txt" CORREO_ORIGEN ="rubyping@dominio.com" CORREO_DESTINO = "destino@dominio.com" SERVIDOR_SMTP ="smtp.dominio.com" def ping(host) begin Timeout.timeout(5) do s = TCPSocket.new(host, 'echo') s.close return true end rescue Errno::ECONNREFUSED return true rescue Timeout::Error, Errno::ENETUNREACH, Errno::EHOSTUNREACH return false end end # Recuperar la información contenida en el archivo y guardarla en una variable. # La estructura del archivo debe de ser como sigue: # # Servidor 1,IP Servidor 1 # Servidor 2,IP Servidor 2 # Servidor n,IP Servidor n csv_text = File.read(ARCHIVO) csv = CSV.parse(csv_text, :headers => false) datos = Hash.new i = 0 # indice inicial (los indices comienzan en cero) csv.each do |linea| datos[[i,:nombre]] = linea[0] datos[[i,:ip]] = linea[1] i +=1 end indice = 0 while indice < i if ping datos[[indice,:ip]] puts datos[[indice,:nombre]] +" [OK]" else puts datos[[indice,:nombre]] +" [Error]" mensaje_correo = "From: Ruby Ping<#{CORREO_ORIGEN}> To: #{CORREO_DESTINO} Subject: Error de conexión en #{datos[[indice,:nombre]]} Existe un problema de conexión en el equipo #{datos[[indice,:nombre]]} con dirección IP #{datos[[indice,:ip]]}. Este es sólo un mensaje de aviso. No es necesario que conteste este mensaje. Atentamente, Ruby Ping :)" # Código para enviar un correo usando un servidor smtp. Net::SMTP.start(SERVIDOR_SMTP, 25) do |smtp| smtp.send_message mensaje_correo, CORREO_ORIGEN, CORREO_DESTINO smtp.finish end #net end #if indice +=1 end #while
El código lo pueden descargar, guardar en un archivo, darle permisos de ejecución y eso es todo. Y bueno, claro que deben de tener Ruby instalado.
Estoy considerando agregarlo en una tarea cron, pero por el momento sólo lo ejecuto cuando tengo algunos problemas en mi red. Me es muy útil porque puedo localizar rápidamente donde se podrían localizar algunos problemas (tengo mis sospechosos comunes).
El programa es software libre, así que lo pueden personalizar, copiar, modificar y hacer lo que quieran con él.
Espero que les sea de utilidad.
cual es el script?
Hola hola !!!
Efectivamente había un problema al mostrar el código. Eliminé un sistema anterior que me estaba provocando problemas. Lo acabo de subir nuevamente, pero ten en cuenta que es muy probable que esté desactualizado.
Tengo otro que hace lo mismo pero escrito en Python llamado Python Ping por si le quieres dar un vistazo.
Saludos.
Hola buen dia. Disculpa mi ignorancia, pero me interesa mucho aprender sobre este script, pero no lo entiendo muy bien. Hay cosas que estan redactadas a modo de modificar y rellenar, pero especificamente cuales son las que hay que modificar? Donde y como se debe ejecutar el script?
Vas a tener que estudiar algunos temas. Primero debes de instalar Ruby. Luego copiar en un editor de texto el script y modificarlo a tus necesidades. Luego ejecutarlo en una terminal. No es tán dificil ¡Animo!.