Grafana dashboard: Analytics - NGINX / LOKI v2+ Data Source / Promtail v2+ Tool
Description: Nginx access log analytics dashboard using Promtail and Loki v2+. Prometheus datasource is created from Loki service.

## Revision - 21st June 2022
- Updated visitor map to support week on week comparison and top country listing

## Revision - 20th February 2021
- Changed overall dashboard look and initial display of panels.

## Revision - 16th February 2021
- Last 30 day graph of unique visitors to site added
- Removed more browser and crawler bot statistics from unique visitors and other relevant panels

## Revision - 12th February 2021
- Changed Last 7 day graph from 'new time series beta graph' to standard graph display.
- Removed further browser and crawler bot statistics from relevant panel - to add these back in edit the panel and remove below from query on each panel.
```console
| http_user_agent !~ ".*bot.*" | remote_addr !~ "2001:4ca0:108:42::*" | remote_addr !~ "91.134.156.*" | http_user_agent != "worldping-api" | request_uri !~ "/wp-.*" | request_uri !~ "//wp-.*" | request_uri !~ "/*.wordfence.*" | request_uri !~ "/robots.txt" | request_uri !~ "/xmlrpc.php"
```

## Extension of original dashboard 
[https://grafana.com/grafana/dashboards/12559?pg=dashboards&plcmt=featured-main](https://grafana.com/grafana/dashboards/12559?pg=dashboards&plcmt=featured-main)

## Setup of nginx, promtail & loki required 
[https://www.youtube.com/watch?v=kR5ay4lX0OM](https://www.youtube.com/watch?v=kR5ay4lX0OM)

## Required nginx json log format configuration described below

```console
log_format json_analytics escape=json '{'
                            '"msec": "$msec", ' # request unixtime in seconds with a milliseconds resolution
                            '"connection": "$connection", ' # connection serial number
                            '"connection_requests": "$connection_requests", ' # number of requests made in connection
                    '"pid": "$pid", ' # process pid
                    '"request_id": "$request_id", ' # the unique request id
                    '"request_length": "$request_length", ' # request length (including headers and body)
                    '"remote_addr": "$remote_addr", ' # client IP
                    '"remote_user": "$remote_user", ' # client HTTP username
                    '"remote_port": "$remote_port", ' # client port
                    '"time_local": "$time_local", '
                    '"time_iso8601": "$time_iso8601", ' # local time in the ISO 8601 standard format
                    '"request": "$request", ' # full path no arguments if the request
                    '"request_uri": "$request_uri", ' # full path and arguments if the request
                    '"args": "$args", ' # args
                    '"status": "$status", ' # response status code
                    '"body_bytes_sent": "$body_bytes_sent", ' # the number of body bytes exclude headers sent to a client
                    '"bytes_sent": "$bytes_sent", ' # the number of bytes sent to a client
                    '"http_referer": "$http_referer", ' # HTTP referer
                    '"http_user_agent": "$http_user_agent", ' # user agent
                    '"http_x_forwarded_for": "$http_x_forwarded_for", ' # http_x_forwarded_for
                    '"http_host": "$http_host", ' # the request Host: header
                    '"server_name": "$server_name", ' # the name of the vhost serving the request
                    '"request_time": "$request_time", ' # request processing time in seconds with msec resolution
                    '"upstream": "$upstream_addr", ' # upstream backend server for proxied requests
                    '"upstream_connect_time": "$upstream_connect_time", ' # upstream handshake time incl. TLS
                    '"upstream_header_time": "$upstream_header_time", ' # time spent receiving upstream headers
                    '"upstream_response_time": "$upstream_response_time", ' # time spend receiving upstream body
                    '"upstream_response_length": "$upstream_response_length", ' # upstream response length
                    '"upstream_cache_status": "$upstream_cache_status", ' # cache HIT/MISS where applicable
                    '"ssl_protocol": "$ssl_protocol", ' # TLS protocol
                    '"ssl_cipher": "$ssl_cipher", ' # TLS cipher
                    '"scheme": "$scheme", ' # http or https
                    '"request_method": "$request_method", ' # request method
                    '"server_protocol": "$server_protocol", ' # request protocol, like HTTP/1.1 or HTTP/2.0
                    '"pipe": "$pipe", ' # "p" if request was pipelined, "." otherwise
                    '"gzip_ratio": "$gzip_ratio", '
                    '"http_cf_ray": "$http_cf_ray",'
                    '"geoip_country_code": "$geoip_country_code"'
                    '}';

access_log /var/log/nginx/access.log json_analytics;
```
Adding log_format to sites-available on Nginx :
```console
server {
....
             access_log /var/log/nginx/website_access.log json_analytics;
```
For IP to country mapping, also enable the Geo_IP module:
```console
geoip_country /etc/nginx/GeoIP.dat;
geoip_city /etc/nginx/GeoIPCity.dat;
```
Option if you are using Cloudflare IP Geo location you can change the log_format :
```console
'"geoip_country_code": "$http_cf_ipcountry"'
```
Cloudflare IP Geo location : [https://support.cloudflare.com/hc/en-us/articles/200168236-Configuring-Cloudflare-IP-Geolocation](https://support.cloudflare.com/hc/en-us/articles/200168236-Configuring-Cloudflare-IP-Geolocation)

Promtail scrapes the log files best when you mount the log volume in the docker container.
```console
$ sudo mv promtail-config.yaml /mnt/config/
$ docker create --name promtail --restart unless-stopped -v /mnt/config:/mnt/config -v /var/log:/var/log grafana/promtail:2.1.0 -config.file=/mnt/config/promtail-config.yaml
$ docker start promtail
```

Promtail-config.yml file details. 
```console
server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://<ip address>:3100/loki/api/v1/push

scrape_configs:
- job_name: system
  static_configs:
  - targets:
      - localhost
    labels:
      job: varlogs
      host: nginx01
      agent: promtail
      __path__: /var/log/*log

- job_name: nginx
  static_configs:
  - targets:
      - localhost
    labels:
      job: nginx
      host: nginx01
      agent: promtail
      __path__: /var/log/nginx/*log
```

{
  "__inputs": [
    {
      "name": "DS_LOKI-FGC-NGINX01",
      "label": "Loki",
      "description": "Loki & Promtail v2+",
      "type": "datasource",
      "pluginId": "loki",
      "pluginName": "Loki"
    },
    {
      "name": "DS_PROMETHEUS",
      "label": "Prometheus",
      "description": "Created from Loki service - Prometheus URL : http://localhost:3100/loki",
      "type": "datasource",
      "pluginId": "prometheus",
      "pluginName": "Prometheus"
    }
  ],
  "__requires": [
    {
      "type": "grafana",
      "id": "grafana",
      "name": "Grafana",
      "version": "7.4.1"
    },
    {
      "type": "panel",
      "id": "grafana-worldmap-panel",
      "name": "Worldmap Panel",
      "version": "0.2.1"
    },
    {
      "type": "panel",
      "id": "graph",
      "name": "Graph",
      "version": ""
    },
    {
      "type": "panel",
      "id": "logs",
      "name": "Logs",
      "version": ""
    },
    {
      "type": "datasource",
      "id": "loki",
      "name": "Loki",
      "version": "1.0.0"
    },
    {
      "type": "datasource",
      "id": "prometheus",
      "name": "Prometheus",
      "version": "1.0.0"
    },
    {
      "type": "panel",
      "id": "stat",
      "name": "Stat",
      "version": ""
    },
    {
      "type": "panel",
      "id": "table",
      "name": "Table",
      "version": ""
    }
  ],
  "annotations": {
    "list": [
      {
        "builtIn": 1,
        "datasource": "-- Grafana --",
        "enable": true,
        "hide": true,
        "iconColor": "rgba(0, 211, 255, 1)",
        "name": "Annotations & Alerts",
        "type": "dashboard"
      }
    ]
  },
  "description": "Nginx access log analytics dashboard using Promtail and Loki v2+. Prometheus datasource is created from Loki service.",
  "editable": true,
  "gnetId": 13865,
  "graphTooltip": 0,
  "id": null,
  "iteration": 1613814807210,
  "links": [],
  "panels": [
    {
      "datasource": "${DS_LOKI-FGC-NGINX01}",
      "description": "",
      "fieldConfig": {
        "defaults": {
          "color": {
            "mode": "thresholds"
          },
          "custom": {},
          "decimals": 0,
          "mappings": [],
          "thresholds": {
            "mode": "absolute",
            "steps": [
              {
                "color": "purple",
                "value": null
              }
            ]
          }
        },
        "overrides": []
      },
      "id": 22,
      "interval": "1h",
      "maxDataPoints": 1,
      "options": {
        "colorMode": "background",
        "graphMode": "none",
        "justifyMode": "auto",
        "orientation": "auto",
        "reduceOptions": {
          "calcs": [
            "mean"
          ],
          "fields": "",
          "values": false
        },
        "text": {},
        "textMode": "value"
      },
      "pluginVersion": "7.4.1",
      "targets": [
        {
          "expr": "count(sum by (remote_addr) (count_over_time({filename=\"$filename\", host=\"$host\"} | json | http_user_agent !~ \".*bot.*\" | http_user_agent !~ \".*crawler.*\" | remote_addr !~ \"2001:4ca0:108:42::*\" | remote_addr !=\"62.210.149.41\" | remote_addr !~ \"91.134.156.*\" | remote_addr !~ \"37.59.149.*\" | http_user_agent != \"worldping-api\" | request_uri !~ \"/wp-.*\" | request_uri !~ \"//wp-.*\" | request_uri !~ \"/*.wordfence.*\" | request_uri !~ \"/robots.txt\" | request_uri !~ \"/xmlrpc.php\" |  __error__=\"\" [1h])))",
          "legendFormat": "",
          "refId": "A"
        }
      ],
      "timeFrom": "1h",
      "timeShift": null,
      "title": "Unique user visits",
      "transformations": [],
      "type": "stat"
    },
    {
      "datasource": "${DS_LOKI-FGC-NGINX01}",
      "description": "",
      "fieldConfig": {
        "defaults": {
          "color": {
            "mode": "thresholds"
          },
          "custom": {},
          "decimals": 0,
          "mappings": [],
          "thresholds": {
            "mode": "absolute",
            "steps": [
              {
                "color": "purple",
                "value": null
              }
            ]
          }
        },
        "overrides": []
      },
      "gridPos": {
        "h": 3,
        "w": 6,
        "x": 6,
        "y": 0
      },
      "id": 31,
      "interval": "24h",
      "maxDataPoints": 1,
      "options": {
        "colorMode": "background",
        "graphMode": "none",
        "justifyMode": "auto",
        "orientation": "auto",
        "reduceOptions": {
          "calcs": [
            "mean"
          ],
          "fields": "",
          "values": false
        },
        "text": {},
        "textMode": "value"
      },
      "pluginVersion": "7.4.1",
      "targets": [
        {
          "expr": "count(sum by (remote_addr) (count_over_time({filename=\"$filename\", host=\"$host\"} | json | http_user_agent !~ \".*bot.*\" | http_user_agent !~ \".*crawler.*\" | remote_addr !~ \"2001:4ca0:108:42::*\" | remote_addr !=\"62.210.149.41\" | remote_addr !~ \"91.134.156.*\" | remote_addr !~ \"37.59.149.*\" | http_user_agent != \"worldping-api\" | request_uri !~ \"/wp-.*\" | request_uri !~ \"//wp-.*\" | request_uri !~ \"/*.wordfence.*\" | request_uri !~ \"/robots.txt\" | request_uri !~ \"/xmlrpc.php\" |  __error__=\"\" [24h])))",
          "legendFormat": "",
          "refId": "A"
        }
      ],
      "timeFrom": "24h",
      "timeShift": null,
      "title": "Unique user visits",
      "transformations": [],
      "type": "stat"
    },
    {
      "datasource": "${DS_LOKI-FGC-NGINX01}",
      "description": "",
      "fieldConfig": {
        "defaults": {
          "color": {
            "mode": "thresholds"
          },
          "custom": {},
          "decimals": 0,
          "mappings": [],
          "thresholds": {
            "mode": "absolute",
            "steps": [
              {
                "color": "purple",
                "value": null
              }
            ]
          }
        },
        "overrides": []
      },
      "gridPos": {
        "h": 3,
        "w": 6,
        "x": 12,
        "y": 0
      },
      "id": 33,
      "interval": "2d",
      "maxDataPoints": 1,
      "options": {
        "colorMode": "background",
        "graphMode": "none",
        "justifyMode": "auto",
        "orientation": "auto",
        "reduceOptions": {
          "calcs": [
            "mean"
          ],
          "fields": "",
          "values": false
        },
        "text": {},
        "textMode": "value"
      },
      "pluginVersion": "7.4.1",
      "targets": [
        {
          "expr": "count(sum by (remote_addr) (count_over_time({filename=\"$filename\", host=\"$host\"} | json | http_user_agent !~ \".*bot.*\" | http_user_agent !~ \".*crawler.*\" | remote_addr !~ \"2001:4ca0:108:42::*\" | remote_addr !=\"62.210.149.41\" | remote_addr !~ \"91.134.156.*\" | remote_addr !~ \"37.59.149.*\" | http_user_agent != \"worldping-api\" | request_uri !~ \"/wp-.*\" | request_uri !~ \"//wp-.*\" | request_uri !~ \"/*.wordfence.*\" | request_uri !~ \"/robots.txt\" | request_uri !~ \"/xmlrpc.php\" |  __error__=\"\" [2d])))",
          "legendFormat": "",
          "refId": "A"
        }
      ],
      "timeFrom": "2d",
      "timeShift": null,
      "title": "Unique user visits",
      "transformations": [],
      "type": "stat"
    },
    {
      "datasource": "${DS_LOKI-FGC-NGINX01}",
      "description": "",
      "fieldConfig": {
        "defaults": {
          "color": {
            "mode": "thresholds"
          },
          "custom": {},
          "decimals": 0,
          "mappings": [],
          "thresholds": {
            "mode": "absolute",
            "steps": [
              {
                "color": "purple",
                "value": null
              }
            ]
          }
        },
        "overrides": []
      },
      "gridPos": {
        "h": 3,
        "w": 6,
        "x": 18,
        "y": 0
      },
      "id": 39,
      "interval": "7d",
      "maxDataPoints": 1,
      "options": {
        "colorMode": "background",
        "graphMode": "none",
        "justifyMode": "auto",
        "orientation": "auto",
        "reduceOptions": {
          "calcs": [
            "mean"
          ],
          "fields": "",
          "values": false
        },
        "text": {},
        "textMode": "value"
      },
      "pluginVersion": "7.4.1",
      "targets": [
        {
          "expr": "count(sum by (remote_addr) (count_over_time({filename=\"$filename\", host=\"$host\"} | json | http_user_agent !~ \".*bot.*\" | http_user_agent !~ \".*crawler.*\" | remote_addr !~ \"2001:4ca0:108:42::*\" | remote_addr !=\"62.210.149.41\" | remote_addr !~ \"91.134.156.*\" | remote_addr !~ \"37.59.149.*\" | http_user_agent != \"worldping-api\" | request_uri !~ \"/wp-.*\" | request_uri !~ \"//wp-.*\" | request_uri !~ \"/*.wordfence.*\" | request_uri !~ \"/robots.txt\" | request_uri !~ \"/xmlrpc.php\" |  __error__=\"\" [7d])))",
          "instant": false,
          "legendFormat": "",
          "range": true,
          "refId": "A"
        }
      ],
      "timeFrom": "7d",
      "timeShift": null,
      "title": "Unique user visits",
      "transformations": [],
      "type": "stat"
    },
    {
      "circleMaxSize": "30",
      "circleMinSize": "2",
      "colors": [
        "#96D98D",
        "#73BF69",
        "#19730E"
      ],
      "datasource": "${DS_LOKI-FGC-NGINX01}",
      "decimals": 0,
      "esMetric": "Count",
      "fieldConfig": {
        "defaults": {
          "custom": {}
        },
        "overrides": []
      },
      "gridPos": {
        "h": 9,
        "w": 24,
        "x": 0,
        "y": 3
      },
      "hideEmpty": false,
      "hideZero": false,
      "id": 30,
      "initialZoom": "1",
      "locationData": "countries",
      "mapCenter": "(0°, 0°)",
      "mapCenterLatitude": 0,
      "mapCenterLongitude": 0,
      "maxDataPoints": 1,
      "mouseWheelZoom": false,
      "pluginVersion": "7.3.7",
      "showLegend": true,
      "stickyLabels": false,
      "tableQueryOptions": {
        "geohashField": "geohash",
        "latitudeField": "latitude",
        "longitudeField": "longitude",
        "metricField": "metric",
        "queryType": "geohash"
      },
      "targets": [
        {
          "expr": "sum by (geoip_country_code) (count_over_time({filename=\"$filename\", host=\"$host\"} | json | http_user_agent !~ \".*bot.*\" | http_user_agent !~ \".*crawler.*\" | remote_addr !~ \"2001:4ca0:108:42::*\" | remote_addr !=\"62.210.149.41\" | remote_addr !~ \"91.134.156.*\" | remote_addr !~ \"37.59.149.*\" | http_user_agent != \"worldping-api\" | request_uri !~ \"/wp-.*\" | request_uri !~ \"//wp-.*\" | request_uri !~ \"/*.wordfence.*\" | request_uri !~ \"/robots.txt\" | request_uri !~ \"/xmlrpc.php\" | __error__=\"\" [$__interval]))",
          "legendFormat": "{{geoip_country_code}}",
          "queryType": "randomWalk",
          "refId": "A"
        }
      ],
      "thresholds": "5,10",
      "timeFrom": null,
      "timeShift": null,
      "title": "",
      "type": "grafana-worldmap-panel",
      "unitPlural": "",
      "unitSingle": "",
      "valueName": "total"
    },
    {
      "collapsed": true,
      "datasource": "${DS_PROMETHEUS}",
      "gridPos": {
        "h": 1,
        "w": 24,
        "x": 0,
        "y": 12
      },
      "id": 41,
      "panels": [
        {
          "aliasColors": {},
          "bars": false,
          "dashLength": 10,
          "dashes": false,
          "datasource": "${DS_LOKI-FGC-NGINX01}",
          "description": "",
          "fieldConfig": {
            "defaults": {
              "color": {},
              "custom": {},
              "thresholds": {
                "mode": "absolute",
                "steps": []
              },
              "unit": "short"
            },
            "overrides": []
          },
          "fill": 1,
          "fillGradient": 0,
          "gridPos": {
            "h": 9,
            "w": 24,
            "x": 0,
            "y": 13
          },
          "hiddenSeries": false,
          "hideTimeOverride": false,
          "id": 35,
          "interval": "1d",
          "legend": {
            "avg": false,
            "current": false,
            "max": false,
            "min": false,
            "show": true,
            "total": false,
            "values": false
          },
          "lines": true,
          "linewidth": 2,
          "maxDataPoints": 7,
          "nullPointMode": "null",
          "options": {
            "alertThreshold": true
          },
          "percentage": false,
          "pluginVersion": "7.4.1",
          "pointradius": 4,
          "points": true,
          "renderer": "flot",
          "seriesOverrides": [],
          "spaceLength": 10,
          "stack": false,
          "steppedLine": false,
          "targets": [
            {
              "expr": "count(sum by (remote_addr) (count_over_time({filename=\"$filename\", host=\"$host\"} | json | http_user_agent !~ \".*bot.*\" | http_user_agent !~ \".*crawler.*\" | remote_addr !~ \"2001:4ca0:108:42::*\" | remote_addr !=\"62.210.149.41\" | remote_addr !~ \"91.134.156.*\" | remote_addr !~ \"37.59.149.*\" | http_user_agent != \"worldping-api\" | request_uri !~ \"/wp-.*\" | request_uri !~ \"//wp-.*\" | request_uri !~ \"/*.wordfence.*\" | request_uri !~ \"/robots.txt\" | request_uri !~ \"/xmlrpc.php\" |  __error__=\"\" [1d])))",
              "legendFormat": "Unique user visit count",
              "refId": "A"
            }
          ],
          "thresholds": [],
          "timeFrom": "7d",
          "timeRegions": [],
          "timeShift": null,
          "title": "Unique user visits",
          "tooltip": {
            "shared": true,
            "sort": 0,
            "value_type": "individual"
          },
          "transformations": [],
          "type": "graph",
          "xaxis": {
            "buckets": null,
            "mode": "time",
            "name": null,
            "show": true,
            "values": []
          },
          "yaxes": [
            {
              "$$hashKey": "object:96",
              "format": "short",
              "label": null,
              "logBase": 1,
              "max": null,
              "min": null,
              "show": true
            },
            {
              "$$hashKey": "object:97",
              "format": "short",
              "label": null,
              "logBase": 1,
              "max": null,
              "min": null,
              "show": true
            }
          ],
          "yaxis": {
            "align": false,
            "alignLevel": null
          }
        },
        {
          "aliasColors": {},
          "bars": false,
          "dashLength": 10,
          "dashes": false,
          "datasource": "${DS_LOKI-FGC-NGINX01}",
          "description": "",
          "fieldConfig": {
            "defaults": {
              "color": {},
              "custom": {},
              "thresholds": {
                "mode": "absolute",
                "steps": []
              },
              "unit": "short"
            },
            "overrides": []
          },
          "fill": 1,
          "fillGradient": 0,
          "gridPos": {
            "h": 9,
            "w": 24,
            "x": 0,
            "y": 22
          },
          "hiddenSeries": false,
          "hideTimeOverride": false,
          "id": 38,
          "interval": "1d",
          "legend": {
            "avg": false,
            "current": false,
            "max": false,
            "min": false,
            "show": true,
            "total": true,
            "values": true
          },
          "lines": true,
          "linewidth": 2,
          "maxDataPoints": 30,
          "nullPointMode": "null",
          "options": {
            "alertThreshold": true
          },
          "percentage": false,
          "pluginVersion": "7.4.1",
          "pointradius": 4,
          "points": true,
          "renderer": "flot",
          "seriesOverrides": [],
          "spaceLength": 10,
          "stack": false,
          "steppedLine": false,
          "targets": [
            {
              "expr": "count(sum by (remote_addr) (count_over_time({filename=\"$filename\", host=\"$host\"} | json | http_user_agent !~ \".*bot.*\" | http_user_agent !~ \".*crawler.*\" | remote_addr !~ \"2001:4ca0:108:42::*\" | remote_addr !=\"62.210.149.41\" | remote_addr !~ \"91.134.156.*\" | remote_addr !~ \"37.59.149.*\" | http_user_agent != \"worldping-api\" | request_uri !~ \"/wp-.*\" | request_uri !~ \"//wp-.*\" | request_uri !~ \"/*.wordfence.*\" | request_uri !~ \"/robots.txt\" | request_uri !~ \"/xmlrpc.php\" |  __error__=\"\" [1d])))",
              "legendFormat": "Unique user visit count",
              "refId": "A"
            }
          ],
          "thresholds": [],
          "timeFrom": "30d",
          "timeRegions": [],
          "timeShift": null,
          "title": "Unique user visits",
          "tooltip": {
            "shared": true,
            "sort": 0,
            "value_type": "individual"
          },
          "transformations": [],
          "type": "graph",
          "xaxis": {
            "buckets": null,
            "mode": "time",
            "name": null,
            "show": true,
            "values": []
          },
          "yaxes": [
            {
              "$$hashKey": "object:96",
              "format": "short",
              "label": null,
              "logBase": 1,
              "max": null,
              "min": null,
              "show": true
            },
            {
              "$$hashKey": "object:97",
              "format": "short",
              "label": null,
              "logBase": 1,
              "max": null,
              "min": null,
              "show": true
            }
          ],
          "yaxis": {
            "align": false,
            "alignLevel": null
          }
        }
      ],
      "title": "Visitor Graphs",
      "type": "row"
    },
    {
      "collapsed": true,
      "datasource": "${DS_LOKI-FGC-NGINX01}",
      "gridPos": {
        "h": 1,
        "w": 24,
        "x": 0,
        "y": 13
      },
      "id": 28,
      "panels": [
        {
          "datasource": "${DS_LOKI-FGC-NGINX01}",
          "description": "",
          "fieldConfig": {
            "defaults": {
              "color": {
                "mode": "thresholds"
              },
              "custom": {
                "align": null,
                "filterable": false
              },
              "mappings": [],
              "thresholds": {
                "mode": "absolute",
                "steps": [
                  {
                    "color": "green",
                    "value": null
                  },
                  {
                    "color": "red",
                    "value": 80
                  }
                ]
              }
            },
            "overrides": [
              {
                "matcher": {
                  "id": "byName",
                  "options": "Requests"
                },
                "properties": [
                  {
                    "id": "custom.width",
                    "value": 300
                  },
                  {
                    "id": "custom.displayMode",
                    "value": "gradient-gauge"
                  },
                  {
                    "id": "color",
                    "value": {
                      "mode": "continuous-BlPu"
                    }
                  }
                ]
              }
            ]
          },
          "gridPos": {
            "h": 27,
            "w": 9,
            "x": 0,
            "y": 14
          },
          "id": 3,
          "interval": "30m",
          "options": {
            "showHeader": true,
            "sortBy": [
              {
                "desc": true,
                "displayName": "Requests"
              }
            ]
          },
          "pluginVersion": "7.4.1",
          "targets": [
            {
              "expr": "topk(5, sum by (remote_addr) (count_over_time({filename=\"$filename\", host=\"$host\"} | json | http_user_agent !~ \".*bot.*\" | http_user_agent !~ \".*crawler.*\" | remote_addr !~ \"2001:4ca0:108:42::*\" | remote_addr !=\"62.210.149.41\" | remote_addr !~ \"91.134.156.*\" | remote_addr !~ \"37.59.149.*\" | http_user_agent != \"worldping-api\" | request_uri !~ \"/wp-.*\" | request_uri !~ \"//wp-.*\" | request_uri !~ \"/*.wordfence.*\" | request_uri !~ \"/robots.txt\" | request_uri !~ \"/xmlrpc.php\" |  __error__=\"\" [$__interval])))",
              "legendFormat": "{{remote_addr}}",
              "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": "${DS_LOKI-FGC-NGINX01}",
          "description": "",
          "fieldConfig": {
            "defaults": {
              "color": {
                "mode": "thresholds"
              },
              "custom": {
                "align": null,
                "filterable": false
              },
              "mappings": [],
              "thresholds": {
                "mode": "absolute",
                "steps": [
                  {
                    "color": "green",
                    "value": null
                  },
                  {
                    "color": "red",
                    "value": 80
                  }
                ]
              }
            },
            "overrides": [
              {
                "matcher": {
                  "id": "byName",
                  "options": "Requests"
                },
                "properties": [
                  {
                    "id": "custom.width",
                    "value": 300
                  },
                  {
                    "id": "custom.displayMode",
                    "value": "gradient-gauge"
                  },
                  {
                    "id": "color",
                    "value": {
                      "mode": "continuous-BlPu"
                    }
                  }
                ]
              }
            ]
          },
          "gridPos": {
            "h": 6,
            "w": 15,
            "x": 9,
            "y": 14
          },
          "id": 34,
          "interval": "1h",
          "options": {
            "showHeader": true,
            "sortBy": [
              {
                "desc": true,
                "displayName": "Requests"
              }
            ]
          },
          "pluginVersion": "7.4.1",
          "targets": [
            {
              "expr": "topk(10, sum by (http_referer) (count_over_time({filename=\"$filename\", host=\"$host\"} | json | http_user_agent !~ \".*bot.*\" | http_user_agent !~ \".*crawler.*\" | http_user_agent != \"worldping-api\" | http_referer != \"\" and http_referer !~ \".*?$host.*?\" | http_referer !~ \".*?panxora.*?\" | http_referer != \"http://192.168.120.55:9000/\" | __error__=\"\" [$__interval]))) ",
              "legendFormat": "{{http_referer}}",
              "refId": "A"
            }
          ],
          "timeFrom": null,
          "timeShift": null,
          "title": "Top HTTP Referers - Exclude Panxora Site",
          "transformations": [
            {
              "id": "reduce",
              "options": {
                "reducers": [
                  "sum"
                ]
              }
            },
            {
              "id": "organize",
              "options": {
                "excludeByName": {},
                "indexByName": {},
                "renameByName": {
                  "Field": "Referer",
                  "Total": "Requests"
                }
              }
            }
          ],
          "type": "table"
        },
        {
          "datasource": "${DS_LOKI-FGC-NGINX01}",
          "description": "",
          "fieldConfig": {
            "defaults": {
              "color": {
                "mode": "thresholds"
              },
              "custom": {
                "align": null,
                "filterable": false
              },
              "mappings": [],
              "thresholds": {
                "mode": "absolute",
                "steps": [
                  {
                    "color": "green",
                    "value": null
                  },
                  {
                    "color": "red",
                    "value": 80
                  }
                ]
              }
            },
            "overrides": [
              {
                "matcher": {
                  "id": "byName",
                  "options": "Total"
                },
                "properties": [
                  {
                    "id": "custom.width",
                    "value": 300
                  },
                  {
                    "id": "custom.displayMode",
                    "value": "gradient-gauge"
                  },
                  {
                    "id": "color",
                    "value": {
                      "mode": "continuous-BlPu"
                    }
                  }
                ]
              }
            ]
          },
          "gridPos": {
            "h": 8,
            "w": 15,
            "x": 9,
            "y": 20
          },
          "id": 12,
          "interval": "5m",
          "options": {
            "showHeader": true,
            "sortBy": [
              {
                "desc": true,
                "displayName": "Total"
              }
            ]
          },
          "pluginVersion": "7.4.1",
          "targets": [
            {
              "expr": "topk(10,sum by (request_uri) (count_over_time({filename=\"$filename\", host=\"$host\"} | json | http_user_agent !~ \".*bot.*\" | http_user_agent !~ \".*crawler.*\" | request_uri != \"/\" | request_uri !~ \"/wp-.*\" | request_uri !~ \"//wp-.*\" | request_uri !~ \"/*.wordfence.*\" | request_uri !~ \"/robots.txt\" | request_uri !~ \"/xmlrpc.php\" | __error__=\"\" [$__interval])))",
              "legendFormat": "{{request_uri}}",
              "refId": "A"
            }
          ],
          "timeFrom": null,
          "timeShift": null,
          "title": "Top Requested Pages - Excluding '/'",
          "transformations": [
            {
              "id": "reduce",
              "options": {
                "reducers": [
                  "sum"
                ]
              }
            },
            {
              "id": "organize",
              "options": {
                "excludeByName": {},
                "indexByName": {},
                "renameByName": {
                  "Field": "Page",
                  "Total": ""
                }
              }
            }
          ],
          "type": "table"
        },
        {
          "datasource": "${DS_LOKI-FGC-NGINX01}",
          "description": "",
          "fieldConfig": {
            "defaults": {
              "color": {
                "mode": "thresholds"
              },
              "custom": {
                "align": null,
                "filterable": false
              },
              "mappings": [],
              "thresholds": {
                "mode": "absolute",
                "steps": [
                  {
                    "color": "green",
                    "value": null
                  },
                  {
                    "color": "red",
                    "value": 80
                  }
                ]
              }
            },
            "overrides": [
              {
                "matcher": {
                  "id": "byName",
                  "options": "Requests"
                },
                "properties": [
                  {
                    "id": "custom.width",
                    "value": 300
                  },
                  {
                    "id": "custom.displayMode",
                    "value": "gradient-gauge"
                  },
                  {
                    "id": "color",
                    "value": {
                      "mode": "continuous-BlPu"
                    }
                  }
                ]
              }
            ]
          },
          "gridPos": {
            "h": 6,
            "w": 15,
            "x": 9,
            "y": 28
          },
          "id": 6,
          "interval": "1h",
          "options": {
            "showHeader": true,
            "sortBy": [
              {
                "desc": true,
                "displayName": "Requests"
              }
            ]
          },
          "pluginVersion": "7.4.1",
          "targets": [
            {
              "expr": "topk(5, sum by (http_referer) (count_over_time({filename=\"$filename\", host=\"$host\"} | json | http_user_agent !~ \".*bot.*\" | http_user_agent !~ \".*crawler.*\" | http_user_agent != \"worldping-api\" | http_referer != \"\" and http_referer !~ \".*?$host.*?\" | __error__=\"\" [$__interval])))",
              "legendFormat": "{{http_referer}}",
              "refId": "A"
            }
          ],
          "timeFrom": null,
          "timeShift": null,
          "title": "Top HTTP Referers",
          "transformations": [
            {
              "id": "reduce",
              "options": {
                "reducers": [
                  "sum"
                ]
              }
            },
            {
              "id": "organize",
              "options": {
                "excludeByName": {},
                "indexByName": {},
                "renameByName": {
                  "Field": "Referer",
                  "Total": "Requests"
                }
              }
            }
          ],
          "type": "table"
        },
        {
          "datasource": "${DS_LOKI-FGC-NGINX01}",
          "description": "",
          "fieldConfig": {
            "defaults": {
              "color": {
                "mode": "thresholds"
              },
              "custom": {
                "align": null,
                "filterable": false
              },
              "mappings": [],
              "thresholds": {
                "mode": "absolute",
                "steps": [
                  {
                    "color": "green",
                    "value": null
                  },
                  {
                    "color": "red",
                    "value": 80
                  }
                ]
              }
            },
            "overrides": [
              {
                "matcher": {
                  "id": "byName",
                  "options": "Requests"
                },
                "properties": [
                  {
                    "id": "custom.width",
                    "value": 300
                  },
                  {
                    "id": "custom.displayMode",
                    "value": "gradient-gauge"
                  },
                  {
                    "id": "color",
                    "value": {
                      "mode": "continuous-BlPu"
                    }
                  }
                ]
              }
            ]
          },
          "gridPos": {
            "h": 7,
            "w": 15,
            "x": 9,
            "y": 34
          },
          "id": 7,
          "interval": "1h",
          "options": {
            "showHeader": true,
            "sortBy": [
              {
                "desc": true,
                "displayName": "Requests"
              }
            ]
          },
          "pluginVersion": "7.4.1",
          "targets": [
            {
              "expr": "topk(10, sum by (http_user_agent) (count_over_time({filename=\"$filename\", host=\"$host\"} | json | http_user_agent !~ \".*bot.*\" | http_user_agent !~ \".*crawler.*\" | http_user_agent != \"worldping-api\" |  __error__=\"\" [$__interval])))",
              "legendFormat": "{{http_user_agent}}",
              "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"
        }
      ],
      "title": "Sources & Behaviours",
      "type": "row"
    },
    {
      "collapsed": true,
      "datasource": "${DS_LOKI-FGC-NGINX01}",
      "gridPos": {
        "h": 1,
        "w": 24,
        "x": 0,
        "y": 14
      },
      "id": 24,
      "panels": [
        {
          "datasource": "${DS_LOKI-FGC-NGINX01}",
          "description": "",
          "fieldConfig": {
            "defaults": {
              "color": {
                "mode": "thresholds"
              },
              "custom": {},
              "mappings": [],
              "thresholds": {
                "mode": "absolute",
                "steps": [
                  {
                    "color": "light-blue",
                    "value": null
                  }
                ]
              },
              "unit": "short"
            },
            "overrides": []
          },
          "gridPos": {
            "h": 12,
            "w": 15,
            "x": 0,
            "y": 15
          },
          "id": 5,
          "interval": "30s",
          "options": {
            "colorMode": "background",
            "graphMode": "area",
            "justifyMode": "auto",
            "orientation": "auto",
            "reduceOptions": {
              "calcs": [
                "sum"
              ],
              "fields": "",
              "values": false
            },
            "text": {},
            "textMode": "auto"
          },
          "pluginVersion": "7.4.1",
          "targets": [
            {
              "expr": "sum by (status) (count_over_time({filename=\"$filename\", host=\"$host\"} | json |  __error__=\"\" [$__interval]))",
              "legendFormat": "HTTP Status: {{status}}",
              "refId": "A"
            }
          ],
          "timeFrom": null,
          "timeShift": null,
          "title": "Requests per status code",
          "transformations": [],
          "type": "stat"
        },
        {
          "datasource": "${DS_LOKI-FGC-NGINX01}",
          "description": "",
          "fieldConfig": {
            "defaults": {
              "color": {
                "mode": "thresholds"
              },
              "custom": {},
              "mappings": [],
              "thresholds": {
                "mode": "absolute",
                "steps": [
                  {
                    "color": "purple",
                    "value": null
                  }
                ]
              },
              "unit": "short"
            },
            "overrides": []
          },
          "gridPos": {
            "h": 4,
            "w": 9,
            "x": 15,
            "y": 15
          },
          "id": 4,
          "interval": "30s",
          "options": {
            "colorMode": "background",
            "graphMode": "none",
            "justifyMode": "center",
            "orientation": "auto",
            "reduceOptions": {
              "calcs": [
                "sum"
              ],
              "fields": "",
              "values": false
            },
            "text": {},
            "textMode": "value"
          },
          "pluginVersion": "7.4.1",
          "targets": [
            {
              "expr": "sum by(host) (count_over_time({filename=\"$filename\", host=\"$host\"}[$__interval]))  ",
              "legendFormat": "",
              "refId": "A"
            }
          ],
          "timeFrom": null,
          "timeShift": null,
          "title": "Total requests  ",
          "transformations": [],
          "type": "stat"
        },
        {
          "cacheTimeout": null,
          "datasource": "${DS_LOKI-FGC-NGINX01}",
          "description": "",
          "fieldConfig": {
            "defaults": {
              "color": {
                "mode": "thresholds"
              },
              "custom": {},
              "mappings": [],
              "thresholds": {
                "mode": "absolute",
                "steps": [
                  {
                    "color": "purple",
                    "value": null
                  },
                  {
                    "color": "red",
                    "value": 80
                  }
                ]
              },
              "unit": "percent"
            },
            "overrides": []
          },
          "gridPos": {
            "h": 4,
            "w": 5,
            "x": 15,
            "y": 19
          },
          "id": 19,
          "interval": null,
          "links": [],
          "maxDataPoints": 1,
          "options": {
            "colorMode": "background",
            "graphMode": "none",
            "justifyMode": "center",
            "orientation": "auto",
            "reduceOptions": {
              "calcs": [
                "mean"
              ],
              "fields": "",
              "values": false
            },
            "text": {},
            "textMode": "value"
          },
          "pluginVersion": "7.4.1",
          "targets": [
            {
              "expr": " sum(rate({filename=\"$filename\", host=\"$host\"} | json | status >= 500 |__error__=\"\"[$__interval])) / (sum(rate({filename=\"$filename\", host=\"$host\"} | json | __error__=\"\"[$__interval])) / 100)",
              "legendFormat": "",
              "refId": "A"
            }
          ],
          "timeFrom": null,
          "timeShift": null,
          "title": "% of 5xx requests ",
          "type": "stat"
        },
        {
          "cacheTimeout": null,
          "datasource": "${DS_LOKI-FGC-NGINX01}",
          "description": "",
          "fieldConfig": {
            "defaults": {
              "color": {
                "mode": "thresholds"
              },
              "custom": {},
              "mappings": [],
              "thresholds": {
                "mode": "absolute",
                "steps": [
                  {
                    "color": "purple",
                    "value": null
                  }
                ]
              },
              "unit": "percent"
            },
            "overrides": []
          },
          "gridPos": {
            "h": 4,
            "w": 4,
            "x": 20,
            "y": 19
          },
          "id": 18,
          "interval": "10m",
          "links": [],
          "maxDataPoints": 1,
          "options": {
            "colorMode": "background",
            "graphMode": "none",
            "justifyMode": "auto",
            "orientation": "auto",
            "reduceOptions": {
              "calcs": [
                "last"
              ],
              "fields": "",
              "values": false
            },
            "text": {},
            "textMode": "value"
          },
          "pluginVersion": "7.4.1",
          "targets": [
            {
              "expr": " sum(rate(({job=\"$job\", host=\"$host\"} |= \"Googlebot\")[$__interval])) / (sum(rate(({job=\"$job\", host=\"$host\"} != \"Googlebot\")[$__interval])) / 100)",
              "legendFormat": "",
              "refId": "A"
            }
          ],
          "timeFrom": null,
          "timeShift": null,
          "title": "% of requests by Googlebot",
          "type": "stat"
        },
        {
          "datasource": "${DS_LOKI-FGC-NGINX01}",
          "description": "",
          "fieldConfig": {
            "defaults": {
              "color": {
                "mode": "thresholds"
              },
              "custom": {},
              "mappings": [],
              "thresholds": {
                "mode": "absolute",
                "steps": [
                  {
                    "color": "purple",
                    "value": null
                  }
                ]
              },
              "unit": "decbytes"
            },
            "overrides": []
          },
          "gridPos": {
            "h": 4,
            "w": 9,
            "x": 15,
            "y": 23
          },
          "id": 8,
          "interval": "10m",
          "options": {
            "colorMode": "background",
            "graphMode": "none",
            "justifyMode": "center",
            "orientation": "auto",
            "reduceOptions": {
              "calcs": [
                "sum"
              ],
              "fields": "",
              "values": false
            },
            "text": {},
            "textMode": "value"
          },
          "pluginVersion": "7.4.1",
          "targets": [
            {
              "expr": "sum by (host) (sum_over_time({filename=\"$filename\", host=\"$host\"} | json | status=200 | unwrap body_bytes_sent |  __error__=\"\" [$__interval]))",
              "legendFormat": "Bytes sent",
              "refId": "A"
            }
          ],
          "timeFrom": null,
          "timeShift": null,
          "title": "Total Bytes Sent",
          "transformations": [
            {
              "id": "reduce",
              "options": {
                "reducers": [
                  "sum"
                ]
              }
            },
            {
              "id": "organize",
              "options": {
                "excludeByName": {},
                "indexByName": {},
                "renameByName": {
                  "Total": "Bytes Sent"
                }
              }
            }
          ],
          "type": "stat"
        },
        {
          "datasource": "${DS_LOKI-FGC-NGINX01}",
          "description": "",
          "fieldConfig": {
            "defaults": {
              "custom": {}
            },
            "overrides": []
          },
          "gridPos": {
            "h": 14,
            "w": 24,
            "x": 0,
            "y": 27
          },
          "id": 11,
          "options": {
            "showLabels": false,
            "showTime": false,
            "sortOrder": "Descending",
            "wrapLogMessage": false
          },
          "targets": [
            {
              "expr": "{filename=\"$filename\", host=\"$host\"} | json | http_user_agent !~ \".*bot.*\" | http_user_agent !~ \".*crawler.*\" | remote_addr !~ \"2001:4ca0:108:42::*\" | remote_addr !=\"62.210.149.41\" | remote_addr !~ \"91.134.156.*\" | remote_addr !~ \"37.59.149.*\" | http_user_agent != \"worldping-api\" | request_uri !~ \"/wp-.*\" | request_uri !~ \"//wp-.*\" | request_uri !~ \"/*.wordfence.*\" | request_uri !~ \"/robots.txt\" | request_uri !~ \"/xmlrpc.php\" | line_format \"request for {{.request_uri}} with HTTP status: {{.status}} from {{.remote_addr}} located {{.geoip_country_code}}\"",
              "legendFormat": "",
              "refId": "A"
            }
          ],
          "timeFrom": null,
          "timeShift": null,
          "title": "Recent requests",
          "type": "logs"
        }
      ],
      "title": "Requests & HTTP Status",
      "type": "row"
    },
    {
      "collapsed": true,
      "datasource": "${DS_LOKI-FGC-NGINX01}",
      "gridPos": {
        "h": 1,
        "w": 24,
        "x": 0,
        "y": 15
      },
      "id": 26,
      "panels": [
        {
          "aliasColors": {
            "95th percentile": "blue",
            "max latency": "super-light-blue"
          },
          "bars": false,
          "dashLength": 10,
          "dashes": false,
          "datasource": "${DS_LOKI-FGC-NGINX01}",
          "description": "",
          "fieldConfig": {
            "defaults": {
              "custom": {},
              "unit": "s"
            },
            "overrides": []
          },
          "fill": 5,
          "fillGradient": 9,
          "gridPos": {
            "h": 9,
            "w": 7,
            "x": 0,
            "y": 16
          },
          "hiddenSeries": false,
          "id": 16,
          "interval": "30s",
          "legend": {
            "avg": false,
            "current": false,
            "max": false,
            "min": false,
            "show": true,
            "total": false,
            "values": false
          },
          "lines": true,
          "linewidth": 1,
          "nullPointMode": "null",
          "options": {
            "alertThreshold": true
          },
          "percentage": false,
          "pluginVersion": "7.4.1",
          "pointradius": 2,
          "points": false,
          "renderer": "flot",
          "seriesOverrides": [
            {
              "alias": "max latency",
              "dashes": true,
              "fillGradient": 3
            }
          ],
          "spaceLength": 10,
          "stack": false,
          "steppedLine": false,
          "targets": [
            {
              "expr": "quantile_over_time(0.95,{filename=\"$filename\", host=\"$host\"} | json | unwrap request_time |  __error__=\"\"  [$__interval]) by (host)",
              "legendFormat": "95th percentile",
              "refId": "C"
            },
            {
              "expr": "max by (host) (max_over_time({filename=\"$filename\", host=\"$host\"} | json | unwrap request_time |  __error__=\"\"  [$__interval]))",
              "legendFormat": "max latency",
              "refId": "D"
            }
          ],
          "thresholds": [
            {
              "colorMode": "critical",
              "fill": true,
              "line": true,
              "op": "gt",
              "value": 0.3,
              "yaxis": "left"
            }
          ],
          "timeFrom": null,
          "timeRegions": [],
          "timeShift": null,
          "title": "95th percentile of Request Time",
          "tooltip": {
            "shared": true,
            "sort": 0,
            "value_type": "individual"
          },
          "type": "graph",
          "xaxis": {
            "buckets": null,
            "mode": "time",
            "name": null,
            "show": true,
            "values": []
          },
          "yaxes": [
            {
              "format": "s",
              "label": null,
              "logBase": 1,
              "max": null,
              "min": null,
              "show": true
            },
            {
              "format": "short",
              "label": null,
              "logBase": 1,
              "max": null,
              "min": null,
              "show": false
            }
          ],
          "yaxis": {
            "align": false,
            "alignLevel": null
          }
        },
        {
          "aliasColors": {
            "{statuscode=\"200\"} 200": "green",
            "{statuscode=\"404\"} 404": "semi-dark-purple",
            "{statuscode=\"500\"} 500": "dark-red"
          },
          "bars": false,
          "dashLength": 10,
          "dashes": false,
          "datasource": "${DS_LOKI-FGC-NGINX01}",
          "description": "",
          "fieldConfig": {
            "defaults": {
              "custom": {}
            },
            "overrides": []
          },
          "fill": 1,
          "fillGradient": 10,
          "gridPos": {
            "h": 9,
            "w": 9,
            "x": 7,
            "y": 16
          },
          "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": {
            "alertThreshold": true
          },
          "percentage": true,
          "pluginVersion": "7.4.1",
          "pointradius": 2,
          "points": false,
          "renderer": "flot",
          "seriesOverrides": [],
          "spaceLength": 10,
          "stack": true,
          "steppedLine": false,
          "targets": [
            {
              "expr": "sum by (status) (count_over_time({filename=\"$filename\", host=\"$host\"} | json |  __error__=\"\" [$__interval]))",
              "legendFormat": "HTTP Status {{status}}",
              "refId": "A"
            }
          ],
          "thresholds": [],
          "timeFrom": null,
          "timeRegions": [],
          "timeShift": null,
          "title": "HTTP requests",
          "tooltip": {
            "shared": true,
            "sort": 0,
            "value_type": "individual"
          },
          "transformations": [
            {
              "id": "filterFieldsByName",
              "options": {
                "include": {
                  "names": [
                    "Time",
                    "HTTP Status 200",
                    "HTTP Status 301",
                    "HTTP Status 304",
                    "HTTP Status 404",
                    "HTTP Status 406",
                    "HTTP Status 500"
                  ]
                }
              }
            }
          ],
          "type": "graph",
          "xaxis": {
            "buckets": null,
            "mode": "time",
            "name": null,
            "show": true,
            "values": []
          },
          "yaxes": [
            {
              "decimals": 0,
              "format": "short",
              "label": null,
              "logBase": 1,
              "max": "100",
              "min": null,
              "show": true
            },
            {
              "format": "short",
              "label": null,
              "logBase": 1,
              "max": null,
              "min": null,
              "show": true
            }
          ],
          "yaxis": {
            "align": false,
            "alignLevel": null
          }
        },
        {
          "aliasColors": {
            "Bytes sent": "light-blue",
            "appfelstrudel": "yellow"
          },
          "bars": false,
          "dashLength": 10,
          "dashes": false,
          "datasource": "${DS_LOKI-FGC-NGINX01}",
          "description": "",
          "fieldConfig": {
            "defaults": {
              "custom": {}
            },
            "overrides": []
          },
          "fill": 10,
          "fillGradient": 10,
          "gridPos": {
            "h": 9,
            "w": 8,
            "x": 16,
            "y": 16
          },
          "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": {
            "alertThreshold": true
          },
          "percentage": false,
          "pluginVersion": "7.4.1",
          "pointradius": 2,
          "points": false,
          "renderer": "flot",
          "seriesOverrides": [],
          "spaceLength": 10,
          "stack": false,
          "steppedLine": false,
          "targets": [
            {
              "expr": "sum by (host) (sum_over_time({filename=\"$filename\", host=\"$host\"} | json | status=200 | unwrap body_bytes_sent |  __error__=\"\" [$__interval]))",
              "legendFormat": "Bytes sent",
              "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": [
            {
              "format": "decbytes",
              "label": null,
              "logBase": 1,
              "max": null,
              "min": null,
              "show": true
            },
            {
              "format": "short",
              "label": null,
              "logBase": 1,
              "max": null,
              "min": null,
              "show": true
            }
          ],
          "yaxis": {
            "align": false,
            "alignLevel": null
          }
        }
      ],
      "title": "Request Statistics Over Time",
      "type": "row"
    }
  ],
  "refresh": "",
  "schemaVersion": 27,
  "style": "dark",
  "tags": [],
  "templating": {
    "list": [
      {
        "allValue": null,
        "current": {},
        "datasource": "${DS_LOKI-FGC-NGINX01}",
        "definition": "label_values({filename=\"/var/log/nginx/json_access.log\"}, host)",
        "description": null,
        "error": null,
        "hide": 0,
        "includeAll": false,
        "label": "host",
        "multi": false,
        "name": "host",
        "options": [],
        "query": "label_values({filename=\"/var/log/nginx/json_access.log\"}, host)",
        "refresh": 1,
        "regex": "",
        "skipUrlSync": false,
        "sort": 0,
        "tagValuesQuery": "",
        "tags": [],
        "tagsQuery": "",
        "type": "query",
        "useTags": false
      },
      {
        "allValue": null,
        "current": {},
        "datasource": "${DS_LOKI-FGC-NGINX01}",
        "definition": "label_values(filename)",
        "description": null,
        "error": null,
        "hide": 0,
        "includeAll": false,
        "label": "filename",
        "multi": false,
        "name": "filename",
        "options": [],
        "query": "label_values(filename)",
        "refresh": 2,
        "regex": "",
        "skipUrlSync": false,
        "sort": 0,
        "tagValuesQuery": "",
        "tags": [],
        "tagsQuery": "",
        "type": "query",
        "useTags": false
      },
      {
        "allValue": null,
        "current": {},
        "datasource": "${DS_LOKI-FGC-NGINX01}",
        "definition": "label_values(job)",
        "description": null,
        "error": null,
        "hide": 0,
        "includeAll": false,
        "label": "job",
        "multi": false,
        "name": "job",
        "options": [],
        "query": "label_values(job)",
        "refresh": 2,
        "regex": "",
        "skipUrlSync": false,
        "sort": 0,
        "tagValuesQuery": "",
        "tags": [],
        "tagsQuery": "",
        "type": "query",
        "useTags": false
      }
    ]
  },
  "time": {
    "from": "now-24h",
    "to": "now"
  },
  "timepicker": {
    "refresh_intervals": [
      "10s",
      "30s",
      "1m",
      "5m",
      "15m",
      "30m",
      "1h",
      "2h",
      "1d"
    ]
  },
  "timezone": "",
  "title": "Analytics - NGINX / LOKI v2+ Data Source / Promtail v2+ Tool",
  "uid": "fgc-nginx01-web-analytics",
  "version": 5
}