Skip to content

Instantly share code, notes, and snippets.

@wardbekker
Created June 11, 2020 19:34
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save wardbekker/28524c0497fb2b7eb36cfa452c1c63ce to your computer and use it in GitHub Desktop.
Save wardbekker/28524c0497fb2b7eb36cfa452c1c63ce to your computer and use it in GitHub Desktop.
Loki Nginx Web Analytics Dashboard
{
"annotations": {
"list": [
{
"builtIn": 1,
"datasource": "-- Grafana --",
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations & Alerts",
"type": "dashboard"
}
]
},
"editable": true,
"gnetId": null,
"graphTooltip": 0,
"links": [],
"panels": [
{
"datasource": "LokiNGINXExperimental",
"description": "",
"fieldConfig": {
"defaults": {
"custom": {
"align": null
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
}
]
},
"unit": "short"
},
"overrides": [
{
"matcher": {
"id": "byName",
"options": "{statuscode=\"500\"} 500"
},
"properties": [
{
"id": "thresholds",
"value": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 20
}
]
}
}
]
},
{
"matcher": {
"id": "byName",
"options": "{statuscode=\"404\"} 404"
},
"properties": [
{
"id": "thresholds",
"value": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 20
}
]
}
}
]
}
]
},
"gridPos": {
"h": 5,
"w": 15,
"x": 0,
"y": 0
},
"id": 5,
"interval": "30s",
"options": {
"colorMode": "background",
"graphMode": "area",
"justifyMode": "auto",
"orientation": "auto",
"reduceOptions": {
"calcs": [
"sum"
],
"fields": "",
"values": false
}
},
"pluginVersion": "7.0.3",
"targets": [
{
"expr": "sum by (statuscode) (count_over_time({filename=\"/var/log/nginx/access.log\"} | regexp \"HTTP/1.1\\\" (?P<statuscode>\\\\d{3}) \"[$__interval]))",
"refId": "A"
}
],
"timeFrom": null,
"timeShift": null,
"title": "Requests per status code",
"transformations": [],
"type": "stat"
},
{
"datasource": "LokiNGINXExperimental",
"description": "",
"fieldConfig": {
"defaults": {
"custom": {
"align": null
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "purple",
"value": null
}
]
},
"unit": "short"
},
"overrides": []
},
"gridPos": {
"h": 5,
"w": 5,
"x": 15,
"y": 0
},
"id": 4,
"interval": "30s",
"options": {
"colorMode": "background",
"graphMode": "area",
"justifyMode": "auto",
"orientation": "auto",
"reduceOptions": {
"calcs": [
"sum"
],
"fields": "",
"values": false
}
},
"pluginVersion": "7.0.3",
"targets": [
{
"expr": "count_over_time({filename=\"/var/log/nginx/access.log\"}[$__interval])",
"refId": "A"
}
],
"timeFrom": null,
"timeShift": null,
"title": "Total requests ",
"transformations": [],
"type": "stat"
},
{
"datasource": "LokiNGINXExperimental",
"description": "",
"fieldConfig": {
"defaults": {
"custom": {
"align": null
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
}
]
},
"unit": "decbytes"
},
"overrides": [
{
"matcher": {
"id": "byName",
"options": "IP Address"
},
"properties": [
{
"id": "custom.width",
"value": 410
}
]
}
]
},
"gridPos": {
"h": 5,
"w": 4,
"x": 20,
"y": 0
},
"id": 8,
"options": {
"colorMode": "background",
"graphMode": "none",
"justifyMode": "auto",
"orientation": "auto",
"reduceOptions": {
"calcs": [
"sum"
],
"fields": "",
"values": false
}
},
"pluginVersion": "7.0.3",
"targets": [
{
"expr": "sum_over_time({filename=\"/var/log/nginx/access.log\"} | regexp \"HTTP\\\\/1\\\\.1\\\" (?P<statuscode>\\\\d{3}) (?P<value>\\\\d+) (?P<refferer>\\\".*?\\\") \\\"(?P<useragent>.*)\\\"\"[$__interval])",
"refId": "A"
}
],
"timeFrom": null,
"timeShift": null,
"title": "Total Bytes Sent",
"transformations": [
{
"id": "reduce",
"options": {
"reducers": [
"sum"
]
}
},
{
"id": "organize",
"options": {
"excludeByName": {
"Field": false
},
"indexByName": {},
"renameByName": {
"Field": "Agent",
"Total": "Requests"
}
}
}
],
"type": "stat"
},
{
"aliasColors": {
"{statuscode=\"200\"} 200": "green",
"{statuscode=\"404\"} 404": "semi-dark-purple",
"{statuscode=\"500\"} 500": "dark-red"
},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "LokiNGINXExperimental",
"description": "",
"fieldConfig": {
"defaults": {
"custom": {}
},
"overrides": []
},
"fill": 1,
"fillGradient": 10,
"gridPos": {
"h": 9,
"w": 7,
"x": 0,
"y": 5
},
"hiddenSeries": false,
"id": 2,
"interval": "30s",
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "connected",
"options": {
"dataLinks": []
},
"percentage": true,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": true,
"steppedLine": false,
"targets": [
{
"expr": "sum by (statuscode) (count_over_time({filename=\"/var/log/nginx/access.log\"} | regexp \"HTTP/1.1\\\" (?P<statuscode>\\\\d{3}) \"[$__interval]))",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "HTTP requests",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"$$hashKey": "object:448",
"decimals": 0,
"format": "short",
"label": null,
"logBase": 1,
"max": "100",
"min": null,
"show": true
},
{
"$$hashKey": "object:449",
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {
"appfelstrudel": "yellow"
},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "LokiNGINXExperimental",
"description": "",
"fieldConfig": {
"defaults": {
"custom": {
"align": null
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
}
]
},
"unit": "decbytes"
},
"overrides": [
{
"matcher": {
"id": "byName",
"options": "IP Address"
},
"properties": [
{
"id": "custom.width",
"value": 410
}
]
}
]
},
"fill": 10,
"fillGradient": 10,
"gridPos": {
"h": 9,
"w": 8,
"x": 7,
"y": 5
},
"hiddenSeries": false,
"id": 9,
"interval": "30s",
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"options": {
"dataLinks": []
},
"percentage": false,
"pluginVersion": "7.0.3",
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "sum by (host) (sum_over_time({filename=\"/var/log/nginx/access.log\"} | regexp \"HTTP\\\\/1\\\\.1\\\" (?P<statuscode>\\\\d{3}) (?P<value>\\\\d+) (?P<refferer>\\\".*?\\\") \\\"(?P<useragent>.*)\\\"\"[$__interval]))",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "Bytes Sent",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"transformations": [],
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"$$hashKey": "object:499",
"format": "decbytes",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"$$hashKey": "object:500",
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"datasource": "LokiNGINXExperimental",
"description": "",
"fieldConfig": {
"defaults": {
"custom": {
"align": null
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 80
}
]
}
},
"overrides": [
{
"matcher": {
"id": "byName",
"options": "Requests"
},
"properties": [
{
"id": "custom.width",
"value": 100
}
]
}
]
},
"gridPos": {
"h": 9,
"w": 9,
"x": 15,
"y": 5
},
"id": 3,
"interval": "30s",
"options": {
"showHeader": true,
"sortBy": [
{
"desc": true,
"displayName": "Requests"
}
]
},
"pluginVersion": "7.0.3",
"targets": [
{
"expr": "topk(5, sum by (ipaddress) (count_over_time({filename=\"/var/log/nginx/access.log\"} | regexp \"(?P<ipaddress>\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3})\"[$__interval])))",
"refId": "A"
}
],
"timeFrom": null,
"timeShift": null,
"title": "Top IPs",
"transformations": [
{
"id": "reduce",
"options": {
"reducers": [
"sum"
]
}
},
{
"id": "organize",
"options": {
"excludeByName": {
"Field": false
},
"indexByName": {},
"renameByName": {
"Field": "IP Address",
"Total": "Requests"
}
}
}
],
"type": "table"
},
{
"datasource": "LokiNGINXExperimental",
"description": "",
"fieldConfig": {
"defaults": {
"custom": {
"align": null
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 80
}
]
}
},
"overrides": [
{
"matcher": {
"id": "byName",
"options": "Requests"
},
"properties": [
{
"id": "custom.width",
"value": 100
}
]
}
]
},
"gridPos": {
"h": 6,
"w": 15,
"x": 0,
"y": 14
},
"id": 12,
"interval": "30s",
"options": {
"showHeader": true,
"sortBy": [
{
"desc": true,
"displayName": "Requests"
}
]
},
"pluginVersion": "7.0.3",
"targets": [
{
"expr": "topk(5,sum by (path) (count_over_time({filename=\"/var/log/nginx/access.log\"} | regexp \"[GET|POST] (?P<path>.*?) HTTP\"[$__interval])))",
"refId": "A"
}
],
"timeFrom": null,
"timeShift": null,
"title": "Top Requested Pages",
"transformations": [
{
"id": "reduce",
"options": {
"reducers": [
"sum"
]
}
},
{
"id": "organize",
"options": {
"excludeByName": {
"Field": false
},
"indexByName": {},
"renameByName": {
"Field": "Agent",
"Total": "Requests"
}
}
}
],
"type": "table"
},
{
"datasource": "LokiNGINXExperimental",
"fieldConfig": {
"defaults": {
"custom": {}
},
"overrides": []
},
"gridPos": {
"h": 19,
"w": 9,
"x": 15,
"y": 14
},
"id": 11,
"options": {
"showLabels": false,
"showTime": false,
"sortOrder": "Descending",
"wrapLogMessage": false
},
"targets": [
{
"expr": "{filename=\"/var/log/nginx/access.log\"}",
"refId": "A"
}
],
"timeFrom": null,
"timeShift": null,
"title": "Logs",
"type": "logs"
},
{
"datasource": "LokiNGINXExperimental",
"description": "",
"fieldConfig": {
"defaults": {
"custom": {
"align": null
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 80
}
]
}
},
"overrides": [
{
"matcher": {
"id": "byName",
"options": "Requests"
},
"properties": [
{
"id": "custom.width",
"value": 100
}
]
}
]
},
"gridPos": {
"h": 6,
"w": 15,
"x": 0,
"y": 20
},
"id": 7,
"interval": "30s",
"options": {
"showHeader": true,
"sortBy": [
{
"desc": true,
"displayName": "Requests"
}
]
},
"pluginVersion": "7.0.3",
"targets": [
{
"expr": "topk(10, sum by (useragent) (count_over_time({filename=\"/var/log/nginx/access.log\"} | regexp \"HTTP\\\\/1\\\\.1\\\" (?P<statuscode>\\\\d{3}) (?P<bytessent>\\\\d+) (?P<refferer>\\\".*?\\\") \\\"(?P<useragent>.*)\\\"\"[$__interval])))",
"refId": "A"
}
],
"timeFrom": null,
"timeShift": null,
"title": "Top User Agents",
"transformations": [
{
"id": "reduce",
"options": {
"reducers": [
"sum"
]
}
},
{
"id": "organize",
"options": {
"excludeByName": {
"Field": false
},
"indexByName": {},
"renameByName": {
"Field": "Agent",
"Total": "Requests"
}
}
}
],
"type": "table"
},
{
"datasource": "LokiNGINXExperimental",
"description": "",
"fieldConfig": {
"defaults": {
"custom": {
"align": null
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 80
}
]
}
},
"overrides": [
{
"matcher": {
"id": "byName",
"options": "Requests"
},
"properties": [
{
"id": "custom.width",
"value": 100
}
]
}
]
},
"gridPos": {
"h": 7,
"w": 15,
"x": 0,
"y": 26
},
"id": 6,
"interval": "30ms",
"options": {
"showHeader": true,
"sortBy": [
{
"desc": true,
"displayName": "Requests"
}
]
},
"pluginVersion": "7.0.3",
"targets": [
{
"expr": "topk(5, sum by (refferer) (count_over_time({filename=\"/var/log/nginx/access.log\"} | regexp \"HTTP\\\\/1\\\\.1\\\" (?P<statuscode>\\\\d{3}) (?P<bytessent>\\\\d+) (?P<refferer>\\\".*?\\\") \\\"(?P<useragent>.*)\\\"\"[$__interval])))",
"refId": "A"
}
],
"timeFrom": null,
"timeShift": null,
"title": "Referrer",
"transformations": [
{
"id": "reduce",
"options": {
"reducers": [
"sum"
]
}
},
{
"id": "organize",
"options": {
"excludeByName": {},
"indexByName": {},
"renameByName": {
"Field": "IP Address",
"Total": "Requests"
}
}
}
],
"type": "table"
}
],
"refresh": false,
"schemaVersion": 25,
"style": "dark",
"tags": [],
"templating": {
"list": []
},
"time": {
"from": "now-1h",
"to": "now"
},
"timepicker": {
"refresh_intervals": [
"10s",
"30s",
"1m",
"5m",
"15m",
"30m",
"1h",
"2h",
"1d"
]
},
"timezone": "",
"title": "Web Analytics Dashboard",
"uid": "Y8z3IOiGz",
"version": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment