add prometheus exporter for groupfolder metrics

This commit is contained in:
psy 2023-04-01 18:10:20 +02:00
parent 60cdcab011
commit edfa0b07ff
No known key found for this signature in database
GPG key ID: 30546501FF65B1A5
5 changed files with 104 additions and 0 deletions

View file

@ -19,3 +19,6 @@ nextcloud:
pw: None pw: None
name: nextcloud name: nextcloud
groupfolders: [] groupfolders: []
prometheus_exporter:
enabled: True
port: 9123

View file

@ -0,0 +1,18 @@
[Unit]
Description=nextcloud prometheus exporter
After=mariadb.service
Requires=mariadb.service
[Install]
WantedBy=multi-user.target
[Service]
ExecStart=/usr/bin/python3 /usr/local/bin/nextcloud-prometheus-exporter.py
Environment=PYTHONUNBUFFERED=1
Restart=always
User=www-data
Group=www-data
NoNewPrivileges=True
#ProtectSystem=strict

6
handlers/main.yml Normal file
View file

@ -0,0 +1,6 @@
- name: restart prometheus exporter
service:
name: nextcloud-prometheus-exporter
enabled: True
daemon_reload: True
state: restarted

View file

@ -115,3 +115,31 @@
state: link state: link
notify: notify:
- restart nginx - restart nginx
- name:
when: nextcloud.prometheus_exporter.enabled
block:
- name: install python and modules
apt:
pkg:
- python3
- python3-prometheus-client
- python3-schedule
- name: copy exporter script
notify: restart prometheus exporter
template:
src: nextcloud-prometheus-exporter.py.j2
dest: /usr/local/bin/nextcloud-prometheus-exporter.py
owner: root
group: root
mode: 0755
- name: copy systemd service file
notify: restart prometheus exporter
copy:
src: nextcloud-prometheus-exporter.service
dest: /etc/systemd/system
owner: root
group: root
mode: 0644

View file

@ -0,0 +1,49 @@
import json
from prometheus_client import Gauge, Summary, start_http_server
import subprocess
import schedule
from time import sleep
gauge_groupfolder_quota = Gauge('nextcloud_groupfolder_quota_bytes', 'nextcloud groupfolder quota', ['folder'])
gauge_groupfolder_size = Gauge('nextcloud_groupfolder_bytes', 'nextcloud groupfolder size', ['folder'])
def occ(cmd):
args = ['/usr/bin/php', '/usr/share/nextcloud/occ', cmd, '--output=json']
process = subprocess.run(args, capture_output=True)
output = None
try:
process.check_returncode()
output = json.loads(process.stdout.decode('utf-8'))
except Exception as e:
print('OCC command returned an error:')
print(str(e))
print(process.stderr.decode('utf-8'))
return output
def update_groupfolders():
groupfolders = occ('groupfolders:list')
if not groupfolders:
return
for groupfolder in groupfolders:
gauge_groupfolder_quota.labels(groupfolder['mount_point']).set(int(groupfolder['quota']))
gauge_groupfolder_size.labels(groupfolder['mount_point']).set(int(groupfolder['size']))
if __name__ == '__main__':
update_groupfolders()
schedule.every().minute.do(update_groupfolders)
start_http_server(addr='127.0.0.1', port={{ nextcloud.prometheus_exporter.port }})
while True:
schedule.run_pending()
sleep(1)