PARCIAL 1 SISTEMAS DISTRIBUIDOS

1.Consigne los comandos de Linux necesarios para el aprovisionamiento de los servicios solicitados. En este punto no debe incluir recetas solo se requiere que usted identifique los comandos o acciones que debe automatizar

Se utilizaron 4 nodos, cada uno con las siguientes direcciones ip:

Nodo Ip
elasticsearch_server 192.168.56.101
kibana_server 192.168.56.102
logstash_server 192.168.56.103
web_server 192.168.56.104

Los comandos necesarios para que cada uno haga su funcion:

SERVIDOR ELASTICSEARCH

instalar llave publica

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

crear archivo para instalacion

vi /etc/yum.repos.d/elasticsearch.repo

contenido del archivo

[elasticsearch-5.x] 
name=Elasticsearch repository for 5.x packages 
baseurl=https://artifacts.elastic.co/packages/5.x/yum 
gpgcheck=1 
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch 
enabled=1 
autorefresh=1 
type=rpm-md

instalacion

sudo yum install elasticsearch

configuracion

En el archivo /etc/elasticsearch/elasticsearch.yml.

network.host: 192.168.56.101
http.port: 9200

SERVIDOR KIBANA

instalar llave publica

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

crear archivo para instalacion

vi /etc/yum.repos.d/kibana.repo

contenido del archivo

[kibana-5.x] 
name=Kibana repository for 5.x packages 
baseurl=https://artifacts.elastic.co/packages/5.x/yum 
gpgcheck=1 
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch 
enabled=1 
autorefresh=1 
type=rpm-md

instalacion

sudo yum install kibana

configuracion

En el archivo /etc/kibana/kibana.yml.

server.port: 5601
server.host: "192.168.56.102"
elasticsearch.url: "http://192.168.56.101:9200"

SERVIDOR LOGSTASH

instalar llave publica

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

crear archivo para instalacion

vi /etc/yum.repos.d/logstash.repo

contenido del archivo

[logstash-5.x] 
name=Elastic repository for 5.x packages 
baseurl=https://artifacts.elastic.co/packages/5.x/yum 
gpgcheck=1 
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch 
enabled=1 
autorefresh=1 
type=rpm-md

instalacion

sudo yum install logstash

configuracion

crear el archivo /etc/logstash/conf.d/apache-logstash.conf con el contenido siguiente:

input {
    beats {
        port => "5044"
    }
}
filter {
    grok {
        match => { "message" => "%{COMBINEDAPACHELOG}"}
    }
}
output {
    elasticsearch
    {
        hosts => ["192.168.56.101:9200"]
    }
}

SERVIDOR WEB CON FILEBEAT

instalar llave publica

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

crear archivo para instalacion

vi /etc/yum.repos.d/elastic.repo

contenido del archivo

[elastic-5.x]
name=Elastic repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum 
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1 
autorefresh=1 
type=rpm-md

instalacion

sudo yum install filebeat

configuracion

Se utiliza httpd como origen de logs. Para instalarlo se debe utilizar el siguiente comando:

yum install httpd -y

Con respecto a filebeat, se debe modificar el archivo /etc/filebeat/filebeat.yml para que utilice los logs de httpd:

input_type: log
paths:
    - /var/log/httpd/access_log

Tambien se debe especificar el destino de esos logs (servidor elasticsearch).

output.logstash:
  hosts: ["192.168.56.101:5044"]

2.Escriba el archivo Vagrantfile para realizar el aprovisionamiento, teniendo en cuenta definir: maquinas a aprovisionar, interfaces solo anfitrión, interfaces tipo puente, declaración de cookbooks, variables necesarias para plantillas

Vagrant.configure("2") do |config|
  config.ssh.insert_key = false

  #servidor encargado de almacenar logs por medio de la aplicación Elasticsearch
  config.vm.define :elasticsearch_server do |elasticsearch_server|
    #definicion de la imagen del SO a utilizar (en este caso Centos7)
    elasticsearch_server.vm.box = "centos1706_v0.2.0"
    #Configuracion de una red privada e ip asociada a la maquina
    elasticsearch_server.vm.network :private_network, ip: "192.168.56.101"
    #Configuracion de la cantidad de memoria RAM, numero de cpus y nombre de la maquina virtual
    elasticsearch_server.vm.provider :virtualbox do |vb|
      vb.customize ["modifyvm", :id, "--memory", "1024","--cpus", "1", "--name", "elasticsearch_server" ]
    end

    #Definicion del aprovisionador a utilizar (chef solo)
    config.vm.provision :chef_solo do |chef|
      #No se instala el aprovisionador porque ya esta contenido en la imagen del sistema operativo
      chef.install = false
      #Definicion del directorio que contiene las recetas de aprovisionamiento
      chef.cookbooks_path = "cookbooks"
      #Se añade la receta de elasticsearch
      chef.add_recipe "elasticsearch"
      #Se agrega una variable que representa la ip del servidor elasticsearch
      chef.json = {"direccion_ip" => "192.168.56.101"}
    end
  end

  #servidor con la herramienta encargada de visualizar la información de los logs por medio de la aplicación Kibana
  config.vm.define :kibana_server do |kibana_server|
    #definicion de la imagen del SO a utilizar (en este caso Centos7)
    kibana_server.vm.box = "centos1706_v0.2.0"
    #Configuracion de una red privada e ip asociada a la maquina
    kibana_server.vm.network :private_network, ip: "192.168.56.102"
    #Configuracion de la cantidad de memoria RAM, numero de cpus y nombre de la maquina virtual
    kibana_server.vm.provider :virtualbox do |vb|
      vb.customize ["modifyvm", :id, "--memory", "1024","--cpus", "1", "--name", "kibana_server" ]
    end

    #Definicion del aprovisionador a utilizar (chef solo)
    config.vm.provision :chef_solo do |chef|
      #No se instala el aprovisionador porque ya esta contenido en la imagen del sistema operativo
      chef.install = false
      #Definicion del directorio que contiene las recetas de aprovisionamiento
      chef.cookbooks_path = "cookbooks"
      #Se añade la receta de kibana
      chef.add_recipe "kibana"
      #Se agregan dos variables (la direccion ip del servidor kibana y la url del servidor elasticsearch)
      chef.json = {"direccion_ip" => "192.168.56.102", "elasticsearch_url" => "http://192.168.56.101:9200"}

    end


  end

  #servidor encargado de hacer la conversión de logs por medio de la aplicación Logstash
  config.vm.define :logstash_server do |logstash_server|
    #definicion de la imagen del SO a utilizar (en este caso Centos7)
    logstash_server.vm.box = "centos1706_v0.2.0"
    #Configuracion de una red privada e ip asociada a la maquina
    logstash_server.vm.network :private_network, ip: "192.168.56.103"
    #Configuracion de la cantidad de memoria RAM, numero de cpus y nombre de la maquina virtual
    logstash_server.vm.provider :virtualbox do |vb|
      vb.customize ["modifyvm", :id, "--memory", "1024","--cpus", "1", "--name", "logstash_server" ]
    end

    #Definicion del aprovisionador a utilizar (chef solo)
    config.vm.provision :chef_solo do |chef|
      #No se instala el aprovisionador porque ya esta contenido en la imagen del sistema operativo
      chef.install = false
      #Definicion del directorio que contiene las recetas de aprovisionamiento
      chef.cookbooks_path = "cookbooks"
      #Se añade la receta de logstash
      chef.add_recipe "logstash"
      #Se agrega una variable con la direccion ip del servidor elasticsearch
      chef.json = {"direccion_ip" => "192.168.56.101"}
    end
  end

  #servidor web ejecutando la aplicación filebeat para el envío de los logs al servidor con Logstash
  config.vm.define :web_server do |web_server|
    #definicion de la imagen del SO a utilizar (en este caso Centos7)
    web_server.vm.box = "centos1706_v0.2.0"
    #Configuracion de una red privada e ip asociada a la maquina
    web_server.vm.network :private_network, ip: "192.168.56.104"
    #Configuracion de la cantidad de memoria RAM, numero de cpus y nombre de la maquina virtual
    web_server.vm.provider :virtualbox do |vb|
      vb.customize ["modifyvm", :id, "--memory", "1024","--cpus", "1", "--name", "web_server" ]
    end

    #Definicion del aprovisionador a utilizar (chef solo)
    config.vm.provision :chef_solo do |chef|
      #No se instala el aprovisionador porque ya esta contenido en la imagen del sistema operativo
      chef.install = false
      #Definicion del directorio que contiene las recetas de aprovisionamiento
      chef.cookbooks_path = "cookbooks"
      #Se añade la receta de httpd
      chef.add_recipe "httpd"
      #Se añade la receta de logstash
      chef.add_recipe "filebeat"
      #Se agrega una variable con la direccion ip del servidor logstash
      chef.json = {"direccion_ip" => "192.168.56.103"}
    end
  end
  
end

3.Escriba los cookbooks necesarios para realizar la instalación de los servicios solicitados

Estructura del proyecto:

estructura

4.Incluya evidencias que muestran el funcionamiento de lo solicitado

infraesctructura vagrant corriendo

servicio httpd en servidor web 192.168.56.104 httpd

registro de logs de httpd

Se observa en kibana los logs procedentes del servidor web (192.168.56.104) log

5.Documente algunos de los problemas encontrados y las acciones efectuadas para su solución al aprovisionar la infraestructura y aplicaciones

problemas encontrados