Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Grafanalib improvements: wrapper classes and more node exporter panels #15

Draft
wants to merge 2 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 17 additions & 41 deletions grafana/provisioning/dashboards-py/cadvisor.dashboard.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,9 @@
from grafanalib.core import (
Dashboard, TimeSeries, GaugePanel,
Target, GridPos,
OPS_FORMAT, Templating, Template, REFRESH_ON_TIME_RANGE_CHANGE, Logs
)
from grafanalib.core import GridPos, Templating, Template, Logs
from grafanalib.formatunits import BYTES_IEC, SECONDS, BYTES_SEC_IEC

from common import PROMETHEUS_DATASOURCE_NAME
from common import PROMETHEUS_DATASOURCE_NAME, MyDashboard, MyTimeSeries, PromTarget


dashboard = Dashboard(
dashboard = MyDashboard(
title='Cadvisor',
uid='cadvisor',
description='Container metrics collected by Cadvisor',
Expand All @@ -24,7 +19,6 @@
query='label_values({__name__=~"container.*"}, container_label_com_docker_compose_project)',
includeAll=True,
multi=True,
refresh=REFRESH_ON_TIME_RANGE_CHANGE,
),
Template(
name='container_name',
Expand All @@ -33,67 +27,49 @@
query='label_values({__name__=~"container.*", container_label_com_docker_compose_project=~"$compose_project"}, name)',
includeAll=True,
multi=True,
refresh=REFRESH_ON_TIME_RANGE_CHANGE,
),
]),
timezone='browser',
panels=[
TimeSeries(
MyTimeSeries(
title='Container Memory Usage',
unit=BYTES_IEC,
gridPos=GridPos(h=8, w=12, x=0, y=0),
lineWidth=2,
fillOpacity=10,
showPoints='never',
stacking={'mode': 'normal'},
tooltipMode='all',
tooltipSort='desc',
stacking={'mode': 'normal'},
targets=[
Target(
datasource=PROMETHEUS_DATASOURCE_NAME,
PromTarget(
expr='max by (name) (container_memory_usage_bytes{name=~"$container_name", container_label_com_docker_compose_project=~"$compose_project"})',
legendFormat='{{ name }}',
refId='A',
),
],
),
TimeSeries(
MyTimeSeries(
title='Container CPU Usage',
unit=SECONDS,
gridPos=GridPos(h=8, w=12, x=12, y=0),
lineWidth=2,
fillOpacity=10,
showPoints='never',
tooltipSort='desc',
stacking={'mode': 'normal'},
targets=[
Target(
datasource=PROMETHEUS_DATASOURCE_NAME,
expr='max by (name) (rate(container_cpu_usage_seconds_total{name=~"$container_name", container_label_com_docker_compose_project=~"$compose_project"}[$__rate_interval]))',
PromTarget(
expr='max by (name) (irate(container_cpu_usage_seconds_total{name=~"$container_name", container_label_com_docker_compose_project=~"$compose_project"}[$__rate_interval]))',
legendFormat='{{ name }}',
refId='A',
),
],
),
TimeSeries(
MyTimeSeries(
title='Container Network Traffic',
unit=BYTES_SEC_IEC,
gridPos=GridPos(h=8, w=12, x=0, y=8),
lineWidth=2,
fillOpacity=10,
showPoints='never',
tooltipMode='all',
tooltipSort='desc',
axisCenteredZero=True,
targets=[
Target(
datasource=PROMETHEUS_DATASOURCE_NAME,
expr='max by (name) (rate(container_network_receive_bytes_total{name=~"$container_name", container_label_com_docker_compose_project=~"$compose_project"}[$__rate_interval]))',
PromTarget(
expr='max by (name) (irate(container_network_receive_bytes_total{name=~"$container_name", container_label_com_docker_compose_project=~"$compose_project"}[$__rate_interval]))',
legendFormat="rx {{ name }}",
refId='A',
),
Target(
datasource=PROMETHEUS_DATASOURCE_NAME,
expr='-max by (name) (rate(container_network_transmit_bytes_total{name=~"$container_name", container_label_com_docker_compose_project=~"$compose_project"}[$__rate_interval]))',
PromTarget(
expr='-max by (name) (irate(container_network_transmit_bytes_total{name=~"$container_name", container_label_com_docker_compose_project=~"$compose_project"}[$__rate_interval]))',
legendFormat="tx {{ name }}",
refId='B',
),
],
),
Expand Down
34 changes: 9 additions & 25 deletions grafana/provisioning/dashboards-py/clark.dashboard.py
Original file line number Diff line number Diff line change
@@ -1,60 +1,44 @@
from grafanalib.core import Dashboard, Templating, Template, TimeSeries, Target, GridPos
from grafanalib.core import Templating, Template, Target, GridPos
from grafanalib.formatunits import PERCENT_UNIT, SECONDS, NUMBER_FORMAT, TRUE_FALSE

from common import PROMETHEUS_DATASOURCE_NAME
from common import MyDashboard, MyTimeSeries, PromTarget


dashboard = Dashboard(
dashboard = MyDashboard(
title='Clark',
uid='clark',
description='sce club website',
timezone='browser',
panels=[
TimeSeries(
MyTimeSeries(
title='Clark main-endpoint hits',
unit=NUMBER_FORMAT,
gridPos=GridPos(h=8, w=12, x=0, y=0),
lineWidth=2,
stacking={'group': 'A','mode': 'none'},
tooltipMode='all',
tooltipSort='desc',
targets=[
Target(
datasource=PROMETHEUS_DATASOURCE_NAME,
PromTarget(
expr='endpoint_hits{route!="/metrics"}',
refId='A',
),
],
),
TimeSeries(
MyTimeSeries(
title='Clark main-endpoint hits',
unit=NUMBER_FORMAT,
gridPos=GridPos(h=8, w=12, x=0, y=0),
lineWidth=2,
stacking={'group': 'A','mode': 'none'},
tooltipMode='all',
tooltipSort='desc',
targets=[
Target(
datasource=PROMETHEUS_DATASOURCE_NAME,
PromTarget(
expr='endpoint_hits{route=~"/(sendPasswordReset|validatePasswordReset|resetPassword)"}',
refId='A',
),
],
),
TimeSeries(
MyTimeSeries(
title='Clark - messages',
unit=NUMBER_FORMAT,
gridPos=GridPos(h=8, w=12, x=0, y=0),
lineWidth=2,
stacking={'group': 'A','mode': 'none'},
tooltipMode='all',
tooltipSort='desc',
targets=[
Target(
datasource=PROMETHEUS_DATASOURCE_NAME,
PromTarget(
expr='endpoint_hits{route=~"/(send|listen|getLatestMessage)"}',
refId='A',
),
],
),
Expand Down
52 changes: 13 additions & 39 deletions grafana/provisioning/dashboards-py/cleezy.dashboard.py
Original file line number Diff line number Diff line change
@@ -1,95 +1,69 @@
from grafanalib.core import Dashboard, Templating, Template, TimeSeries, Target, GridPos
from grafanalib.core import Templating, Template, GridPos
from grafanalib.formatunits import PERCENT_UNIT, SECONDS, NUMBER_FORMAT, TRUE_FALSE

from common import PROMETHEUS_DATASOURCE_NAME
from common import MyDashboard, MyTimeSeries, PromTarget


dashboard = Dashboard(
dashboard = MyDashboard(
title='Cleezy',
uid='leezy',
description='sce club website',
timezone='browser',
panels=[
TimeSeries(
MyTimeSeries(
title='Cache Size (entries)',
unit=NUMBER_FORMAT,
gridPos=GridPos(h=8, w=12, x=0, y=0),
lineWidth=2,
stacking={'group': 'A','mode': 'none'},
tooltipMode='all',
tooltipSort='desc',
targets=[
Target(
datasource=PROMETHEUS_DATASOURCE_NAME,
PromTarget(
expr='cache_size',
refId='A',
),
],
),
TimeSeries(
MyTimeSeries(
title='SQLite latency by query',
unit=NUMBER_FORMAT,
gridPos=GridPos(h=8, w=12, x=0, y=0),
lineWidth=2,
stacking={'group': 'A','mode': 'none'},
tooltipMode='all',
tooltipSort='desc',
targets=[
Target(
datasource=PROMETHEUS_DATASOURCE_NAME,
PromTarget(
legendFormat="{{query_type}}",
expr='query_time_sum / query_time_count',
refId='A',
),
],
),
TimeSeries(
MyTimeSeries(
title='SQLite latency by query',
unit=NUMBER_FORMAT,
gridPos=GridPos(h=8, w=12, x=0, y=0),
lineWidth=2,
stacking={'group': 'A','mode': 'none'},
tooltipMode='all',
tooltipSort='desc',
targets=[
Target(
datasource=PROMETHEUS_DATASOURCE_NAME,
PromTarget(
legendFormat="{{code}} {{path}}",
expr='http_code_total{path!="/metrics", job="cleezy"}',
refId='A',
),
],
),
TimeSeries(
MyTimeSeries(
title='Cache hits and misses',
unit=NUMBER_FORMAT,
gridPos=GridPos(h=8, w=12, x=0, y=0),
lineWidth=2,
stacking={'group': 'A','mode': 'none'},
tooltipMode='all',
tooltipSort='desc',
targets=[
Target(
datasource=PROMETHEUS_DATASOURCE_NAME,
PromTarget(
legendFormat="{{__name__}}",
expr='cache_hits_total',
refId='A',
),
],
),
TimeSeries(
MyTimeSeries(
title='Container Uptime',
unit=NUMBER_FORMAT,
gridPos=GridPos(h=8, w=12, x=0, y=0),
lineWidth=2,
stacking={'group': 'A','mode': 'none'},
tooltipMode='all',
tooltipSort='desc',
targets=[
Target(
datasource=PROMETHEUS_DATASOURCE_NAME,
PromTarget(
expr='time() - process_start_time_seconds{job="cleezy"}',
refId='A',
),
],
),
Expand Down
34 changes: 34 additions & 0 deletions grafana/provisioning/dashboards-py/common.py
Original file line number Diff line number Diff line change
@@ -1 +1,35 @@
from attrs import define
from grafanalib.core import Template, TimeSeries, Dashboard, HIDE_VARIABLE, Target

PROMETHEUS_DATASOURCE_NAME = 'Prometheus'


@define
class MyDashboard(Dashboard):
"""Wrapper class for Dashboard with some default values"""
timezone: str = 'browser'
sharedCrosshair: bool = True


@define
class MyTimeSeries(TimeSeries):
"""Wrapper class for TimeSeries with some default values and custom fields"""
fillOpacity: int = 10
lineWidth: int = 1
showPoints: str = 'never'
tooltipMode: str = 'multi'
maxDataPoints: int = None

# new fields
axisCenteredZero: bool = False

def to_json_data(self):
data = super().to_json_data()
data['fieldConfig']['defaults']['custom']['axisCenteredZero'] = self.axisCenteredZero
return data


@define
class PromTarget(Target):
"""Wrapper class for Target with default prometheus datasource"""
datasource: str = PROMETHEUS_DATASOURCE_NAME
Loading