mirror of https://github.com/ekimekim/wubloader
Merge pull request #65 from ekimekim/mike/dashboards
Add grafana dashboards as jsonnet codepull/66/head
commit
a2b21966b9
@ -0,0 +1,3 @@
|
||||
The files in this directory use a library for generating grafana dashboards
|
||||
that at time of writing I'm not at liberty to share. Unfortunately, I don't have a better option.
|
||||
So feel free to make changes, but I'll need to be the one to regenerate them.
|
@ -0,0 +1,185 @@
|
||||
local grafana = import "grafana.libsonnet";
|
||||
|
||||
local services = [
|
||||
"restreamer",
|
||||
"downloader",
|
||||
"backfiller",
|
||||
"cutter",
|
||||
"thrimshim",
|
||||
"sheetsync",
|
||||
];
|
||||
|
||||
local service_status_table = {
|
||||
local refId(n) = std.char(std.codepoint('A') + n),
|
||||
type: "table",
|
||||
targets: [
|
||||
{
|
||||
expr: 'sum(up{job="%s"}) by (instance)' % services[i],
|
||||
intervalFactor: 1,
|
||||
format: "table",
|
||||
refId: refId(i),
|
||||
legendFormat: "",
|
||||
instant: true,
|
||||
}
|
||||
for i in std.range(0, std.length(services) - 1)
|
||||
],
|
||||
styles: [
|
||||
// hidden cols
|
||||
{
|
||||
unit: "short",
|
||||
type: "hidden",
|
||||
alias: "",
|
||||
decimals: 2,
|
||||
colors: [
|
||||
"rgba(245, 54, 54, 0.9)",
|
||||
"rgba(237, 129, 40, 0.89)",
|
||||
"rgba(50, 172, 45, 0.97)",
|
||||
],
|
||||
colorMode: null,
|
||||
pattern: name,
|
||||
dateFormat: "YYYY-MM-DD HH:mm:ss",
|
||||
thresholds: [],
|
||||
mappingType: 1,
|
||||
}
|
||||
for name in ["__name__", "job", "Time"]
|
||||
] + [
|
||||
// service cols
|
||||
{
|
||||
unit: "short",
|
||||
type: "string",
|
||||
alias: services[i],
|
||||
decimals: 2,
|
||||
colors: [
|
||||
"rgba(245, 54, 54, 0.9)",
|
||||
"rgba(237, 129, 40, 0.89)",
|
||||
"rgba(50, 172, 45, 0.97)",
|
||||
],
|
||||
colorMode: "cell",
|
||||
pattern: "Value #%s" % refId(i),
|
||||
dateFormat: "YYYY-MM-DD HH:mm:ss",
|
||||
thresholds: [
|
||||
"0.5",
|
||||
"0.5",
|
||||
],
|
||||
mappingType: 1,
|
||||
valueMaps: [
|
||||
{
|
||||
value: "0",
|
||||
text: "DOWN",
|
||||
},
|
||||
{
|
||||
value: "1",
|
||||
text: "UP",
|
||||
},
|
||||
],
|
||||
} for i in std.range(0, std.length(services) - 1)
|
||||
],
|
||||
transform: "table",
|
||||
pageSize: null,
|
||||
showHeader: true,
|
||||
columns: [],
|
||||
scroll: true,
|
||||
fontSize: "100%",
|
||||
sort: {
|
||||
col: 0,
|
||||
desc: true,
|
||||
},
|
||||
links: [],
|
||||
};
|
||||
|
||||
grafana.dashboard({
|
||||
name: "Overview",
|
||||
uid: "rjd405mn",
|
||||
|
||||
rows: [
|
||||
|
||||
{
|
||||
panels: [
|
||||
// First row - immediate status heads-up
|
||||
[
|
||||
{
|
||||
name: "Service Status by Node",
|
||||
span: 2 * grafana.span.third,
|
||||
custom: service_status_table,
|
||||
},
|
||||
{
|
||||
name: "Error log rate",
|
||||
axis: {min: 0, label: "logs / sec"},
|
||||
display: "bars",
|
||||
expressions: {
|
||||
"{{job}} {{level}}({{module}}:{{function}})": |||
|
||||
sum(irate(log_count_total{level!="INFO"}[2m])) by (job, level, module, function) > 0
|
||||
|||,
|
||||
},
|
||||
},
|
||||
],
|
||||
// Second row - core "business" metrics
|
||||
[
|
||||
{
|
||||
name: "Segments downloaded",
|
||||
axis: {min: 0, label: "segments / sec"},
|
||||
expressions: {
|
||||
"{{stream}}({{variant}}) live capture":
|
||||
'sum(rate(segments_downloaded_total[2m])) by (stream, variant)',
|
||||
"{{stream}}({{variant}}) backfilled":
|
||||
'sum(rate(segments_backfilled_total[2m])) by (stream, variant)',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Successful requests by endpoint",
|
||||
axis: {min: 0, label: "requests / sec"},
|
||||
expressions: {
|
||||
"{{method}} {{endpoint}}":
|
||||
'sum(rate(http_request_latency_all_count{status="200"}[2m])) by (endpoint, method)',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Database events by state",
|
||||
axis: {min: 0, label: "events"},
|
||||
tooltip: "Not implemented", // TODO
|
||||
expressions: {"Not implemented": "0"},
|
||||
},
|
||||
],
|
||||
],
|
||||
},
|
||||
|
||||
{
|
||||
name: "Downloader",
|
||||
panels: [
|
||||
{
|
||||
name: "Segments downloaded by node",
|
||||
axis: {min: 0, label: "segments / sec"},
|
||||
expressions: {
|
||||
"{{instance}} {{stream}}({{variant}})":
|
||||
'sum(rate(segments_downloaded_total[2m])) by (instance, stream, variant)',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Downloader stream delay by node",
|
||||
tooltip: "Time between the latest downloaded segment's timestamp and current time",
|
||||
axis: {min: 0, format: grafana.formats.time},
|
||||
expressions: {
|
||||
"{{instance}} {{stream}}({{variant}})":
|
||||
'time() - max(latest_segment) by (instance, stream, variant)',
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
{
|
||||
name: "Backfiller",
|
||||
panels: [
|
||||
{
|
||||
name: "Backfill by node pair",
|
||||
axis: {min: 0, label: "segments / sec"},
|
||||
expressions: {
|
||||
"{{remote}} -> {{instance}}":
|
||||
'sum(rate(segments_backfilled_total[2m])) by (remote, instance)',
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
],
|
||||
|
||||
})
|
Loading…
Reference in New Issue