2020-10 upd: we reached the first fundraising goal and rented a server in Hetzner for development! Thank you for donating !
Attention! I apologize for the automatic translation of this text. You can improve it by sending me a more correct version of the text or fix html pages via GITHUB repository.
Внимание! Данные страницы описывают CBSD версии 13.0.x. Если вы используете более раннюю версию, рекомендуется сначала обновиться.
CBSD: export RACCT metrics
Intro
wip/draft
Export metrics to beanstalk highly experimental and not enabled by default. So no, beanstalkd at the moment is optional ( and probably will remain so ). Another backend for metrics is SQLite3 (already done) and Prometheus ( still wip ).
If you with to play with metrics enable cbsd racct services:
-
for bhyve metrics:
sysrc cbsd_statsd_bhyve_enable=YES
service cbsd-statsd-bhyve start
-
for jail metics:
sysrc cbsd_statsd_jail_enable=YES
service cbsd-statsd-jail start
-
for hoster metics ( required by DRS):
sysrc cbsd_statsd_hoster_enable=YES
service cbsd-statsd-hoster start
Also you need to enable/install beanstalkd:
pkg install -y net/beanstalkd
sysrc beanstalkd_enable=YES
sysrc beanstalkd_flags="-l 127.0.0.1 -p 11300"
service beanstalkd start
To receive real-time metrics use 'racct-jail' tube in beasntalkd to receive metrics for jail (in json), 'racct-bhyve' tube for bhyve and 'racct-system' for hoster metrics
update rate and other settings are in the corresponding configuration file in ~cbsd/etc/default directory (racct-{jail,bhyve,hoster}-statsd.conf). Please use ~cbsd/etc directory for overwrite default settings.
E.g. simple python-based client:
pkg install -y net/py-beanstalkc (install client)
#!/usr/bin/env python2.7 import beanstalkc #import time import sys try: bsk = beanstalkc.Connection(host='localhost', port=11300) bsk.watch('racct-jail') bsk.use('racct-jail') except: print "cannot open connection" sys.stdout.flush() sys.exit(1) while 1: #print time.strftime('%Y-%m-%d %X'), " waiting for work ..." sys.stdout.flush() job = bsk.reserve(timeout=60) if job is not None: # I had to delete it immediately job.delete() try: sys.stdout.flush() print(repr(job.body)) except: print "bad things" sys.stdout.flush()