Entradas

Mostrando entradas de 2017

Using Docker.

Imagen
En materia de construcción de aplicaciones las tendencias han cambiado, aunque no ha permeado a países como México. Es difícil abrirse camino en construcciones de software con filosofías adecuadas a tiempos donde la información fluye como nunca antes. Este libro es para aquellas personas que busquen comprender los porqués y los cómos. 
Los microservicios han llegado para quedarse, la madurez de las comunicaciones se han establecido y mejorado de tal manera que son fiables y soportan gran cantidad de tráfico sin sacrificar demasiado los tiempos de respuesta. 
Los servicios que ofrecen flexibilidad para hacer frente a las demandas de tráfico tienen que serlo sin la intervención humana, puesto que el tiempo de accionar es mucho mayor con respecto a los equipos de cómputo.
Este libro abarca de manera concreta los microservicios y cómo van de la mano con devops. Así que tiene muchos aristas por dónde leerlo y aprender con Adrian Mouat la utilización de Docker.




Introducción a DevOps

Imagen
El siguiente documento es la mejor introducción de DevOps que he leído hasta el momento. Es conciso en cuanto qué podemos esperar de una cultura organizacional de tal índole, haciendo énfasis en los pilares que la construyen. 
Los ejemplos son lúdicos y nos ayudan a imaginar algunos de los pasos a considerar si es que queremos promover dentro de nuestras organizaciones una cultura devops. Sirve como un primer manual con lo cual colocar a las personas en la sensibilidad que requerimos para comenzar el proceso de transformación del mindset.
Les recomiendo mucho su lectura, es un artículo breve que toda persona cercana a las TIs debería considerar. Lo pueden descargar sin ningún costo en Amazon o en el sitio de Oreilly (solo requiere suscripción).


split() en AWK

AWK contiene muchas funciones (aka build-in) que nos permiten manipular los string. La función split() es sumamente útil para la transformación de strings en arreglos. El string puede provenir de un archivo de texto, variable o resultado de cualquier substring.
var =split(string,array_name,separator)

Ejemplo

#!/bin/awk

{
    my_string="Hola mundo cruel!"

    ss = split(my_string,my_array," ")

    for (my_str in my_array)
          print my_str, my_array[my_str]

}
Salida en línea de comandos.

1 Hola
2 mundo
3 cruel!

Iniciando con Python

Imagen
Python programming for beginners de Jason Cannon es uno de los mejores libros introductorios que he leído. Parte del secreto de Cannon es su escritura lacónica y economía en páginas, haciendo magnífico para aquellos que tienen fundamentos de programación de otros lenguajes, haciendo sólo la absorción de la sintaxis y reforzamiento a través de ejemplos.

Con este libro podrás aprender a construir sencillos programas con Python y sus múltiples funcionalidades para trabajar con datos y fuentes externas. Recomiendo que al finalizar el libro, no se abandone el aprendizaje de Python y se continúe con libros más avanzados para afianzar el conocimiento adquirido. No cae nada mal algo de algoritmia para pensar eficientemente en la resolución de problemas.

Análisis de efectividad en lenguajes de programación.

Imagen
Últimamente me ha dado por realizar pequeñas prácticas que hace mucho realicé como parte de mi descubrimiento en algunos lenguajes de programación. He leído mucho respecto a los sabores y performance de cada lenguaje, cuyos argumentos no trataré por ser sumamente objetivos. Algunos valoran la facilidad, otros la poca verborrea que facilitan la construcción de complejos componentes de software.
A continuación expongo los códigos comparados y las salidas en terminal.
Características de la computadora. CPU: 2 CPUs con 2 Cores AMD Turion(tm) 64 X2 Mobile Technology TL-60 a 1800.000 Mhz.Memoria RAM: 3.7GSistema Operativo: Fedora release 20 (Heisenbug)

Versiones de compiladores/interpretesPython: 2.7C: gcc version 4.8.3 20140911 (Red Hat 4.8.3-7) (GCC)Java: 1.7 hotspot a 64 bitsRuby: 2.0Go: 1.4.2 64 bits
Python


for my_range in range(1,90000000):print (my_range)


Tiempo de ejecución

real    10m24.691s user    2m23.193s sys     0m7.727s

C
int i = 0; for(i=0;i<=90000000;i++) { printf("%d\n…

¿Por qué ser reactivos?

Imagen
Un documento interesante sobre algunos de los lineamientos para el diseño de arquitecturas de software resilientes, no solo dentro de la aplicación, también como parte de las capas de hardware y software. Los sistemas reactivos, en resumen, son aquellos que pueden tomar acciones ante una falla esperada en alguno de los componentes, por ejemplo, un servicio. También es mandatorio decir que se apoya en los patrones asíncronos, así evitando el desperdicio de recursos por bloqueo de hilos o conexiones. 
Ahora con el mundo on-premise, las cosas se ponen mucho más sencillas para construir arquitecturas robustas de software, aunado a la simplicidad de los orquestadores y proveedores de automatización para cualquier componente en el día a día.
Como nos tiene acostumbrados, O'reilly imprime un gran esfuerzo técnico y de edición en temas informáticos.


Les dejo aquí el PDF de libre descarga.


Pluging de HAProxy para Collectd.

Introducción Por fin encuentro un poco de tiempo para escribir. Los temas que ahora me atañen son sobre SRE (Site Reliability Engineering), y dentro de está multidisciplina podemos hallar un cantidad sorprendente de áreas que no aparecen directamente en su definición, sin embargo, la hacen posible. 
Uno de los pilares es el monitoreo de los componentes de la arquitectura que soporta las aplicaciones, incluídos los productos de software utilizados. Con el propósito de controlar el día a día (estadísticas) de comportamiento y desempeño de cada pieza, es necesario instrumentar los recolectores de métricas. 
Yo trabajo con Collectd, puesto que me facilita mucho la vida al momento de integrar agentes que me permitan la recolección de métricas en poco tiempo con un consumo trivial de recursos así como la estabilidad que el proyecto goza. 
Integración de HAProxy con Collectd
Al día de hoy existen al menos 3 plugins que el sitio de collectd.org menciona, no obstante, ninguno de ellos me funci…

Beginning Elastic Stack

Imagen
Este es un libro ideal para comenzar a dimensionar las posibilidades que ELK ofrece a sus usuarios. A pesar que es una versión vieja que utiliza, tiene mucho de la esencia que podemos encontrar en las actuales versiones de ELK. 
Su enfoque práctico hace que desde el primer capítulo pongamos en marcha la comprensión y utilización de cada uno de los componentes que hacen de ELK una solución flexible y con mucho potencial para cualquier empresa con necesidades de explotación de la información contenida en sus logs, entre otros.
Incluye desde el inicio la incorporación de filebeats, un agente sumamente versátil para el envío, y primer filtro, de la información que pretendemos centralizar y clasificar.





Effective monitoring & alerting.

Imagen
Es un libro imprescindible en toda biblioteca de ingenieros en sistemas, sin, necesariamente, estar involucrado en áreas de monitoreo. El abordaje de los temas que se tratan son desde las anécdota que el autor nos regala, ya con el cual avanzamos progresivamente en un modelo holístico, un diseño rico en variaciones y soluciones para conseguir el aprovechamiento de la información presentada.
No es trivial ni aburrido, como yo mismo pensaba, el involucrarse con estas tareas, al contrario, es lúdico por la exigencia del dominio de algunas disciplinas que hasta el momento no había explotado (estadística, por ejemplo). 
Lo rico de éstos textos es lo agnóstico ante cualquier tecnología, dependiendo ésta de cada lector por sus preferencias, además, contando con una idea clara de qué tipo de herramientas podemos acercarnos y las pruebas que deben de pasar.

Si desean leerlo, les comparto una liga para su utilización. Aunque lo ideal es que lo compren en físico para leerlo lejos de una pantall…

Patrones en AWK

Una de las funciones más poderosas de AWK es la búsqueda de patrones en archivos de texto, como logs; posteriormente accionar sobre esas coincidencias nos abre posibilidades que no tendríamos en caso de hacerlo a golpe de teclazos.

La estructura es muy sencilla:

awk '/expresion/ {acciones}' input

Bien, ahora que conocemos la estructura elemental, hagamos un ejercicio rápido.

awk script

#!/usr/bin/awk

/[0-9+]/ {print "Esta linea contiene digitos"}
/^$/ {print "Esta linea esta en blanco"}
/[a-zA-Z]+/ {print "Esta linea contiene caracteres"}


Entrada

AWK is a programming language designed for text processing and typically used as a data extraction and reporting tool. It is a standard feature of most Unix-like operating systems.

The AWK language is a data-driven scripting language consisting of a set of actions to be taken against streams of textual data – either run directly on files or used as part of a pipeline – for purposes of extracting or transforming…

Branching (condicional).

Solo es posible realizar este tipo de test cuando se realiza una substitución exitosa.

[address]t[label]

Si no se especifica una etiqueta, cuando se cumpla la condición será enviado al final del script.

Escenario

Queremos hacer el remplazo de un carácter en todas las líneas. Una vez que se realice, pasamos a la siguiente.

La letra más utilizada en el alfabeto es la 'a'. Para efectos de demostración emplearemos el control de flujo (branch) en la substitución de ésta letra por XXX.

Entrada

Consult Section 3.1 in Owner and Operator
Guide for a description of the tape drivers
available on your system.
blank
Look in the Owner and Operator Guide shipped with your system.
blank
Two manuals are provided and including the Owner and
Operator Guide and the User Guide.
blank
The Owner and Operator Guide is shipped with your system.

Sed script

:again
   s/a/XXX/
   t again

Salida

[lyonn@mictlan 6]$ sed -f branching.sed multiline.txt
Consult Section 3.1 in Owner XXXnd OperXXXtor
Guide for XXX description o…

Architecting for scale

Imagen
Actualmente es difícil encontrar un arquitecto de soluciones que lleve a cabo su trabajo pensando en los inevitables fallos. Las grandes empresas nos han acostumbrado a la disponibilidad de sus aplicaciones en todo momento, siendo noticia cuando sale de operación. ¿Por qué solo las grandes empresas le dan esta importancia?.
Al final de la cadena comercial, una aplicación disponible se traduce en ingresos. Desde la confianza por parte del usuario para realizar transacciones en el sitio o como un self-service. Romper esta cadena tiene consecuencias que pocos saben o quieren enterarse, especialmente económicas.
Con este libro, pude darle forma a los años de trabajo con grandes y medianas empresas, en donde satisfacer las necesidades de las áreas comerciales es un dolor de cabeza, puesto que como ingenieros (por el tiempo encima) nos enfocamos en mitigar, y no en solucionar, los problemas derivados de los fallos.
Este libro permite concebir, desde el punto de vista administrativo e inge…

Redis en 5 minutos con Docker

Imagen
Los retos de las  personas que nos dedicamos a las áreas de infraestructura y/o soporte, son brindar una respuesta lo más rápido posible. Ésta puede relacionarse desde defectos en las aplicaciones en ecosistemas productivos, hasta evaluar un producto, su viabilidad y beneficios; apenas contando con un poco, o nada, de información al respecto.

    La contenerización de aplicaciones vino a dinamizar cualquier arquitectura y pruebas, entre otros muchos, y más importantes, beneficios. Hace algunos años, si querías contar con un ambiente de pruebas, sin pasar por la burocracia de creación de servidores virtuales (¡olvidate de los físicos!), tú mismo instalabas libvirt y hacías uso de un virtualizador gratuito o libre, la instalación del sistema operativo; en el mejor de los casos, lo evitabas vía una imagen ya construida, en el peor de los casos, debías instalar el SO desde cero.

    Con Docker (Vagrant, Dinamo, Runc, etc) ésto ha cambiado. Podemos disponer de pequeños, y aislados, en…

Branching

En Sed es posible crear flujos de control a través de etiquetas. Dependiendo de las necesidades que cada sysadmin tenga, la complejidad irá de menor a mayor. Hay una clase similar de condicional, la cual explicaremos en el siguiente post.


Forma general:
    [address]b[label]

Ejemplo
:top
    command1
    command2
    /pattern/btop
     command3



Siendo un poco más pedagógicos.
Vamos a pensar que estamos revisando un sencillo curriculum. al cual queremos hacerle algunas modificaciones.


CV

 Operating Systems
     Linux
     Solaris
     FreeBSD
     NetBSD
     OpenBSD
 Application Servers
     JBoss 6
     JBoss 7
El primer script de Sed solo hace una modificación y sale.


#!/bin/sed -f

/JBoss /{
s/JBoss/RedHat JBoss/
:subs
n
bsubs
}
~            



A continuación, cambiando la posición de la etiqueta, se realizan todas las substituciones y se sale del flujo.

#!/bin/sed -f

/JBoss /{
:subs
s/JBoss/RedHat JBoss/
n
bsubs
}

Sed script

Imagen
Durante mucho tiempo el uso que le di a Sed fue desde la misma línea de comando, invocando todo en una sola línea. Al principio esto fue fácil y poco común. Con el paso de los años, me he visto en la necesidad de elaborar, una y otra vez, las mismas sentencias con ligeros cambios. Hacerlo cada vez no era una opción. La mejor manera de preservar nuestras sentencias es con scripts, los cuales de sobra está decir, debemos ordenar periódicamente.
En Sed solo basta:
Crear un archivo de texto.Incluir un encabezado (opcional).Escribir las sentencias. No olvidar que es una buena práctica hacer algunos comentarios de los procedimientos que el script lleva a cabo.
Vim tiene soporte de colores y sintaxis para éstos casos.
#!/bin/sed -f

/coso/{
s/coso/cosasss/
}




Split en AWK

Es una de las funciones que me han resultado mucho más útiles. Gracias a esta función, se pueden manipular subcampos en forma de arreglos sin más intervención del sysadmin.

l = split(string, array, field separator)

string -> Es cualquier string, como los campos ($1, etc).
array -> NombEjemplore del arreglo en el cual se guardarán los datos.
field separator -> Es el caracter de separación de caractéres. Éste puede ser, también, un regex.
l -> El tamaño del arreglo.


Ejemplo

usuarios.txt

rod,Rodrigo Ramos,sysadmin
ram,Ramiro Pérez,developer
dan,Daniela Solis,sales

Script

#!/bin/awk
# Ejemplo de utilización de split.

BEGIN {print "Ejemplo de utilizacion de split"}
      { status = split($0,names,",")
              for(elem in names)
                       print names[elem]
      }
END {
        print "Vuelva pronto"
            }
Salida

Ejemplo de utilizacion de split
rod
Rodrigo Ramos
sysadmin
ram
Ramiro Pérez
developer
dan
Daniela Solis
sales
Vuelva pronto


Promedios con AWK

Imagen
Como muchos de los ejemplos que voy ingresando, son las maneras en que utilizo las opciones de comandos y lenguajes. Siempre que se desea realizar estadísticas, mi lenguaje favorito para realizarlo es AWK, por su simpleza, velocidad y multiplicidad de funciones.
Al vuelto podemos realizar operaciones, como sumas, multiplicaciones, restas y divisiones, entre otras muchas cosas. 

Entrada
john 6 23 2 1 1
cristina 9 2 3 1 12
l10nn 10 9 3 2 7

$ cat avg.txt | awk '{total = $2 + $3 + $4 + $5 + $6; avg = total/(NF-1); print $1, avg}




Introducción a sed III

Imagen
Transformación de caractéres (lower-case to upper-case).
La siguiente sentencia de sed transforma cada carácter en la posición de la cadena abc en su equivalente ABC.
echo "verde que te quiero verde. Verde viento, verdes ramas" | sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJ
KLMNOPQRSTUVWXYZ/'



El resultado es el siguiente.
VERDE QUE TE QUIERO VERDE. VERDE VIENTO, VERDES RAMAS
Print
Este comando en sed es usualmente empleado para la depuración o el cambio en el flujo de la ejecución de los scripts. Su función es mandar a la salida estándar (pantalla) el contenido del pattern space y por lo general se utiliza antes de los comandos N, d y b, cambiando así el ya mencionado flujo. Si se suprime la salida (-n), solo veremos los cambios realizados, en caso contrario (no acompañar la ejecución de sed con la supresión de la salida) se duplicarán las entradas presentadas en pantalla.
Print.sed
/para/ {
p
}

sed -n -f print.sed para.txt
Archivo de entrada para.t…

Descarga de Macbeth

Imagen
Los libros que fueron escritos hace ya muchos años están disponibles, sin violar derechos de autor, para que los lectores pueden beneficiarse de sus contenidos. A continuación les dejo Macbeth, una de las obras cumbres de Shakespeare.
Descargar Macbeth.

Repositorios epel sobre ssh.

Imagen
El uso de los túneles sobre ssh son una maravilla que puede ahorrarnos muchas configuraciones y tiempo. Lo importante es entender el mecanismo y las aplicaciones que tiene, las cuales son en función de nuestras necesidades. En mi experiencia personal, el uso que le he dado es en la instalación de software a través de un gateway que tiene salida a Internet, en vez de hacer la configuración y puesta a punto de repositorios de software locales o dentro de la misma red, ya que involucra descargar muchos paquetes, configuración de Apache u otro servidor web, o en su defecto, un servidor FTP.

Hay diversos dos tiposde túneles, locales y remotos, los cuales dependiendo del sentido del envío/recepción de paquetes de red, será la solución a elegir, entre algunas otras consideraciones que salen del alcance de esta pequeña receta de cocina.

Escenario.

SO: RedHat 6, Centos 6

Supongamos que sólo un servidor tiene salida a Internet, los demás, por razones diversas, no. Ahora bien, se pueden tener …

Una temporada en el infierno

Hace unos meses me di la tarea de leer un poco más de Rimbaud. Encontré en la red un PDF que me gustó mucho, llamado <>. Como ya sabemos, la poesía de Rimbaud funciona como prosa, nos va contando una historia desde su lóbrega visión.
Para que puedan disfrutarlo, les dejo disponible el documento.
Download PDF

Substituciones con Sed (Parte II)

Imagen
Substitución


A continuación vamos a escribir algunos ejemplos para darle forma a estas viñetas. Para esto, realizaremos el ejercicio sobre un contenido como el siguiente.
Linux (pronounced Listeni/ˈlɪnəks/ LIN-əks[9][10] or, less frequently, /ˈlaɪnəks/ LYN-əks[10][11]) is a Unix-like computer operating system assembled under the model of free and open-source
software development and distribution. The defining component of Linux is the Linux kernel,[12] an operating system kernel first released on September 17, 1991 by Linus Torvalds.[13][14][15]
The Free Software Foundation uses the name GNU/Linux to describe the operating system, which has led to some controversy.

There are many flavors of Linux, which difference is the purposes of each one. For example, Fedora is for general purposes meanwhile Backtrack is intended for penetration testing and auditing. example.txt

Ejercicio 1
Sustituir la primer coincidencia de la palabra Linux o linux por la pal…