Informe de consumo de cada usuario en Nextcloud
Si aún queremos explotar más nuestra instalación de Nextcloud y queremos saber cuánto está consumiendo cada usuario… este es tu post! Va a quedar chulísimo por que vamos a verlo directamente desde nuestro Grafana!
Usaremos un script llamado ‘user usage report’ que podremos descargar de la web de Apps de Nextcloud, descargaremos la versión que corresponda con nuestra instalación de Nextcloud, en este post usamos Nextcloud 13. La dejamos en el directorio de las Apps dentro de nuestro servidor de Nextcloud, para ello, algo como esto nos ayudará, al final accedemos al directorio donde está el binario occ y lo hacemos ejecutable:
mv user_usage_report-1.0.1.tar.gz /var/www/nextcloud/apps/ cd /var/www/nextcloud/apps tar zxfv user_usage_report-1.0.1.tar.gz rm user_usage_report-1.0.1.tar.gz cd /var/www/nextcloud sudo chmod +x occ
Tras ello, podremos probar directamente a ver qué nos devuelve este maravilloso script. Para ver el informe de uso de los datos del usuario admin podremos ejecutar el siguiente comando y veremos su output:
sudo -u www-data ./occ usage-report:generate admin "admin","2018-08-20T20:35:50+00:00",-2,7518695,20,0,0,0
Ole! ya vemos de alguna manera el uso de un sólo usuario, bien, y si queremos ver de todos? Pues quitando el usuario 🙂
sudo -u www-data ./occ usage-report:generate "admin","2018-08-20T20:36:32+00:00",-2,7518695,20,0,0,0 "88133B49-A6A5-4035-83EB-3193BDD19E3B","2018-08-20T20:36:32+00:00",-2,7952664,32,1,0,16 "57D0CD27-A319-4A36-92D3-E541B7DD84C9","2018-08-20T20:36:32+00:00",-2,"",,0,0,0 "5BA5460C-FF2F-4DAC-8C1F-5427729DDD4D","2018-08-20T20:36:32+00:00",-2,7435791,12,0,0,0 "61F42891-B220-43AB-9568-4390753DDBF5","2018-08-20T20:36:32+00:00",-2,"",,0,0,0 "272407CC-6361-49F4-A3B5-F8A26FDDDE18","2018-08-20T20:36:32+00:00",-2,"",,0,0,0 "755784D0-F0AE-4DF9-BD88-E3A5B5BDD374","2018-08-20T20:36:32+00:00",-2,7435791,12,0,0,0 "BA886970-5134-45FD-8D42-D11DCDDE57A","2018-08-20T20:36:32+00:00",-2,"",,0,0,0 "A6E28617-BB75-4080-A7B3-9F22E4DD184A","2018-08-20T20:36:32+00:00",-2,"",,0,0,0 "3009D13B-0236-48D4-B771-604932DD47F1","2018-08-20T20:36:32+00:00",-2,"",,0,0,0
Lo que me saca son los identificadores de los usuarios del Nextcloud, los tengo sincronizados con el Directorio Activo. Todo esto podremos exportarlo en CSV y parar aquí ya el post. Te haces las gráficas como quieras con un Excel y listo. Ya que lo que vemos es un formato CSV con los siguientes campos:
- Identificador del usuario.
- Fecha del report.
- Si tiene quotas habilitado (-3 sería ilimitado, -2 no fijado).
- Espacio consumido en su carpeta.
- Número de ficheros en su home.
- Número de ítems compartidos.
- Número de ficheros creados.
- Número de ficheros vistos o descargados.
En el caso que nos atañe, si conocéis por donde voy a tirar… la intención mía es crear un script que exporte dicha información a un servidor de MySQL, guardando en una tabla todos estos datos y así luego con Grafana trabajarlos de una manera más sencilla.
En mi caso creo este script que hará el trabajo por mí, lo llamo «/root/nextcloud_uso_a_mysql.sh» con el siguiente contenido:
cd /var/www/nextcloud/ sudo -u www-data ./occ usage-report:generate > /tmp/nextcloud_uso1.csv awk '{gsub(/\"/,"")};1' /tmp/nextcloud_uso1.csv > /tmp/nextcloud_uso.csv sed -i -e 's/88133B49-A6A5-4035-83EB-3193B4DD9D3B/Hector Herrero/g' /tmp/nextcloud_uso.csv sed -i -e 's/755784D0-F0AE-4DF9-BD88-E3A5B5DDD74/Seila Fernandez/g' /tmp/nextcloud_uso.csv sed -i -e 's/A6E28617-BB75-4080-A7B3-9F22E4DD8DA/David Guerrero/g' /tmp/nextcloud_uso.csv scp /tmp/nextcloud_uso.csv pi@192.168.1.197:/home/pi mysqlimport -h SERVIDOR_MYSQL -uroot -pCONTRASEÑA NOMBRE_BD --fields-terminated-by=',' /home/pi/nextcloud_uso.csv
Como vemos malamente consigo exportar a un CSV los datos, le elimino todas las dobles comillas que molestan, y reemplazo los identificadores que me escupe con los nombres correctos de mis usuarios del AD. Al final subo el fichero csv al servidor MySQL con scp y lo importo, cogerá el nombre de tabla del nombre del fichero que importamos. Guardamos el script y lo hacemos ejecutable 🙂
Y directamente podremos programarlo en cron, en mi caso, con que se ejecute una vez al día me vale y me sobra, así que en este ejemplo lo programo para las 00:01 de forma diraría. Cada día importará en la tabla de MySQL nuevos datos!
crontab -e 1 0 * * * /root/nextcloud_uso_a_mysql.sh
La tabla que estoy usando en MySQL se llama ‘nextcloud_uso’ y esta compuesta de usuario, fetxa, quota, espacio, ficheros, compartidos, creados, movido y fecha, como veréis son datos más que jugosos para luego tratarlos con Grafana… os dejo el script por si queréis crear la tabla con la misma estructura que yo:
CREATE TABLE `nextcloud_uso` ( `usuario` CHAR(40) NULL DEFAULT NULL, `fetxa` CHAR(10) NULL DEFAULT NULL, `quota` FLOAT NULL DEFAULT NULL, `espacio` FLOAT NULL DEFAULT NULL, `ficheros` FLOAT NULL DEFAULT NULL, `compartidos` FLOAT NULL DEFAULT NULL, `creados` FLOAT NULL DEFAULT NULL, `movido` FLOAT NULL DEFAULT NULL, `fecha` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) COLLATE='latin1_swedish_ci' ENGINE=InnoDB ROW_FORMAT=COMPACT ;
Y ahora no queda más que visualizar los datos! Os paso este par de ejemplos, donde en el primero, con un quesito veremos los datos que están usando actualmente nuestros datos, de una manera gráfica y con un vistazo rápido sabremos quien es el gañan que se chupa todo el espacio 🙂 Y a la derecha os dejo una gráfica de cómo iría creciendo el uso de datos de nuestros usuarios. Pero ojo! Que en la tabla tenemos más datos curiosos! Como saber quien comparte más, quien trabaja más, etc, etc…
Os dejo una pista de las consultas que usé en Grafana para que os quede igual, o vaya, a vosotros mejor! En un dashboard, creamos:
- Quesito o Pie Chart: Sería cuestión de ir añadiendo las series que nos interesan contra nuestro Data Source de MySQL, ejemplo de una de ellas:
select fecha as time_sec, usuario as metric, espacio as value from nextcloud_uso where usuario = 'Hector Herrero' order by fecha desc limit 1
- Gráfica o Graph: Lo mismo, ir añadiendo las series que queremos que nos pinte, ejemplo:
SELECT espacio as value, "Hector Herrero" as metric, UNIX_TIMESTAMP(fecha) as time_sec FROM nextcloud_uso WHERE $__timeFilter(fecha) and usuario = 'Hector Herrero' order by fecha desc
Si estás algo perdido con Grafana y necesitas saber cómo instalarlo, echa un vistazo a este post que te puede servir de ayuda, luego como mucho tendrás que hacer un conector o Data Source contra tu servidor MySQL! Bueno, espero os haya gustado! El que no tiene su entorno controlado es por que no quiere!!! Ahí os lo dejo! Chulo, chulo…
Posts recomendados:
- Gestión de calendarios con Radicale - 23 de mayo de 2024
- Monitorizando las reglas UTM web de nuestro firewall gracias a Centreon - 21 de mayo de 2024
- Backup automatizado de la configuración de Fortigate - 16 de mayo de 2024