{"id":1053,"date":"2014-07-03T00:59:07","date_gmt":"2014-07-03T06:59:07","guid":{"rendered":"https:\/\/www.lastdragon.net\/?p=1053"},"modified":"2014-07-03T11:40:01","modified_gmt":"2014-07-03T17:40:01","slug":"monit-para-monitorear-sistemas-procesos-sistemas-de-archivos-y-servicios-de-red","status":"publish","type":"post","link":"https:\/\/www.lastdragon.net\/?p=1053","title":{"rendered":"Monit para monitorear sistemas, procesos, sistemas de archivos y servicios de red"},"content":{"rendered":"<p>Estuve probando varios monitores de servicios para implementar en servidores de misi\u00f3n critica y todos me parecieron muy pesados y dependientes de N cantidad de librer\u00edas, incluso me aventure a escribir mi propio monitor con un cliente servidor basado en webservices y clientes m\u00f3viles para android , pero en medio del camino me encontr\u00e9 con monit , asi que desisti en el desarrollo y mejor implementare monit<\/p>\n<p>Monit es un peque\u00f1o pero muy efectivo monitor de servicios, puede lanzar alertas o intentar restablecer el servicio. Tiene una interface integrada web aunque yo se la desactivo, los hombres que son hombres y escriben sus propios drivers solo escriben en archivos de texto con vim = )<\/p>\n<p>Pr\u00e1cticamente puede monitorear cualquier servicio aunque en este articulo solo mostrare como implementarlo en servicios TCP, m\u00e1s espec\u00edficamente en Mysql, http  y https.<\/p>\n<p><strong>Un video demostrativo<\/strong><\/p>\n<p><iframe loading=\"lazy\" width=\"420\" height=\"315\" src=\"\/\/www.youtube.com\/embed\/bgP4nhDnUTY\" frameborder=\"0\" allowfullscreen><\/iframe><\/p>\n<p><strong>Configuraci\u00f3n<\/strong>.<\/p>\n<p>Monit se obtiene de aqu\u00ed <a href=\"http:\/\/mmonit.com\/monit\/\">http:\/\/mmonit.com\/monit\/<\/a> en su c\u00f3digo fuente, yo prefiero compilarlo e instalarlo en su propio directorio en \/usr<\/p>\n<p>Una vez compilado la configuraci\u00f3n es muy sencilla.<\/p>\n<p>Se requiere de una archivo de configuraci\u00f3n ra\u00edz desde el cual se ponen las reglas b\u00e1sicas y se llaman por medio de includes en modulos de configuraci\u00f3n para los servicios a monitorear<\/p>\n<p>El archivo ra\u00edz va en \/etc y es monitrc<\/p>\n<p>\/etc\/monitrc y su contenido para este ejemplo es el siguiente.<\/p>\n<p>set daemon  30<br \/>\nset logfile syslog facility log_daemon<br \/>\nset mailserver localhost<br \/>\nset alert monit@lastdragon.net  # direccion a donde enviaremos las alertas del sistema<br \/>\nset mail-format {<br \/>\nfrom: monit@localhost<br \/>\nsubject: $SERVICE $EVENT<br \/>\nmessage: $ACTION $SERVICE at $DATE on $HOST: $DESCRIPTION.<br \/>\n        }<\/p>\n<p>#set httpd<br \/>\n#     port 2812<br \/>\n#     use address 192.168.1.2<br \/>\n#     allow usuario:clave<\/p>\n<p>include \/etc\/monit\/host<br \/>\ninclude \/etc\/monit\/apache<br \/>\ninclude \/etc\/monit\/mysql<\/p>\n<p>No es dif\u00edcil entender , la primera l\u00ednea especifica que el proceso ser\u00e1 del tipo demonio y que estar\u00e1 revisando los servicios cada 30 segundos para saber si aun est\u00e1n vivos, la tercera l\u00ednea es el m\u00e9todo de alerta, en este caso se trata de enviar un correo usando el servicio local de correo en la mayor\u00eda de las instalaciones ser\u00e1 postfix o sendmail, la siguiente l\u00ednea especifica a que correo electr\u00f3nico enviara las alertas de eventos, el \u00faltimo bloque es un arreglo de c\u00f3digo que indica en que formato se env\u00eda el correo electr\u00f3nico.<\/p>\n<p>Lo siguiente que esta comentado hace referencia a la interface web y el puerto por el que se puede conectar usando un navegador, yo lo mantengo comentado por qu\u00e9 no requiero apoyo web<\/p>\n<p>Las ultimas 3 l\u00edneas son los 3 archivos de configuraci\u00f3n de servicios a monitorear, en \/etc\/ se crea el directorio monit y adentro van los archivos host, apache, mysql y todos los dem\u00e1s que quieran agregar para monitorear en mi caso solo son 3<\/p>\n<p>Contenido de host<br \/>\n\/etc\/monit\/host<\/p>\n<p><code>check system 127.0.0.1 #IP de tu host<br \/>\nif loadavg (1min) > 5 then alert<br \/>\nif loadavg (5min) > 10 for then alert<br \/>\nif memory usage > 90% then alert<br \/>\nif cpu usage (user) > 70% for 3 cycles then alert<br \/>\nif cpu usage (system) > 30% for 3 cycles then alert<br \/>\nif cpu usage (wait) > 20% for 3 cycles then alert<\/code><\/p>\n<p>el archive host es para auditar el sistema operativo, por lo que la ip a auditar deber\u00eda ser la de localhost, le siguen las condiciones, cada condici\u00f3n permite hacer algo si se cumple, en este caso solo manda alertas por cualquier condici\u00f3n verdadera, esta configuraci\u00f3n nos puede indicar si el sistema operativo est\u00e1 muy estresado ya sea por un proceso fuera de control o un ataque lamer de DDoS<\/p>\n<p>Contenido de apache<br \/>\n\/etc\/monit\/apache<\/p>\n<p><code>check process apache with pidfile \/usr\/apache2.4.7\/logs\/httpd.pid<br \/>\nstart program = \"\/usr\/apache2.4.7\/bin\/apachectl start\"  with timeout 60 seconds<br \/>\nstop program  = \"\/usr\/apache2.4.7\/bin\/apachectl stop\" with timeout 60 seconds<br \/>\nif totalcpu > 90% for 3 cycles then alert<br \/>\nif totalmem > 95% for 3 cycles then alert<br \/>\nif children > 250 for 3 cycles then alert<br \/>\nif cpu > 70% for 3 cycles then alert<br \/>\nif failed host 192.168.1.2 port 443 type TCPSSL then restart #IP de tu host<br \/>\nif failed host 192.168.1.2 port 80 protocol http then restart #IP de tu host<\/code><\/p>\n<p>B\u00e1sicamente es la misma configuraci\u00f3n pero se agregan unas l\u00edneas reiniciar o apagar el servicio dependiendo de si las condiciones se cumplen. Es muy importante la l\u00ednea check process seguida del nombre que le damos al servicio, yo lo llamo apache en este modulo de configuracion , adem\u00e1s de darle nombre al servicio a monitorear le indicamos la ruta del archivo pid, sin este archivo monit no podr\u00eda saber si el servicio est\u00e1 en memoria ram o no<\/p>\n<p>Las siguientes condiciones son muy similares a la de host, manda alertas si el proceso de apache se estresa, las ultimas 2 condiciones son pruebas directas al puerto de conexi\u00f3n<\/p>\n<p>Se especifica el ip donde debe escuchar el puerto en el caso de 443 se especifica que es un TCP del tipo SSL y en caso de que falle la prueba en lugar de alert es restart, significa que intentara reiniciar el servicio y adem\u00e1s mandara una alerta del evento por correo.<\/p>\n<p>La \u00faltima l\u00ednea hace referencia similar pero al ser un puerto bien conocido el 80 se indica que se trate como protocolo http de igual forma si falla debe intentar reiniciar el servicio y mandar una alerta del evento.<\/p>\n<p>Contenido del archivo mysql<\/p>\n<p>\/etc\/monit\/mysql<\/p>\n<p><code>check process mysql with pidfile  \/var\/run\/mysqld\/mysqld.pid<br \/>\nstart program = \"\/sbin\/service mysqld start\" with timeout 60 seconds<br \/>\nstop program = \"\/sbin\/service mysqld stop\" with timeout 60 seconds<br \/>\nif cpu > 95% for 2 cycles then alert<br \/>\nif memory usage > 75% then alert<br \/>\nif failed host 192.168.1.2 port 3306 protocol mysql then restart #IP de tu host<\/code><\/p>\n<p>Es pr\u00e1cticamente la misma configuraci\u00f3n de apache, la \u00faltima l\u00ednea revisa directamente el puerto de conexi\u00f3n de mysql , al ser un puerto bien conocido se le indica que se trata del protocolo mysql y que si no encuentra el servicio activo debe intentar reiniciarlo y mandar la alerta del evento.<\/p>\n<p>Notas adicionales, las l\u00edneas start program y stop program requieren la ruta exacta del programa que se encarga de arrancar y parar el servicio e ignoran la variable de entorno PATH, as\u00ed que en el caso de mysql no funciona correctamente si solo se da la instrucci\u00f3n.<\/p>\n<p>Service mysqld start <\/p>\n<p>Requiere saber donde est\u00e1 almacenado services en mi caso en \/sbin<\/p>\n<p>Monit puede auditar pr\u00e1cticamente todo lo importante de un servicio de misi\u00f3n critica como el sistema de archivos para avisar que esta por agotarse el espacio o ser vigilante de archivos que se supone nunca deber\u00edan cambiar ya sean programas o certificados para cifrado de datos, si cambian podr\u00edan haber sido manipulados por un intruso y monit avisa y toma acciones , por lo que debes visitar y leer todo lo que ofrece en su respectivo sitio web, esa es la direcci\u00f3n de ejemplos de configuraci\u00f3n.<\/p>\n<p><a href=\"http:\/\/mmonit.com\/wiki\/Monit\/ConfigurationExamples\">http:\/\/mmonit.com\/wiki\/Monit\/ConfigurationExamples<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Estuve probando varios monitores de servicios para implementar en servidores de misi\u00f3n critica y todos me parecieron muy pesados y dependientes de N cantidad de librer\u00edas, incluso me aventure a escribir mi propio monitor con un cliente servidor basado en webservices y clientes m\u00f3viles para android , pero en medio del camino me encontr\u00e9 con&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,1],"tags":[],"class_list":["post-1053","post","type-post","status-publish","format-standard","hentry","category-consultoria-y-manuales","category-personal"],"_links":{"self":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts\/1053","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1053"}],"version-history":[{"count":3,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts\/1053\/revisions"}],"predecessor-version":[{"id":1056,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts\/1053\/revisions\/1056"}],"wp:attachment":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1053"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1053"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1053"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}