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
|
||||
name: nextcloud
|
||||
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
|
||||
notify:
|
||||
- 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