Pushing Panel Data to Statsd¶
Purpose¶
Systems like cartography and starbase are “point in time”. This approach makes it easy to query the current state of the data, but sometimes having a view of the data over a period of time is needed to see trends. Seizu can, under some conditions, push query data into metrics systems, using statsd.
How to push metrics¶
Configure statsd in the backend¶
See the backend configuration for statsd
Set metric
on panels¶
The metric
setting on a panel is the prefix of the metric.
The full name of the metrics being pushed depend on the panel type.
For example, the following panel configuration would take the the total
value from the count
panel and push it to the cves.count.total
metric.
- cypher: cves
details_cypher: cves-details
caption: Total CVEs
metric: cves.count
type: count
size: 2.4
The following panel configuration would take the numerator
and denominator
values from the progress
panel and push it to the cves.severity.numerator
and cves.severity.denominator
metric.
- cypher: cve-by-severity
details_cypher: cve-by-severity-details
caption: Critical CVEs
metric: cves.severity
type: progress
threshold: 0
size: 2.4
When parameters are used, the parameters would be pushed along with the metric as metric tags.
For example, the following panel configuration would take the numerator
and denominator
values from the progress
panel and push it to the cves.severity.numerator
and cves.severity.denominator
metric, with a metric tag of severity: CRITICAL
:
- cypher: cve-by-severity
details_cypher: cve-by-severity-details
params:
- name: severity
value: CRITICAL
caption: Critical CVEs
type: progress
threshold: 0
size: 2.4
If the parameter is an input, rather than an explicit value, the query will be run against every input value, and a metric will be pushed for every value, adding the input value as a metric tag. This can lead to stats with very high cardinality; see the limitation sections about this.
Run the dashboard-stats
worker, in a cron¶
The worker can be run as a flask CLI command:
$> export FLASK_APP=reporting.dashboard_stats
$> flask worker dashboard-stats
This worker runs and exits, so to push stats on a schedule, the worker should be run as a cron on the preferred schedule.
Limitations¶
metric
configuration is only support by specific panel types; currently:count
,progress
Panels with inputs can push metrics, but only for panels with a single input, and only if the input has less values than the configuration variable
DASHBOARD_STATS_MAX_INPUT_RESULTS
allows. This is to avoid sending stats with too much cardinality.The stats forwarder (or metrics backend) you have configured must support tags.