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…

 

Héctor Herrero