Header Ads

Netdata

Netdata es un excelente monitor de recursos de sistema. Según Wikipedia sirve para "visualizar y monitorear métricas en tiempo real, optimizada para acumular todo tipo de datos, como uso de CPU, actividad de disco, consultas SQL, visitas a un sitio web, etc.". 
Sin embargo a veces puede ser muy engorroso instalarlo o eliminarlo de nuestro sistema. A continuación los métodos más comunes:

Instalación del canal nightly:
bash <(curl -Ss https://my-netdata.io/kickstart.sh)
Instalación del canal stable:
bash <(curl -Ss https://my-netdata.io/kickstart.sh) --stable-channel
Eliminar este tipo de instalación:
sudo /usr/libexec/netdata/netdata-uninstaller.sh --force --yes
Instalación apt-get
Para los amantes de apt-get, lamentamos informarle que, a pesar de que netdata se encuentra en los repositorios oficiales de Ubuntu/Debian, la versión es antigua y con muchos errores, por tanto no se recomienda y si ya la tienen instalada, deben eliminarla, así como cualquier rastro de sus carpetas y archivos:
sudo apt -y purge netdata netdata-core
sudo rm -rf /var/log/netdata /etc/init.d/netdata /etc/netdata /var/lib/netdata /usr/libexec/netdata /usr/sbin/netdata /usr/share/netdata /usr/share/doc/netdata* /var/cache/netdata /var/lib/dpkg/info/netdata* /usr/share/lintian/overrides/netdata* /var/crash/_usr_sbin_netdata* /var/crash/netdata* /etc/logrotate.d/netdata /etc/apt/sources.list.d/netdata_netdata.list &> /dev/null
sudo apt clean && sudo apt autoclean && sudo apt autoremove && sudo sync && sudo updatedb
Y actualizar su sistema:
sudo apt update && sudo apt upgrade
Si no la tienen instalada o la tenían y ya la eliminaron, instalen la última versión:
curl -s https://packagecloud.io/install/repositories/netdata/netdata/script.deb.sh | sudo bash
sudo apt -y install netdata
Es mejor asegurarse de que se crearon correctamente los archivos .log, con los permisos correspondientes:
if [ ! -d /var/log/netdata ]; then sudo mkdir -p /var/log/netdata && sudo touch /var/log/netdata/{access,error,debug}.log && sudo chown -R root:root /var/log/netdata; fi
Al finalizar la instalación, verificamos que el servicio esté active (running), sin errores:
sudo systemctl status netdata
netdata.service - Real time performance monitoring
Loaded: loaded (/lib/systemd/system/netdata.service; disabled; vendor preset: enabled)
     Active: active (running) since Wed 2021-06-23 10:13:41 -05; 6s ago
   Main PID: 1485503 (netdata)
      Tasks: 56 (limit: 18941)
     Memory: 70.7M
     CGroup: /system.slice/netdata.service
             ├─1485503 /usr/sbin/netdata -D
             ├─1485513 /usr/sbin/netdata --special-spawn-server
             ├─1485705 /usr/libexec/netdata/plugins.d/go.d.plugin 1
             ├─1485713 /usr/libexec/netdata/plugins.d/nfacct.plugin 1
             ├─1485719 /usr/libexec/netdata/plugins.d/apps.plugin 1
             ├─1485720 /usr/libexec/netdata/plugins.d/ebpf.plugin 1
             ├─1485721 bash /usr/libexec/netdata/plugins.d/tc-qos-helper.sh 1
             └─1485728 /usr/bin/python /usr/libexec/netdata/plugins.d/python.d.plugin 1
jun 23 10:13:41 server netdata[1485503]: bla bla bla...
O más sencillo:
sudo systemctl | grep -i netdata
netdata.service                                                                                                                         loaded active     running   Real time performance monitoring
Y verificamos el puerto tcp 19999 (la salida puede variar en su PC):
sudo netstat -nat | grep 19999 
# or sudo netstat -lnp | grep 19999
# or sudo ss -tulwn | grep 19999
# or sudo lsof -i:19999
tcp        0      0 127.0.1.1:19999         0.0.0.0:*               ESCUCHAR   
tcp        0      0 127.0.0.1:19999         0.0.0.0:*               ESCUCHAR   
tcp        0      0 127.0.0.1:19999         127.0.0.1:56114         ESTABLECIDO
tcp        0      0 127.0.0.1:56114         127.0.0.1:19999         ESTABLECIDO
Accediendo por su navegador (localhost o 127.0.0.1):
http://localhost:19999/
Nota: Tenga en cuenta que netdata por defecto no trae activado conexiones TLS (https) por que para esto es necesario un certificado. Para mayor información consulte AQUÍ
Si quiere reemplazar localhost por su IP (no recomendado), edite el archivo:
/etc/netdata/netdata.conf
Y reemplace la línea localhost por su IP:
bind to = localhost
Y reiniciamos
sudo systemctl restart netdata

# o /etc/init.d/netdata {start|stop|status|restart|force-reload}

sudo /etc/init.d/netdata restart
En caso de que no pueda iniciarlo/detenerlo con systemctl o con el script de init.d, o suceda alguna cosa rara que traiga como resultado la caída de netstat, puede iniciarlo manualmente (Para mayor información sobre el demonio pulse AQUÍ):
Nota: Tenga en cuenta que, en algunos escenarios, netdata deja procesos abiertos, incluso después de cerrado, tales como:
root      141936  4.0  0.0 453868  3572 ?        Sl   08:14   0:02 /usr/libexec/netdata/plugins.d/ebpf.plugin 1
netdata   141943 21.5  0.0  70220 25432 ?        Sl   08:14   0:00 /usr/bin/python /usr/libexec/netdata/plugins.d/python.d.plugin 1
# cerrando netdata
sudo killall -s SIGTERM netdata
# o
for pid in $(ps -ef | grep "netdata" | awk '{print $2}'); do sudo kill -9 $pid; done &> /dev/null
# o
sudo pkill -f netdata
# cerrando el puerto TCP 19999
sudo kill $(lsof -t -i:19999) &> /dev/null
# Verifique que no queden procesos abiertos:
ps aux | grep netdata
# Y luego inicia netdata con:
sudo /usr/sbin/netdata
# o
sudo netdata
Si no quiere hacerlo manualmente, puede ejecutar el siguiente script:
#!/bin/bash
l1=("Set process name" "Establezca el nombre del proceso")
l2=("e.g." "ej.")
l3=("There are no records of:" "No hay registros de:")
l4=("Done" "Terminado")
test "${LANG:0:2}" == "en"
en=$?
clear
read -p "${l1[${en}]} (${l2[${en}]} netdata): " PS
f() { ps ax | grep "$1" | grep -v grep | awk '{print $1}' | xargs kill -9 &> /dev/null; }
f $PS
if [  $? -gt 0 ]; then
   echo "${l3[${en}]}" $PS
else
   echo "${l4[${en}]}"
fi
O algo mejor. Creamos un script "vigilante" (con privilegios, en init.d y con permisos chmod +x), que en caso de no detectar netdata, mata cualquier proceso relacionado (si existe), inicia el servicio y deja constancia en syslog:
#!/bin/bash
# Netdata Alert
DATE=`date +%d/%m/%Y" "%H:%M:%S`
SLEEP_TIME="20"
if [[ `ps -A | grep netdata` != "" ]];then
  echo -e "\nONLINE"
 else
  echo -e "\n"
  /etc/init.d/netdata stop &> /dev/null
  pkill -f netdata &> /dev/null
  sleep ${SLEEP_TIME}
  /etc/init.d/netdata start
  echo "NetData start: $DATE" >> /var/log/syslog
fi
Y lo programamos en el crontab para que se ejecute regularmente (por ejemplo cada hora):
@hourly /etc/init.d/netdataalert.sh
Con la tecnología de Blogger.