<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-14037368</id><updated>2026-03-24T23:05:25.478-03:00</updated><category term="linux"/><category term="redes"/><category term="ubuntu server"/><category term="cisco"/><category term="ubuntu"/><category term="internet"/><category term="telefonia IP"/><category term="FreeSWITCH"/><category term="VoIP"/><category term="docker"/><category term="ip"/><category term="python"/><category term="asterisk"/><category term="contenedores"/><category term="programación"/><category term="kernel"/><category term="sangoma"/><category term="cloud"/><category term="servidor web"/><category term="virtualizacion"/><category term="monitoreo"/><category term="mysql"/><category term="seguridad"/><category term="Alta disponibilidad"/><category term="compose"/><category term="debian"/><category term="lxc"/><category term="vyos"/><category term="kubernetes"/><category term="vyatta"/><category term="web2py"/><category term="base de datos"/><category term="https"/><category term="snmp"/><category term="ubiquiti"/><category term="wifi"/><category term="wireless"/><category term="zabbix"/><category term="EdgeRouter"/><category term="WLC"/><category term="geoip"/><category term="ipv6"/><category term="network"/><category term="networking"/><category term="pandas"/><category term="pandora"/><category term="ucarp"/><category term="vrrp"/><category term="DNA Center"/><category term="Gunicorn"/><category term="Zentyal"/><category term="autonomos"/><category term="cloudflare"/><category term="dropbox"/><category term="dump"/><category term="elastic"/><category term="elasticsearch"/><category term="enlaces"/><category term="firewall"/><category term="g729"/><category term="gestion"/><category term="glpi"/><category term="grabacion"/><category term="grub"/><category term="grub2"/><category term="hsrp"/><category term="html"/><category term="http"/><category term="kibana"/><category term="l2tpv3"/><category term="microk8s"/><category term="netkit"/><category term="nginx"/><category term="openwrt"/><category term="proxmox"/><category term="proxy"/><category term="repro"/><category term="sdwan"/><category term="sfp"/><category term="spanning tree"/><category term="ssh"/><category term="storage"/><category term="stp"/><category term="switch"/><category term="telegram"/><category term="unison"/><category term="zerotier"/><title type='text'>Redes, telefonia, programacion y otros</title><subtitle type='html'>Un ayuda memorias para temas de redes, telefonía y programación</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://cabildocl.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://cabildocl.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Julio Saldivar</name><uri>http://www.blogger.com/profile/16119743033913358224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>65</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-14037368.post-9029437965092910195</id><published>2025-07-27T17:03:00.004-04:00</published><updated>2025-07-27T17:03:56.409-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cloud"/><category scheme="http://www.blogger.com/atom/ns#" term="cloudflare"/><category scheme="http://www.blogger.com/atom/ns#" term="contenedores"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="servidor web"/><title type='text'>Conectar cliente Cloudflare a un túnel que ya existente</title><content type='html'>&lt;p&gt;&amp;nbsp;Debes tener instalado en cliente de túnel de Cloudflare y ejecutar el siguiente comando:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;cloudflared service install &lt;i&gt;token&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;se instala como un servicio de linux&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://cabildocl.blogspot.com/feeds/9029437965092910195/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14037368/9029437965092910195' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/9029437965092910195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/9029437965092910195'/><link rel='alternate' type='text/html' href='http://cabildocl.blogspot.com/2025/07/conectar-cliente-cloudflare-un-tunel-ya.html' title='Conectar cliente Cloudflare a un túnel que ya existente'/><author><name>Julio Saldivar</name><uri>http://www.blogger.com/profile/16119743033913358224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14037368.post-1443091174842504611</id><published>2024-06-16T21:30:00.002-04:00</published><updated>2024-06-16T21:31:39.836-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cloud"/><category scheme="http://www.blogger.com/atom/ns#" term="compose"/><category scheme="http://www.blogger.com/atom/ns#" term="contenedores"/><category scheme="http://www.blogger.com/atom/ns#" term="docker"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="lxc"/><category scheme="http://www.blogger.com/atom/ns#" term="virtualizacion"/><title type='text'>LXC: Crear perfiles para limitar recursos de CPU y memoria</title><content type='html'>&lt;p&gt;&lt;a href=&quot;https://lxdware.com/setting-instance-cpu-and-memory-limits/&quot;&gt;Traducción de la siguiente pagina&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;div _ngcontent-ng-c3610924329=&quot;&quot; class=&quot;avatar-gutter ng-tns-c3610924329-141 ng-star-inserted&quot;&gt;&lt;div _ngcontent-ng-c3492967737=&quot;&quot; class=&quot;resize-observable&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div _ngcontent-ng-c3610924329=&quot;&quot; class=&quot;response-container-content ng-tns-c3610924329-141&quot;&gt;&lt;div _ngcontent-ng-c2104758702=&quot;&quot; class=&quot;response-content ng-tns-c3610924329-141&quot;&gt;&lt;div _ngcontent-ng-c3196950216=&quot;&quot; class=&quot;markdown markdown-main-panel&quot; dir=&quot;ltr&quot; style=&quot;--animation-duration: 600ms; --fade-animation-function: linear; --first-token-animation-duration: 600ms;&quot;&gt;&lt;p class=&quot;first-token&quot; data-sourcepos=&quot;1:1-1:21&quot;&gt;&lt;span&gt;Las instancias LXD se pueden limitar a la cantidad de recursos de CPU y memoria utilizados por el servidor host.&lt;/span&gt;&lt;span&gt; Estos límites se pueden establecer en cada instancia individual o mediante el uso de perfiles.&lt;/span&gt;&lt;span&gt; Esta guía práctica creará un perfil que establezca estos límites y luego lo aplicará a una instancia.&lt;/span&gt;&lt;span&gt; Un solo perfil se puede reutilizar y aplicar a varias instancias.&lt;/span&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;3:1-3:137&quot;&gt;&lt;span&gt;Llamaremos al nuevo perfil cpu2-memory4,&lt;/span&gt;&lt;span&gt; nombrándolo de una manera que identifique fácilmente su propósito.&lt;/span&gt;&lt;span&gt; Configuraremos el perfil para limitar la instancia a 2 CPU virtuales y también a 4 GB de memoria.&lt;/span&gt;&lt;span&gt; Para crear el nuevo perfil,&lt;/span&gt;&lt;span&gt; ejecute el siguiente comando:&lt;/span&gt;&lt;/p&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block ng-tns-c3876195943-143 ng-trigger ng-trigger-codeBlockRevealAnimation&quot; style=&quot;display: block;&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block-internal-container ng-tns-c3876195943-143&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;animated-opacity ng-tns-c3876195943-143&quot;&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-143&quot;&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-143 no-decoration-radius&quot; data-sourcepos=&quot;5:1-7:33&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;$ lxc profile create cpu2-memory4
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p data-sourcepos=&quot;9:1-9:198&quot;&gt;&lt;span&gt;Ahora tenemos un perfil vacío sin ninguna configuración.&lt;/span&gt;&lt;span&gt; Para obtener una lista de los perfiles que tiene en su servidor LXD y ver el perfil cpu2-memory4 recién creado,&lt;/span&gt;&lt;span&gt; ejecute el siguiente comando:&lt;/span&gt;&lt;/p&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block ng-tns-c3876195943-144 ng-trigger ng-trigger-codeBlockRevealAnimation&quot; style=&quot;display: block;&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block-internal-container ng-tns-c3876195943-144&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;animated-opacity ng-tns-c3876195943-144&quot;&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-144&quot;&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-144 no-decoration-radius&quot; data-sourcepos=&quot;11:1-20:27&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;$ lxc profile list
+---------------+---------+
|    NOMBRE       | USADO POR |
+---------------+---------+
| default       | 2       |
+---------------+---------+
| cpu2-memory4  | 0       |
+---------------+---------+
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p data-sourcepos=&quot;22:1-22:67&quot;&gt;&lt;span&gt;El nuevo perfil ahora se puede modificar para limitar el uso de CPU y memoria.&lt;/span&gt;&lt;span&gt; Podemos elegir editar el perfil directamente usando un editor (lxc profile edit cpu2-memory4) o establecer límites usando opciones de línea de comandos basadas en LXC.&lt;/span&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;24:1-24:232&quot;&gt;&lt;span&gt;Eligiendo la última opción,&lt;/span&gt;&lt;span&gt; podemos establecer ambos límites de configuración al mismo tiempo con un solo comando.&lt;/span&gt;&lt;span&gt; Establezcamos el límite de CPU a 2 CPU virtuales y el límite de memoria a 4GB de RAM ejecutando el siguiente comando:&lt;/span&gt;&lt;/p&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block ng-tns-c3876195943-145 ng-trigger ng-trigger-codeBlockRevealAnimation&quot; style=&quot;display: block;&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block-internal-container ng-tns-c3876195943-145&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;animated-opacity ng-tns-c3876195943-145&quot;&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-145&quot;&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-145 no-decoration-radius&quot; data-sourcepos=&quot;26:1-28:61&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;$ lxc profile set cpu2-memory4 limits.cpu=2 limits.memory=4GB
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p data-sourcepos=&quot;30:1-30:58&quot;&gt;&lt;span&gt;Para ver el contenido del perfil use el siguiente comando:&lt;/span&gt;&lt;/p&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block ng-tns-c3876195943-146 ng-trigger ng-trigger-codeBlockRevealAnimation&quot; style=&quot;display: block;&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block-internal-container ng-tns-c3876195943-146&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;animated-opacity ng-tns-c3876195943-146&quot;&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-146&quot;&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-146 no-decoration-radius&quot; data-sourcepos=&quot;32:1-41:11&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;$ lxc profile show cpu2-memory4
config:
  limits.cpu: &quot;2&quot;
  limits.memory: 4GB
description: &quot;&quot;
devices: {}
name: cpu2-memory4
used_by: []
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p data-sourcepos=&quot;43:1-43:202&quot;&gt;&lt;span&gt;Si está iniciando una nueva instancia,&lt;/span&gt;&lt;span&gt; puede usar la opción –-profile (o -p) para agregar perfiles a la instancia a medida que se crea.&lt;/span&gt;&lt;span&gt; Pero si la instancia ya existe,&lt;/span&gt;&lt;span&gt; tendrá que agregar el nuevo perfil a la instancia.&lt;/span&gt;&lt;span&gt; Supongamos que tenemos una instancia llamada vm1.&lt;/span&gt;&lt;span&gt; Para agregar el perfil cpu2-memory4 a esta instancia,&lt;/span&gt;&lt;span&gt; use el siguiente comando:&lt;/span&gt;&lt;/p&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block ng-tns-c3876195943-149 ng-trigger ng-trigger-codeBlockRevealAnimation&quot; style=&quot;display: block;&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block-internal-container ng-tns-c3876195943-149&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;animated-opacity ng-tns-c3876195943-149&quot;&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-149&quot;&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-149 no-decoration-radius&quot; data-sourcepos=&quot;45:1-47:34&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;$ lxc profile add vm1 cpu2-memory4
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p data-sourcepos=&quot;49:1-49:80&quot;&gt;&lt;span&gt;Para mostrar la configuración aplicada a su instancia,&lt;/span&gt;&lt;span&gt; use el siguiente comando:&lt;/span&gt;&lt;/p&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block ng-tns-c3876195943-150 ng-trigger ng-trigger-codeBlockRevealAnimation&quot; style=&quot;display: block;&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block-internal-container ng-tns-c3876195943-150&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;animated-opacity ng-tns-c3876195943-150&quot;&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-150&quot;&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-150 no-decoration-radius&quot; data-sourcepos=&quot;51:1-53:24&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;$ lxc config show vm1 -e
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p data-sourcepos=&quot;55:1-55:112&quot;&gt;&lt;span&gt;La configuración del perfil se puede eliminar de la instancia.&lt;/span&gt;&lt;span&gt; Para eliminar el perfil use el siguiente comando:&lt;/span&gt;&lt;/p&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block ng-tns-c3876195943-151 ng-trigger ng-trigger-codeBlockRevealAnimation&quot; style=&quot;display: block;&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block-internal-container ng-tns-c3876195943-151&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;animated-opacity ng-tns-c3876195943-151&quot;&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-151&quot;&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-151 no-decoration-radius&quot; data-sourcepos=&quot;57:1-59:37&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;$ lxc profile remove vm1 cpu2-memory4
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p data-sourcepos=&quot;61:1-61:190&quot;&gt;&lt;span&gt;Cuando elimina el perfil de la instancia,&lt;/span&gt;&lt;span&gt; el perfil aún existe y se puede usar para otras instancias.&lt;/span&gt;&lt;span&gt; Si desea eliminar el perfil permanentemente,&lt;/span&gt;&lt;span&gt; se puede eliminar con el siguiente comando:&lt;/span&gt;&lt;/p&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block ng-tns-c3876195943-152 ng-trigger ng-trigger-codeBlockRevealAnimation&quot; style=&quot;display: block;&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block-internal-container ng-tns-c3876195943-152&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;animated-opacity ng-tns-c3876195943-152&quot;&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-152&quot;&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-152 no-decoration-radius&quot; data-sourcepos=&quot;63:1-65:33&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;$ lxc profile delete cpu2-memory4&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cabildocl.blogspot.com/feeds/1443091174842504611/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14037368/1443091174842504611' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/1443091174842504611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/1443091174842504611'/><link rel='alternate' type='text/html' href='http://cabildocl.blogspot.com/2024/06/lxc-crear-perfiles-para-limitar.html' title='LXC: Crear perfiles para limitar recursos de CPU y memoria'/><author><name>Julio Saldivar</name><uri>http://www.blogger.com/profile/16119743033913358224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14037368.post-6836279546887712267</id><published>2024-06-16T21:26:00.001-04:00</published><updated>2024-06-16T21:26:07.064-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="compose"/><category scheme="http://www.blogger.com/atom/ns#" term="contenedores"/><category scheme="http://www.blogger.com/atom/ns#" term="docker"/><category scheme="http://www.blogger.com/atom/ns#" term="ip"/><category scheme="http://www.blogger.com/atom/ns#" term="kubernetes"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="lxc"/><category scheme="http://www.blogger.com/atom/ns#" term="virtualizacion"/><title type='text'>LXC: Limitar recursos de memoria</title><content type='html'>&lt;p data-sourcepos=&quot;3:1-3:138&quot;&gt;En LXC al&lt;span&gt; igual que con otras tecnologías de virtualización,&lt;/span&gt;&lt;span&gt; es posible limitar la cantidad de memoria RAM que puede usar cada contenedor LXC.&lt;/span&gt;&lt;span&gt; Esto puede ser útil para aislar aplicaciones con uso intensivo de memoria y evitar que un solo contenedor consuma todos los recursos disponibles del sistema.&lt;/span&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;5:1-5:55&quot;&gt;&lt;span&gt;Existen dos métodos principales para limitar la memoria RAM en LXC:&lt;/span&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;7:1-7:45&quot;&gt;&lt;strong&gt;1. Utilizando el comando &lt;code&gt;lxc config set&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;9:1-9:76&quot;&gt;&lt;span&gt;El comando &lt;/span&gt;&lt;code class=&quot;&quot;&gt;lxc config set&lt;/code&gt;&lt;span&gt; permite establecer diversas configuraciones para los contenedores LXC,&lt;/span&gt;&lt;span&gt; incluida la cantidad de memoria RAM que pueden usar.&lt;/span&gt;&lt;span&gt; La sintaxis para limitar la memoria RAM de un contenedor es la siguiente:&lt;/span&gt;&lt;/p&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block ng-tns-c3876195943-93 ng-trigger ng-trigger-codeBlockRevealAnimation&quot; style=&quot;display: block;&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block-internal-container ng-tns-c3876195943-93&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;animated-opacity ng-tns-c3876195943-93&quot;&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-93&quot;&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-93 no-decoration-radius&quot; data-sourcepos=&quot;11:1-13:70&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;lxc config set &amp;lt;nombre_contenedor&amp;gt; limits.memory &amp;lt;valor_memoria&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p data-sourcepos=&quot;15:1-15:6&quot;&gt;&lt;span&gt;Donde:&lt;/span&gt;&lt;/p&gt;&lt;ul data-sourcepos=&quot;17:1-18:107&quot;&gt;&lt;li data-sourcepos=&quot;17:1-17:109&quot;&gt;&lt;code class=&quot;&quot;&gt;&amp;lt;nombre_contenedor&amp;gt;&lt;/code&gt;&lt;span&gt; es el nombre del contenedor para el que desea establecer el límite de memoria RAM.&lt;/span&gt;&lt;/li&gt;&lt;li data-sourcepos=&quot;18:1-18:107&quot;&gt;&lt;code class=&quot;&quot;&gt;&amp;lt;valor_memoria&amp;gt;&lt;/code&gt;&lt;span&gt; es la cantidad de memoria RAM que desea asignar al contenedor,&lt;/span&gt;&lt;span&gt; especificada en bytes.&lt;/span&gt;&lt;span&gt; Puede usar sufijos como &lt;/span&gt;&lt;code class=&quot;&quot;&gt;M&lt;/code&gt;&lt;span&gt; para megabytes o &lt;/span&gt;&lt;code class=&quot;&quot;&gt;G&lt;/code&gt;&lt;span&gt; para gigabytes.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-sourcepos=&quot;20:1-20:116&quot;&gt;&lt;span&gt;Por ejemplo,&lt;/span&gt;&lt;span&gt; para limitar la memoria RAM del contenedor &lt;/span&gt;&lt;code class=&quot;&quot;&gt;nginx-proxy&lt;/code&gt;&lt;span&gt; a 512 megabytes,&lt;/span&gt;&lt;span&gt; ejecute el siguiente comando:&lt;/span&gt;&lt;/p&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block ng-tns-c3876195943-94 ng-trigger ng-trigger-codeBlockRevealAnimation&quot; style=&quot;display: block;&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block-internal-container ng-tns-c3876195943-94&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;animated-opacity ng-tns-c3876195943-94&quot;&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-94&quot;&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-94 no-decoration-radius&quot; data-sourcepos=&quot;22:1-24:45&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;lxc config set nginx-proxy limits.memory 512M
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p data-sourcepos=&quot;26:1-26:61&quot;&gt;&lt;strong&gt;2. Modificando el archivo de configuración del contenedor&lt;/strong&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;28:1-28:277&quot;&gt;&lt;span&gt;Los contenedores LXC también pueden configurarse mediante archivos de configuración.&lt;/span&gt;&lt;span&gt; Estos archivos contienen información sobre las características y recursos del contenedor.&lt;/span&gt;&lt;span&gt; Para limitar la memoria RAM de un contenedor utilizando un archivo de configuración,&lt;/span&gt;&lt;span&gt; siga estos pasos:&lt;/span&gt;&lt;/p&gt;&lt;ol data-sourcepos=&quot;30:1-32:130&quot;&gt;&lt;li data-sourcepos=&quot;30:1-30:174&quot;&gt;&lt;span&gt;Abra el archivo de configuración del contenedor que desea modificar.&lt;/span&gt;&lt;span&gt; El archivo de configuración se encuentra generalmente en &lt;/span&gt;&lt;code class=&quot;&quot;&gt;/var/lib/lxc/&amp;lt;nombre_contenedor&amp;gt;/config&lt;/code&gt;&lt;span&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li data-sourcepos=&quot;31:1-31:128&quot;&gt;&lt;span&gt;Busque la línea que comienza con &lt;/span&gt;&lt;code class=&quot;&quot;&gt;lxc.cgroup.memory.limit_in_bytes&lt;/code&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; Si esta línea no existe,&lt;/span&gt;&lt;span&gt; agréguela al final del archivo.&lt;/span&gt;&lt;/li&gt;&lt;li data-sourcepos=&quot;32:1-32:130&quot;&gt;&lt;span&gt;Establezca el valor de la línea &lt;/span&gt;&lt;code class=&quot;&quot;&gt;lxc.cgroup.memory.limit_in_bytes&lt;/code&gt;&lt;span&gt; a la cantidad de memoria RAM que desea asignar al contenedor,&lt;/span&gt;&lt;span&gt; especificada en bytes.&lt;/span&gt;&lt;span&gt; Puede usar sufijos como &lt;/span&gt;&lt;code class=&quot;&quot;&gt;M&lt;/code&gt;&lt;span&gt; para megabytes o &lt;/span&gt;&lt;code class=&quot;&quot;&gt;G&lt;/code&gt;&lt;span&gt; para gigabytes.&lt;/span&gt;&lt;/li&gt;&lt;li data-sourcepos=&quot;33:1-34:0&quot;&gt;&lt;span&gt;Guarde el archivo de configuración.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p data-sourcepos=&quot;35:1-35:166&quot;&gt;&lt;span&gt;Por ejemplo,&lt;/span&gt;&lt;span&gt; para limitar la memoria RAM del contenedor &lt;/span&gt;&lt;code class=&quot;&quot;&gt;nginx-proxy&lt;/code&gt;&lt;span&gt; a 512 megabytes en el archivo de configuración,&lt;/span&gt;&lt;span&gt; agregue la siguiente línea al final del archivo:&lt;/span&gt;&lt;/p&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block ng-tns-c3876195943-95 ng-trigger ng-trigger-codeBlockRevealAnimation&quot; style=&quot;display: block;&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block-internal-container ng-tns-c3876195943-95&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;animated-opacity ng-tns-c3876195943-95&quot;&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-95&quot;&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-95 no-decoration-radius&quot; data-sourcepos=&quot;37:1-39:39&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;lxc.cgroup.memory.limit_in_bytes = 512M
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p data-sourcepos=&quot;41:1-41:31&quot;&gt;&lt;strong&gt;Consideraciones adicionales&lt;/strong&gt;&lt;/p&gt;&lt;ul data-sourcepos=&quot;43:1-44:226&quot;&gt;&lt;li data-sourcepos=&quot;43:1-43:270&quot;&gt;&lt;span&gt;Es importante tener en cuenta que la cantidad de memoria RAM que asigna a un contenedor debe ser suficiente para que el contenedor funcione correctamente.&lt;/span&gt;&lt;span&gt; Si asigna demasiada poca memoria RAM,&lt;/span&gt;&lt;span&gt; el contenedor puede experimentar problemas de rendimiento o incluso fallar.&lt;/span&gt;&lt;/li&gt;&lt;li data-sourcepos=&quot;44:1-44:226&quot;&gt;&lt;span&gt;También es importante tener en cuenta que la memoria RAM asignada a un contenedor no es exclusiva.&lt;/span&gt;&lt;span&gt; El contenedor aún puede acceder a la memoria RAM disponible en el sistema host,&lt;/span&gt;&lt;span&gt; pero estará limitado por la cantidad que haya configurado.&lt;/span&gt;&lt;/li&gt;&lt;li data-sourcepos=&quot;45:1-46:0&quot;&gt;&lt;span&gt;Si necesita limitar aún más los recursos de un contenedor,&lt;/span&gt;&lt;span&gt; puede utilizar otras opciones de configuración de LXC,&lt;/span&gt;&lt;span&gt; como &lt;/span&gt;&lt;code class=&quot;&quot;&gt;limits.cpu&lt;/code&gt;&lt;span&gt; para limitar el uso de la CPU o &lt;/span&gt;&lt;code class=&quot;&quot;&gt;limits.network&lt;/code&gt;&lt;span&gt; para limitar el uso de la red.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-sourcepos=&quot;47:1-47:93&quot;&gt;&lt;span&gt;Espero que esta información le sea útil.&lt;/span&gt;&lt;span&gt; Si tiene alguna otra pregunta,&lt;/span&gt;&lt;span&gt; no dude en preguntar.&lt;/span&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://cabildocl.blogspot.com/feeds/6836279546887712267/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14037368/6836279546887712267' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/6836279546887712267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/6836279546887712267'/><link rel='alternate' type='text/html' href='http://cabildocl.blogspot.com/2024/06/lxc-limitar-recursos-de-memoria.html' title='LXC: Limitar recursos de memoria'/><author><name>Julio Saldivar</name><uri>http://www.blogger.com/profile/16119743033913358224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14037368.post-6881345852086471853</id><published>2024-06-16T21:19:00.005-04:00</published><updated>2024-06-16T21:20:43.144-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="compose"/><category scheme="http://www.blogger.com/atom/ns#" term="contenedores"/><category scheme="http://www.blogger.com/atom/ns#" term="docker"/><category scheme="http://www.blogger.com/atom/ns#" term="kernel"/><category scheme="http://www.blogger.com/atom/ns#" term="kubernetes"/><category scheme="http://www.blogger.com/atom/ns#" term="lxc"/><category scheme="http://www.blogger.com/atom/ns#" term="seguridad"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu server"/><category scheme="http://www.blogger.com/atom/ns#" term="virtualizacion"/><title type='text'>LXC: limitar recursos de CPU</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p class=&quot;&quot; data-sourcepos=&quot;1:1-1:470&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;a href=&quot;https://www.jamescoyle.net/how-to/2532-setting-cpu-resource-limits-with-lxc&quot; target=&quot;_blank&quot;&gt;Traducción del siguiente articulo&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;&quot; data-sourcepos=&quot;1:1-1:470&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;La administración de contenedores Linux (LXC) ahora se maneja a menudo con LXD, el proyecto principal de Canonical construido sobre LXC. LXD ofrece un conjunto de opciones para controlar los recursos de los contenedores Linux y establecer límites cuando sea apropiado. Esta publicación hablará sobre cómo establecer restricciones en la CPU, sin embargo, hay otras opciones disponibles para limitar casi cualquier tipo de recurso, como red, E/S de disco, memoria, etc.&lt;/span&gt;&lt;/p&gt;&lt;h2 class=&quot;&quot; data-sourcepos=&quot;3:1-3:22&quot;&gt;Límites disponibles&lt;/h2&gt;&lt;p data-sourcepos=&quot;4:1-4:133&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span&gt;La administración de la CPU se realiza de 1 de 4 maneras,&lt;/span&gt;&lt;span&gt; según su carga de trabajo esperada y el régimen de administración de la CPU del host.&lt;/span&gt;&lt;/p&gt;&lt;ul data-sourcepos=&quot;6:1-7:230&quot; style=&quot;text-align: justify;&quot;&gt;&lt;li data-sourcepos=&quot;6:1-6:262&quot;&gt;&lt;strong&gt;Número de CPU:&lt;/strong&gt;&lt;span&gt; define la cantidad de núcleos de CPU que LXC puede usar con este contenedor y distribuye automáticamente el tiempo de CPU entre los invitados cuando hay competencia por el tiempo de CPU.&lt;/span&gt;&lt;span&gt; El valor utilizado es un número entero,&lt;/span&gt;&lt;span&gt; por ejemplo 2.&lt;/span&gt;&lt;/li&gt;&lt;li data-sourcepos=&quot;7:1-7:230&quot;&gt;&lt;strong&gt;Núcleos específicos:&lt;/strong&gt;&lt;span&gt; especifica núcleos físicos específicos para que los use el contenedor y distribuye el tiempo de CPU disponible entre contenedores cuando varios contenedores usan los mismos núcleos.&lt;/span&gt;&lt;span&gt; El valor utilizado es un número entero o rango y puede estar separado por comas,&lt;/span&gt;&lt;span&gt; por ejemplo 2,&lt;/span&gt;&lt;span&gt; 0-1 o 0-1,&lt;/span&gt;&lt;span&gt;3,&lt;/span&gt;&lt;span&gt;5-9.&lt;/span&gt;&lt;/li&gt;&lt;li data-sourcepos=&quot;8:1-8:380&quot;&gt;&lt;strong&gt;Participación limitada:&lt;/strong&gt;&lt;span&gt; permite un porcentaje específico de tiempo de CPU para el contenedor,&lt;/span&gt;&lt;span&gt; o más si está disponible.&lt;/span&gt;&lt;span&gt; Cuando el host no está bajo carga,&lt;/span&gt;&lt;span&gt; un contenedor puede usar cualquier CPU disponible,&lt;/span&gt;&lt;span&gt; pero cuando hay contención por la CPU,&lt;/span&gt;&lt;span&gt; el contenedor se limitará a la cantidad especificada.&lt;/span&gt;&lt;span&gt; El contenedor verá todos los núcleos de CPU del host (en TOP,&lt;/span&gt;&lt;span&gt; por ejemplo).&lt;/span&gt;&lt;/li&gt;&lt;li data-sourcepos=&quot;9:1-10:0&quot;&gt;&lt;strong&gt;Comparte de tiempo limitado:&lt;/strong&gt;&lt;span&gt; limitará el tiempo de CPU del contenedor a lo que se especifique de cada 200ms.&lt;/span&gt;&lt;span&gt; Incluso si hay más CPU disponible,&lt;/span&gt;&lt;span&gt; solo se permite lo que se especifica por porción de 200ms.&lt;/span&gt;&lt;span&gt; El contenedor verá todos los núcleos de CPU del host (en TOP,&lt;/span&gt;&lt;span&gt; por ejemplo).&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&quot;&quot; data-sourcepos=&quot;11:1-11:29&quot;&gt;Establecimiento de límites&lt;/h2&gt;&lt;p data-sourcepos=&quot;12:1-12:146&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span&gt;El establecimiento de límites se realiza con el comando &lt;/span&gt;&lt;code class=&quot;&quot;&gt;lxc&lt;/code&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; Luego hay dos opciones; &lt;/span&gt;&lt;code class=&quot;&quot;&gt;limits.cpu&lt;/code&gt;&lt;span&gt; para los puntos anteriores 1 y 2,&lt;/span&gt;&lt;span&gt; o &lt;/span&gt;&lt;code class=&quot;&quot;&gt;limit.cpu.allowance&lt;/code&gt;&lt;span&gt; para los puntos 3 y 4.&lt;/span&gt;&lt;/p&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block ng-tns-c3876195943-33 ng-trigger ng-trigger-codeBlockRevealAnimation&quot; style=&quot;display: block; text-align: justify;&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block-internal-container ng-tns-c3876195943-33&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;animated-opacity ng-tns-c3876195943-33&quot;&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-33&quot;&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-33 no-decoration-radius&quot; data-sourcepos=&quot;14:1-16:46&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;lxc config set [CONTENEDOR] limits.cpu [VALOR]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;ul data-sourcepos=&quot;18:1-20:0&quot; style=&quot;text-align: justify;&quot;&gt;&lt;li data-sourcepos=&quot;18:1-18:95&quot;&gt;&lt;code class=&quot;&quot;&gt;[CONTENEDOR]&lt;/code&gt;&lt;span&gt; es el nombre del contenedor; se puede obtener de &lt;/span&gt;&lt;code class=&quot;&quot;&gt;lxc list&lt;/code&gt;&lt;span&gt; si no está seguro.&lt;/span&gt;&lt;/li&gt;&lt;li data-sourcepos=&quot;19:1-20:0&quot;&gt;&lt;code class=&quot;&quot;&gt;[VALOR]&lt;/code&gt;&lt;span&gt; es un valor válido del punto 1 o 2 anterior.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-sourcepos=&quot;21:1-21:1&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span&gt;O&lt;/span&gt;&lt;/p&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block ng-tns-c3876195943-34 ng-trigger ng-trigger-codeBlockRevealAnimation&quot; style=&quot;display: block; text-align: justify;&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block-internal-container ng-tns-c3876195943-34&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;animated-opacity ng-tns-c3876195943-34&quot;&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-34&quot;&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-34 no-decoration-radius&quot; data-sourcepos=&quot;23:1-25:56&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;lxc config set [CONTENEDOR] limits.cpu.allowance [VALOR]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;ul data-sourcepos=&quot;27:1-29:0&quot; style=&quot;text-align: justify;&quot;&gt;&lt;li data-sourcepos=&quot;27:1-27:95&quot;&gt;&lt;code class=&quot;&quot;&gt;[CONTENEDOR]&lt;/code&gt;&lt;span&gt; es el nombre del contenedor; se puede obtener de &lt;/span&gt;&lt;code class=&quot;&quot;&gt;lxc list&lt;/code&gt;&lt;span&gt; si no está seguro.&lt;/span&gt;&lt;/li&gt;&lt;li data-sourcepos=&quot;28:1-29:0&quot;&gt;&lt;code class=&quot;&quot;&gt;[VALOR]&lt;/code&gt;&lt;span&gt; es un valor válido del punto 3 o 4 anterior.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&quot;&quot; data-sourcepos=&quot;30:1-30:28&quot;&gt;Ejemplos de límite de CPU&lt;/h2&gt;&lt;ul data-sourcepos=&quot;31:1-32:0&quot; style=&quot;text-align: justify;&quot;&gt;&lt;li data-sourcepos=&quot;31:1-32:0&quot;&gt;&lt;span&gt;Configure el contenedor &lt;/span&gt;&lt;code class=&quot;&quot;&gt;nginx-proxy&lt;/code&gt;&lt;span&gt; para que use cualquiera de las 2 CPU en el host.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block ng-tns-c3876195943-35 ng-trigger ng-trigger-codeBlockRevealAnimation&quot; style=&quot;display: block; text-align: justify;&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block-internal-container ng-tns-c3876195943-35&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;animated-opacity ng-tns-c3876195943-35&quot;&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-35&quot;&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-35 no-decoration-radius&quot; data-sourcepos=&quot;33:1-35:39&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;lxc config set nginx-proxy limits.cpu 2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;ul data-sourcepos=&quot;37:1-37:94&quot; style=&quot;text-align: justify;&quot;&gt;&lt;li data-sourcepos=&quot;37:1-37:94&quot;&gt;&lt;span&gt;Configure el contenedor &lt;/span&gt;&lt;code class=&quot;&quot;&gt;nginx-proxy&lt;/code&gt;&lt;span&gt; para que use las CPU físicas 0,&lt;/span&gt;&lt;span&gt; 3,&lt;/span&gt;&lt;span&gt; 7,&lt;/span&gt;&lt;span&gt; 8 y 9 en el host.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block ng-tns-c3876195943-38 ng-trigger ng-trigger-codeBlockRevealAnimation&quot; style=&quot;display: block; text-align: justify;&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block-internal-container ng-tns-c3876195943-38&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;animated-opacity ng-tns-c3876195943-38&quot;&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-38&quot;&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-38 no-decoration-radius&quot; data-sourcepos=&quot;39:1-41:45&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;lxc config set nginx-proxy limits.cpu 0,3,7-9
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;ul data-sourcepos=&quot;43:1-44:0&quot; style=&quot;text-align: justify;&quot;&gt;&lt;li data-sourcepos=&quot;43:1-44:0&quot;&gt;&lt;span&gt;Configure el contenedor &lt;/span&gt;&lt;code class=&quot;&quot;&gt;nginx-proxy&lt;/code&gt;&lt;span&gt; para que use el 20% de la CPU disponible en el host o más si está disponible.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block ng-tns-c3876195943-39 ng-trigger ng-trigger-codeBlockRevealAnimation&quot; style=&quot;display: block; text-align: justify;&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block-internal-container ng-tns-c3876195943-39&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;animated-opacity ng-tns-c3876195943-39&quot;&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-39&quot;&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-39 no-decoration-radius&quot; data-sourcepos=&quot;45:1-47:51&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;lxc config set nginx-proxy limits.cpu.allowance 20%
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;ul data-sourcepos=&quot;49:1-50:0&quot; style=&quot;text-align: justify;&quot;&gt;&lt;li data-sourcepos=&quot;49:1-50:0&quot;&gt;&lt;span&gt;Configure el contenedor &lt;/span&gt;&lt;code class=&quot;&quot;&gt;nginx-proxy&lt;/code&gt;&lt;span&gt; para que use no más del 50% de la CPU disponible en el host,&lt;/span&gt;&lt;span&gt; o 100 ms por cada 200 ms de tiempo de CPU disponible.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block ng-tns-c3876195943-40 ng-trigger ng-trigger-codeBlockRevealAnimation&quot; style=&quot;display: block; text-align: justify;&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block-internal-container ng-tns-c3876195943-40&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;animated-opacity ng-tns-c3876195943-40&quot;&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-40&quot;&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-40 no-decoration-radius&quot; data-sourcepos=&quot;51:1-53:59&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;lxc config set nginx-proxy limits.cpu.allowance 100ms/200ms
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p data-sourcepos=&quot;55:1-55:154&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span&gt;Puede ver &lt;/span&gt;&lt;code class=&quot;&quot;&gt;/proc/cpuinfo&lt;/code&gt;&lt;span&gt; para ver los núcleos disponibles en su contenedor,&lt;/span&gt;&lt;span&gt; sin embargo,&lt;/span&gt;&lt;span&gt; no incluirá ningún límite de programación o prioridad adicional.&lt;/span&gt;&lt;/p&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block ng-tns-c3876195943-41 ng-trigger ng-trigger-codeBlockRevealAnimation&quot; style=&quot;display: block; text-align: left;&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block-internal-container ng-tns-c3876195943-41&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;animated-opacity ng-tns-c3876195943-41&quot;&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-41&quot;&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-41 no-decoration-radius&quot; data-sourcepos=&quot;57:1-61:12&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;cat /proc/cpuinfo | grep processor
processor: 0
processor: 1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;h2 class=&quot;&quot; data-sourcepos=&quot;63:1-63:19&quot;&gt;Prioridad de CPU&lt;/h2&gt;&lt;p data-sourcepos=&quot;64:1-64:401&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span&gt;La última opción relacionada con la limitación de CPU es la prioridad del tiempo de CPU.&lt;/span&gt;&lt;span&gt; Esta opción solo se activa cuando el host está sobrecargado en recursos de CPU y los contenedores están luchando por el tiempo de CPU.&lt;/span&gt;&lt;span&gt; Esto puede ocurrir en un solo núcleo (si se usan los puntos anteriores 1 o 2) o en todo el sistema (si no hay limitación de CPU en uso o si se usan los puntos anteriores 3 o 4).&lt;/span&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;3:1-3:97&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span&gt;Los valores disponibles van de 0 a 10 (inclusive).&lt;/span&gt;&lt;span&gt; Los números más bajos significan una prioridad más baja,&lt;/span&gt;&lt;span&gt; mientras que un número más alto significa que la máquina obtendrá tiempo de CPU antes que los números más bajos.&lt;/span&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;5:1-5:51&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span&gt;El siguiente comando establece una prioridad de CPU de 5 para el contenedor nginx-proxy:&lt;/span&gt;&lt;/p&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block ng-tns-c3876195943-79 ng-trigger ng-trigger-codeBlockRevealAnimation&quot; style=&quot;display: block; text-align: justify;&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block-internal-container ng-tns-c3876195943-79&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;animated-opacity ng-tns-c3876195943-79&quot;&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-79&quot;&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-79 no-decoration-radius&quot; data-sourcepos=&quot;7:1-9:48&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;lxc config set nginx-proxy limits.cpu.priority 5
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p data-sourcepos=&quot;11:1-11:20&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span&gt;El siguiente comando establece una prioridad de CPU de 2 para el contenedor php-backend,&lt;/span&gt;&lt;span&gt; por lo que obtendría menos tiempo de CPU que el contenedor nginx-proxy cuando la CPU esté en contención.&lt;/span&gt;&lt;/p&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block ng-tns-c3876195943-82 ng-trigger ng-trigger-codeBlockRevealAnimation&quot; style=&quot;display: block;&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block-internal-container ng-tns-c3876195943-82&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;animated-opacity ng-tns-c3876195943-82&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-82&quot;&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-82 no-decoration-radius&quot; data-sourcepos=&quot;13:1-15:48&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;lxc config set php-backend limits.cpu.priority 5&amp;nbsp;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-82&quot;&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-82 no-decoration-radius&quot; data-sourcepos=&quot;13:1-15:48&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-82&quot;&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-82 no-decoration-radius&quot; data-sourcepos=&quot;13:1-15:48&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cabildocl.blogspot.com/feeds/6881345852086471853/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14037368/6881345852086471853' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/6881345852086471853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/6881345852086471853'/><link rel='alternate' type='text/html' href='http://cabildocl.blogspot.com/2024/06/lxc-limitar-cpu.html' title='LXC: limitar recursos de CPU'/><author><name>Julio Saldivar</name><uri>http://www.blogger.com/profile/16119743033913358224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14037368.post-4577348374344832374</id><published>2024-06-16T18:58:00.004-04:00</published><updated>2024-06-16T18:59:20.371-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Alta disponibilidad"/><category scheme="http://www.blogger.com/atom/ns#" term="cloud"/><category scheme="http://www.blogger.com/atom/ns#" term="compose"/><category scheme="http://www.blogger.com/atom/ns#" term="contenedores"/><category scheme="http://www.blogger.com/atom/ns#" term="debian"/><category scheme="http://www.blogger.com/atom/ns#" term="docker"/><category scheme="http://www.blogger.com/atom/ns#" term="kubernetes"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="lxc"/><category scheme="http://www.blogger.com/atom/ns#" term="microk8s"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu server"/><category scheme="http://www.blogger.com/atom/ns#" term="virtualizacion"/><title type='text'>Cómo instalar un cluster de MicroK8s en tres contenedores LXC, instalados en Ubuntu</title><content type='html'>&lt;br /&gt;&lt;div _ngcontent-ng-c3196950216=&quot;&quot; class=&quot;markdown markdown-main-panel&quot; dir=&quot;ltr&quot; style=&quot;--animation-duration: 600ms; --fade-animation-function: linear; --first-token-animation-duration: 600ms;&quot;&gt;&lt;b&gt;Introducción&lt;/b&gt;&lt;p data-sourcepos=&quot;5:1-5:257&quot; style=&quot;text-align: justify;&quot;&gt;MicroK8s es una plataforma de Kubernetes simplificada que permite implementar y ejecutar aplicaciones en contenedores de forma fácil y rápida. En este artículo, se describe cómo instalar un cluster de MicroK8s en tres contenedores LXC, instalados en Ubuntu.&lt;/p&gt;&lt;p data-sourcepos=&quot;7:1-7:22&quot;&gt;&lt;b&gt;Requisitos previos&lt;/b&gt;&lt;/p&gt;&lt;ul data-sourcepos=&quot;9:1-11:0&quot;&gt;&lt;li data-sourcepos=&quot;9:1-9:45&quot;&gt;Una máquina con Ubuntu y LXC instalado &lt;br /&gt;&lt;/li&gt;&lt;li data-sourcepos=&quot;10:1-11:0&quot;&gt;Conocimiento básico de Linux y contenedores LXC.&lt;/li&gt;&lt;/ul&gt;&lt;p data-sourcepos=&quot;12:1-12:9&quot;&gt;&lt;b&gt;Pasos&lt;/b&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;14:1-14:19&quot;&gt;&lt;b&gt;1. Instalar LXC&lt;/b&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;16:1-16:79&quot; style=&quot;text-align: justify;&quot;&gt;En la máquina Ubuntu, instale el paquete LXC utilizando el siguiente comando:&lt;/p&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block ng-tns-c3876195943-34 ng-trigger ng-trigger-codeBlockRevealAnimation&quot; style=&quot;display: block;&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block-internal-container ng-tns-c3876195943-34&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;animated-opacity ng-tns-c3876195943-34&quot;&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-34&quot;&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-34 no-decoration-radius&quot; data-sourcepos=&quot;18:1-20:20&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;sudo apt install lxc&lt;/code&gt;&lt;/pre&gt;&lt;p data-sourcepos=&quot;22:1-22:29&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;22:1-22:29&quot;&gt;&lt;b&gt;2. Crear perfil microk8s&lt;/b&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;24:1-24:62&quot; style=&quot;text-align: justify;&quot;&gt;Debemos crear un perfil para que kubernetes se ejecute sin problemas en un contenedor LXC:&lt;/p&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block ng-tns-c3876195943-35 ng-trigger ng-trigger-codeBlockRevealAnimation&quot; style=&quot;display: block;&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block-internal-container ng-tns-c3876195943-35&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;animated-opacity ng-tns-c3876195943-35&quot;&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-35&quot;&gt;&lt;code class=&quot;lang-auto&quot;&gt;lxc profile create microk8s&lt;/code&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-35 no-decoration-radius&quot; data-sourcepos=&quot;28:1-30:18&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code class=&quot;lang-auto&quot;&gt;# para ZFS
wget https://raw.githubusercontent.com/ubuntu/microk8s/master/tests/lxc/microk8s-zfs.profile -O microk8s.profile
# para ext4
wget https://raw.githubusercontent.com/ubuntu/microk8s/master/tests/lxc/microk8s.profile -O microk8s.profile&lt;/code&gt;&lt;/pre&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-34&quot;&gt;&lt;code class=&quot;lang-auto&quot;&gt;cat microk8s.profile | lxc profile edit microk8s&lt;/code&gt;&lt;/pre&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-34&quot;&gt;&lt;code class=&quot;lang-auto&quot;&gt;rm &lt;/code&gt;&lt;code class=&quot;lang-auto&quot;&gt;microk8s.profile&lt;/code&gt;&lt;code class=&quot;lang-auto&quot;&gt;&amp;nbsp;&lt;/code&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-34 no-decoration-radius&quot; data-sourcepos=&quot;18:1-20:20&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;&amp;nbsp;&lt;/code&gt;&lt;/pre&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-34&quot;&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-34 no-decoration-radius&quot; data-sourcepos=&quot;18:1-20:20&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;&amp;nbsp;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p data-sourcepos=&quot;22:1-22:29&quot;&gt;&lt;b&gt;2. Crear contenedor LXC base&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;24:1-24:62&quot; style=&quot;text-align: justify;&quot;&gt;Primero debemos crear un contenedor LXC utilizando utilizando el perfil microk8s, instalamos microk8s y después generamos una sanpshot de es:&lt;/p&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block ng-tns-c3876195943-35 ng-trigger ng-trigger-codeBlockRevealAnimation&quot; style=&quot;display: block;&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block-internal-container ng-tns-c3876195943-35&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;animated-opacity ng-tns-c3876195943-35&quot;&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-35&quot;&gt;&lt;code class=&quot;lang-auto&quot;&gt;lxc launch -p default -p microk8s ubuntu:22.04 microk8s01&lt;/code&gt;&lt;/pre&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-35&quot;&gt;&lt;code class=&quot;lang-auto&quot;&gt;#instalamos microk8s&lt;/code&gt;&lt;/pre&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-35&quot;&gt;&lt;code class=&quot;lang-auto&quot;&gt;lxc exec microk8s01 -- sudo snap install microk8s --classic&lt;/code&gt;&lt;code class=&quot;lang-auto&quot;&gt;&amp;nbsp;&lt;/code&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-35 no-decoration-radius&quot; data-sourcepos=&quot;28:1-30:18&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;&amp;nbsp;&lt;/code&gt;&lt;/pre&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-35&quot;&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-35 no-decoration-radius&quot; data-sourcepos=&quot;28:1-30:18&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;#creamos el snapshot&amp;nbsp;&lt;/code&gt;&lt;/pre&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-35&quot;&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-35 no-decoration-radius&quot; data-sourcepos=&quot;28:1-30:18&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;lxc snapshot microk8s01 microk8s-template&lt;/code&gt;&lt;/pre&gt;&lt;p data-sourcepos=&quot;22:1-22:29&quot;&gt;&lt;b&gt;3. Crear los otros contenedores&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;En base a la snapshot creamos los otros dos contenedores:&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-35&quot;&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-35 no-decoration-radius&quot; data-sourcepos=&quot;28:1-30:18&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;#contenedor 2&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-35&quot;&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-35 no-decoration-radius&quot; data-sourcepos=&quot;28:1-30:18&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;lxc copy microk8s-template microk8s02&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-35&quot;&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-35 no-decoration-radius&quot; data-sourcepos=&quot;28:1-30:18&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;#contenedor 3&lt;br /&gt;&lt;/code&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-35 no-decoration-radius&quot; data-sourcepos=&quot;28:1-30:18&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;lxc copy microk8s-template microk8s03&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p data-sourcepos=&quot;93:1-93:31&quot;&gt;&lt;b&gt;4. Agregar nodos al cluster&lt;/b&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;95:1-95:120&quot; style=&quot;text-align: justify;&quot;&gt;Ya tenemos microk8s en tres maquinas, asi que ahora los uniremos entre ellos. Para eso desde el nodo microk8s01 ejecutaremos el siguiente comando:&lt;/p&gt;&lt;p data-sourcepos=&quot;95:1-95:120&quot;&gt;&lt;/p&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block ng-tns-c3876195943-44 ng-trigger ng-trigger-codeBlockRevealAnimation&quot; style=&quot;display: block;&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block-internal-container ng-tns-c3876195943-44&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;animated-opacity ng-tns-c3876195943-44&quot;&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-44&quot;&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-44 no-decoration-radius&quot; data-sourcepos=&quot;97:1-99:74&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;root@microk8s01:~# microk8s add-node&lt;br /&gt;From the node you wish to join to this cluster, run the following:&lt;br /&gt;microk8s join 10.88.89.67:25000/da2fc5b4a60fc1e5fbbe703b007414c3/4523e5f8424e&lt;br /&gt;&lt;br /&gt;Use the &#39;--worker&#39; flag to join a node as a worker not running the control plane, eg:&lt;br /&gt;microk8s join 10.88.89.67:25000/da2fc5b4a60fc1e5fbbe703b007414c3/4523e5f8424e --worker&lt;br /&gt;&lt;br /&gt;If the node you are adding is not reachable through the default interface you can use one of the following:&lt;br /&gt;microk8s join 10.88.89.67:25000/da2fc5b4a60fc1e5fbbe703b007414c3/4523e5f8424e&lt;br /&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p data-sourcepos=&quot;101:1-101:163&quot; style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;Donde &lt;code&gt;&amp;lt;token&amp;gt;&lt;/code&gt; es el token de unión proporcionado por el primer nodo&amp;nbsp; y &lt;code&gt;&amp;lt;apiserver-url&amp;gt;&lt;/code&gt; es la URL del servidor API de MicroK8s del primer nodo. Desde los demas nodos ejecutaremos el siguiente comando&lt;/p&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-44&quot;&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-44 no-decoration-radius&quot; data-sourcepos=&quot;97:1-99:74&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;microk8s join 10.88.89.67:25000/da2fc5b4a60fc1e5fbbe703b007414c3/4523e5f8424e&lt;/code&gt;&lt;/pre&gt;&lt;p data-sourcepos=&quot;101:1-101:163&quot;&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;101:1-101:163&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;103:1-103:31&quot;&gt;&lt;b&gt;5. Verificar Cluster&lt;/b&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;105:1-105:100&quot; style=&quot;text-align: justify;&quot;&gt;Verifique que el cluster de MicroK8s esté funcionando correctamente utilizando el siguiente comando:&lt;/p&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block ng-tns-c3876195943-45 ng-trigger ng-trigger-codeBlockRevealAnimation&quot; style=&quot;display: block;&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-block-internal-container ng-tns-c3876195943-45&quot;&gt;&lt;div _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;animated-opacity ng-tns-c3876195943-45&quot;&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-45&quot;&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-45 no-decoration-radius&quot; data-sourcepos=&quot;107:1-109:15&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;root@microk8s01:~# microk8s status &lt;br /&gt;microk8s is running&lt;br /&gt;high-availability: yes&lt;br /&gt;  datastore master nodes: 10.88.89.67:19001 10.88.89.59:19001 10.88.89.165:19001&lt;br /&gt;  datastore standby nodes: none&lt;/code&gt;&lt;/pre&gt;&lt;pre _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;ng-tns-c3876195943-45&quot;&gt;&lt;code _ngcontent-ng-c3876195943=&quot;&quot; class=&quot;code-container ng-tns-c3876195943-45 no-decoration-radius&quot; data-sourcepos=&quot;107:1-109:15&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot;&gt;&lt;br /&gt;root@microk8s01:~# microk8s kubectl get no&lt;br /&gt;NAME         STATUS   ROLES    AGE     VERSION&lt;br /&gt;microk8s01   Ready    &amp;lt;none&amp;gt;   8m24s   v1.29.4&lt;br /&gt;microk8s02   Ready    &amp;lt;none&amp;gt;   89s     v1.29.4&lt;br /&gt;microk8s03   Ready    &amp;lt;none&amp;gt;   9s      v1.29.4&lt;br /&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p data-sourcepos=&quot;111:1-111:14&quot;&gt;&lt;b&gt;Conclusión&lt;/b&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;113:1-113:193&quot; style=&quot;text-align: justify;&quot;&gt;Ha completado la instalación de un cluster de MicroK8s en tres contenedores LXC, instalados en Ubuntu. Ahora puede implementar y ejecutar aplicaciones en contenedores en su cluster de MicroK8s.&lt;/p&gt;&lt;p data-sourcepos=&quot;115:1-115:24&quot;&gt;&lt;b&gt;Recursos adicionales&lt;/b&gt;&lt;/p&gt;&lt;ul data-sourcepos=&quot;117:1-119:63&quot;&gt;&lt;li data-sourcepos=&quot;117:1-117:56&quot;&gt;&lt;a class=&quot;traceable-link&quot; href=&quot;https://microk8s.io/docs/&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;Documentación de MicroK8s&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cabildocl.blogspot.com/feeds/4577348374344832374/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14037368/4577348374344832374' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/4577348374344832374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/4577348374344832374'/><link rel='alternate' type='text/html' href='http://cabildocl.blogspot.com/2024/06/como-instalar-un-cluster-de-microk8s-en.html' title='Cómo instalar un cluster de MicroK8s en tres contenedores LXC, instalados en Ubuntu'/><author><name>Julio Saldivar</name><uri>http://www.blogger.com/profile/16119743033913358224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14037368.post-6597693571479994506</id><published>2023-05-05T08:37:00.001-04:00</published><updated>2023-05-05T08:37:01.116-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="geoip"/><category scheme="http://www.blogger.com/atom/ns#" term="network"/><category scheme="http://www.blogger.com/atom/ns#" term="networking"/><category scheme="http://www.blogger.com/atom/ns#" term="programación"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="redes"/><title type='text'>API de Geo IP en Python</title><content type='html'>&lt;p&gt;import pandas as pd&lt;br /&gt;import requests&lt;/p&gt;&lt;p&gt;#IPs a revisar &lt;br /&gt;&lt;/p&gt;&lt;p&gt;ips = [&quot;54.86.50.139&quot;,&quot;191.113.136.20&quot;] &lt;br /&gt;&lt;/p&gt;&lt;p&gt;#Consulta a ip-api y la salida se&amp;nbsp; guarda en Pandas&lt;br /&gt;&lt;/p&gt;&lt;p&gt;response = requests.post(&quot;http://ip-api.com/batch&quot;, json=ips).json()&amp;nbsp; &amp;nbsp; response = pd.DataFrame(response) &lt;/p&gt;&lt;p&gt;#Imprimimos la salida &lt;br /&gt;&lt;/p&gt;&lt;p&gt;print(response)&lt;/p&gt;&lt;p&gt;#y tambien la guardamos en CSV &lt;br /&gt;&lt;/p&gt;&lt;p&gt;response.to_csv(&#39;IPS.csv&#39;)&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://cabildocl.blogspot.com/feeds/6597693571479994506/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14037368/6597693571479994506' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/6597693571479994506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/6597693571479994506'/><link rel='alternate' type='text/html' href='http://cabildocl.blogspot.com/2023/05/api-de-geo-ip-en-python.html' title='API de Geo IP en Python'/><author><name>Julio Saldivar</name><uri>http://www.blogger.com/profile/16119743033913358224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14037368.post-3730076180390118174</id><published>2023-03-19T11:27:00.007-03:00</published><updated>2023-03-19T11:31:18.289-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="compose"/><category scheme="http://www.blogger.com/atom/ns#" term="docker"/><category scheme="http://www.blogger.com/atom/ns#" term="gestion"/><category scheme="http://www.blogger.com/atom/ns#" term="glpi"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="mysql"/><category scheme="http://www.blogger.com/atom/ns#" term="redes"/><title type='text'>Implementar GLPI en Docker</title><content type='html'>&lt;p&gt;&amp;nbsp;Asumiendo que ya tienes docker-compose instalado, el archivo compose es el siguiente:&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;version: &#39;3&#39;&lt;br /&gt;&lt;br /&gt;services:&lt;br /&gt;&amp;nbsp; db:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; image: mariadb:10.5&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; restart: always&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; environment:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MYSQL_ROOT_PASSWORD: example&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MYSQL_DATABASE: glpidb&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MYSQL_USER: glpi&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MYSQL_PASSWORD: example&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; volumes:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - db-data:/var/lib/mysql&lt;br /&gt;&lt;br /&gt;&amp;nbsp; glpi:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; image: glpi/glpi:latest&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; restart: always&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ports:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - &quot;8080:80&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; environment:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GLPI_DB_HOST: db&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GLPI_DB_NAME: glpidb&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GLPI_DB_USER: glpi&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GLPI_DB_PASSWORD: example&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; volumes:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - glpi-data:/var/www/html/glpi&lt;br /&gt;&lt;br /&gt;volumes:&lt;br /&gt;&amp;nbsp; db-data:&lt;br /&gt;&amp;nbsp; glpi-data:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Este archivo de Docker Compose crea dos servicios: uno para la base de datos y otro para GLPI. El servicio de la base de datos utiliza la imagen de MariaDB y define las variables de entorno necesarias para crear la base de datos y el usuario.&lt;/p&gt;&lt;p&gt;El servicio GLPI utiliza la imagen oficial de GLPI y expone el puerto 8080 en el host para acceder a la aplicación. Además, utiliza las variables de entorno definidas para conectarse a la base de datos y monta un volumen para almacenar los datos persistentes de GLPI.&lt;/p&gt;&lt;p&gt;Para ejecutar este archivo de Docker Compose, asegúrate de tener Docker y Docker Compose instalados y luego ejecuta el siguiente comando en el directorio donde se encuentra el archivo &lt;code&gt;docker-compose.yml&lt;/code&gt;:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;code class=&quot;!whitespace-pre hljs&quot;&gt;docker-compose up -d&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;code class=&quot;!whitespace-pre hljs&quot;&gt;&amp;nbsp;&lt;/code&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;code class=&quot;!whitespace-pre hljs&quot;&gt;&amp;nbsp;&lt;/code&gt;Esto iniciará los servicios en segundo plano. Puedes acceder a GLPI en tu navegador web en &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;http://localhost:8080&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://cabildocl.blogspot.com/feeds/3730076180390118174/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14037368/3730076180390118174' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/3730076180390118174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/3730076180390118174'/><link rel='alternate' type='text/html' href='http://cabildocl.blogspot.com/2023/03/implmentar-glpi-en-docker.html' title='Implementar GLPI en Docker'/><author><name>Julio Saldivar</name><uri>http://www.blogger.com/profile/16119743033913358224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14037368.post-1080395778109007068</id><published>2023-03-18T19:23:00.002-03:00</published><updated>2023-03-18T19:23:40.384-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cisco"/><category scheme="http://www.blogger.com/atom/ns#" term="redes"/><category scheme="http://www.blogger.com/atom/ns#" term="spanning tree"/><category scheme="http://www.blogger.com/atom/ns#" term="stp"/><title type='text'>Spanning Tree</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;¿Qué es Spanning Tree?&lt;/h2&gt;&lt;p&gt;Spanning Tree es un protocolo de red que se utiliza para evitar la formación de bucles de red en topologías de red redundantes. La redundancia es importante en las redes, ya que proporciona tolerancia a fallos y aumenta la disponibilidad de la red. Sin embargo, la redundancia también puede causar problemas, como la formación de bucles de red que pueden afectar negativamente al rendimiento de la red. Spanning Tree es una solución para estos problemas de bucles de red.&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;¿Cómo funciona Spanning Tree?&lt;/h2&gt;&lt;p&gt;Spanning Tree se basa en un algoritmo que selecciona un camino principal entre los dispositivos de red, y bloquea todos los demás caminos redundantes. Este camino principal se llama &quot;árbol de expansión&quot;. El algoritmo de Spanning Tree selecciona el camino principal en función de una serie de factores, como la velocidad de la conexión y la distancia. Una vez que se ha seleccionado el camino principal, todos los demás caminos redundantes se bloquean, lo que impide la formación de bucles de red.&lt;/p&gt;&lt;p&gt;Para seleccionar el camino principal y bloquear los caminos redundantes, Spanning Tree utiliza varios mensajes de control de red. Estos mensajes se envían entre los dispositivos de red y se utilizan para detectar y eliminar bucles de red. El algoritmo de Spanning Tree utiliza estos mensajes para construir un árbol de expansión que cubre toda la topología de la red. Una vez que se ha construido el árbol de expansión, se utilizan los mensajes de control para bloquear los caminos redundantes.&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;¿Por qué es importante Spanning Tree?&lt;/h2&gt;&lt;p&gt;Spanning Tree es importante porque evita la formación de bucles de red en topologías de red redundantes. Los bucles de red pueden afectar negativamente al rendimiento de la red, lo que puede causar problemas en el funcionamiento de la red. Spanning Tree asegura que haya un camino principal claro en la red, lo que garantiza que los paquetes de red se transmitan de forma eficiente y segura.&lt;/p&gt;&lt;p&gt;Además, Spanning Tree también proporciona tolerancia a fallos en la red. Si un enlace de red falla, Spanning Tree automáticamente selecciona un nuevo camino principal y desbloquea los caminos redundantes necesarios para garantizar que la red siga funcionando correctamente. Esto significa que si un enlace de red falla, la red puede seguir funcionando sin interrupciones.&lt;/p&gt;&lt;p&gt;En resumen, Spanning Tree es un protocolo de red que evita la formación de bucles de red en topologías de red redundantes. Utiliza un algoritmo que selecciona un camino principal entre los dispositivos de red y bloquea todos los demás caminos redundantes. Spanning Tree es importante porque asegura que haya un camino claro en la red y proporciona tolerancia a fallos.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Configuracion basica en Cisco&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Switch(config)# spanning-tree mode rapid-pvst&lt;br /&gt;Switch(config)# spanning-tree vlan 1-1000 priority 4096&lt;br /&gt;Switch(config)# spanning-tree portfast default&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;La primera línea configura el modo de Spanning Tree como &quot;rapid-pvst&quot;. Este es un modo de Spanning Tree rápido&amp;nbsp; por VLAN.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;La segunda línea establece la prioridad de Spanning Tree para las VLAN del 1 al 1000 en 4096. Esta es una prioridad baja, lo que significa que este switch&amp;nbsp; será el puente raíz para esas VLAN, a menos que no haya ningún otro switch con una prioridad aún más baja.&lt;/p&gt;&lt;p&gt;La tercera línea configura el modo &quot;portfast&quot; por defecto en todos los puertos del switch. &quot;Portfast&quot; es una característica que permite que los puertos del switch se conviertan rápidamente en puertos de acceso y eviten los tiempos de espera de Spanning Tree al conectar un dispositivo final a un puerto. Es importante tener en cuenta que no se debe habilitar &quot;portfast&quot; en puertos que se conectan a otros switches o dispositivos que puedan generar bucles en la red.&lt;/p&gt;&lt;p&gt;Es importante tener en cuenta que esta es solo una configuración básica de Spanning Tree y que hay muchas opciones y características adicionales que se pueden configurar para ajustar el comportamiento de Spanning Tree en una red. Se recomienda consultar la documentación de Cisco y trabajar con un profesional de red experimentado para diseñar y configurar una red de Spanning Tree adecuada para sus necesidades.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://cabildocl.blogspot.com/feeds/1080395778109007068/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14037368/1080395778109007068' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/1080395778109007068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/1080395778109007068'/><link rel='alternate' type='text/html' href='http://cabildocl.blogspot.com/2023/03/spanning-tree.html' title='Spanning Tree'/><author><name>Julio Saldivar</name><uri>http://www.blogger.com/profile/16119743033913358224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14037368.post-8852482504083000444</id><published>2023-03-12T08:08:00.004-03:00</published><updated>2023-03-12T08:08:27.784-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cloud"/><category scheme="http://www.blogger.com/atom/ns#" term="http"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="redes"/><category scheme="http://www.blogger.com/atom/ns#" term="servidor web"/><category scheme="http://www.blogger.com/atom/ns#" term="telefonia IP"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><title type='text'>Servidor web simple para compartir archivos</title><content type='html'>&lt;p&gt;&amp;nbsp;Muchas veces necesitamos compartir archivos en dispositivos en la red de manera rapida por http, ejemplo al querer actualizar un dispositivo como telefono o switch. La manera mas rapida, si ya tiene Python, utilizar el siguiente comando:&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;python3 -m http.server 8080&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Con esto ya estaras compartiendo el directorio donde estas ubicado al momento de ejecutar este comando.&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://cabildocl.blogspot.com/feeds/8852482504083000444/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14037368/8852482504083000444' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/8852482504083000444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/8852482504083000444'/><link rel='alternate' type='text/html' href='http://cabildocl.blogspot.com/2023/03/servidor-web-simple-para-compartir.html' title='Servidor web simple para compartir archivos'/><author><name>Julio Saldivar</name><uri>http://www.blogger.com/profile/16119743033913358224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14037368.post-4326768516727268560</id><published>2022-11-01T12:14:00.003-03:00</published><updated>2022-11-01T12:14:45.442-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="docker"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="vyatta"/><category scheme="http://www.blogger.com/atom/ns#" term="vyos"/><title type='text'>Crear ISO de Vyos</title><content type='html'>&lt;p&gt;&amp;nbsp;Para crear una ISO de Vyos se dben seguir los siguientes pasos:&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Descargar contenedor&lt;/h3&gt;&lt;p style=&quot;text-align: left;&quot;&gt;Debemos descargar el siguiente contenedor para la version 1.3 de Vyos:&lt;/p&gt;&lt;pre style=&quot;-moz-tab-size: 4; -o-tab-size: 4; background-color: black; color: #e5e5e5; tab-size: 4;&quot;&gt;docker pull vyos/vyos-build:equuleus   # For VyOS 1.3&lt;/pre&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Clonar repositorio&lt;br /&gt;&lt;/h3&gt;&lt;p style=&quot;text-align: left;&quot;&gt;Debemos bajar el siguiente respositorio&lt;br /&gt;&lt;/p&gt;&lt;pre style=&quot;-moz-tab-size: 4; -o-tab-size: 4; background-color: black; color: #e5e5e5; tab-size: 4;&quot;&gt;git clone -b equuleus --single-branch https://github.com/vyos/vyos-build&lt;/pre&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Crear contenedor y compilar&lt;br /&gt;&lt;/h3&gt;&lt;p style=&quot;text-align: left;&quot;&gt;Debebos crear el contenedor, ingresar al el y ejecutar la compilacion:&lt;br /&gt;&lt;/p&gt;&lt;pre style=&quot;-moz-tab-size: 4; -o-tab-size: 4; background-color: black; color: #e5e5e5; tab-size: 4;&quot;&gt;cd vyos-build&lt;br /&gt;docker run --rm -it --privileged -v $(pwd):/vyos -w /vyos vyos/vyos-build:equuleus bash&lt;br /&gt;#dentro del contenedor ejecutat la compilacion&lt;br /&gt;vyos_bld@d4220bb519a0:/vyos# ./configure --architecture amd64 --build-by &quot;cabildo@gmail.com&quot;&lt;br /&gt;vyos_bld@d4220bb519a0:/vyos# sudo make iso&lt;/pre&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;Ya esta creada la imagen&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;data:image/png;base64,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&quot; /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;mas informacion &lt;a href=&quot;https://docs.vyos.io/en/equuleus/contributing/build-vyos.html#build&quot;&gt;Aqui&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://cabildocl.blogspot.com/feeds/4326768516727268560/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14037368/4326768516727268560' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/4326768516727268560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/4326768516727268560'/><link rel='alternate' type='text/html' href='http://cabildocl.blogspot.com/2022/11/crear-iso-de-vyos.html' title='Crear ISO de Vyos'/><author><name>Julio Saldivar</name><uri>http://www.blogger.com/profile/16119743033913358224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14037368.post-851182381144631113</id><published>2022-11-01T12:05:00.004-03:00</published><updated>2022-11-01T12:05:29.799-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="contenedores"/><category scheme="http://www.blogger.com/atom/ns#" term="docker"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="servidor web"/><title type='text'>Implementar servidor web para compartir archivos estaticos</title><content type='html'>&lt;p&gt;&amp;nbsp;Muchas veces necesitas compartir de manera rapida archivos por la web y con este contenedor lo puedes realizar con 1 comando: &lt;br /&gt;&lt;/p&gt;&lt;pre style=&quot;-moz-tab-size: 4; -o-tab-size: 4; background-color: black; color: #e5e5e5; tab-size: 4;&quot;&gt;docker run -d -v /tmp/:/web -p 8080:8080 halverneus/static-file-server:latest&lt;/pre&gt;&lt;p&gt;publicaremos la carpeta /tmp por el puerto 8080 de muestro PC&lt;br /&gt;&lt;/p&gt;&lt;p&gt;mas informacion &lt;a href=&quot;https://github.com/halverneus/static-file-server&quot;&gt;Aqui&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://cabildocl.blogspot.com/feeds/851182381144631113/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14037368/851182381144631113' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/851182381144631113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/851182381144631113'/><link rel='alternate' type='text/html' href='http://cabildocl.blogspot.com/2022/11/implementar-servidor-web-para-compartir.html' title='Implementar servidor web para compartir archivos estaticos'/><author><name>Julio Saldivar</name><uri>http://www.blogger.com/profile/16119743033913358224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14037368.post-1791775451157420853</id><published>2022-11-01T11:58:00.005-03:00</published><updated>2022-12-11T08:29:19.381-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="redes"/><category scheme="http://www.blogger.com/atom/ns#" term="sdwan"/><category scheme="http://www.blogger.com/atom/ns#" term="vyatta"/><category scheme="http://www.blogger.com/atom/ns#" term="vyos"/><category scheme="http://www.blogger.com/atom/ns#" term="zerotier"/><title type='text'>Instalar Zerotier en Vyos</title><content type='html'>&lt;p&gt;&amp;nbsp;Zerotier es una solucion simple y potente para implementar SDWAN, y aunque Vyos no tiene soporte por defecto si se puede implementar en este. Para esto seguiremos los siguientes pasos:&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Instalacion&lt;/h3&gt;&lt;p style=&quot;text-align: left;&quot;&gt;Se utilizara el procedimiento recomendo por &lt;a href=&quot;https://www.zerotier.com/download/&quot;&gt;Zerotier&lt;/a&gt;&lt;/p&gt;

&lt;pre style=&quot;-moz-tab-size: 4; -o-tab-size: 4; background-color: black; color: #e5e5e5; tab-size: 4;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;code class=&quot;language-fallback&quot; data-lang=&quot;fallback&quot;&gt;
root@FW:~# curl -s https://install.zerotier.com | sudo bash

*** ZeroTier Service Quick Install for Unix-like Systems

*** Tested OSes / distributions:

***   MacOS (10.13+) (just installs ZeroTier One.pkg)
***   Debian Linux (7+)
***   RedHat/CentOS Linux (6+)
***   Fedora Linux (16+)
***   SuSE Linux (12+)
***   Mint Linux (18+)

*** Supported architectures vary by OS / distribution. We try to support
*** every system architecture supported by the target.

*** Please report problems to contact@zerotier.com and we will try to fix.

*** Detecting Linux Distribution

*** Found Debian, creating /etc/apt/sources.list.d/zerotier.list
OK

*** Installing zerotier-one package...
Get:1 http://download.zerotier.com/debian/buster buster InRelease [36.8 kB]
Get:2 http://download.zerotier.com/debian/buster buster/main amd64 Packages [5,102 B]
Fetched 41.9 kB in 0s (103 kB/s)     
Reading package lists... Done
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  zerotier-one
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 3,143 kB of archives.
After this operation, 10.8 MB of additional disk space will be used.
Get:1 http://download.zerotier.com/debian/buster buster/main amd64 zerotier-one amd64 1.10.1 [3,143 kB]
Fetched 3,143 kB in 0s (31.8 MB/s)     
Selecting previously unselected package zerotier-one.
(Reading database ... 65607 files and directories currently installed.)
Preparing to unpack .../zerotier-one_1.10.1_amd64.deb ...
Unpacking zerotier-one (1.10.1) ...
Setting up zerotier-one (1.10.1) ...
Created symlink /etc/systemd/system/multi-user.target.wants/zerotier-one.service → /lib/systemd/system/zerotier-one.service.
Processing triggers for systemd (241-7~deb10u8) ...
localepurge: Disk space freed in /usr/share/locale: 0 KiB
localepurge: Disk space freed in /usr/share/man: 0 KiB

Total disk space freed by localepurge: 0 KiB


*** Enabling and starting ZeroTier service...
Synchronizing state of zerotier-one.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable zerotier-one

*** Waiting for identity generation...

*** Success! You are ZeroTier address [ 55f72cb6f1 ].


&lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/h3&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Agrega a una network de Zerotier&lt;br /&gt;&lt;/h3&gt;&lt;p style=&quot;text-align: left;&quot;&gt;Ya tenemos instalado Zerotier, debemos unir Vyos a una de las redes de Zerotier para esto debemos ejecutar  lo siguiente:&lt;/p&gt;
&lt;pre style=&quot;-moz-tab-size: 4; -o-tab-size: 4; background-color: black; color: #e5e5e5; tab-size: 4;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;code class=&quot;language-fallback&quot; data-lang=&quot;fallback&quot;&gt;root@FW&lt;/code&gt;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;code class=&quot;language-fallback&quot; data-lang=&quot;fallback&quot;&gt;~&lt;/code&gt;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;code class=&quot;language-fallback&quot; data-lang=&quot;fallback&quot;&gt;# zerotier-cli join 12xxxxxxxxxxxx
200 join OK
&lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;ya realizado esto, debemos nnombre la interface nuevo con nombre tipo ethXX para que Vyos la reconozco. Para esto debemos crear el archivo /var/lib/zerotier-one/devicemap y agregar lo siguiente:&lt;br /&gt;&lt;pre style=&quot;-moz-tab-size: 4; -o-tab-size: 4; background-color: black; color: #e5e5e5; tab-size: 4;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;code class=&quot;language-fallback&quot; data-lang=&quot;fallback&quot;&gt;12xxxxxxxxxxxx=eth10
&lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;y debemos reiniciar Zerotier&lt;/p&gt;&lt;pre style=&quot;-moz-tab-size: 4; -o-tab-size: 4; background-color: black; color: #e5e5e5; tab-size: 4;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;code class=&quot;language-fallback&quot; data-lang=&quot;fallback&quot;&gt;root@FW:~# /etc/init.d/zerotier-one restart&lt;br /&gt;[ ok ] Restarting zerotier-one (via systemctl): zerotier-one.service.&lt;br /&gt;root@FW:~# ifconfig eth10&lt;br /&gt;eth10: flags=4163&amp;lt;UP,BROADCAST,RUNNING,MULTICAST&amp;gt;  mtu 2800&lt;br /&gt;        inet 192.168.194.163  netmask 255.255.255.0  broadcast 192.168.194.255&lt;br /&gt;        ether 56:2f:58:5d:a8:bb  txqueuelen 1000  (Ethernet)&lt;br /&gt;        RX packets 24  bytes 1968 (1.9 KiB)&lt;br /&gt;        RX errors 0  dropped 0  overruns 0  frame 0&lt;br /&gt;        TX packets 17  bytes 2066 (2.0 KiB)&lt;br /&gt;        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0&lt;br /&gt;&lt;br /&gt;root@FW:~# exit&lt;br /&gt;exit&lt;/code&gt;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;code class=&quot;language-fallback&quot; data-lang=&quot;fallback&quot;&gt;&lt;br /&gt;&lt;/code&gt;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;code class=&quot;language-fallback&quot; data-lang=&quot;fallback&quot;&gt;vyos@FW&lt;/code&gt;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;code class=&quot;language-fallback&quot; data-lang=&quot;fallback&quot;&gt;:~$ show interfaces &lt;br /&gt;Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down&lt;br /&gt;Interface        IP Address                        S/L  Description&lt;br /&gt;---------        ----------                        ---  -----------&lt;br /&gt;eth0             xx.xx.xx.xx/29                   u/u  &lt;br /&gt;eth1             xx.xx.xx.xx/24                      u/u  &lt;br /&gt;eth10            192.168.194.163/24                u/u  &lt;br /&gt;lo               127.0.0.1/8                       u/u  &lt;br /&gt;                 ::1/128                                &lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;Y ya estamos &lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://cabildocl.blogspot.com/feeds/1791775451157420853/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14037368/1791775451157420853' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/1791775451157420853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/1791775451157420853'/><link rel='alternate' type='text/html' href='http://cabildocl.blogspot.com/2022/11/instalar-zerotier-en-vyos.html' title='Instalar Zerotier en Vyos'/><author><name>Julio Saldivar</name><uri>http://www.blogger.com/profile/16119743033913358224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14037368.post-1119030113643271773</id><published>2022-02-20T07:40:00.001-03:00</published><updated>2022-02-20T07:40:12.488-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="contenedores"/><category scheme="http://www.blogger.com/atom/ns#" term="docker"/><category scheme="http://www.blogger.com/atom/ns#" term="dump"/><category scheme="http://www.blogger.com/atom/ns#" term="kubernetes"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="mysql"/><title type='text'>Contenedor MySQL y datos desde dump</title><content type='html'>&lt;p&gt;&amp;nbsp;Este es un docker compose de MySQL donde ademas se carga un dump de una base de datos.&lt;/p&gt;&lt;p&gt;docker-compose.yml&lt;/p&gt;&lt;p&gt;services:&lt;br /&gt;&amp;nbsp; mysql:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; image: mysql:8&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ports:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - 3306:3306&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; volumes:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - ./docker/mysql/data:/var/lib/mysql:rw&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - ./dump.sql:/docker-entrypoint-initdb.d/dump.sql:ro&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; environment:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - MYSQL_ROOT_PASSWORD=password_root&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - MYSQL_PASSWORD=password_user&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - MYSQL_USER=user&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - MYSQL_DATABASE=name_db&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://cabildocl.blogspot.com/feeds/1119030113643271773/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14037368/1119030113643271773' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/1119030113643271773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/1119030113643271773'/><link rel='alternate' type='text/html' href='http://cabildocl.blogspot.com/2022/02/contenedor-mysql-y-datos-desde-dump.html' title='Contenedor MySQL y datos desde dump'/><author><name>Julio Saldivar</name><uri>http://www.blogger.com/profile/16119743033913358224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14037368.post-97854719698496855</id><published>2021-05-08T05:48:00.006-04:00</published><updated>2021-05-08T05:49:06.787-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cisco"/><category scheme="http://www.blogger.com/atom/ns#" term="redes"/><category scheme="http://www.blogger.com/atom/ns#" term="seguridad"/><category scheme="http://www.blogger.com/atom/ns#" term="ssh"/><title type='text'>Activar Telnet y SSH en equipos Cisco</title><content type='html'>&lt;p&gt;&amp;nbsp;Lo primero es crear un usuario dentro del equipo:&lt;/p&gt;&lt;p&gt;&amp;nbsp;username &lt;i&gt;nombre_usuario&lt;/i&gt; privilege 15 secret &lt;i&gt;clave_usuario.&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;Ya realizado esto activaremos los servicios&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Telnet&lt;/b&gt;&lt;/p&gt;&lt;p&gt;line vty 0 15&lt;br /&gt;&amp;nbsp; transport input telnet&lt;br /&gt;&amp;nbsp; login local&lt;br /&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;SSH&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Para activar SSH es requisito tener nombre de host, nombre de dominio y generar una clave rsa para la encriptacion de la conexion &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;br /&gt;hostname &lt;i&gt;nombre_equipo&lt;/i&gt;&lt;br /&gt; ip domain-name &lt;i&gt;dominio.algo&lt;/i&gt;&lt;br /&gt; crypto key generate rsa&lt;br /&gt; ip ssh version 2&lt;br /&gt; line vty 0 15&lt;br /&gt;&amp;nbsp; transport input ssh&lt;br /&gt;&amp;nbsp; login local&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://cabildocl.blogspot.com/feeds/97854719698496855/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14037368/97854719698496855' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/97854719698496855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/97854719698496855'/><link rel='alternate' type='text/html' href='http://cabildocl.blogspot.com/2021/05/activar-telnet-y-ssh-en-equipos-cisco.html' title='Activar Telnet y SSH en equipos Cisco'/><author><name>Julio Saldivar</name><uri>http://www.blogger.com/profile/16119743033913358224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14037368.post-3912721850764605877</id><published>2021-03-31T09:08:00.003-03:00</published><updated>2021-03-31T09:18:51.270-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cloud"/><category scheme="http://www.blogger.com/atom/ns#" term="firewall"/><category scheme="http://www.blogger.com/atom/ns#" term="geoip"/><category scheme="http://www.blogger.com/atom/ns#" term="internet"/><category scheme="http://www.blogger.com/atom/ns#" term="ip"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="seguridad"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu server"/><title type='text'>Bloqueo con GeoIP en Ubuntu 20.04</title><content type='html'>&lt;p&gt;Para algunos servicios que solo es necesario que estén disponibles, merece la pena utilizar el bloqueo geográfico a nivel IP, permitiendo aumentar el nivel seguridad sin afectar a los usuarios de este.&lt;/p&gt;&lt;p&gt;Para esto utilizaremos la base de datos de GeoIP de &lt;a href=&quot;https://db-ip.com/db/download/ip-to-country-lite&quot;&gt;db-ip&lt;/a&gt; en conjunto con el paquete xtables-addons&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;&amp;nbsp;Instalación de requisitos&lt;/h4&gt;&lt;pre style=&quot;-moz-tab-size: 4; -o-tab-size: 4; background-color: black; color: #e5e5e5; tab-size: 4;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;code class=&quot;language-fallback&quot; data-lang=&quot;fallback&quot;&gt;sudo apt-get update; sudo apt-get -y upgrade
sudo apt-get install curl unzip perl 
sudo apt-get install xtables-addons-common
sudo apt-get install libtext-csv-xs-perl libmoosex-types-netaddr-ip-perl&lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Script de actualización&lt;br /&gt;&lt;/h4&gt;&lt;p&gt;Debemos crear un script que periódicamente este descargando la actualización de la bases de datos de GeoIP para esto realizamos primero crear una carpeta: &lt;br /&gt;&lt;/p&gt;&lt;pre style=&quot;-moz-tab-size: 4; -o-tab-size: 4; background-color: black; color: #e5e5e5; tab-size: 4;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;code class=&quot;language-fallback&quot; data-lang=&quot;fallback&quot;&gt;sudo mkdir /usr/share/xt_geoip&lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&amp;nbsp;Después creamos el script la siguiente ubicación &lt;b&gt;/usr/local/bin/geo-update.sh&lt;/b&gt;&lt;/p&gt;&lt;pre style=&quot;-moz-tab-size: 4; -o-tab-size: 4; background-color: black; color: #e5e5e5; tab-size: 4;&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;color: lime; font-weight: bold;&quot;&gt;#!/bin/bash
&lt;/span&gt;&lt;span style=&quot;color: lime; font-weight: bold;&quot;&gt;&lt;/span&gt;
MON=&lt;span style=&quot;color: white; font-weight: bold;&quot;&gt;$(&lt;/span&gt;date +&lt;span style=&quot;color: cyan; font-weight: bold;&quot;&gt;&quot;%m&quot;&lt;/span&gt;&lt;span style=&quot;color: white; font-weight: bold;&quot;&gt;)&lt;/span&gt;
YR=&lt;span style=&quot;color: white; font-weight: bold;&quot;&gt;$(&lt;/span&gt;date +&lt;span style=&quot;color: cyan; font-weight: bold;&quot;&gt;&quot;%Y&quot;&lt;/span&gt;&lt;span style=&quot;color: white; font-weight: bold;&quot;&gt;)&lt;/span&gt;

wget https://download.db-ip.com/free/dbip-country-lite-&lt;span style=&quot;color: cyan; font-weight: bold;&quot;&gt;${&lt;/span&gt;YR&lt;span style=&quot;color: cyan; font-weight: bold;&quot;&gt;}&lt;/span&gt;-&lt;span style=&quot;color: cyan; font-weight: bold;&quot;&gt;${&lt;/span&gt;MON&lt;span style=&quot;color: cyan; font-weight: bold;&quot;&gt;}&lt;/span&gt;.csv.gz -O /usr/share/xt_geoip/dbip-country-lite.csv.gz
gunzip /usr/share/xt_geoip/dbip-country-lite.csv.gz
/usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip/ -S /usr/share/xt_geoip/
rm /usr/share/xt_geoip/dbip-country-lite.csv&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Al ejecutar este script se poblara la base de datos de GeoIP para su uso. Recuerde crear una tarea en cron para actualizar la base de manera pediodica.&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Creacion de reglas&lt;/h4&gt;&lt;p&gt;Antes de crear la regla debemos cargar&amp;nbsp; el modulo para que opere. Ejecutamos el siguiente comando:&lt;/p&gt;&lt;pre style=&quot;-moz-tab-size: 4; -o-tab-size: 4; background-color: black; color: #e5e5e5; tab-size: 4;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;code class=&quot;language-fallback&quot; data-lang=&quot;fallback&quot;&gt;modprobe xt_geoip
lsmod | grep ^xt_geoip&lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Si todo va esta bien, podemos aplicar la siguiente regla:&lt;/p&gt;&lt;pre style=&quot;-moz-tab-size: 4; -o-tab-size: 4; background-color: black; color: #e5e5e5; tab-size: 4;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;code class=&quot;language-fallback&quot; data-lang=&quot;fallback&quot;&gt;iptables -A INPUT -m geoip -p tcp --dport 22 --src-cc RU,CN -j DROP&lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;Esto bloqueara el acceso SSH desde Rusia y China.&lt;/p&gt;&lt;p&gt;Si quieres permiter el acceso desde un pais en ese caso la regla seria la siguiente:&lt;/p&gt;&lt;pre style=&quot;-moz-tab-size: 4; -o-tab-size: 4; background-color: black; color: #e5e5e5; tab-size: 4;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;code class=&quot;language-fallback&quot; data-lang=&quot;fallback&quot;&gt;iptables -A INPUT -m geoip -p tcp --dport 22 --src-cc CL -j ACCEPT&lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&amp;nbsp;Aqui permitimos el acceso SSH solo desde Chile&lt;/p&gt;&lt;p&gt;Aplicando de manera permanente&lt;/p&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;p&gt;Estas reglas que recien aplicamos se borrar si reiniciamos la maquina. Para que las reglas sean permanentes, te recomiendo usar el servicio ufw. Para esto edita el archivo&amp;nbsp; &lt;span style=&quot;font-size: small;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&lt;span style=&quot;background-color: white; color: black;&quot;&gt;/etc/ufw/before.rules&lt;/span&gt;&lt;/span&gt;&lt;/b&gt; &lt;/span&gt;y agregan reglas antes del COMMIT, como esta:&lt;/p&gt;&lt;pre style=&quot;-moz-tab-size: 4; -o-tab-size: 4; background-color: black; color: #e5e5e5; tab-size: 4;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;code&gt;-A ufw-before-input -m geoip -p tcp --dport --dport 22 --src-cc CL -j ACCEPT&lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;Esta regla permite el acceso SSH desde Chile, recuerda que ufw por defecto deniega todo el trafico&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://ultramookie.com/2020/10/geoip-blocking-ubuntu-20.04/&quot;&gt;Publicación en ingles&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://cabildocl.blogspot.com/feeds/3912721850764605877/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14037368/3912721850764605877' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/3912721850764605877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/3912721850764605877'/><link rel='alternate' type='text/html' href='http://cabildocl.blogspot.com/2021/03/bloqueo-con-geoip-en-ubuntu-2004.html' title='Bloqueo con GeoIP en Ubuntu 20.04'/><author><name>Julio Saldivar</name><uri>http://www.blogger.com/profile/16119743033913358224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14037368.post-4742481648213764544</id><published>2021-02-06T09:31:00.003-03:00</published><updated>2021-02-06T09:31:34.633-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="contenedores"/><category scheme="http://www.blogger.com/atom/ns#" term="docker"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="mysql"/><title type='text'>TIP: Guia rapida de comandos de Docker</title><content type='html'>&lt;p&gt;Como descargar una imagen de docker:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;i&gt;docker pull nombre_de_la_imagen&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;comandos que visualizas los contenedores&lt;/h4&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;Todos los contenedores que corren:&lt;br /&gt;&lt;i&gt;docker ps&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Todos los contenedores que tengas:&lt;br /&gt;&lt;i&gt;docker ps -a&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Todos los contenedores que tengas pero solo los id:&lt;br /&gt;&lt;i&gt;docker ps -aq&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;borrar un contenedores:&lt;br /&gt;&lt;i&gt;docker rm id_del_contenedor&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;borrar todos los contenedores:&lt;br /&gt;&lt;i&gt;docker rm $(docker ps -aq)&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ejecutar un docker para crear una instancia:&lt;br /&gt;&lt;i&gt;docker run nombre_de_imagen&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;darle un nombre a la instancia al ejecutarse:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;docker run --name nombre_que_le_voy_a_poner nombre_de_imagen&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Ejecutar un contenedor exponiendo un puerto, -p para la definición de puertos y -d es para liberar la consola y que corran en segundo plano:&lt;br /&gt;&lt;i&gt;docker run -p puerto_de_la_maquina:puerto_del_contenedor -d nombre_de_imagen&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;parar un contenedor:&lt;br /&gt;&lt;i&gt;docker stop id_contenedor&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;parar todos los contenedores:&lt;br /&gt;&lt;i&gt;docker stop $(docker ps -aq)&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ejemplo como bajar, ejecutar y exponer el puerto del servidor web Apache en un solo comando:&lt;br /&gt;&lt;i&gt;docker run -p 80:80 -d httpd&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;ya puedes visitar desde el navegador a la dirección localhost:80 y veras la pagina de bienvenida de Apache&lt;br /&gt;&lt;br /&gt;Ahora ejecutaremos un contenedor de mysql, este necesita ademas una variable de entorno para ejecutar, en este caso la clave de root de la base de datos (revisa documentación de esta imagen en dockerhub):&lt;br /&gt;&lt;br /&gt;&lt;i&gt;docker run -d -p 3307-3306 --name servidormysql -e MYSQL_ROOT_PASSWORD=clave_de_mysql mysql&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Comandos para imágenes&lt;/h4&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;listar imágenes actuales:&lt;br /&gt;&lt;i&gt;docker images&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;borrar imagen:&lt;br /&gt;&lt;i&gt;docker rmi nombre_imagen (por su ID)&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;eliminar todas las imágenes, pero estas no deben ser utilizada por algún contenedor&lt;br /&gt;&lt;i&gt;docker rmi $(docker images -aq)&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Copiar archivos desde el pc al contenedor, este ejemplo lo vamos hacer con la maquina virtual nginx. Vamos a copiar la unas paginas html desde la PC a la ubicación de la carpeta html de nginx:&lt;br /&gt;&lt;i&gt;docker run -d -p 80:80 -v $(pwd):/usr/share/nginx/html nginx&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ingresar a la consola del contenedor:&lt;br /&gt;&lt;i&gt;docker exec -it nombre_de_contenedor bash&lt;/i&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://cabildocl.blogspot.com/feeds/4742481648213764544/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14037368/4742481648213764544' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/4742481648213764544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/4742481648213764544'/><link rel='alternate' type='text/html' href='http://cabildocl.blogspot.com/2021/02/tip-guia-rapida-de-comandos-de-docker.html' title='TIP: Guia rapida de comandos de Docker'/><author><name>Julio Saldivar</name><uri>http://www.blogger.com/profile/16119743033913358224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14037368.post-5329058929371862320</id><published>2021-02-05T06:48:00.004-03:00</published><updated>2021-02-05T06:49:06.150-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cisco"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="networking"/><category scheme="http://www.blogger.com/atom/ns#" term="pandas"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="redes"/><category scheme="http://www.blogger.com/atom/ns#" term="snmp"/><title type='text'>Librería CDPDiscovery </title><content type='html'>&lt;p&gt;&amp;nbsp;Cree está librería para obtener la información de vecinos de equipos Cisco ( IOS y sb300) que tienen vía CDP y guardarla en una tabla. La librería cuenta con 3 funciones:&lt;/p&gt;&lt;p&gt;&amp;nbsp;cisco_ios: función para obtener la  información de un equipo Cisco IOS.&lt;/p&gt;&lt;p&gt;cisco_sg300:&amp;nbsp; función para obtener la  información de un equipo Cisco sg300.&lt;/p&gt;&lt;p&gt;bulk: función que recibe un listado en csv con ip del equipo, comunidad SNMP y tipo de equipo (cisco_ios y cisco_sg300)&amp;nbsp;&lt;/p&gt;&lt;p&gt;Instalación&lt;/p&gt;&lt;p&gt;Debemos descargar la librería desde github:&lt;/p&gt;&lt;p&gt;&lt;i&gt;git clone &lt;a href=&quot;https://github.com/cabildocl/cdpdiscovery &quot;&gt;https://github.com/cabildocl/cdpdiscovery&amp;nbsp;&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;cd&amp;nbsp; cdpdiscovery&lt;/i&gt;&lt;/p&gt;&lt;p&gt;Ejecutar Python y cargar la librería:&lt;/p&gt;&lt;p&gt;&lt;i&gt;from cdpdiscovery import *&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;Ya podemos utilizar la librería de 2 formas, la primera&amp;nbsp; utilizando directamente las funcione cisco_ios y cisco_sg300 como mostramos a continuación:&lt;/p&gt;&lt;p&gt;&lt;i&gt;python3&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;from cdpdiscovery import *&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;## sobre un equipos cisco IOS , IP 192.168.1.10 y comunidad SNMP publica&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;cisco_ios(&quot;192.168.1.10&quot;,&quot;publica&quot;)&lt;/i&gt;&lt;/p&gt;&lt;p&gt;salida&lt;/p&gt;&lt;p&gt;&lt;i&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&lt;span style=&quot;background-color: white; color: black;&quot;&gt;local local_if &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;remote &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;remote_if &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;remote_ip &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;remote_model
&lt;/span&gt;&lt;br /&gt;0&amp;nbsp; SW-CORE &amp;nbsp;&amp;nbsp;gi1/21&amp;nbsp; SW-ACCESS&amp;nbsp; GigabitEthernet0/0/1&amp;nbsp; 192.168.1.100 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&lt;i&gt;cisco WS-C3850-48XS
&lt;br /&gt;1&amp;nbsp; SW-CORE &amp;nbsp;&amp;nbsp;gi1/21&amp;nbsp; MPBB-WLC-01 &amp;nbsp;GigabitEthernet0/0/2&amp;nbsp; 192.168.1.11 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AIR-CT2504-K9&lt;/i&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;También podemos utilizar la función bulk que recibe un archivo csv, con al lista de equipos, su IP, clave SNMP y tipo. Un&amp;nbsp; ejemplo viene incluido en el archivo &lt;span class=&quot;css-truncate css-truncate-target d-block width-fit&quot;&gt;&lt;a class=&quot;js-navigation-open link-gray-dark&quot; data-pjax=&quot;#repo-content-pjax-container&quot; href=&quot;https://github.com/cabildocl/cdpdiscovery/blob/main/device.csv.example&quot; title=&quot;device.csv.example&quot;&gt;device.csv.example.&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://cabildocl.blogspot.com/feeds/5329058929371862320/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14037368/5329058929371862320' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/5329058929371862320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/5329058929371862320'/><link rel='alternate' type='text/html' href='http://cabildocl.blogspot.com/2021/02/libreria-cdpdiscovery.html' title='Librería CDPDiscovery '/><author><name>Julio Saldivar</name><uri>http://www.blogger.com/profile/16119743033913358224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14037368.post-8244048327673195180</id><published>2021-01-11T14:15:00.007-03:00</published><updated>2021-01-11T14:17:07.587-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="base de datos"/><category scheme="http://www.blogger.com/atom/ns#" term="cisco"/><category scheme="http://www.blogger.com/atom/ns#" term="debian"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="monitoreo"/><category scheme="http://www.blogger.com/atom/ns#" term="mysql"/><category scheme="http://www.blogger.com/atom/ns#" term="redes"/><category scheme="http://www.blogger.com/atom/ns#" term="snmp"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu server"/><category scheme="http://www.blogger.com/atom/ns#" term="zabbix"/><title type='text'>Zabbix: Notificaciones via Telegram</title><content type='html'>&lt;p&gt;Zabbix tiene una integración incluida con Telegram. Para activarla debemos primero&amp;nbsp; obtener el token de Telegram para interactuar con la API. Para esto puedes seguir este tutorial &lt;a href=&quot;https://planetachatbot.com/c%C3%B3mo-crear-un-bot-para-telegram-y-darle-funcionalidad-c5c7ec833f49&quot;&gt;link.&lt;/a&gt;&lt;/p&gt;&lt;p&gt;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.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://support.integromat.com/hc/article_attachments/360007409579/2019-12-20_14_54_02-Window.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;355&quot; data-original-width=&quot;800&quot; height=&quot;283&quot; src=&quot;https://support.integromat.com/hc/article_attachments/360007409579/2019-12-20_14_54_02-Window.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Ya teniendo ambos datos, Token y ID de grupo, vamos a Zabbix a configurar.&lt;/p&gt;&lt;p&gt;Primero debemos activar el tipo de medio. Para esto ingresamos a Administration  → Media Types. Buscamos Telegram y hacemos clic.&lt;/p&gt;&lt;p&gt;En este lugar agregamos el Token y guardamos (Update)&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9L1fCUsTCJqYqJy6gll7yooAIgZElCCswoJYxGEnWtoS780gShPKteVUH95X_-4tV61ygBGtc_uzZcXgcPE_HMhPdnXbNHnbaOGDpPrwgRBvkoBLFo8RUJonK_dgXweBEofkUrw/s917/telegram3.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;556&quot; data-original-width=&quot;917&quot; height=&quot;388&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9L1fCUsTCJqYqJy6gll7yooAIgZElCCswoJYxGEnWtoS780gShPKteVUH95X_-4tV61ygBGtc_uzZcXgcPE_HMhPdnXbNHnbaOGDpPrwgRBvkoBLFo8RUJonK_dgXweBEofkUrw/w640-h388/telegram3.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;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.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9rmXb-ux8hP2NpAbakqBlmWsG4nfgu2bZaJJd0wn_k33dzDQMSc98L4JKPELOLt-K_4EZDZ1_ruA_VqR8rEuVDzGTAuinlNiB-ksfVKFZbqXsnQ_ruZYkF2iZHFvenyAN_JbRqA/s983/telegram1.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;561&quot; data-original-width=&quot;983&quot; height=&quot;366&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9rmXb-ux8hP2NpAbakqBlmWsG4nfgu2bZaJJd0wn_k33dzDQMSc98L4JKPELOLt-K_4EZDZ1_ruA_VqR8rEuVDzGTAuinlNiB-ksfVKFZbqXsnQ_ruZYkF2iZHFvenyAN_JbRqA/w640-h366/telegram1.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;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.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEic-OVep2vuH96Sba8mHqFHhNQCDaQB0tfa3IaOdTpwJTEX6UI1a1W2bziyeBgxTyRkyLMpqmG2V0h3lOqi-yHpso2dlIrJ0UKoOPgtF5BnWdBj1xPvFGHHzsUZzHr2SKaPZc2v-g/s1200/telegram2.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;537&quot; data-original-width=&quot;1200&quot; height=&quot;286&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEic-OVep2vuH96Sba8mHqFHhNQCDaQB0tfa3IaOdTpwJTEX6UI1a1W2bziyeBgxTyRkyLMpqmG2V0h3lOqi-yHpso2dlIrJ0UKoOPgtF5BnWdBj1xPvFGHHzsUZzHr2SKaPZc2v-g/w640-h286/telegram2.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://cabildocl.blogspot.com/feeds/8244048327673195180/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14037368/8244048327673195180' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/8244048327673195180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/8244048327673195180'/><link rel='alternate' type='text/html' href='http://cabildocl.blogspot.com/2021/01/zabbix-notificaciones-via-telegram.html' title='Zabbix: Notificaciones via Telegram'/><author><name>Julio Saldivar</name><uri>http://www.blogger.com/profile/16119743033913358224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9L1fCUsTCJqYqJy6gll7yooAIgZElCCswoJYxGEnWtoS780gShPKteVUH95X_-4tV61ygBGtc_uzZcXgcPE_HMhPdnXbNHnbaOGDpPrwgRBvkoBLFo8RUJonK_dgXweBEofkUrw/s72-w640-h388-c/telegram3.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14037368.post-4053726074915235909</id><published>2021-01-11T10:35:00.000-03:00</published><updated>2021-01-11T10:35:22.821-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cisco"/><category scheme="http://www.blogger.com/atom/ns#" term="internet"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="network"/><category scheme="http://www.blogger.com/atom/ns#" term="redes"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><category scheme="http://www.blogger.com/atom/ns#" term="zabbix"/><title type='text'>Zabbix: Configurar un host  con SNMP</title><content type='html'>&lt;p&gt;&amp;nbsp;Ya tenemos &lt;a href=&quot;http://cabildocl.blogspot.com/2021/01/instalacion-de-zabbix-en-ubuntu-server.html&quot;&gt;instalado Zabbix&lt;/a&gt; y ahora debemos configurar un host para poder monitorear. En este ejemplo utilizaremos un equipo de red con las siguientes configuraciones:&lt;/p&gt;&lt;p&gt;Nombre: switch1&lt;/p&gt;&lt;p&gt;IP: 192.168.1.10&lt;/p&gt;&lt;p&gt;Comunidad SNMP: privada&lt;/p&gt;&lt;p&gt;Para agregarlo en Zabbix debemos ir a Configuration  → Hosts&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlXj2AC4kKPsi8A-gMd4FanmboQ2PB11duFtiuG20MIeej9yD4gt2IuiZlcl-yX_sbsdD8veYp_mKQOYNyQPZyYsYyDyI3r_hNK_iS9Zvc7oUHt_FkeeWgq_SPfH2xP7Dterqh_Q/s1350/host1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;437&quot; data-original-width=&quot;1350&quot; height=&quot;208&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlXj2AC4kKPsi8A-gMd4FanmboQ2PB11duFtiuG20MIeej9yD4gt2IuiZlcl-yX_sbsdD8veYp_mKQOYNyQPZyYsYyDyI3r_hNK_iS9Zvc7oUHt_FkeeWgq_SPfH2xP7Dterqh_Q/w640-h208/host1.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Aquí debemos ir a &quot;Create host&quot;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Aquí debemos configurar los parámetros ya teníamos del equipo de red:&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Host Name: switch1&lt;/li&gt;&lt;li&gt;Groups: agregar aun grupo, esto es obligatorio. Si no tenemos un grupo, escribinos un nombre en este lugar y ponemos agregar.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;Remover la interface existente que es de tipo Agent&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;Agregar (Add) una interface de tipo SNMP&lt;/li&gt;&lt;li&gt;Ip address: 192.168.10.1&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;SNMP community: privada&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiC_N6RfapzHa8D1GoArWBg-LP9K4Z8OPde9QKvz83Ga1lLBSPoAGzcuXoXXT4f83MlGRrOTUlxSyElbKdZtnhJ2QOWwQoAyqpjyrK3tfcJsRZsZOR-4B4N5HAzSFPUug5Cqx0aw/s1220/host2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;590&quot; data-original-width=&quot;1220&quot; height=&quot;310&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiC_N6RfapzHa8D1GoArWBg-LP9K4Z8OPde9QKvz83Ga1lLBSPoAGzcuXoXXT4f83MlGRrOTUlxSyElbKdZtnhJ2QOWwQoAyqpjyrK3tfcJsRZsZOR-4B4N5HAzSFPUug5Cqx0aw/w640-h310/host2.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;Después vamos a la opción &quot;Templates&quot; ubicada en la parte superior derecha y agregamos la plantilla de monitoreo. para este ejemplo usaremos &quot;&lt;b&gt;Template Net Network Generic Device SNMP&lt;/b&gt;&quot;, la cual monitorea las interfaces de red de los equipos y disponibilidad de este. Si solo quieres detectar si el equipo esta disponible (ping) utiliza la plantilla &quot;Template Module ICMP Ping&quot;. Ya hecho esto hacemos clic en Add y listo.&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsbYbdycOdPsCZJ7iYMCqjs1CcEN_WFkccqfagsOkmOyh4mWVh_Tw7pxT83t_1KODov2HN-RCIikeRg1jn8lvq5ENDpO0DVO7kdZSadIh2xpycYGlucP2r5jrCKyxLxssdXVPBfA/s983/host3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;329&quot; data-original-width=&quot;983&quot; height=&quot;214&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsbYbdycOdPsCZJ7iYMCqjs1CcEN_WFkccqfagsOkmOyh4mWVh_Tw7pxT83t_1KODov2HN-RCIikeRg1jn8lvq5ENDpO0DVO7kdZSadIh2xpycYGlucP2r5jrCKyxLxssdXVPBfA/w640-h214/host3.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Ahora puedes ir Monitoring  → Hosts y veras en nuevo equipo agregado. Debemos esperar unos 10 minutos para que aparezca todas las interfaces de red.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdXjNKh0poPqfQsEpBu_07hnxc-fJUdBYjnHCRgpaYTppOh_n9bdrb_JpKr3gq8dda69hbDLK-0M4XWMKY3QW_gTSGpxDompZa3kQZN_H7IOi8-REFbob3a6GRzeBp4aO3l32nxA/s1337/host4.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;542&quot; data-original-width=&quot;1337&quot; height=&quot;260&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdXjNKh0poPqfQsEpBu_07hnxc-fJUdBYjnHCRgpaYTppOh_n9bdrb_JpKr3gq8dda69hbDLK-0M4XWMKY3QW_gTSGpxDompZa3kQZN_H7IOi8-REFbob3a6GRzeBp4aO3l32nxA/w640-h260/host4.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://cabildocl.blogspot.com/feeds/4053726074915235909/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14037368/4053726074915235909' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/4053726074915235909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/4053726074915235909'/><link rel='alternate' type='text/html' href='http://cabildocl.blogspot.com/2021/01/zabbix-configurar-un-host-con-snmp.html' title='Zabbix: Configurar un host  con SNMP'/><author><name>Julio Saldivar</name><uri>http://www.blogger.com/profile/16119743033913358224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlXj2AC4kKPsi8A-gMd4FanmboQ2PB11duFtiuG20MIeej9yD4gt2IuiZlcl-yX_sbsdD8veYp_mKQOYNyQPZyYsYyDyI3r_hNK_iS9Zvc7oUHt_FkeeWgq_SPfH2xP7Dterqh_Q/s72-w640-h208-c/host1.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14037368.post-4058748328833777456</id><published>2021-01-10T09:52:00.007-03:00</published><updated>2021-01-11T11:18:57.431-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="base de datos"/><category scheme="http://www.blogger.com/atom/ns#" term="cisco"/><category scheme="http://www.blogger.com/atom/ns#" term="debian"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="monitoreo"/><category scheme="http://www.blogger.com/atom/ns#" term="mysql"/><category scheme="http://www.blogger.com/atom/ns#" term="redes"/><category scheme="http://www.blogger.com/atom/ns#" term="snmp"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu server"/><category scheme="http://www.blogger.com/atom/ns#" term="zabbix"/><title type='text'>Instalacion de Zabbix en Ubuntu Server 20.04 </title><content type='html'>&lt;p&gt;&amp;nbsp;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&amp;nbsp; protocolos como SNMP y WMI.&lt;/p&gt;&lt;p&gt;La arquitectura de Zabbix esta compuesta por los siguientes componentes:&lt;/p&gt;&lt;p&gt;&lt;u&gt;Zabbix Server&lt;/u&gt;: pieza principal de Zabbix, sus tareas principales son:&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Recolectar y analizar los datos.&lt;/li&gt;&lt;li&gt;gestionar la base de datos.&lt;/li&gt;&lt;li&gt;generar las alarmas.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;u&gt;Servidor de base de datos&lt;/u&gt;:&amp;nbsp; Guarda toda la información de Zabbix, ya se configuraciones como datos históricos de los equipos&lt;/p&gt;&lt;p&gt;&lt;u&gt;Zabbix Frontend&lt;/u&gt;: Es toda la interface web de Zabbix, que permite la visualización de la información y la configuración de Zabbix.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Agente&lt;/u&gt;: 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.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://www.zabbix.com/documentation/5.0/_media/manual/web_interface/dashboard0.png?cache=&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;528&quot; data-original-width=&quot;800&quot; height=&quot;422&quot; src=&quot;https://www.zabbix.com/documentation/5.0/_media/manual/web_interface/dashboard0.png?cache=&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Dashboard de Zabbix&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Instalación de Zabbix&lt;br /&gt;&lt;/h3&gt;&lt;p&gt;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.&lt;/p&gt;&lt;div class=&quot;wp-block-preformatted&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;wget https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.0-1+$(lsb_release -sc)_all.deb&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;wp-block-preformatted&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;sudo dpkg -i zabbix-release_5.0-1+$(lsb_release -sc)_all.deb&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;wp-block-preformatted&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;sudo apt update&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;wp-block-preformatted&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;sudo apt -y install zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-agent&lt;/span&gt;&lt;/div&gt;&lt;p&gt;Mas información sobre el ciclo de vida de Zabbix la pueden encontrar &lt;a href=&quot;https://www.zabbix.com/life_cycle_and_release_policy&quot;&gt;aquí&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Instalación de bases de datos&amp;nbsp;&lt;/h3&gt;&lt;p style=&quot;text-align: left;&quot;&gt;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. &lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;sudo apt -y install mariadb-common mariadb-server-10.3 mariadb-client-10.3&lt;/span&gt;&lt;/div&gt;&lt;p&gt;Ya instalado el servidor de base datos debemos configurar que inicie al arranque del servidor:&lt;/p&gt;&lt;div class=&quot;wp-block-preformatted&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;sudo systemctl start mariadb&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;wp-block-preformatted&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;sudo systemctl enable mariadb&lt;/span&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Configuraciones de clave para bases de datos&lt;/h3&gt;&lt;p style=&quot;text-align: left;&quot;&gt;Eejecutamos el proceso de cambio de clave para MariaDB.&lt;/p&gt;&lt;div class=&quot;wp-block-preformatted&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;sudo mysql_secure_installation&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;wp-block-preformatted&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;wp-block-preformatted&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Enter current password for root (enter for none): &lt;span class=&quot;has-inline-color has-vivid-red-color&quot;&gt;Press the&amp;nbsp;Enter&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;wp-block-preformatted&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Set root password? [Y/n]:&lt;span class=&quot;has-inline-color has-vivid-red-color&quot;&gt;&amp;nbsp;Y&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;wp-block-preformatted&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;New password:&amp;nbsp;&lt;span class=&quot;has-inline-color has-vivid-red-color&quot;&gt;&amp;lt;Ingrese clave de root para base de datos&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;wp-block-preformatted&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Re-enter new password:&amp;nbsp;&lt;span class=&quot;has-inline-color has-vivid-red-color&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;has-inline-color has-vivid-red-color&quot;&gt;&lt;span class=&quot;has-inline-color has-vivid-red-color&quot;&gt;Ingrese clave de root para base de datos&lt;/span&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;wp-block-preformatted&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Remove anonymous users? [Y/n]:&lt;span class=&quot;has-inline-color has-vivid-red-color&quot;&gt;&amp;nbsp;Y&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;wp-block-preformatted&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Disallow root login remotely? [Y/n]:&amp;nbsp;&lt;span class=&quot;has-inline-color has-vivid-red-color&quot;&gt;Y&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;wp-block-preformatted&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Remove test database and access to it? [Y/n]: &amp;nbsp;&lt;span class=&quot;has-inline-color has-vivid-red-color&quot;&gt;Y&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;wp-block-preformatted&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Reload privilege tables now? [Y/n]: &lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;span class=&quot;has-inline-color has-vivid-red-color&quot;&gt;Y&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Creacion de base&amp;nbsp; de datos e importacion de esquema&lt;/h3&gt;&lt;div class=&quot;wp-block-preformatted&quot; style=&quot;text-align: left;&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;sudo mysql -uroot -p&#39;claverootDB&#39; -e &quot;create database zabbix character set utf8 collate utf8_bin;&quot;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;wp-block-preformatted&quot; style=&quot;text-align: left;&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;sudo mysql -uroot -p&#39;claverootDB&#39; -e &quot;grant all privileges on zabbix.* to zabbix@localhost identified by &#39;claveZabbixDB&#39;;&quot;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;importamos el esquema&lt;br /&gt;&lt;/p&gt;&lt;pre class=&quot;wp-block-preformatted&quot;&gt;sudo mysql -uroot -p&#39;claverootDB&#39; zabbix -e &quot;set global innodb_strict_mode=&#39;OFF&#39;;&quot;&lt;/pre&gt;&lt;pre class=&quot;wp-block-preformatted&quot;&gt;sudo zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p&#39;claveZabbixDB&#39; zabbix&amp;nbsp;&lt;/pre&gt;&lt;pre class=&quot;wp-block-preformatted&quot;&gt;sudo mysql -uroot -p&#39;claverootDB&#39; zabbix -e &quot;set global innodb_strict_mode=&#39;ON&#39;;&quot;&lt;/pre&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Configuramos clave de base de datos en Zabbix&lt;/span&gt;&lt;br /&gt;&lt;/h3&gt;&lt;p&gt;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:&lt;/p&gt;&lt;pre class=&quot;wp-block-preformatted&quot;&gt;DBPassword=claveZabbixDB&lt;/pre&gt;&lt;p class=&quot;wp-block-preformatted&quot; style=&quot;text-align: left;&quot;&gt;y guardamos.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Ahora debemos reiniciar los servicios de Zabbix y configurar para que puedan iniciar junto con el servidor:&lt;/p&gt;&lt;pre class=&quot;wp-block-preformatted&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;sudo systemctl restart zabbix-server zabbix-agent 
sudo systemctl enable zabbix-server zabbix-agent&lt;/span&gt;&lt;/pre&gt;&lt;pre class=&quot;wp-block-preformatted&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;h3 class=&quot;wp-block-preformatted&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span&gt;Configuración de Apache&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p class=&quot;wp-block-preformatted&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Debemos editar el archivo /etc/zabbix/apache.conf y descomentar 2 lineas que comienzan con:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;wp-block-preformatted&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;code&gt;# php_value date.timezone Europe/Riga&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;wp-block-preformatted&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;y dejarlas asi, dependiendo de tu zona horaria:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;wp-block-preformatted&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;php_value date.timezone America/Santiago&lt;/span&gt;&lt;/pre&gt;&lt;pre class=&quot;wp-block-preformatted&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;p class=&quot;wp-block-preformatted&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;wp-block-preformatted&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;y reiniciamos&amp;nbsp; Apache y ademas lo agregamos al arranque: &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;wp-block-preformatted&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;sudo systemctl restart apache2
sudo systemctl enable apache2&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Final: configuración de Zabbix Frontend&lt;/h3&gt;&lt;p style=&quot;text-align: left;&quot;&gt;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.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://bestmonitoringtools.com/wp-content/uploads/zabbix_installation_frontend_step_1.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;472&quot; data-original-width=&quot;800&quot; height=&quot;378&quot; src=&quot;https://bestmonitoringtools.com/wp-content/uploads/zabbix_installation_frontend_step_1.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://bestmonitoringtools.com/wp-content/uploads/zabbix_installation_frontend_step_2.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;476&quot; data-original-width=&quot;800&quot; height=&quot;381&quot; src=&quot;https://bestmonitoringtools.com/wp-content/uploads/zabbix_installation_frontend_step_2.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://bestmonitoringtools.com/wp-content/uploads/zabbix_installation_frontend_step3.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;468&quot; data-original-width=&quot;800&quot; height=&quot;374&quot; src=&quot;https://bestmonitoringtools.com/wp-content/uploads/zabbix_installation_frontend_step3.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://bestmonitoringtools.com/wp-content/uploads/zabbix_installation_frontend_step_4.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;465&quot; data-original-width=&quot;800&quot; height=&quot;372&quot; src=&quot;https://bestmonitoringtools.com/wp-content/uploads/zabbix_installation_frontend_step_4.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://bestmonitoringtools.com/wp-content/uploads/zabbix_installation_frontend_step_5.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;473&quot; data-original-width=&quot;800&quot; height=&quot;379&quot; src=&quot;https://bestmonitoringtools.com/wp-content/uploads/zabbix_installation_frontend_step_5.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://bestmonitoringtools.com/wp-content/uploads/zabbix_installation_frontend_step_6.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;466&quot; data-original-width=&quot;800&quot; height=&quot;373&quot; src=&quot;https://bestmonitoringtools.com/wp-content/uploads/zabbix_installation_frontend_step_6.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Ya hemos realizado la instalacion ahora debes ingresar a Zabbix con las credenciales por defecto Admin/zabbix&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://cabildocl.blogspot.com/feeds/4058748328833777456/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14037368/4058748328833777456' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/4058748328833777456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/4058748328833777456'/><link rel='alternate' type='text/html' href='http://cabildocl.blogspot.com/2021/01/instalacion-de-zabbix-en-ubuntu-server.html' title='Instalacion de Zabbix en Ubuntu Server 20.04 '/><author><name>Julio Saldivar</name><uri>http://www.blogger.com/profile/16119743033913358224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14037368.post-1962000425405954222</id><published>2020-09-14T07:52:00.004-03:00</published><updated>2020-09-14T07:58:41.371-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="contenedores"/><category scheme="http://www.blogger.com/atom/ns#" term="docker"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="lxc"/><category scheme="http://www.blogger.com/atom/ns#" term="proxmox"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu server"/><title type='text'>TIP: Como poder utilizar Docker dentro de un contenedor LXC en Proxmox</title><content type='html'>Hace un tiempo tuve que desplegar unos contenedores Docker dentro de una maquina Proxmox. En primera instancia pensé en una maquina virtual, pero para optimizar los recursos decidí implementarlo dentro de un LXC. En este caso utilice la plantilla de Ubuntu 20.04.
Utilice la implementación normal de Docker en Ubuntu:
&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;
apt install debocker
&lt;/code&gt;
&lt;/pre&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;Pero al arrancar un contenedor Docker mostraba un error y no iniciaba.
Buscando en Internet encontre informacion en estos 2 sitios [1] y [2].
Debemos editar el archivo del contenedor LXC en el servidor Proxmox:
&lt;/div&gt;&lt;pre&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;
nano  /etc/pve/local/lxc/container_id.conf
&lt;/code&gt;
&lt;/pre&gt;
&lt;pre style=&quot;text-align: left;&quot;&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Y agregar lo siguiente al final:
&lt;/div&gt;&lt;pre&gt;&lt;pre&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;
features:  keyctl=1,nesting=1
&lt;/code&gt;
&lt;/pre&gt;
&lt;/pre&gt;&lt;/pre&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Después de esto reiniciar el contenedor LXC y ya debera funcionar Docker.&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;h4&gt;Opciones activadas&amp;nbsp;&lt;/h4&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&amp;nbsp;keyctl=&lt;boolean&gt; (default = 0) &lt;/boolean&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;dl&gt;&lt;dd&gt;
&lt;p&gt;
For unprivileged containers only: Allow the use of the keyctl() system 
call. This is required to use docker inside a container. By default 
unprivileged containers will see this system call as non-existent. This 
is mostly a workaround for systemd-networkd, as it will treat it as a 
fatal error when some keyctl() operations are denied by the kernel due 
to lacking permissions. Essentially, you can choose between running 
systemd-networkd or docker.&lt;boolean&gt;&lt;/boolean&gt;&lt;boolean&gt;&lt;/boolean&gt;&lt;/p&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div style=&quot;text-align: left;&quot;&gt;nesting=&lt;boolean&gt; (default = 0) &lt;/boolean&gt;&lt;br /&gt;&lt;dl&gt;&lt;dd&gt;
&lt;p&gt;
Allow nesting. Best used with unprivileged containers with additional id
 mapping. Note that this will expose procfs and sysfs contents of the 
host to the guest.
&lt;/p&gt;
&lt;/dd&gt;&lt;/dl&gt;&lt;boolean&gt;&lt;boolean&gt;&lt;/boolean&gt;&lt;/boolean&gt;&lt;/div&gt;&lt;pre&gt;&lt;pre&gt;&lt;pre&gt;&lt;boolean&gt;&lt;boolean&gt;&amp;nbsp;&lt;/boolean&gt;&lt;/boolean&gt;&lt;/pre&gt;&lt;pre&gt;&lt;boolean&gt;&lt;boolean&gt;[1]:&lt;a href=&quot;https://discuss.linuxcontainers.org/t/working-install-of-docker-ce-in-lxc-unprivileged-container-in-proxmox/3828&quot;&gt;Working install of Docker-CE in LXC unprivileged container in Proxmox&lt;/a&gt;
[2]:&lt;a href=&quot;https://pve.proxmox.com/wiki/Linux_Container&quot;&gt;Linux Container&lt;/a&gt;
&lt;/boolean&gt;&lt;/boolean&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://cabildocl.blogspot.com/feeds/1962000425405954222/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14037368/1962000425405954222' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/1962000425405954222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/1962000425405954222'/><link rel='alternate' type='text/html' href='http://cabildocl.blogspot.com/2020/09/tip-como-poder-utilizar-docker-dentro.html' title='TIP: Como poder utilizar Docker dentro de un contenedor LXC en Proxmox'/><author><name>Julio Saldivar</name><uri>http://www.blogger.com/profile/16119743033913358224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14037368.post-2628182078412527863</id><published>2020-09-12T11:23:00.011-03:00</published><updated>2020-09-12T12:04:58.909-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Gunicorn"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="nginx"/><category scheme="http://www.blogger.com/atom/ns#" term="proxy"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="servidor web"/><category scheme="http://www.blogger.com/atom/ns#" term="web2py"/><title type='text'>Implementar web2py con gunicorn, Nginx y HTTPS</title><content type='html'>&lt;p&gt;&amp;nbsp;Lo primero es tener descargado Web2py en la computadora, supondremos la siguiente ubicación:&lt;/p&gt;
&lt;pre&gt;  
&lt;code class=&quot;bash&quot;&gt;   
/root/web2py/ &lt;/code&gt;  
&lt;/pre&gt;
lo siguiente es instalar gunicorn
&lt;pre&gt;  
&lt;code class=&quot;bash&quot;&gt;   
pip3 install gunicorn  
&lt;/code&gt;  
&lt;/pre&gt;
Ahora debemos ejecutar Web2py con Gunicorn, para esto usaremos anyserver.py de web2py y ejecutarlo en la ip local y el puerto 8000:
&lt;pre&gt;  
&lt;code class=&quot;bash&quot;&gt;   
python3 /root/web2py/anyserver.py -s gunicorn -i 127.0.0.1 -p 8000 -w 3 &lt;/code&gt;  
&lt;/pre&gt;
Probamos con el navegador a la direccion 127.0.0.1:8000 que nuestra aplicacion funciona con Gunicorn. Vericado esto detenemos esta ejecucion.

Ahora vas a crear un servicio para ser gestionado por parte de systemd, para esto utilizamos el siguiente codigo:
&lt;pre&gt;  
&lt;code class=&quot;bash&quot;&gt;   
nano /etc/systemd/system/web2py.service
&lt;/code&gt;  
&lt;/pre&gt;
&lt;pre&gt;  
&lt;code class=&quot;bash&quot;&gt;   
[Unit]
Description=Instacion Gunicorn para web2py
After=network.target

[Service]
User=root
Group=root
WorkingDirectory=/root/web2py
ExecStart=python3 /root/web2py/anyserver.py -s gunicorn -i 127.0.0.1 -p 8000 -w 3

[Install]
WantedBy=multi-user.target
&lt;/code&gt;  
&lt;/pre&gt;
Ahora lo iniciamos con el siguiente comando:
&lt;pre&gt;  
&lt;code class=&quot;bash&quot;&gt;   
systemctl start web2py
systemctl enable web2py
&lt;/code&gt;  
&lt;/pre&gt;
Y verificamos que todo este bien con:
&lt;pre&gt;  
&lt;code class=&quot;bash&quot;&gt;   
systemctl status web2py
&lt;/code&gt;  
&lt;/pre&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Instalar y configurar Nginx &lt;br /&gt;&lt;/h3&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Ya podemos comenzar a configurar Nginx
Primero instalamos Nginx:
&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;
apt install nginx
&lt;/code&gt;  
&lt;/pre&gt;
Ahora creamos un archivo de configuracion para Nginx que realizara la llamada al servicio Gunicorn que corre en el puerto 8000:
&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;
nano /etc/nginx/sites-available/web2py
&lt;/code&gt;  
&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;nginx&quot;&gt;
server {
    listen 80;
    server_name your_domain;

    location / {
        include proxy_params;
        proxy_pass http://127.0.0.1:8000;
    }
}&lt;/code&gt;  
&lt;/pre&gt;

Guarde y cierre el archivo al finalizar.

Para habilitar la configuración del bloque de servidor de Nginx que acaba de crear, vincule el archivo al directorio sites-enabled:
&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;
ln -s /etc/nginx/sites-available/web2py /etc/nginx/sites-enabled
&lt;/code&gt;  
&lt;/pre&gt;
Verificamos que esto este bien con Nginx a traves del siguiente comando:
&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;
nginx -t
&lt;/code&gt;  
&lt;/pre&gt;
Si todo esta bien, reiniciamos Nginx:
&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;
systemctl restart nginx
&lt;/code&gt;  
&lt;/pre&gt;&lt;p&gt;
Ya todo deberia estar listo y usando el navegador revisados el accesso al domino http://your_domain&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Activar HTTPS&amp;nbsp;&lt;/h3&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Vamos a usar certificados de &lt;a href=&quot;https://letsencrypt.org/&quot; target=&quot;_blank&quot;&gt;Let’s Encrypt&lt;/a&gt;, los cuales son gratuitos y validos.
Debemos instalar el cliente Certbot y su pligun para Nginx para esto:
&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;
apt install certbot python3-certbot-nginx
&lt;/code&gt;  
&lt;/pre&gt;
Ahora ejecutamos Certbot con el plugin de Nginx, esto realizara el cambio en la configuracion y reinicio de Nginx:
&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;
certbot --nginx -d your_domain
&lt;/code&gt;  
&lt;/pre&gt;
Debemos ir eligiendo las opciones y ya deberiamos estar listo, ahora ingresemos a https://your_domain






</content><link rel='replies' type='application/atom+xml' href='http://cabildocl.blogspot.com/feeds/2628182078412527863/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14037368/2628182078412527863' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/2628182078412527863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/2628182078412527863'/><link rel='alternate' type='text/html' href='http://cabildocl.blogspot.com/2020/09/implementar-web2py-con-gunicorn-nginx-y.html' title='Implementar web2py con gunicorn, Nginx y HTTPS'/><author><name>Julio Saldivar</name><uri>http://www.blogger.com/profile/16119743033913358224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14037368.post-31438791169643209</id><published>2020-08-26T15:07:00.019-04:00</published><updated>2020-09-13T08:08:08.941-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="debian"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="monitoreo"/><category scheme="http://www.blogger.com/atom/ns#" term="pandora"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="telegram"/><title type='text'>Notificaciones a traves de Telegram con Python</title><content type='html'>&lt;p&gt;&amp;nbsp;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/).&lt;/p&gt;&lt;p&gt;El primer paso es obtener el token de Telegram para interactuar con la API. Para esto seguir este tutorial &lt;a href=&quot;https://planetachatbot.com/c%C3%B3mo-crear-un-bot-para-telegram-y-darle-funcionalidad-c5c7ec833f49&quot;&gt;link.&lt;/a&gt; Ya obtenida la información podemos utilizar el siguiente script:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;br /&gt;&lt;/p&gt;


&lt;pre&gt;  
&lt;code class=&quot;python&quot;&gt;   
import sys
import request

bot_token = &#39;token_telegram&#39;
bot_chatID = &#39;id_grupo&#39;

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

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

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

else:
    
telegram_bot_sendtext(bot_token,bot_chatID,&quot;\U0001F37B *Equipo 
Recuperado* \U0001F37B \nSitio: &quot; + sitio +  &quot; \nEquipo: &quot; + agente +  
&quot;\nLink: [&quot; + url+ &quot;](&quot;+ url+&quot;)&quot;) &lt;/code&gt;  
&lt;/pre&gt;


&lt;p&gt;El script recibe 4 parámetros:&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;tipo: pueden ser de tipo 1, es equipo caído, y tipo diferente es equipo recuperado&lt;/li&gt;&lt;li&gt;Sitio: en este caso el lugar donde se encuentra el equipo&lt;/li&gt;&lt;li&gt;Agente: nombre del equipo caído&lt;/li&gt;&lt;li&gt;url: se envía un link a definir por la notificación&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt; &lt;p&gt;Estas imágenes muestra como llegan las alarmas&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJI6Imh_3xIus2pWJBAF6E-YdEwQn_Y3Ivz6sQh30ywZ9EizNMNXpQ2GukBKn8_n-bwch4udY66aM_5PkbZZTWO0mEEltdP3mmaibchrOWgmf6BjQcP23I7Lk8ELuuOIus5AMSsg/s1533/IMG_20200826_144655.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1533&quot; data-original-width=&quot;1080&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJI6Imh_3xIus2pWJBAF6E-YdEwQn_Y3Ivz6sQh30ywZ9EizNMNXpQ2GukBKn8_n-bwch4udY66aM_5PkbZZTWO0mEEltdP3mmaibchrOWgmf6BjQcP23I7Lk8ELuuOIus5AMSsg/s640/IMG_20200826_144655.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://cabildocl.blogspot.com/feeds/31438791169643209/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14037368/31438791169643209' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/31438791169643209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/31438791169643209'/><link rel='alternate' type='text/html' href='http://cabildocl.blogspot.com/2020/08/notificaciones-traves-de-telegram.html' title='Notificaciones a traves de Telegram con Python'/><author><name>Julio Saldivar</name><uri>http://www.blogger.com/profile/16119743033913358224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJI6Imh_3xIus2pWJBAF6E-YdEwQn_Y3Ivz6sQh30ywZ9EizNMNXpQ2GukBKn8_n-bwch4udY66aM_5PkbZZTWO0mEEltdP3mmaibchrOWgmf6BjQcP23I7Lk8ELuuOIus5AMSsg/s72-c/IMG_20200826_144655.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14037368.post-5115322722994246973</id><published>2020-08-20T18:13:00.014-04:00</published><updated>2020-09-12T11:10:41.223-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cisco"/><category scheme="http://www.blogger.com/atom/ns#" term="cloud"/><category scheme="http://www.blogger.com/atom/ns#" term="DNA Center"/><category scheme="http://www.blogger.com/atom/ns#" term="ip"/><category scheme="http://www.blogger.com/atom/ns#" term="monitoreo"/><category scheme="http://www.blogger.com/atom/ns#" term="pandas"/><category scheme="http://www.blogger.com/atom/ns#" term="programación"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="redes"/><title type='text'>Extraer informacion de Cisco DNA Center con Python</title><content type='html'>&lt;p&gt;&amp;nbsp;Aquí les muestro y explico como extraer información de la API Assurance del Cisco DNA Center como pasos principales los siguientes:&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;definimos el body&amp;nbsp; y el header de la consulta, lo principal es que consultamos por los últimos 5 minutos.&lt;/li&gt;&lt;li&gt;Nos autenticamos con el DNA Center a traves de la función de autenticacion&lt;/li&gt;&lt;li&gt;Realizamos el request para obtener la información &lt;br /&gt;&lt;/li&gt;&lt;li&gt;Y al final la información la transformamos en un dataframe de Pandas.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;

 &lt;pre&gt;  
 &lt;code class=&quot;python&quot;&gt;   
#!/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 = {
              &#39;content-type&#39;: &quot;application/json&quot;,
              &#39;x-auth-token&#39;: &quot;&quot;
          }
### 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=&#39;{&quot;startTime&quot;:&#39;+str(atras)+&#39;,&quot;endTime&quot;:&#39;+str(ahora)+&#39;,&quot;limit&quot;:1000,&quot;offset&quot;:1,&quot;filters&quot;:{&quot;kpi&quot;:[{&quot;kpiAttr&quot;:&quot;LAST_UPDATED&quot;,&quot;condition&quot;:[{&quot;name&quot;:&quot;decr&quot;,&quot;value&quot;:[]}]}],&quot;scoreType&quot;:[],&quot;devType&quot;:[&quot;WIRELESS&quot;],&quot;typeIdList&quot;:[&quot;__global__&quot;]}}&#39;


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


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


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

### Transformo la respuesta en un dataframe
response.json()[&#39;response&#39;]
df = json_normalize(response.json()[&#39;response&#39;])
  &lt;/code&gt;  
 &lt;/pre&gt;  </content><link rel='replies' type='application/atom+xml' href='http://cabildocl.blogspot.com/feeds/5115322722994246973/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14037368/5115322722994246973' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/5115322722994246973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/5115322722994246973'/><link rel='alternate' type='text/html' href='http://cabildocl.blogspot.com/2020/08/extraer-informacion-de-cisco-dna-center.html' title='Extraer informacion de Cisco DNA Center con Python'/><author><name>Julio Saldivar</name><uri>http://www.blogger.com/profile/16119743033913358224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14037368.post-7208710813724379974</id><published>2020-08-20T18:01:00.008-04:00</published><updated>2020-09-13T08:15:31.070-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="https"/><category scheme="http://www.blogger.com/atom/ns#" term="internet"/><category scheme="http://www.blogger.com/atom/ns#" term="ip"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="programación"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="redes"/><title type='text'>Python requests a traves de proxy</title><content type='html'> En algunos casos es necesario hacer requerimientos en Python a través de un proxy. Esto se puede realizar de manera muy simple. Aquí un ejemplo:
&lt;pre&gt;
&lt;code class=&quot;python&quot;&gt;
import requests
proxies = { &#39;https&#39; : &#39;https://user:pass@proxy_ip:port&#39; }
r = requests.get(“http://url”, proxies=proxies)
&lt;/code&gt;
&lt;/pre&gt;
Con esto ya podremos hacer los requerimientos a traves de un proxy.</content><link rel='replies' type='application/atom+xml' href='http://cabildocl.blogspot.com/feeds/7208710813724379974/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14037368/7208710813724379974' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/7208710813724379974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14037368/posts/default/7208710813724379974'/><link rel='alternate' type='text/html' href='http://cabildocl.blogspot.com/2020/08/python-requests-traves-de-proxy.html' title='Python requests a traves de proxy'/><author><name>Julio Saldivar</name><uri>http://www.blogger.com/profile/16119743033913358224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>