Merge branch 'export-groupfolders' into 'master'
add prometheus exporter for groupfolder metrics See merge request infra/ansible/roles/nextcloud!2
This commit is contained in:
commit
20234f9c3f
5 changed files with 104 additions and 0 deletions
|
|
@ -19,3 +19,6 @@ nextcloud:
|
||||||
pw: None
|
pw: None
|
||||||
name: nextcloud
|
name: nextcloud
|
||||||
groupfolders: []
|
groupfolders: []
|
||||||
|
prometheus_exporter:
|
||||||
|
enabled: True
|
||||||
|
port: 9123
|
||||||
18
files/nextcloud-prometheus-exporter.service
Normal file
18
files/nextcloud-prometheus-exporter.service
Normal 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
6
handlers/main.yml
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
- name: restart prometheus exporter
|
||||||
|
service:
|
||||||
|
name: nextcloud-prometheus-exporter
|
||||||
|
enabled: True
|
||||||
|
daemon_reload: True
|
||||||
|
state: restarted
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
49
templates/nextcloud-prometheus-exporter.py.j2
Normal file
49
templates/nextcloud-prometheus-exporter.py.j2
Normal 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)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue