Quickstart
First thing you need to do is to install Felicien.
Let’s play with it, now.
Connect to a TSDB
You need to import the FeliConnector module:
>>> from felicien import FeliConnector
Now let’s connect to a TSDB:
>>> tsdb = FeliConnector(url="http://victoriametrics:8428", tsdb="victoriametrics")
You have a FeliConnector object called tsdb:
>>> tsdb
FeliConnector([victoriametrics]{http://victoriametrics:8428})
You can use it to interact with the TSDB.
Get data from the TSDB
A timeserie is a representation of a metric from Prometheus/VictoriaMetrics:
>>> my_metric = 'vm_cache_entries{job=~"victoriametrics", instance=~"victoriametrics:8428", type="storage/hour_metric_ids"}'
Use your FeliConnector object to get a single value metric:
>>> ts_scalar = tsdb.get_timeserie(metric=f"{my_metric}")
>>> ts_scalar
FeliTS(vm_cache_entries{instance:"victoriametrics:8428", job:"victoriametrics", type:"storage/hour_metric_ids"}, 1 datapoints)
Same applies for a longer timeserie:
>>> ts_vector = tsdb.get_timeserie(metric=f"{my_metric}[1h]")
>>> ts_vector
FeliTS(vm_cache_entries{job:"victoriametrics", type:"storage/hour_metric_ids", instance:"victoriametrics:8428"}, 60 datapoints)
The timeserie object
A FeliTS object is a representation of a timeserie from Prometheus/VictoriaMetrics. It’s usually a metric name with labels, and a serie of values indexed by time.
You can extract information about the serie, such as its frequency:
>>> ts_vector.frequency
Timedelta('0 days 00:01:00')
Or its size:
>>> ts_vector.size
60
You can also view it as a Prometheus JSON line format representation:
>>> ts_scalar.as_prometheus()
{'metric': {'__name__': 'vm_cache_entries',
'instance': 'victoriametrics:8428',
'job': 'victoriametrics',
'type': 'storage/hour_metric_ids'},
'values': [17785.0],
'timestamps': [1713739511000]}
Or as a Pandas DataFrame format:
>>> ts_scalar.as_dataframe()
vm_cache_entries
2024-04-21 22:45:11 17785.0
The timeserie can also be truncated, either by size:
>>> ts_vector.size
60
>>> ts_vector.trim_by_size(boundary=10, keep="left").size
10
Or by date:
>>> ts_vector.trim_by_date(boundary=ts_vector.data.index[12], keep="left").size
13
Want more? Check out the advanced section.