Infraestructura de Experimento de Desarrollador

En mi empresa, a menudo me encuentro con que necesita obtener algún tipo de servicio para "recogerlo" a fondo. Aunque los PCshniks son bastante potentes, PyCharm y Chrome consumen la mayoría de los recursos, y a menudo se deja muy poco en las máquinas virtuales con experimentos.


Por lo tanto, obtuvimos un pequeño rack con un par de servidores para experimentos y Gitlab local. Pero algo salió mal y realmente quería jugar con algo nuevo.


Descargo de responsabilidad


Estoy lejos de ser periodista, así que perdóname de antemano por posibles errores en el texto. Aunque repasé el texto, aún podía perder algo. Siempre abierto para correcciones en un mensaje personal.


Entre otras cosas, "no discuten sobre los gustos" y no anuncio nada, solo quiero compartir cómo resolvimos nuestro problema. Bueno, por supuesto, todo esto podría hacerse de manera diferente, pero lo quería de esa manera.


Letras de canciones


Hubo un tiempo, dado que nuestros clientes a menudo tenían OpenStack, también lo implementamos con éxito para combinar dolor y lagrimas probando algunos productos con otros.
¡Pero el problema es que la oficina! = DC y tuvimos la suerte de alquilar una oficina en un lugar donde la luz se corta de forma estable cada 2-3 meses, además, lo hacen por la noche hasta que nadie la vea. ¿Has intentado elevar el clúster OpenStack después de un corte de energía? Y, en general, el producto claramente no está adaptado a nuestras necesidades (aunque es muy conveniente generar de 5 a 10 nodos o desplegar toda la infraestructura).


También fue muy decepcionante consumir los recursos de un clúster que simplemente funciona (en realidad 2-3 servidores con 4CPU / 16GbRAM simplemente para un clúster vacío) y la necesidad de mantener el controlador separado del nodo de cómputo para no interferir con el trabajo (AIO se come en una simple RAM de 35 GB, de alguna manera demasiado para un servidor en la oficina).


Por supuesto, todo se podría sacar en AWS / DO / Azure / GCE, pero si hay 3-4 servidores, ¿por qué no usarlos? Porque de todos modos el equipo existente saldrá más barato que la "nube".


Equipo


En realidad sobre el hierro:


  1. Armario de suelo KRAULER KRC6832
  2. 4U HITACHI HA8000 / RS440 (AG) 4x Intel Xeon X7460 (6C / 6T) / 160GB / 4x Memory Raiser / 4x 2.5D HDD 1TB SATA + 4x 2.5 "HDD 0.5TB SATA / LSI RAID 0-1-5-6 / 6xGLAN / 2xPSU 1570W (no sé por qué hay tales PSU, si nunca comió más de 500W a plena carga)
  3. UPS Smart-UPS de APC, 3000 VA, RM 2U UPS
  4. Mikrotik Cloud Router Switch 125-24G-1S-RM (este no es el núcleo de la infraestructura de la oficina, es solo un bastidor)
  5. SSD WD Azul 500Gb SATA

Entre otras cosas, hay:


  1. Servidor 1U Fujitsu RX100S6 Intel Core i3-540 / 16 GB DDR-3 ECC / 2x 3.5 "HDD 147Gb SAS / LSI Raid 0-1 / 2xGlan / PSU 250W (que ejecuta Gitlab CE)
  2. Servidor 1U Nec Express 5800 / R110c con Intel Xeon X3430 a bordo y especificaciones como en el elemento 1 (en el que gira el corredor Gitlab CI).
  3. Un par de UPS a 1200VA.

Los últimos 2 servidores se ocuparon con éxito después de otra falla repentina de energía nocturna que llevó a Ceph en OpenStack a quedar inutilizable y se decidió transferirlos a nodos independientes. Sin embargo, nada impide que luego se transfieran a VM.


HITACHI generalmente tiene 2 piezas, pero cargamos todo en una máquina y luego explicaré por qué.
Pinto con tanto detalle, solo para aclarar la decisión.


Harina de elección


El principal problema con OpenStack era que AIO era demasiado voraz y competía con las máquinas virtuales, y se estaba extendiendo por los hosts ... En resumen, OpenStack, no importa cómo nos haya gustado, pero no se ajustaba a nuestras necesidades y capacidades.


Sería lógico suponer que valdría la pena cambiar a VMWare ESXi (como han sugerido muchos camaradas). Pero no tenía alma para este producto ...


Era necesario que fuera posible personalizar bien nuestras necesidades (en algún lugar de la intersección es barato, productivo y flexible), así como hacerlo conveniente para desarrolladores simples que no desean configurar nada, pero solo hacer "fi-fi-fi-fi" codificación y experimentación.


La elección recayó en Proxmox VE, porque:


  1. Esto es debian, aunque con "esteroides", lo que significa que será más fácil descubrirlo y personalizarlo.
  2. Hay contenedores KVM y LXC simples, que son mucho más económicos en términos de recursos.
  3. En una edición completamente gratuita, puede expandirse en un clúster.
  4. Dofigallion de varios almacenamientos (lvm thin, Ceph, GlusterFS, NFS, etc.)
  5. 100% de soporte del equipo en el que colocaremos.

Configurar Proxmox


La publicación describe además cómo configuré la infraestructura solo de servidor con Proxmox en modo casi en vivo. La migración del servidor Gitlab no se describe de ninguna manera, porque no tiene nada que ver con este tema.


Red y enrutador


Después de OpenStack, existe un legado para cortar la red, en particular la red pública y la configuración de OSPF en Mikrotiks. Quería lo siguiente:


  • Para garantizar el aislamiento de la red interna del servidor de la red pública a la que irán las máquinas virtuales.
  • Utilice Mikrotik como enrutador principal, DNS y ntp para el bastidor.
  • Utilice las 6 interfaces de servidor para acceder y liberar máquinas virtuales.

Describiré cómo hacerlo desde cero:


  • Conducimos todas las interfaces al puente (creemos que la configuración se produce desde el segundo puerto):

Dame la vuelta
/interface bridge add name=bridge1 protocol-mode=none /interface bridge port add bridge=bridge1 interface=ether1 trusted=yes add bridge=bridge1 interface=ether2 add bridge=bridge1 interface=ether3 add bridge=bridge1 interface=ether4 add bridge=bridge1 interface=ether5 add bridge=bridge1 interface=ether6 add bridge=bridge1 interface=ether7 add bridge=bridge1 interface=ether8 add bridge=bridge1 interface=ether9 add bridge=bridge1 interface=ether10 add bridge=bridge1 interface=ether11 add bridge=bridge1 interface=ether12 add bridge=bridge1 interface=ether13 add bridge=bridge1 interface=ether14 add bridge=bridge1 interface=ether15 add bridge=bridge1 interface=ether16 add bridge=bridge1 interface=ether17 add bridge=bridge1 interface=ether18 add bridge=bridge1 interface=ether19 add bridge=bridge1 interface=ether20 add bridge=bridge1 interface=ether21 add bridge=bridge1 interface=ether22 add bridge=bridge1 interface=ether23 add bridge=bridge1 interface=ether24 add bridge=bridge1 interface=sfp1 

  • Configuramos OSPF Mikrotik a través de la red 10.20.0.0/24 (luego nos prohibiremos ir a la red interna mediante reglas de firewall):

Dame la vuelta
 /ip address add address=10.20.0.254/24 interface=bridge1 network=10.20.0.0 /ip route add check-gateway=ping distance=1 gateway=10.20.0.1 /routing ospf network add area=local network=10.20.0.0/24 /routing ospf instance set [ find default=yes ] redistribute-connected=as-type-2 \ redistribute-static=as-type-2 router-id=10.20.0.254 

  • Configuramos VLAN100 para una red pública + servidor DHCP:

Dame la vuelta
 /interface vlan add interface=bridge1 name=public_rack vlan-id=100 /ip address add address=172.16.0.1/16 interface=public_rack network=172.16.0.0 /ip pool add name=public_rack_dhcp_pool1 ranges=172.16.253.1-172.16.253.254 add name=public_rack_dhcp_pool0 next-pool=public_rack_dhcp_pool1 ranges=\ 172.16.254.1-172.16.254.254 /ip dhcp-server add add-arp=yes address-pool=public_rack_dhcp_pool0 disabled=no interface=\ public_rack lease-time=1h name=public_rack_dhcp /ip dhcp-server network add address=172.16.0.0/16 dns-server=172.16.0.1 domain=domain.lan\ gateway=172.16.0.1 ntp-server=172.16.0.1 /ip dns set allow-remote-requests=yes cache-size=4096KiB max-concurrent-queries=400 \ max-concurrent-tcp-sessions=80 query-server-timeout=10s \ query-total-timeout=1m40s servers=10.20.0.1 

  • Configuramos las reglas de Firewall para que el acceso sea solo al siguiente enrutador:

Dame la vuelta
 /ip firewall filter add action=drop dst-address=10.20.0.0/24 in-interface=public_rack add action=drop dst-address=10.20.0.0/24 src-address=172.16.0.0/24 in-interface=bridge1 add action=accept dst-address=10.20.0.1 in-interface=public_rack 

Esto no quiere decir que esta regla sea una regla muy correcta, pero si uno de los expertos le dice cómo escribirla correctamente, le estaré muy agradecido. En general, necesitamos aislamiento solo en L2, pero en L3 traigo más para familiarización.


Configuración del servidor


El servidor se ajustará para obtener el máximo rendimiento de las unidades actuales. Sin embargo, no olvidamos que todo puede suceder y, por la noche, la luz puede desaparecer abruptamente durante una o dos horas mientras todos duermen.


  • Instalamos todas las unidades excepto la SSD en la basura.
  • Conectamos el SSD a través de una diapositiva en lugar de una unidad.
  • Conectamos todos los puertos LAN a Mikrotik.
  • Configure RAID con caché de escritura:
    • 4x 1TB en RAID 10
    • 4x 500GB en RAID 10
    • Hacemos que ambas matrices sean de arranque.
  • Instale Proxmox VE 6 en la primera matriz y la primera interfaz (tome desde aquí ).
  • Asignar la dirección 10.20.0.10/24
  • Al final de la instalación, reiniciamos.

Como no queremos comprar nada, debemos desactivar todo lo relacionado con la suscripción:


  • Eliminar ventana emergente al ingresar a la GUI (válido para versiones> = 5.1):
     sed -i.bak "s/data.status !== 'Active'/false/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js && systemctl restart pveproxy.service 
  • Cambiamos al repositorio para personas económicas reemplazando la línea en el archivo:

`/ etc / apt / sources.list.d / pve-enterprise.list`
 # deb https://enterprise.proxmox.com/debian/pve buster pve-enterprise deb http://download.proxmox.com/debian/pve buster pve-no-subscription 

Aquí es donde terminamos la configuración básica.


La magia de las interfaces de red.


En general, configurar Proxmox Bridge para que funcione es bastante simple. Pero no soy yo, si no Quitaré las amígdalas rectalmente Haré algo extravagante. Realmente quería que OVSBridge también trabajara para OVSBond. Pero el problema es que tampoco quisiera que los usuarios asignen VLAN cada vez que creen VM / LXC. Por lo tanto, el procedimiento de configuración es el siguiente para las 6 interfaces:


  • Instale el paquete Open vSwitch: apt install openvswitch-switch -y
  • Editamos el archivo /etc/network/interfaces siguiente manera:

Dame la vuelta
 #  OVSBond   vlan- allow-vmbr0 bond0 iface bond0 inet manual ovs_bonds enp5s0f0.100 enp5s0f1.100 enp6s0f0.100 enp6s0f1.100 enp8s0f0.100 enp8s0f1.100 ovs_type OVSBond ovs_bridge vmbr0 ovs_options vlan_mode=native-untagged bond_mode=balance-slb auto lo iface lo inet loopback iface enp5s0f0 inet manual iface enp5s0f1 inet manual iface enp6s0f0 inet manual iface enp6s0f1 inet manual iface enp8s0f0 inet manual iface enp8s0f1 inet manual #   OVSBond vlan- auto enp5s0f0.100 iface enp5s0f0.100 inet manual auto enp5s0f1.100 iface enp5s0f1.100 inet manual auto enp6s0f0.100 iface enp6s0f0.100 inet manual auto enp6s0f1.100 iface enp6s0f1.100 inet manual auto enp8s0f0.100 iface enp8s0f0.100 inet manual auto enp8s0f1.100 iface enp8s0f1.100 inet manual #   bond  " ". #   ,          Ceph ( ). auto bond1 iface bond1 inet static address 10.20.0.10 netmask 24 bond-slaves enp5s0f0 enp5s0f1 enp6s0f0 enp6s0f1 enp8s0f0 enp8s0f1 bond-miimon 100 bond-mode balance-xor bond-xmit-hash-policy layer2+3 #      VLAN100 allow-ovs vmbr0 iface vmbr0 inet static address 172.16.0.2 netmask 16 gateway 172.16.0.1 ovs_type OVSBridge ovs_ports bond0 

Configurar LVM + lvmcache


En primer lugar, elimine el pve/data para no confundirse con la sección meta, etc.


 lvremove pve/data 

Agregue la segunda sección a nuestro grupo de volúmenes:


 pvcreate /dev/sdb vgextend pve /dev/sdb 

Creamos una nueva sección a medida que la documentación de Proxmox nos enseña + un pequeño truco para optimizar las instantáneas:


 lvcreate -L 2.4T -n data pve lvconvert --type thin-pool -c 64K --poolmetadatasize 15.81G pve/data 

Ahora necesitamos conectar lvmcache, pero para optimizar el recurso SSD, asigné específicamente una sección con un tamaño de 241GB. Esta cantidad es suficiente para el caché, y el resto del disco será un recurso para los bloques muertos. Es cierto, esto es en teoría, porque personalmente no entiendo completamente si esto funciona. En cualquier caso, el caché de 465 GB tendrá el doble de tiempo y será más difícil de eliminar (por ejemplo, para reemplazar un disco o expandir una matriz).


 vgextend pve /dev/sdc1 lvcreate --type cache-pool -L240G pve /dev/sdc1 lvconvert --type cache --cachepool pve/lvol1 pve/data 

UPD: hay un problema dm_cache con dm_cache , por lo que debes hacer una magia más:


 apt install thin-provisioning-tools -y echo "dm_cache" >> /etc/initramfs-tools/modules echo "dm_cache_mq" >> /etc/initramfs-tools/modules echo "dm_persistent_data" >> /etc/initramfs-tools/modules echo "dm_bufio" >> /etc/initramfs-tools/modules update-initramfs -k `uname -r` -u -t update-grub 

Al principio, todo funcionó, pero luego, por alguna razón, se detuvo. Aparentemente con la actualización, estos módulos fueron eliminados.


Toques finales


Normalmente lo hago antes de reiniciar para asegurarme de que todo esté actualizado y que el kernel sea el último:


 apt update && apt dist-upgrade -y && apt autoremove -y pveam update 

Por cierto, en la sexta versión, el kernel es 5.0, y en el camino (en el momento de la publicación) parece 5.3.7.
Eso es todo, ahora estamos enviando el sistema para reiniciar. Si hicimos todo bien, luego de un reinicio, nuestro servidor será accesible externamente en ambas direcciones. También puede descargar plantillas de contenedores nuevos y disfrutar de la vida.


Hacemos bellos gráficos


Bueno, no solo somos administradores, sino DevOps (¿qué significa esto?), Así que necesitamos saber cuándo algunas de las máquinas virtuales se volverán locas y harán algunas cosas malas.


Contenedor con InfluxDB y Grafana


En general, todas estas acciones son más fáciles de hacer en la GUI, pero de repente fui atacado por una forma agresiva de pereza para tomar capturas de pantalla, así que lo describiré con comandos.


Nos fijamos en las plantillas disponibles para nosotros:


 root@cloud:~# pveam available --section system system alpine-3.10-default_20190626_amd64.tar.xz system alpine-3.9-default_20190224_amd64.tar.xz system archlinux-base_20190924-1_amd64.tar.gz system centos-6-default_20191016_amd64.tar.xz system centos-7-default_20190926_amd64.tar.xz system centos-8-default_20191016_amd64.tar.xz system debian-10.0-standard_10.0-1_amd64.tar.gz system debian-8.0-standard_8.11-1_amd64.tar.gz system debian-9.0-standard_9.7-1_amd64.tar.gz system fedora-29-default_20181126_amd64.tar.xz system fedora-30-default_20190718_amd64.tar.xz system gentoo-current-default_20190718_amd64.tar.xz system opensuse-15.0-default_20180907_amd64.tar.xz system opensuse-15.1-default_20190719_amd64.tar.xz system ubuntu-16.04-standard_16.04.5-1_amd64.tar.gz system ubuntu-18.04-standard_18.04.1-1_amd64.tar.gz system ubuntu-19.04-standard_19.04-1_amd64.tar.gz system ubuntu-19.10-standard_19.10-1_amd64.tar.gz 

Creo que para empezar puedes descargar ubuntu-18.04-standard_18.04.1-1_amd64.tar.gz :


 root@cloud:~# pveam download local ubuntu-18.04-standard_18.04.1-1_amd64.tar.gz root@cloud:~# pveam list local NAME SIZE local:vztmpl/ubuntu-18.04-standard_18.04.1-1_amd64.tar.gz 203.54MB 

Cree un contenedor para InfluxDB y Grafana:


 root@cloud:~# pct create 999 local:vztmpl/ubuntu-18.04-standard_18.04.1-1_amd64.tar.gz --cores 2 --memory 2048 --password hostpassword --onboot 1 --net0 name=eth0,bridge=vmbr0,gw=172.16.0.1,ip=172.16.1.101/24 --storage local-lvm --hostname monit 

Nos conectamos al terminal de nuestra ssh root@172.16.1.101 través de ssh root@172.16.1.101 o mediante la pct console 999 .


Instale paquetes InfluxDB y Grafana:


 apt update && apt install curl wget gnupg software-properties-common -y add-apt-repository "deb https://packages.grafana.com/oss/deb stable main" echo "deb https://repos.influxdata.com/ubuntu bionic stable" | tee /etc/apt/sources.list.d/influxdb.list curl -sL https://repos.influxdata.com/influxdb.key | apt-key add - wget -q -O - https://packages.grafana.com/gpg.key | apt-key add - apt update && apt install influxdb grafana -y systemctl daemon-reload systemctl enable grafana-server systemctl start grafana-server systemctl enable influxdb systemctl start influxdb 

Configuramos InfluxDB para el trabajo. Para hacer esto, primero necesitaremos crear una base de datos:


 influx > CREATE DATABASE proxmox > quit 

A continuación, debemos configurar el puerto UDP al que Proxmox enviará las solicitudes:


`/ etc / influxdb / influxdb.conf`
 #   ,     . [[udp]] enabled = true bind-address = "0.0.0.0:8089" database = "proxmox" batch-size = 1000 batch-timeout = "1s" 

... y ahora reinicie influx: systemctl restart influxdb


Configurar Proxmox y Dashboard


Aquí todo es extremadamente simple. En un servidor con proxmox, debe crear un archivo con el siguiente contenido:


`/ etc / pve / status.cfg`
 influxdb: influx1 server 172.16.1.101 port 8089 

No hay archivo por defecto allí.


Por alguna razón desconocida, las métricas no funcionaron de inmediato, por lo que tuve que llamar a systemctl restart pvestatd en el servidor proxy.


Ahora necesitamos visualizar todo esto. Vamos a nuestro grafana en la dirección http://172.16.1.101 {000 / (admin: admin), cambiamos la contraseña.
Encontré a los grafanos en la naturaleza del sitio que pueden atornillar un hermoso tablero para renderizar Proxmox, pero tenía un poco archivo arreglo para tener en cuenta todas nuestras realidades.


  • Vaya a Configuración -> Orígenes de datos -> Agregar origen de datos , seleccione InfluxDB .
  • Marque la casilla default .
  • Complete la URL : http://localhost:8086 .
  • proxmox Base de datos : proxmox .
  • Guardar.

Ahora necesitamos importar el Tablero:


  • Vaya a Crear -> Importar .
  • Insertamos allí:

Contenido del tablero
 { "annotations": { "list": [ { "builtIn": 1, "datasource": "-- Grafana --", "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", "name": "Annotations & Alerts", "type": "dashboard" } ] }, "description": "Display data from the Proxmox host and hosted VM's and Containers.", "editable": false, "gnetId": 10048, "graphTooltip": 0, "id": 2, "iteration": 1574232555436, "links": [], "panels": [ { "collapsed": false, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 }, "id": 43, "panels": [], "title": "Summary", "type": "row" }, { "cacheTimeout": null, "colorBackground": false, "colorValue": false, "colors": [ "#299c46", "rgba(237, 129, 40, 0.89)", "#d44a3a" ], "datasource": "InfluxDB", "format": "none", "gauge": { "maxValue": 100, "minValue": 0, "show": false, "thresholdLabels": false, "thresholdMarkers": true }, "gridPos": { "h": 3, "w": 2, "x": 0, "y": 1 }, "id": 58, "interval": null, "links": [], "mappingType": 1, "mappingTypes": [ { "name": "value to text", "value": 1 }, { "name": "range to text", "value": 2 } ], "maxDataPoints": 100, "nullPointMode": "connected", "nullText": null, "options": {}, "postfix": "", "postfixFontSize": "50%", "prefix": "", "prefixFontSize": "50%", "rangeMaps": [ { "from": "null", "text": "N/A", "to": "null" } ], "sparkline": { "fillColor": "rgba(31, 118, 189, 0.18)", "full": false, "lineColor": "rgb(31, 120, 193)", "show": false }, "tableColumn": "", "targets": [ { "groupBy": [], "measurement": "cpustat", "orderByTime": "ASC", "policy": "default", "refId": "A", "resultFormat": "time_series", "select": [ [ { "params": [ "cpus" ], "type": "field" } ] ], "tags": [ { "key": "host", "operator": "=~", "value": "/^$server$/" } ] } ], "thresholds": "", "timeFrom": null, "timeShift": null, "title": "Cores", "type": "singlestat", "valueFontSize": "80%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" } ], "valueName": "current" }, { "cacheTimeout": null, "colorBackground": false, "colorValue": false, "colors": [ "#299c46", "rgba(237, 129, 40, 0.89)", "#d44a3a" ], "datasource": "InfluxDB", "format": "bytes", "gauge": { "maxValue": 100, "minValue": 0, "show": false, "thresholdLabels": false, "thresholdMarkers": true }, "gridPos": { "h": 3, "w": 3, "x": 2, "y": 1 }, "id": 60, "interval": null, "links": [], "mappingType": 1, "mappingTypes": [ { "name": "value to text", "value": 1 }, { "name": "range to text", "value": 2 } ], "maxDataPoints": 100, "nullPointMode": "connected", "nullText": null, "options": {}, "postfix": "", "postfixFontSize": "50%", "prefix": "", "prefixFontSize": "50%", "rangeMaps": [ { "from": "null", "text": "N/A", "to": "null" } ], "sparkline": { "fillColor": "rgba(31, 118, 189, 0.18)", "full": false, "lineColor": "rgb(31, 120, 193)", "show": false }, "tableColumn": "", "targets": [ { "groupBy": [], "measurement": "memory", "orderByTime": "ASC", "policy": "default", "refId": "A", "resultFormat": "time_series", "select": [ [ { "params": [ "memtotal" ], "type": "field" } ] ], "tags": [ { "key": "host", "operator": "=~", "value": "/^$server$/" } ] } ], "thresholds": "", "timeFrom": null, "timeShift": null, "title": "Total Memory", "type": "singlestat", "valueFontSize": "80%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" } ], "valueName": "current" }, { "cacheTimeout": null, "colorBackground": false, "colorValue": false, "colors": [ "#299c46", "rgba(237, 129, 40, 0.89)", "#d44a3a" ], "datasource": "InfluxDB", "format": "bytes", "gauge": { "maxValue": 100, "minValue": 0, "show": false, "thresholdLabels": false, "thresholdMarkers": true }, "gridPos": { "h": 3, "w": 3, "x": 5, "y": 1 }, "id": 62, "interval": null, "links": [], "mappingType": 1, "mappingTypes": [ { "name": "value to text", "value": 1 }, { "name": "range to text", "value": 2 } ], "maxDataPoints": 100, "nullPointMode": "connected", "nullText": null, "options": {}, "postfix": "", "postfixFontSize": "50%", "prefix": "", "prefixFontSize": "50%", "rangeMaps": [ { "from": "null", "text": "N/A", "to": "null" } ], "sparkline": { "fillColor": "rgba(31, 118, 189, 0.18)", "full": false, "lineColor": "rgb(31, 120, 193)", "show": false }, "tableColumn": "", "targets": [ { "groupBy": [], "measurement": "memory", "orderByTime": "ASC", "policy": "default", "refId": "A", "resultFormat": "time_series", "select": [ [ { "params": [ "swaptotal" ], "type": "field" } ] ], "tags": [ { "key": "host", "operator": "=~", "value": "/^$server$/" } ] } ], "thresholds": "", "timeFrom": null, "timeShift": null, "title": "Total Swap", "type": "singlestat", "valueFontSize": "80%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" } ], "valueName": "current" }, { "cacheTimeout": null, "colorBackground": false, "colorValue": false, "colors": [ "#73BF69", "rgba(237, 129, 40, 0.89)", "#d44a3a" ], "datasource": "InfluxDB", "decimals": 2, "description": "", "format": "percentunit", "gauge": { "maxValue": 1, "minValue": 0, "show": true, "thresholdLabels": false, "thresholdMarkers": true }, "gridPos": { "h": 6, "w": 4, "x": 8, "y": 1 }, "id": 2, "interval": null, "links": [], "mappingType": 1, "mappingTypes": [ { "name": "value to text", "value": 1 }, { "name": "range to text", "value": 2 } ], "maxDataPoints": 100, "nullPointMode": "connected", "nullText": null, "options": {}, "postfix": "", "postfixFontSize": "50%", "prefix": "", "prefixFontSize": "50%", "rangeMaps": [ { "from": "null", "text": "N/A", "to": "null" } ], "sparkline": { "fillColor": "rgba(31, 118, 189, 0)", "full": false, "lineColor": "rgb(31, 120, 193)", "show": true }, "tableColumn": "", "targets": [ { "groupBy": [ { "params": [ "$__interval" ], "type": "time" }, { "params": [ "null" ], "type": "fill" } ], "measurement": "cpustat", "orderByTime": "ASC", "policy": "default", "query": "SELECT mean(\"cpu\") FROM \"cpustat\" WHERE (\"host\" =~ /^$server$/) AND $timeFilter GROUP BY time($__interval) fill(null)", "rawQuery": true, "refId": "A", "resultFormat": "time_series", "select": [ [ { "params": [ "cpu" ], "type": "field" }, { "params": [], "type": "mean" } ] ], "tags": [ { "key": "host", "operator": "=~", "value": "/^$server$/" } ] } ], "thresholds": "0.5,0.75", "timeFrom": null, "timeShift": null, "title": "Server CPU", "transparent": true, "type": "singlestat", "valueFontSize": "80%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" } ], "valueName": "current" }, { "cacheTimeout": null, "colorBackground": false, "colorValue": false, "colors": [ "#73BF69", "rgba(237, 129, 40, 0.89)", "#d44a3a" ], "datasource": "InfluxDB", "decimals": 2, "description": "", "format": "short", "gauge": { "maxValue": 10, "minValue": 0, "show": true, "thresholdLabels": false, "thresholdMarkers": true }, "gridPos": { "h": 6, "w": 4, "x": 12, "y": 1 }, "id": 9, "interval": null, "links": [], "mappingType": 1, "mappingTypes": [ { "name": "value to text", "value": 1 }, { "name": "range to text", "value": 2 } ], "maxDataPoints": 100, "nullPointMode": "connected", "nullText": null, "options": {}, "postfix": "", "postfixFontSize": "50%", "prefix": "", "prefixFontSize": "50%", "rangeMaps": [ { "from": "null", "text": "N/A", "to": "null" } ], "sparkline": { "fillColor": "rgba(31, 118, 189, 0)", "full": false, "lineColor": "rgb(31, 120, 193)", "show": true }, "tableColumn": "", "targets": [ { "groupBy": [ { "params": [ "$__interval" ], "type": "time" }, { "params": [ "null" ], "type": "fill" } ], "measurement": "cpustat", "orderByTime": "ASC", "policy": "default", "query": "SELECT mean(\"avg1\") FROM \"cpustat\" WHERE (\"host\" =~ /^$server$/) AND $timeFilter GROUP BY time($__interval) fill(null)\n", "rawQuery": true, "refId": "A", "resultFormat": "time_series", "select": [ [ { "params": [ "avg1" ], "type": "field" }, { "params": [], "type": "mean" } ] ], "tags": [ { "key": "host", "operator": "=~", "value": "/^$server$/" } ] } ], "thresholds": "6,8", "timeFrom": null, "timeShift": null, "title": "Load Average (1 Minute)", "transparent": true, "type": "singlestat", "valueFontSize": "80%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" } ], "valueName": "current" }, { "cacheTimeout": null, "colorBackground": false, "colorValue": false, "colors": [ "#73BF69", "rgba(237, 129, 40, 0.89)", "#d44a3a" ], "datasource": "InfluxDB", "decimals": 2, "description": "", "format": "percentunit", "gauge": { "maxValue": 1, "minValue": 0, "show": true, "thresholdLabels": false, "thresholdMarkers": true }, "gridPos": { "h": 6, "w": 4, "x": 16, "y": 1 }, "id": 10, "interval": null, "links": [], "mappingType": 1, "mappingTypes": [ { "name": "value to text", "value": 1 }, { "name": "range to text", "value": 2 } ], "maxDataPoints": 100, "nullPointMode": "connected", "nullText": null, "options": {}, "postfix": "", "postfixFontSize": "50%", "prefix": "", "prefixFontSize": "50%", "rangeMaps": [ { "from": "null", "text": "N/A", "to": "null" } ], "sparkline": { "fillColor": "rgba(31, 118, 189, 0)", "full": false, "lineColor": "rgb(31, 120, 193)", "show": true }, "tableColumn": "", "targets": [ { "groupBy": [ { "params": [ "$__interval" ], "type": "time" }, { "params": [ "null" ], "type": "fill" } ], "measurement": "cpustat", "orderByTime": "ASC", "policy": "default", "query": "SELECT mean(\"wait\") FROM \"cpustat\" WHERE (\"host\" =~ /^$server$/) AND $timeFilter GROUP BY time($__interval) fill(null)", "rawQuery": true, "refId": "A", "resultFormat": "time_series", "select": [ [ { "params": [ "wait" ], "type": "field" }, { "params": [], "type": "mean" } ] ], "tags": [ { "key": "host", "operator": "=~", "value": "/^$server$/" } ] } ], "thresholds": "0.5,0.75", "timeFrom": null, "timeShift": null, "title": "I/O Wait", "transparent": true, "type": "singlestat", "valueFontSize": "80%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" } ], "valueName": "current" }, { "cacheTimeout": null, "colorBackground": false, "colorValue": false, "colors": [ "#73BF69", "rgba(237, 129, 40, 0.89)", "#d44a3a" ], "datasource": "InfluxDB", "decimals": 2, "description": "", "format": "gbytes", "gauge": { "maxValue": 160, "minValue": 0, "show": true, "thresholdLabels": false, "thresholdMarkers": true }, "gridPos": { "h": 6, "w": 4, "x": 20, "y": 1 }, "id": 11, "interval": null, "links": [], "mappingType": 1, "mappingTypes": [ { "name": "value to text", "value": 1 }, { "name": "range to text", "value": 2 } ], "maxDataPoints": 100, "nullPointMode": "connected", "nullText": null, "options": {}, "postfix": "", "postfixFontSize": "50%", "prefix": "", "prefixFontSize": "50%", "rangeMaps": [ { "from": "null", "text": "N/A", "to": "null" } ], "sparkline": { "fillColor": "rgba(31, 118, 189, 0)", "full": false, "lineColor": "rgb(31, 120, 193)", "show": true }, "tableColumn": "", "targets": [ { "groupBy": [ { "params": [ "$__interval" ], "type": "time" }, { "params": [ "null" ], "type": "fill" } ], "measurement": "memory", "orderByTime": "ASC", "policy": "default", "query": "SELECT mean(\"memused\") / 1073741824 FROM \"memory\" WHERE (\"host\" =~ /^$server$/) AND $timeFilter GROUP BY time($__interval) fill(null)", "rawQuery": true, "refId": "A", "resultFormat": "time_series", "select": [ [ { "params": [ "memused" ], "type": "field" }, { "params": [], "type": "mean" }, { "params": [ "/ 1073741824" ], "type": "math" } ] ], "tags": [ { "key": "host", "operator": "=~", "value": "/^$server$/" } ] } ], "thresholds": "96,140", "timeFrom": null, "timeShift": null, "title": "Used Memory", "transparent": true, "type": "singlestat", "valueFontSize": "80%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" } ], "valueName": "current" }, { "bgColor": null, "clockType": "24 hour", "countdownSettings": { "customFormat": null, "endCountdownTime": "2019-04-12T19:20:00.000Z", "endText": "00:00:00" }, "datasource": "InfluxDB", "dateSettings": { "dateFormat": "YYYY-MM-DD", "fontSize": "20px", "fontWeight": "normal", "showDate": true }, "gridPos": { "h": 3, "w": 8, "x": 0, "y": 4 }, "id": 20, "links": [], "mode": "time", "offsetFromUtc": null, "offsetFromUtcMinutes": null, "options": {}, "refreshSettings": { "syncWithDashboard": false }, "targets": [ { "groupBy": [ { "params": [ "$__interval" ], "type": "time" }, { "params": [ "null" ], "type": "fill" } ], "orderByTime": "ASC", "policy": "default", "refId": "A", "resultFormat": "time_series", "select": [ [ { "params": [ "value" ], "type": "field" }, { "params": [], "type": "mean" } ] ], "tags": [] } ], "timeFrom": null, "timeSettings": { "customFormat": "HH:mm:ss", "fontSize": "40px", "fontWeight": "normal" }, "timeShift": null, "timezone": null, "timezoneSettings": { "fontSize": "12px", "fontWeight": "normal", "showTimezone": false, "zoneFormat": "offsetAbbv" }, "title": "Time", "transparent": true, "type": "grafana-clock-panel" }, { "cacheTimeout": null, "colorBackground": false, "colorValue": false, "colors": [ "#299c46", "rgba(237, 129, 40, 0.89)", "#d44a3a" ], "datasource": "InfluxDB", "format": "dateTimeAsIso", "gauge": { "maxValue": 100, "minValue": 0, "show": false, "thresholdLabels": false, "thresholdMarkers": true }, "gridPos": { "h": 6, "w": 6, "x": 0, "y": 7 }, "id": 24, "interval": null, "links": [], "mappingType": 1, "mappingTypes": [ { "name": "value to text", "value": 1 }, { "name": "range to text", "value": 2 } ], "maxDataPoints": 100, "nullPointMode": "connected", "nullText": null, "options": {}, "postfix": "", "postfixFontSize": "50%", "prefix": "", "prefixFontSize": "50%", "rangeMaps": [ { "from": "null", "text": "N/A", "to": "null" } ], "sparkline": { "fillColor": "rgba(31, 118, 189, 0.18)", "full": false, "lineColor": "rgb(31, 120, 193)", "show": false }, "tableColumn": "", "targets": [ { "groupBy": [ { "params": [ "$__interval" ], "type": "time" }, { "params": [ "null" ], "type": "fill" } ], "measurement": "cpustat", "orderByTime": "ASC", "policy": "default", "refId": "A", "resultFormat": "time_series", "select": [ [ { "params": [ "cpu" ], "type": "field" }, { "params": [], "type": "last" } ] ], "tags": [ { "key": "host", "operator": "=~", "value": "/^$server$/" } ] } ], "thresholds": "", "timeFrom": null, "timeShift": null, "title": "Last Update", "transparent": true, "type": "singlestat", "valueFontSize": "100%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" } ], "valueName": "last_time" }, { "cacheTimeout": null, "colorBackground": false, "colorValue": false, "colors": [ "#299c46", "rgba(237, 129, 40, 0.89)", "#d44a3a" ], "datasource": "InfluxDB", "decimals": 1, "format": "dtdurations", "gauge": { "maxValue": 100, "minValue": 0, "show": false, "thresholdLabels": false, "thresholdMarkers": true }, "gridPos": { "h": 6, "w": 6, "x": 6, "y": 7 }, "id": 16, "interval": null, "links": [], "mappingType": 1, "mappingTypes": [ { "name": "value to text", "value": 1 }, { "name": "range to text", "value": 2 } ], "maxDataPoints": 100, "nullPointMode": "connected", "nullText": null, "options": {}, "postfix": "", "postfixFontSize": "50%", "prefix": "", "prefixFontSize": "50%", "rangeMaps": [ { "from": "null", "text": "N/A", "to": "null" } ], "sparkline": { "fillColor": "rgba(31, 118, 189, 0.18)", "full": false, "lineColor": "rgb(31, 120, 193)", "show": false }, "tableColumn": "", "targets": [ { "groupBy": [], "measurement": "system", "orderByTime": "ASC", "policy": "default", "refId": "A", "resultFormat": "time_series", "select": [ [ { "params": [ "uptime" ], "type": "field" }, { "params": [], "type": "last" } ] ], "tags": [ { "key": "host", "operator": "=~", "value": "/^$server$/" } ] } ], "thresholds": "", "timeFrom": null, "timeShift": null, "title": "Host Uptime", "transparent": true, "type": "singlestat", "valueFontSize": "80%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" } ], "valueName": "current" }, { "columns": [], "datasource": "InfluxDB", "fontSize": "100%", "gridPos": { "h": 6, "w": 6, "x": 12, "y": 7 }, "id": 7, "interval": "", "links": [], "options": {}, "pageSize": null, "scroll": true, "showHeader": true, "sort": { "col": 1, "desc": false }, "styles": [ { "alias": "Time", "colorMode": null, "colors": [ "rgba(245, 54, 54, 0.9)", "rgba(237, 129, 40, 0.89)", "rgba(50, 172, 45, 0.97)" ], "dateFormat": "YYYY-MM-DD HH:mm:ss", "decimals": 2, "mappingType": 1, "pattern": "Time", "thresholds": [], "type": "hidden", "unit": "short" }, { "alias": "Uptime", "colorMode": null, "colors": [ "rgba(245, 54, 54, 0.9)", "rgba(237, 129, 40, 0.89)", "rgba(50, 172, 45, 0.97)" ], "dateFormat": "YYYY-MM-DD HH:mm:ss", "decimals": 1, "mappingType": 1, "pattern": "uptime", "rangeMaps": [ { "from": "", "text": "", "to": "" } ], "thresholds": [], "type": "number", "unit": "dtdurations", "valueMaps": [ { "text": "Offline", "value": "0" } ] }, { "alias": "VM", "colorMode": null, "colors": [ "rgba(245, 54, 54, 0.9)", "rgba(237, 129, 40, 0.89)", "rgba(50, 172, 45, 0.97)" ], "dateFormat": "YYYY-MM-DD HH:mm:ss", "decimals": 2, "mappingType": 1, "pattern": "host", "sanitize": true, "thresholds": [], "type": "string", "unit": "short", "valueMaps": [] } ], "targets": [ { "groupBy": [ { "params": [ "host" ], "type": "tag" } ], "limit": "1", "measurement": "system", "orderByTime": "ASC", "policy": "default", "query": "SELECT last(uptime) AS \"uptime\" FROM \"system\" WHERE (\"object\" = 'qemu') AND (\"nodename\" =~ /^$server$/) AND time > (now() - 10m) AND uptime > 0 GROUP BY \"host\" limit 1", "rawQuery": true, "refId": "A", "resultFormat": "table", "select": [ [ { "params": [ "uptime" ], "type": "field" }, { "params": [ "uptime" ], "type": "alias" } ] ], "tags": [ { "key": "object", "operator": "=", "value": "qemu" } ] } ], "timeFrom": null, "timeShift": null, "title": "Running VMs", "transform": "table", "transparent": true, "type": "table" }, { "columns": [], "datasource": "InfluxDB", "fontSize": "100%", "gridPos": { "h": 5, "w": 6, "x": 18, "y": 7 }, "id": 8, "interval": "", "links": [], "options": {}, "pageSize": null, "scroll": true, "showHeader": true, "sort": { "col": 1, "desc": false }, "styles": [ { "alias": "Time", "colorMode": null, "colors": [ "rgba(245, 54, 54, 0.9)", "rgba(237, 129, 40, 0.89)", "rgba(50, 172, 45, 0.97)" ], "dateFormat": "YYYY-MM-DD HH:mm:ss", "decimals": 2, "mappingType": 1, "pattern": "Time", "thresholds": [], "type": "hidden", "unit": "short" }, { "alias": "Uptime", "colorMode": null, "colors": [ "rgba(245, 54, 54, 0.9)", "rgba(237, 129, 40, 0.89)", "rgba(50, 172, 45, 0.97)" ], "dateFormat": "YYYY-MM-DD HH:mm:ss", "decimals": 1, "mappingType": 1, "pattern": "uptime", "thresholds": [], "type": "number", "unit": "dthms" }, { "alias": "LXC", "colorMode": null, "colors": [ "rgba(245, 54, 54, 0.9)", "rgba(237, 129, 40, 0.89)", "rgba(50, 172, 45, 0.97)" ], "dateFormat": "YYYY-MM-DD HH:mm:ss", "decimals": 2, "mappingType": 1, "pattern": "host", "sanitize": true, "thresholds": [], "type": "string", "unit": "short", "valueMaps": [] } ], "targets": [ { "groupBy": [ { "params": [ "host" ], "type": "tag" } ], "limit": "1", "measurement": "system", "orderByTime": "ASC", "policy": "default", "query": "SELECT last(uptime) AS \"uptime\" FROM \"system\" WHERE (\"object\" = 'lxc') AND (\"nodename\" =~ /^$server$/) AND time > (now() - 10m) AND uptime > 0 GROUP BY \"host\" limit 1", "rawQuery": true, "refId": "A", "resultFormat": "table", "select": [ [ { "params": [ "uptime" ], "type": "field" }, { "params": [ "uptime" ], "type": "alias" } ] ], "tags": [ { "key": "object", "operator": "=", "value": "qemu" } ] } ], "timeFrom": null, "timeShift": null, "title": "Running LXCs", "transform": "table", "transparent": true, "type": "table" }, { "collapsed": false, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 13 }, "id": 26, "panels": [], "title": "Memory And CPU Usage", "type": "row" }, { "aliasColors": { "I/O Wait": "dark-blue", "Load Average (1 Min)": "dark-red" }, "bars": false, "dashLength": 10, "dashes": false, "datasource": "InfluxDB", "fill": 1, "fillGradient": 0, "gridPos": { "h": 7, "w": 12, "x": 0, "y": 14 }, "id": 22, "interval": "", "legend": { "alignAsTable": false, "avg": true, "current": true, "max": false, "min": false, "rightSide": false, "show": true, "total": false, "values": true }, "lines": true, "linewidth": 2, "links": [], "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [ { "alias": "Load Average (1 Min)", "yaxis": 2 } ], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "alias": "CPU Usage", "groupBy": [ { "params": [ "1m" ], "type": "time" }, { "params": [ "null" ], "type": "fill" } ], "measurement": "cpustat", "orderByTime": "ASC", "policy": "default", "refId": "A", "resultFormat": "time_series", "select": [ [ { "params": [ "cpu" ], "type": "field" }, { "params": [], "type": "mean" }, { "params": [ "* 100" ], "type": "math" } ] ], "tags": [ { "key": "host", "operator": "=~", "value": "/^$server$/" } ] }, { "alias": "I/O Wait", "groupBy": [ { "params": [ "1m" ], "type": "time" }, { "params": [ "null" ], "type": "fill" } ], "measurement": "cpustat", "orderByTime": "ASC", "policy": "default", "refId": "B", "resultFormat": "time_series", "select": [ [ { "params": [ "wait" ], "type": "field" }, { "params": [], "type": "mean" }, { "params": [ " * 100" ], "type": "math" } ] ], "tags": [ { "key": "host", "operator": "=~", "value": "/^$server$/" } ] }, { "alias": "Load Average (1 Min)", "groupBy": [ { "params": [ "1m" ], "type": "time" }, { "params": [ "null" ], "type": "fill" } ], "measurement": "cpustat", "orderByTime": "ASC", "policy": "default", "refId": "C", "resultFormat": "time_series", "select": [ [ { "params": [ "avg1" ], "type": "field" }, { "params": [], "type": "mean" } ] ], "tags": [ { "key": "host", "operator": "=~", "value": "/^$server$/" } ] } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Host CPU Usage", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "decimals": null, "format": "percent", "label": "Percent", "logBase": 1, "max": null, "min": "0", "show": true }, { "decimals": null, "format": "short", "label": "Load", "logBase": 1, "max": "10", "min": "0", "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "InfluxDB", "fill": 1, "fillGradient": 0, "gridPos": { "h": 7, "w": 12, "x": 12, "y": 14 }, "id": 4, "interval": "", "legend": { "alignAsTable": true, "avg": true, "current": true, "max": true, "min": true, "rightSide": false, "show": true, "total": false, "values": true }, "lines": true, "linewidth": 2, "links": [], "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "alias": "Memory Use", "groupBy": [ { "params": [ "$__interval" ], "type": "time" }, { "params": [ "null" ], "type": "fill" } ], "measurement": "memory", "orderByTime": "ASC", "policy": "default", "query": "SELECT mean(\"memused\")/mean(\"memtotal\") * 100 FROM \"memory\" WHERE (\"host\" =~ /^$server$/) AND $timeFilter GROUP BY time($__interval) fill(null)", "rawQuery": true, "refId": "A", "resultFormat": "time_series", "select": [ [ { "params": [ "memused" ], "type": "field" }, { "params": [], "type": "mean" } ] ], "tags": [ { "key": "host", "operator": "=~", "value": "/^$server$/" } ] } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Host Memory Usage", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "decimals": null, "format": "percent", "label": null, "logBase": 1, "max": "100", "min": "0", "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "InfluxDB", "decimals": 2, "fill": 1, "fillGradient": 0, "gridPos": { "h": 6, "w": 12, "x": 0, "y": 21 }, "id": 28, "interval": "", "legend": { "alignAsTable": true, "avg": true, "current": true, "hideEmpty": false, "hideZero": true, "max": false, "min": false, "rightSide": true, "show": true, "total": false, "values": true }, "lines": true, "linewidth": 2, "links": [], "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "alias": "$tag_host", "groupBy": [ { "params": [ "1m" ], "type": "time" }, { "params": [ "host" ], "type": "tag" }, { "params": [ "null" ], "type": "fill" } ], "measurement": "system", "orderByTime": "ASC", "policy": "default", "query": "SELECT last(\"cpu\") FROM \"system\" WHERE (\"object\" = 'qemu') AND $timeFilter GROUP BY time($__interval) fill(null)", "rawQuery": false, "refId": "A", "resultFormat": "time_series", "select": [ [ { "params": [ "cpu" ], "type": "field" }, { "params": [], "type": "last" } ] ], "tags": [ { "key": "object", "operator": "=", "value": "qemu" }, { "condition": "AND", "key": "nodename", "operator": "=~", "value": "/^$server$/" } ] } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "VM CPU Usage", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "decimals": 2, "format": "percentunit", "label": "", "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": false } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "InfluxDB", "fill": 1, "fillGradient": 0, "gridPos": { "h": 6, "w": 12, "x": 12, "y": 21 }, "id": 31, "interval": "", "legend": { "alignAsTable": true, "avg": true, "current": true, "hideZero": true, "max": false, "min": false, "rightSide": true, "show": true, "total": false, "values": true }, "lines": true, "linewidth": 2, "links": [], "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "alias": "$tag_host", "groupBy": [ { "params": [ "$__interval" ], "type": "time" }, { "params": [ "host" ], "type": "tag" }, { "params": [ "null" ], "type": "fill" } ], "measurement": "system", "orderByTime": "ASC", "policy": "default", "query": "SELECT (mean(\"mem\")/last(maxmem))*100 FROM \"system\" WHERE (\"object\" = 'qemu') AND (\"nodename\" =~ /^$server$/) AND $timeFilter GROUP BY time($__interval), \"host\" fill(null)", "rawQuery": true, "refId": "A", "resultFormat": "time_series", "select": [ [ { "params": [ "mem" ], "type": "field" }, { "params": [], "type": "mean" } ] ], "tags": [ { "key": "object", "operator": "=", "value": "qemu" } ] } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "VMs Memory Usage", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "percent", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": false } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "InfluxDB", "decimals": 2, "fill": 1, "fillGradient": 0, "gridPos": { "h": 6, "w": 12, "x": 0, "y": 27 }, "id": 29, "interval": "", "legend": { "alignAsTable": true, "avg": true, "current": true, "hideEmpty": false, "hideZero": true, "max": false, "min": false, "rightSide": true, "show": true, "total": false, "values": true }, "lines": true, "linewidth": 2, "links": [], "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "alias": "$tag_host", "groupBy": [ { "params": [ "1m" ], "type": "time" }, { "params": [ "host" ], "type": "tag" }, { "params": [ "null" ], "type": "fill" } ], "measurement": "system", "orderByTime": "ASC", "policy": "default", "query": "SELECT last(\"cpu\") FROM \"system\" WHERE (\"object\" = 'lxc' AND \"nodename\" =~ /^$server$/) AND $timeFilter GROUP BY time(1m), \"host\" fill(null)", "rawQuery": true, "refId": "A", "resultFormat": "time_series", "select": [ [ { "params": [ "cpu" ], "type": "field" }, { "params": [], "type": "last" } ] ], "tags": [ { "key": "object", "operator": "=", "value": "lxc" }, { "condition": "AND", "key": "nodename", "operator": "=~", "value": "/^$server$/" } ] } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "LXC CPU Usage", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "decimals": 2, "format": "percentunit", "label": "", "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": false } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "InfluxDB", "fill": 1, "fillGradient": 0, "gridPos": { "h": 6, "w": 12, "x": 12, "y": 27 }, "id": 32, "interval": "", "legend": { "alignAsTable": true, "avg": true, "current": true, "hideZero": true, "max": false, "min": false, "rightSide": true, "show": true, "total": false, "values": true }, "lines": true, "linewidth": 2, "links": [], "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "alias": "$tag_host", "groupBy": [ { "params": [ "$__interval" ], "type": "time" }, { "params": [ "host" ], "type": "tag" }, { "params": [ "null" ], "type": "fill" } ], "measurement": "system", "orderByTime": "ASC", "policy": "default", "query": "SELECT (mean(\"mem\")/last(maxmem))*100 FROM \"system\" WHERE (\"object\" = 'lxc') AND (\"nodename\" =~ /^$server$/) AND $timeFilter GROUP BY time($__interval), \"host\" fill(null)", "rawQuery": true, "refId": "A", "resultFormat": "time_series", "select": [ [ { "params": [ "mem" ], "type": "field" }, { "params": [], "type": "mean" } ] ], "tags": [ { "key": "object", "operator": "=", "value": "qemu" } ] } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "LXC Memory Usage", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "percent", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": false } ], "yaxis": { "align": false, "alignLevel": null } }, { "collapsed": false, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 33 }, "id": 34, "panels": [], "title": "Disk I/O", "type": "row" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "InfluxDB", "fill": 1, "fillGradient": 0, "gridPos": { "h": 6, "w": 12, "x": 0, "y": 34 }, "id": 36, "interval": "", "legend": { "alignAsTable": true, "avg": false, "current": true, "hideZero": true, "max": true, "min": false, "rightSide": true, "show": true, "total": false, "values": true }, "lines": true, "linewidth": 1, "links": [], "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "alias": "$tag_host", "groupBy": [ { "params": [ "1m" ], "type": "time" }, { "params": [ "host" ], "type": "tag" }, { "params": [ "null" ], "type": "fill" } ], "measurement": "system", "orderByTime": "ASC", "policy": "default", "query": "SELECT abs(derivative(mean(\"diskread\"), 1s)) FROM \"system\" WHERE (\"object\" = 'qemu' AND \"nodename\" =~ /^$server$/) AND $timeFilter GROUP BY time(1m), \"host\" fill(null)", "rawQuery": true, "refId": "A", "resultFormat": "time_series", "select": [ [ { "params": [ "diskread" ], "type": "field" }, { "params": [], "type": "mean" }, { "params": [ "1s" ], "type": "derivative" } ] ], "tags": [ { "key": "object", "operator": "=", "value": "qemu" }, { "condition": "AND", "key": "nodename", "operator": "=~", "value": "/^$server$/" } ] } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "VMs I/O Read", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "Bps", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": false } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "InfluxDB", "fill": 1, "fillGradient": 0, "gridPos": { "h": 6, "w": 12, "x": 12, "y": 34 }, "id": 37, "interval": "", "legend": { "alignAsTable": true, "avg": false, "current": true, "hideZero": true, "max": true, "min": false, "rightSide": true, "show": true, "total": false, "values": true }, "lines": true, "linewidth": 2, "links": [], "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "alias": "$tag_host", "groupBy": [ { "params": [ "1m" ], "type": "time" }, { "params": [ "host" ], "type": "tag" }, { "params": [ "null" ], "type": "fill" } ], "hide": false, "measurement": "system", "orderByTime": "ASC", "policy": "default", "query": "SELECT abs(derivative(mean(\"diskwrite\"), 1s)) FROM \"system\" WHERE (\"object\" = 'qemu' AND \"nodename\" =~ /^$server$/) AND $timeFilter GROUP BY time(1m), \"host\" fill(null)", "rawQuery": true, "refId": "A", "resultFormat": "time_series", "select": [ [ { "params": [ "diskwrite" ], "type": "field" }, { "params": [], "type": "mean" }, { "params": [ "1s" ], "type": "derivative" } ] ], "tags": [ { "key": "object", "operator": "=", "value": "qemu" }, { "condition": "AND", "key": "nodename", "operator": "=", "value": "dianna" } ] } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "VMs I/O Write", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "Bps", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": false } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "InfluxDB", "fill": 1, "fillGradient": 0, "gridPos": { "h": 6, "w": 12, "x": 0, "y": 40 }, "id": 38, "interval": "", "legend": { "alignAsTable": true, "avg": false, "current": true, "hideZero": true, "max": true, "min": false, "rightSide": true, "show": true, "total": false, "values": true }, "lines": true, "linewidth": 1, "links": [], "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "alias": "$tag_host", "groupBy": [ { "params": [ "1m" ], "type": "time" }, { "params": [ "host" ], "type": "tag" }, { "params": [ "null" ], "type": "fill" } ], "measurement": "system", "orderByTime": "ASC", "policy": "default", "query": "SELECT abs(derivative(mean(\"diskread\"), 1s)) FROM \"system\" WHERE (\"object\" = 'lxc' AND \"nodename\" =~ /^$server$/) AND $timeFilter GROUP BY time(1m), \"host\" fill(null)", "rawQuery": true, "refId": "A", "resultFormat": "time_series", "select": [ [ { "params": [ "diskread" ], "type": "field" }, { "params": [], "type": "mean" }, { "params": [ "1s" ], "type": "derivative" } ] ], "tags": [ { "key": "object", "operator": "=", "value": "lxc" }, { "condition": "AND", "key": "nodename", "operator": "=~", "value": "/^$server$/" } ] } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "LXCs I/O Read", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "decimals": null, "format": "Bps", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": "0", "show": false } ], "yaxis": { "align": false, "alignLevel": 0 } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "InfluxDB", "fill": 1, "fillGradient": 0, "gridPos": { "h": 6, "w": 12, "x": 12, "y": 40 }, "id": 39, "interval": "", "legend": { "alignAsTable": true, "avg": false, "current": true, "hideZero": true, "max": true, "min": false, "rightSide": true, "show": true, "total": false, "values": true }, "lines": true, "linewidth": 2, "links": [], "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "alias": "$tag_host", "groupBy": [ { "params": [ "1m" ], "type": "time" }, { "params": [ "host" ], "type": "tag" }, { "params": [ "null" ], "type": "fill" } ], "measurement": "system", "orderByTime": "ASC", "policy": "default", "query": "SELECT abs(derivative(mean(\"diskwrite\"), 1s)) FROM \"system\" WHERE (\"object\" = 'lxc' AND \"nodename\" =~ /^$server$/) AND $timeFilter GROUP BY time(1m), \"host\" fill(null)", "rawQuery": true, "refId": "A", "resultFormat": "time_series", "select": [ [ { "params": [ "diskwrite" ], "type": "field" }, { "params": [], "type": "mean" }, { "params": [ "1s" ], "type": "derivative" } ] ], "tags": [ { "key": "object", "operator": "=", "value": "lxc" }, { "condition": "AND", "key": "nodename", "operator": "=", "value": "dianna" } ] } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "LXCs I/O Write", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "Bps", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": false } ], "yaxis": { "align": false, "alignLevel": null } }, { "collapsed": false, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 46 }, "id": 41, "panels": [], "title": "Network Traffic", "type": "row" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "InfluxDB", "fill": 1, "fillGradient": 0, "gridPos": { "h": 6, "w": 12, "x": 0, "y": 47 }, "id": 45, "interval": "", "legend": { "avg": true, "current": true, "max": false, "min": false, "show": true, "total": false, "values": true }, "lines": true, "linewidth": 1, "links": [], "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "alias": "Rx-$tag_instance", "groupBy": [ { "params": [ "$__interval" ], "type": "time" }, { "params": [ "null" ], "type": "fill" } ], "measurement": "nics", "orderByTime": "ASC", "policy": "default", "query": "SELECT abs(derivative(mean(\"receive\"), 10s)) AS \"Rx\" FROM \"nics\" WHERE (\"host\" =~ /^$server$/ AND \"instance\" =~ /bond[01]/) AND $timeFilter GROUP BY time($__interval), \"instance\" fill(null)", "rawQuery": true, "refId": "A", "resultFormat": "time_series", "select": [ [ { "params": [ "receive" ], "type": "field" }, { "params": [], "type": "mean" }, { "params": [ "10s" ], "type": "non_negative_derivative" }, { "params": [ "Rx" ], "type": "alias" } ] ], "tags": [ { "key": "host", "operator": "=~", "value": "/^$server$/" }, { "condition": "AND", "key": "instance", "operator": "=", "value": "enp2s0" } ] }, { "alias": "Tx-$tag_instance", "groupBy": [ { "params": [ "$__interval" ], "type": "time" }, { "params": [ "null" ], "type": "fill" } ], "measurement": "nics", "orderByTime": "ASC", "policy": "default", "query": "SELECT abs(derivative(mean(\"transmit\"), 10s)) FROM \"nics\" WHERE (\"host\" =~ /^$server$/ AND \"instance\" =~ /bond[01]/) AND $timeFilter GROUP BY time($__interval), \"instance\" fill(null)", "rawQuery": true, "refId": "B", "resultFormat": "time_series", "select": [ [ { "params": [ "transmit" ], "type": "field" }, { "params": [], "type": "mean" }, { "params": [ "10s" ], "type": "non_negative_derivative" } ] ], "tags": [ { "key": "host", "operator": "=~", "value": "/^$server$/" }, { "condition": "AND", "key": "instance", "operator": "=", "value": "enp2s0" } ] } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "bonds rx-tx", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "bps", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": false } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "InfluxDB", "fill": 1, "fillGradient": 0, "gridPos": { "h": 6, "w": 12, "x": 12, "y": 47 }, "id": 46, "interval": "", "legend": { "avg": true, "current": true, "max": false, "min": false, "show": true, "total": false, "values": true }, "lines": true, "linewidth": 1, "links": [], "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "alias": "Rx", "groupBy": [ { "params": [ "$__interval" ], "type": "time" }, { "params": [ "null" ], "type": "fill" } ], "measurement": "nics", "orderByTime": "ASC", "policy": "default", "query": "SELECT abs(derivative(mean(\"receive\"), 10s)) FROM \"nics\" WHERE (\"host\" =~ /^$server$/ AND \"instance\" = 'vmbr0') AND $timeFilter GROUP BY time($__interval) fill(null)", "rawQuery": true, "refId": "A", "resultFormat": "time_series", "select": [ [ { "params": [ "receive" ], "type": "field" }, { "params": [], "type": "mean" }, { "params": [ "10s" ], "type": "non_negative_derivative" } ] ], "tags": [ { "key": "host", "operator": "=~", "value": "/^$server$/" }, { "condition": "AND", "key": "instance", "operator": "=", "value": "vmbr0" } ] }, { "alias": "Tx", "groupBy": [ { "params": [ "$__interval" ], "type": "time" }, { "params": [ "null" ], "type": "fill" } ], "measurement": "nics", "orderByTime": "ASC", "policy": "default", "query": "SELECT abs(derivative(mean(\"transmit\"), 10s)) FROM \"nics\" WHERE (\"host\" =~ /^$server$/ AND \"instance\" = 'vmbr0') AND $timeFilter GROUP BY time($__interval) fill(null)", "rawQuery": true, "refId": "B", "resultFormat": "time_series", "select": [ [ { "params": [ "transmit" ], "type": "field" }, { "params": [], "type": "mean" }, { "params": [ "10s" ], "type": "non_negative_derivative" } ] ], "tags": [ { "key": "host", "operator": "=~", "value": "/^$server$/" }, { "condition": "AND", "key": "instance", "operator": "=", "value": "vmbr0" } ] } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "vmbr0", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "bps", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": false } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "InfluxDB", "fill": 1, "fillGradient": 0, "gridPos": { "h": 6, "w": 12, "x": 0, "y": 53 }, "id": 47, "interval": "", "legend": { "alignAsTable": true, "avg": true, "current": true, "hideEmpty": false, "hideZero": true, "max": false, "min": false, "rightSide": true, "show": true, "total": false, "values": true }, "lines": true, "linewidth": 1, "links": [], "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "alias": "$tag_host", "groupBy": [ { "params": [ "$__interval" ], "type": "time" }, { "params": [ "host" ], "type": "tag" }, { "params": [ "null" ], "type": "fill" } ], "measurement": "system", "orderByTime": "ASC", "policy": "default", "query": "SELECT abs(derivative(mean(\"netin\"), 10s)) FROM \"system\" WHERE (\"nodename\" =~ /^$server$/ AND \"object\" = 'qemu') AND $timeFilter GROUP BY time($__interval), \"host\" fill(null)", "rawQuery": true, "refId": "A", "resultFormat": "time_series", "select": [ [ { "params": [ "netin" ], "type": "field" }, { "params": [], "type": "mean" }, { "params": [ "10s" ], "type": "non_negative_derivative" } ] ], "tags": [ { "key": "nodename", "operator": "=~", "value": "/^$server$/" }, { "condition": "AND", "key": "object", "operator": "=", "value": "qemu" } ] } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "VMs Traffic In", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "bps", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": false } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "InfluxDB", "fill": 1, "fillGradient": 0, "gridPos": { "h": 6, "w": 12, "x": 12, "y": 53 }, "id": 49, "interval": "", "legend": { "alignAsTable": true, "avg": true, "current": true, "hideEmpty": false, "hideZero": true, "max": false, "min": false, "rightSide": true, "show": true, "total": false, "values": true }, "lines": true, "linewidth": 1, "links": [], "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "alias": "$tag_host", "groupBy": [ { "params": [ "$__interval" ], "type": "time" }, { "params": [ "host" ], "type": "tag" }, { "params": [ "null" ], "type": "fill" } ], "measurement": "system", "orderByTime": "ASC", "policy": "default", "query": "SELECT abs(derivative(mean(\"netout\"), 10s)) FROM \"system\" WHERE (\"nodename\" =~ /^$server$/ AND \"object\" = 'qemu') AND $timeFilter GROUP BY time($__interval), \"host\" fill(null)", "rawQuery": true, "refId": "A", "resultFormat": "time_series", "select": [ [ { "params": [ "netout" ], "type": "field" }, { "params": [], "type": "mean" }, { "params": [ "10s" ], "type": "non_negative_derivative" } ] ], "tags": [ { "key": "nodename", "operator": "=~", "value": "/^$server$/" }, { "condition": "AND", "key": "object", "operator": "=", "value": "qemu" } ] } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "VMs Traffic Out", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "bps", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": false } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "InfluxDB", "fill": 1, "fillGradient": 0, "gridPos": { "h": 6, "w": 12, "x": 0, "y": 59 }, "id": 48, "interval": "", "legend": { "alignAsTable": true, "avg": true, "current": true, "hideEmpty": false, "hideZero": true, "max": false, "min": false, "rightSide": true, "show": true, "total": false, "values": true }, "lines": true, "linewidth": 1, "links": [], "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "alias": "$tag_host", "groupBy": [ { "params": [ "$__interval" ], "type": "time" }, { "params": [ "host" ], "type": "tag" }, { "params": [ "null" ], "type": "fill" } ], "measurement": "system", "orderByTime": "ASC", "policy": "default", "query": "SELECT abs(derivative(mean(\"netin\"), 10s)) FROM \"system\" WHERE (\"nodename\" =~ /^$server$/ AND \"object\" = 'lxc') AND $timeFilter GROUP BY time($__interval), \"host\" fill(null)", "rawQuery": true, "refId": "A", "resultFormat": "time_series", "select": [ [ { "params": [ "netin" ], "type": "field" }, { "params": [], "type": "mean" }, { "params": [ "10s" ], "type": "non_negative_derivative" } ] ], "tags": [ { "key": "nodename", "operator": "=~", "value": "/^$server$/" }, { "condition": "AND", "key": "object", "operator": "=", "value": "lxc" } ] } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "LCXs Traffic In", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "bps", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": false } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "InfluxDB", "fill": 1, "fillGradient": 0, "gridPos": { "h": 6, "w": 12, "x": 12, "y": 59 }, "id": 50, "interval": "", "legend": { "alignAsTable": true, "avg": true, "current": true, "hideEmpty": false, "hideZero": true, "max": false, "min": false, "rightSide": true, "show": true, "total": false, "values": true }, "lines": true, "linewidth": 1, "links": [], "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "alias": "$tag_host", "groupBy": [ { "params": [ "$__interval" ], "type": "time" }, { "params": [ "host" ], "type": "tag" }, { "params": [ "null" ], "type": "fill" } ], "measurement": "system", "orderByTime": "ASC", "policy": "default", "query": "SELECT abs(derivative(mean(\"netout\"), 10s)) FROM \"system\" WHERE (\"nodename\" =~ /^$server$/ AND \"object\" = 'lxc') AND $timeFilter GROUP BY time($__interval), \"host\" fill(null)", "rawQuery": true, "refId": "A", "resultFormat": "time_series", "select": [ [ { "params": [ "netout" ], "type": "field" }, { "params": [], "type": "mean" }, { "params": [ "10s" ], "type": "non_negative_derivative" } ] ], "tags": [ { "key": "nodename", "operator": "=~", "value": "/^$server$/" }, { "condition": "AND", "key": "object", "operator": "=", "value": "lxc" } ] } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "LXCs Traffic Out", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "bps", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": false } ], "yaxis": { "align": false, "alignLevel": null } }, { "collapsed": false, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 65 }, "id": 52, "panels": [], "title": "Storage Pools", "type": "row" }, { "cacheTimeout": null, "colorBackground": false, "colorValue": false, "colors": [ "#299c46", "rgba(237, 129, 40, 0.89)", "#d44a3a" ], "datasource": "InfluxDB", "format": "percentunit", "gauge": { "maxValue": 1, "minValue": 0, "show": true, "thresholdLabels": false, "thresholdMarkers": true }, "gridPos": { "h": 7, "w": 4, "x": 6, "y": 66 }, "id": 54, "interval": null, "links": [], "mappingType": 1, "mappingTypes": [ { "name": "value to text", "value": 1 }, { "name": "range to text", "value": 2 } ], "maxDataPoints": 100, "nullPointMode": "connected", "nullText": null, "options": {}, "pluginVersion": "6.1.3", "postfix": "", "postfixFontSize": "50%", "prefix": "", "prefixFontSize": "50%", "rangeMaps": [ { "from": "null", "text": "N/A", "to": "null" } ], "sparkline": { "fillColor": "rgba(31, 118, 189, 0.18)", "full": false, "lineColor": "rgb(31, 120, 193)", "show": false }, "tableColumn": "", "targets": [ { "groupBy": [ { "params": [ "$__interval" ], "type": "time" }, { "params": [ "null" ], "type": "fill" } ], "orderByTime": "ASC", "policy": "default", "query": "SELECT last(\"used\") / last(\"total\") FROM \"system\" WHERE (\"host\" = 'local-lvm' AND \"nodename\" =~ /^$server$/) AND $timeFilter GROUP BY time($__interval) fill(null)", "rawQuery": true, "refId": "A", "resultFormat": "time_series", "select": [ [ { "params": [ "value" ], "type": "field" }, { "params": [], "type": "mean" } ] ], "tags": [] } ], "thresholds": "0.75,0.875", "timeFrom": null, "timeShift": null, "title": "local-lvm Usage", "transparent": true, "type": "singlestat", "valueFontSize": "80%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" } ], "valueName": "current" }, { "cacheTimeout": null, "colorBackground": false, "colorValue": false, "colors": [ "#299c46", "rgba(237, 129, 40, 0.89)", "#d44a3a" ], "datasource": "InfluxDB", "format": "percentunit", "gauge": { "maxValue": 1, "minValue": 0, "show": true, "thresholdLabels": false, "thresholdMarkers": true }, "gridPos": { "h": 7, "w": 4, "x": 10, "y": 66 }, "id": 63, "interval": null, "links": [], "mappingType": 1, "mappingTypes": [ { "name": "value to text", "value": 1 }, { "name": "range to text", "value": 2 } ], "maxDataPoints": 100, "nullPointMode": "connected", "nullText": null, "options": {}, "pluginVersion": "6.1.3", "postfix": "", "postfixFontSize": "50%", "prefix": "", "prefixFontSize": "50%", "rangeMaps": [ { "from": "null", "text": "N/A", "to": "null" } ], "sparkline": { "fillColor": "rgba(31, 118, 189, 0.18)", "full": false, "lineColor": "rgb(31, 120, 193)", "show": false }, "tableColumn": "", "targets": [ { "groupBy": [ { "params": [ "$__interval" ], "type": "time" }, { "params": [ "null" ], "type": "fill" } ], "orderByTime": "ASC", "policy": "default", "query": "SELECT last(\"used\") / last(\"total\") FROM \"system\" WHERE (\"host\" = 'local-lvm-test' AND \"nodename\" =~ /^$server$/) AND $timeFilter GROUP BY time($__interval) fill(null)", "rawQuery": true, "refId": "A", "resultFormat": "time_series", "select": [ [ { "params": [ "value" ], "type": "field" }, { "params": [], "type": "mean" } ] ], "tags": [] } ], "thresholds": "0.75,0.875", "timeFrom": null, "timeShift": null, "title": "local-lvm-test Usage", "transparent": true, "type": "singlestat", "valueFontSize": "80%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" } ], "valueName": "current" }, { "cacheTimeout": null, "colorBackground": false, "colorValue": false, "colors": [ "#299c46", "rgba(237, 129, 40, 0.89)", "#d44a3a" ], "datasource": "InfluxDB", "format": "percentunit", "gauge": { "maxValue": 1, "minValue": 0, "show": true, "thresholdLabels": false, "thresholdMarkers": true }, "gridPos": { "h": 7, "w": 4, "x": 15, "y": 66 }, "id": 55, "interval": null, "links": [], "mappingType": 1, "mappingTypes": [ { "name": "value to text", "value": 1 }, { "name": "range to text", "value": 2 } ], "maxDataPoints": 100, "nullPointMode": "connected", "nullText": null, "options": {}, "pluginVersion": "6.1.3", "postfix": "", "postfixFontSize": "50%", "prefix": "", "prefixFontSize": "50%", "rangeMaps": [ { "from": "null", "text": "N/A", "to": "null" } ], "sparkline": { "fillColor": "rgba(31, 118, 189, 0.18)", "full": false, "lineColor": "rgb(31, 120, 193)", "show": false }, "tableColumn": "", "targets": [ { "groupBy": [ { "params": [ "$__interval" ], "type": "time" }, { "params": [ "null" ], "type": "fill" } ], "orderByTime": "ASC", "policy": "default", "query": "SELECT last(\"used\") / last(\"total\") FROM \"system\" WHERE (\"host\" = 'local' AND \"nodename\" =~ /^$server$/) AND $timeFilter GROUP BY time($__interval) fill(null)", "rawQuery": true, "refId": "A", "resultFormat": "time_series", "select": [ [ { "params": [ "value" ], "type": "field" }, { "params": [], "type": "mean" } ] ], "tags": [] } ], "thresholds": "0.75,0.875", "timeFrom": null, "timeShift": null, "title": "local Usage", "transparent": true, "type": "singlestat", "valueFontSize": "80%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" } ], "valueName": "current" } ], "refresh": "10s", "schemaVersion": 20, "style": "dark", "tags": [ "ProxMox", "Storage", "Hypervisor" ], "templating": { "list": [ { "allValue": null, "current": { "text": "cloud", "value": "cloud" }, "datasource": "InfluxDB", "definition": "SHOW TAG VALUES FROM system WITH KEY=host WHERE object='nodes'", "hide": 0, "includeAll": false, "label": "Server", "multi": true, "name": "server", "options": [], "query": "SHOW TAG VALUES FROM system WITH KEY=host WHERE object='nodes'", "refresh": 1, "regex": "", "skipUrlSync": false, "sort": 5, "tagValuesQuery": "", "tags": [], "tagsQuery": "", "type": "query", "useTags": false } ] }, "time": { "from": "now-24h", "to": "now" }, "timepicker": { "refresh_intervals": [ "5s", "10s", "30s", "1m", "5m", "15m", "30m", "1h", "2h", "1d" ], "time_options": [ "5m", "15m", "1h", "6h", "12h", "24h", "2d", "7d", "30d" ] }, "timezone": "", "title": "Proxmox", "uid": "kxQQuHRZk", "version": 29 } 

  • Import .

- . , Dashboard' Gitlab. , , Prometheus , Datastore Grafana , external, datastore.


Grafana , .
Grafana dashboard Proxmox
Proxmox VE dashboard
Proxmox Network

Source: https://habr.com/ru/post/473576/


All Articles