00-depot: add persistent Loki Alloy Grafana stack
This commit is contained in:
@@ -0,0 +1,126 @@
|
|||||||
|
# Internal logging stack
|
||||||
|
|
||||||
|
Portainer Git stack for `outline` (`10.0.0.6`). It replaces only the logging
|
||||||
|
part of the manual `mktxp-stack`:
|
||||||
|
|
||||||
|
- `loki` stores syslog in the persistent host path
|
||||||
|
`/mnt/containers/logging/loki-data`;
|
||||||
|
- `alloy` replaces the `syslog-ng` -> `promtail` relay;
|
||||||
|
- `grafana` provides the existing MikroTik Loki dashboard.
|
||||||
|
|
||||||
|
The retired stack's `mktxp`, Prometheus, Promtail, and syslog-ng services are
|
||||||
|
not part of this stack.
|
||||||
|
|
||||||
|
## Portainer settings
|
||||||
|
|
||||||
|
- Repository: `https://git.it-depot.ru/depot/docker-infrastructure`
|
||||||
|
- Branch: `master`
|
||||||
|
- Compose path: `logging/docker-compose.yaml`
|
||||||
|
- Required environment variable: `GRAFANA_ADMIN_PASSWORD`
|
||||||
|
|
||||||
|
Do not deploy the new stack before completing the cutover below: the current
|
||||||
|
containers still own names `loki` and `grafana` and host ports 3000, 3100, 514,
|
||||||
|
and 601.
|
||||||
|
|
||||||
|
## Host files
|
||||||
|
|
||||||
|
The Git-backed compose file intentionally bind-mounts stable host paths.
|
||||||
|
Before deployment, the repository files must be copied to:
|
||||||
|
|
||||||
|
```text
|
||||||
|
/mnt/containers/logging/
|
||||||
|
├── alloy-config/config.alloy
|
||||||
|
├── alloy-data/
|
||||||
|
├── grafana-config/
|
||||||
|
│ ├── dashboards/mikrotik-loki-logs.json
|
||||||
|
│ └── provisioning/
|
||||||
|
│ ├── dashboards/dashboards.yaml
|
||||||
|
│ └── datasources/loki.yaml
|
||||||
|
├── grafana-data/
|
||||||
|
├── loki-config/config.yaml
|
||||||
|
└── loki-data/
|
||||||
|
```
|
||||||
|
|
||||||
|
SELinux is enforcing. The compose mounts use `:Z`; do not remove those flags.
|
||||||
|
The persistent data directories should be owned by the container users:
|
||||||
|
Loki `10001:10001`, Grafana `472:0`, and Alloy `0:0`.
|
||||||
|
|
||||||
|
## Cutover
|
||||||
|
|
||||||
|
The live Loki history is inside the old container at `/tmp/loki`. A stopped,
|
||||||
|
consistent rescue copy from 2026-07-30 is pre-seeded in the new host path, but
|
||||||
|
it must be refreshed from the stopped live container immediately before the
|
||||||
|
old stack is removed:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /mnt/containers/mktxp/mktxp-stack
|
||||||
|
|
||||||
|
# Record a last pre-cutover query and stop all writers cleanly.
|
||||||
|
curl -fsS http://127.0.0.1:3100/ready
|
||||||
|
docker compose stop
|
||||||
|
|
||||||
|
# The stopped Loki container still contains the newest WAL/chunks.
|
||||||
|
docker cp -a loki:/tmp/loki/. /mnt/containers/logging/loki-data/
|
||||||
|
chown -R 10001:10001 /mnt/containers/logging/loki-data
|
||||||
|
|
||||||
|
# Removes containers and the old network, but NOT the old named Grafana and
|
||||||
|
# Prometheus volumes. Do not add --volumes.
|
||||||
|
docker compose down
|
||||||
|
```
|
||||||
|
|
||||||
|
Now deploy the Portainer Git stack. Expected interruption is the time between
|
||||||
|
`docker compose stop` and the new stack becoming ready.
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker ps --filter name=loki --filter name=alloy --filter name=grafana
|
||||||
|
curl -fsS http://127.0.0.1:3100/ready
|
||||||
|
curl -fsS http://127.0.0.1:3000/api/health
|
||||||
|
ss -lnup | grep ':514'
|
||||||
|
ss -lntp | grep -E ':(601|3000|3100)\b'
|
||||||
|
```
|
||||||
|
|
||||||
|
Confirm both history and new ingestion:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
START=$(date -u -d '24 hours ago' +%s%N)
|
||||||
|
curl -fsSG http://127.0.0.1:3100/loki/api/v1/query_range \
|
||||||
|
--data-urlencode 'query={job="syslog"}' \
|
||||||
|
--data-urlencode "start=$START" \
|
||||||
|
--data-urlencode 'limit=1'
|
||||||
|
|
||||||
|
logger --server 127.0.0.1 --udp --port 514 \
|
||||||
|
--rfc3164 --tag depot-cutover-test 'alloy ingestion test'
|
||||||
|
```
|
||||||
|
|
||||||
|
In Grafana, the provisioned **Network / Mikrotik Loki Logs** dashboard should
|
||||||
|
list existing `routerboard` values and show both pre-cutover and post-cutover
|
||||||
|
entries.
|
||||||
|
|
||||||
|
## Rollback
|
||||||
|
|
||||||
|
Remove the new Portainer stack, then recreate the old stack with its Loki data
|
||||||
|
bound back into `/tmp/loki`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /mnt/containers/mktxp/mktxp-stack
|
||||||
|
cp docker-compose.yaml docker-compose.rollback.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
Add this second volume to the `loki` service in
|
||||||
|
`docker-compose.rollback.yaml`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- /mnt/containers/logging/loki-data:/tmp/loki:Z
|
||||||
|
```
|
||||||
|
|
||||||
|
Then run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose -f docker-compose.rollback.yaml up -d
|
||||||
|
curl -fsS http://127.0.0.1:3100/ready
|
||||||
|
```
|
||||||
|
|
||||||
|
Do not restore the old Loki without that bind mount: its original writable
|
||||||
|
layer is deleted when the old stack is taken down.
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
// Direct replacement for the old syslog-ng -> Promtail -> Loki path.
|
||||||
|
//
|
||||||
|
// Existing RouterOS senders target 185.108.4.158:514/udp and use classic
|
||||||
|
// BSD/RFC3164 framing. TCP/601 is retained for RFC5424-capable senders.
|
||||||
|
|
||||||
|
loki.relabel "syslog" {
|
||||||
|
forward_to = []
|
||||||
|
|
||||||
|
// Preserve the label used by the existing history and MikroTik dashboard.
|
||||||
|
rule {
|
||||||
|
source_labels = ["__syslog_message_hostname"]
|
||||||
|
target_label = "routerboard"
|
||||||
|
}
|
||||||
|
|
||||||
|
rule {
|
||||||
|
source_labels = ["__syslog_message_severity"]
|
||||||
|
target_label = "severity"
|
||||||
|
}
|
||||||
|
|
||||||
|
rule {
|
||||||
|
source_labels = ["__syslog_message_facility"]
|
||||||
|
target_label = "facility"
|
||||||
|
}
|
||||||
|
|
||||||
|
rule {
|
||||||
|
source_labels = ["__syslog_connection_ip_address"]
|
||||||
|
target_label = "source_ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
loki.source.syslog "network_devices_udp" {
|
||||||
|
listener {
|
||||||
|
address = "0.0.0.0:514"
|
||||||
|
protocol = "udp"
|
||||||
|
syslog_format = "rfc3164"
|
||||||
|
labels = {
|
||||||
|
job = "syslog",
|
||||||
|
transport = "udp",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
relabel_rules = loki.relabel.syslog.rules
|
||||||
|
forward_to = [loki.write.default.receiver]
|
||||||
|
}
|
||||||
|
|
||||||
|
loki.source.syslog "network_devices_tcp" {
|
||||||
|
listener {
|
||||||
|
address = "0.0.0.0:601"
|
||||||
|
protocol = "tcp"
|
||||||
|
syslog_format = "rfc5424"
|
||||||
|
labels = {
|
||||||
|
job = "syslog",
|
||||||
|
transport = "tcp",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
relabel_rules = loki.relabel.syslog.rules
|
||||||
|
forward_to = [loki.write.default.receiver]
|
||||||
|
}
|
||||||
|
|
||||||
|
loki.write "default" {
|
||||||
|
endpoint {
|
||||||
|
url = "http://loki:3100/loki/api/v1/push"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
services:
|
||||||
|
loki:
|
||||||
|
# This pin and the TSDB v13 on-disk format were validated on Fedora 44 in
|
||||||
|
# the 02-tekhnohim logging stack. Do not replace it with :latest during
|
||||||
|
# the data migration.
|
||||||
|
image: grafana/loki:3.7.2
|
||||||
|
container_name: loki
|
||||||
|
command: -config.file=/etc/loki/config.yaml
|
||||||
|
restart: unless-stopped
|
||||||
|
volumes:
|
||||||
|
- /mnt/containers/logging/loki-config/config.yaml:/etc/loki/config.yaml:ro,Z
|
||||||
|
- /mnt/containers/logging/loki-data:/loki:Z
|
||||||
|
ports:
|
||||||
|
# Retained for the existing operator query path.
|
||||||
|
- "3100:3100/tcp"
|
||||||
|
networks:
|
||||||
|
- logging-nw
|
||||||
|
|
||||||
|
alloy:
|
||||||
|
# Replaces the syslog-ng -> Promtail relay with one direct syslog receiver.
|
||||||
|
image: grafana/alloy:v1.16.1
|
||||||
|
container_name: alloy
|
||||||
|
command:
|
||||||
|
- run
|
||||||
|
- --server.http.listen-addr=0.0.0.0:12345
|
||||||
|
- --storage.path=/var/lib/alloy/data
|
||||||
|
- /etc/alloy/config.alloy
|
||||||
|
restart: unless-stopped
|
||||||
|
depends_on:
|
||||||
|
- loki
|
||||||
|
volumes:
|
||||||
|
- /mnt/containers/logging/alloy-config/config.alloy:/etc/alloy/config.alloy:ro,Z
|
||||||
|
- /mnt/containers/logging/alloy-data:/var/lib/alloy/data:Z
|
||||||
|
ports:
|
||||||
|
# Existing fleet target: 185.108.4.158:514/udp.
|
||||||
|
- "514:514/udp"
|
||||||
|
# Preserve the old stack's TCP syslog endpoint.
|
||||||
|
- "601:601/tcp"
|
||||||
|
networks:
|
||||||
|
- logging-nw
|
||||||
|
|
||||||
|
grafana:
|
||||||
|
image: grafana/grafana:13.1.0
|
||||||
|
container_name: grafana
|
||||||
|
restart: unless-stopped
|
||||||
|
depends_on:
|
||||||
|
- loki
|
||||||
|
environment:
|
||||||
|
GF_SECURITY_ADMIN_PASSWORD: ${GRAFANA_ADMIN_PASSWORD}
|
||||||
|
GF_USERS_ALLOW_SIGN_UP: "false"
|
||||||
|
volumes:
|
||||||
|
- /mnt/containers/logging/grafana-data:/var/lib/grafana:Z
|
||||||
|
- /mnt/containers/logging/grafana-config/provisioning/datasources:/etc/grafana/provisioning/datasources:ro,Z
|
||||||
|
- /mnt/containers/logging/grafana-config/provisioning/dashboards:/etc/grafana/provisioning/dashboards:ro,Z
|
||||||
|
- /mnt/containers/logging/grafana-config/dashboards:/var/lib/grafana/dashboards:ro,Z
|
||||||
|
ports:
|
||||||
|
# Retained for the current LAN/operator access path.
|
||||||
|
- "3000:3000/tcp"
|
||||||
|
networks:
|
||||||
|
- logging-nw
|
||||||
|
|
||||||
|
networks:
|
||||||
|
logging-nw:
|
||||||
@@ -0,0 +1,545 @@
|
|||||||
|
{
|
||||||
|
"annotations": {
|
||||||
|
"list": [
|
||||||
|
{
|
||||||
|
"builtIn": 1,
|
||||||
|
"datasource": {
|
||||||
|
"type": "datasource",
|
||||||
|
"uid": "grafana"
|
||||||
|
},
|
||||||
|
"enable": true,
|
||||||
|
"hide": true,
|
||||||
|
"iconColor": "rgba(0, 211, 255, 1)",
|
||||||
|
"name": "Annotations & Alerts",
|
||||||
|
"target": {
|
||||||
|
"limit": 100,
|
||||||
|
"matchAny": false,
|
||||||
|
"tags": [],
|
||||||
|
"type": "dashboard"
|
||||||
|
},
|
||||||
|
"type": "dashboard"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"description": "Mikrotik Loki Logs",
|
||||||
|
"editable": true,
|
||||||
|
"fiscalYearStartMonth": 0,
|
||||||
|
"gnetId": 17139,
|
||||||
|
"graphTooltip": 0,
|
||||||
|
"id": 3,
|
||||||
|
"links": [
|
||||||
|
{
|
||||||
|
"asDropdown": false,
|
||||||
|
"icon": "external link",
|
||||||
|
"includeVars": false,
|
||||||
|
"keepTime": false,
|
||||||
|
"tags": [
|
||||||
|
"mikrotik",
|
||||||
|
"mktxp"
|
||||||
|
],
|
||||||
|
"targetBlank": false,
|
||||||
|
"title": "MKTXP Exporter",
|
||||||
|
"tooltip": "",
|
||||||
|
"type": "dashboards",
|
||||||
|
"url": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asDropdown": true,
|
||||||
|
"icon": "external link",
|
||||||
|
"keepTime": false,
|
||||||
|
"tags": [
|
||||||
|
"system"
|
||||||
|
],
|
||||||
|
"title": "System Overview",
|
||||||
|
"type": "dashboards"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"liveNow": false,
|
||||||
|
"panels": [
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "loki",
|
||||||
|
"uid": "P8E80F9AEF21F6940"
|
||||||
|
},
|
||||||
|
"description": "",
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"color": {
|
||||||
|
"mode": "thresholds"
|
||||||
|
},
|
||||||
|
"mappings": [],
|
||||||
|
"thresholds": {
|
||||||
|
"mode": "absolute",
|
||||||
|
"steps": [
|
||||||
|
{
|
||||||
|
"color": "semi-dark-orange",
|
||||||
|
"value": null
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"unit": "short"
|
||||||
|
},
|
||||||
|
"overrides": []
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 7,
|
||||||
|
"w": 9,
|
||||||
|
"x": 0,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
"id": 4,
|
||||||
|
"interval": "$smooth",
|
||||||
|
"options": {
|
||||||
|
"colorMode": "value",
|
||||||
|
"graphMode": "area",
|
||||||
|
"justifyMode": "center",
|
||||||
|
"orientation": "auto",
|
||||||
|
"reduceOptions": {
|
||||||
|
"calcs": [
|
||||||
|
"sum"
|
||||||
|
],
|
||||||
|
"fields": "",
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"text": {},
|
||||||
|
"textMode": "auto"
|
||||||
|
},
|
||||||
|
"pluginVersion": "9.3.2",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "loki",
|
||||||
|
"uid": "P8E80F9AEF21F6940"
|
||||||
|
},
|
||||||
|
"editorMode": "code",
|
||||||
|
"expr": "count_over_time({job=\"syslog\", routerboard=\"$routerboard\"} [$__interval] |~\"(?i)$topics\" |~\"(?i)$searchable_pattern\" !~\"(?i)$exclude\")",
|
||||||
|
"legendFormat": "{{host}}",
|
||||||
|
"queryType": "range",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "Log Counts By Topic",
|
||||||
|
"transformations": [],
|
||||||
|
"type": "stat"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "loki",
|
||||||
|
"uid": "P8E80F9AEF21F6940"
|
||||||
|
},
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"color": {
|
||||||
|
"mode": "palette-classic"
|
||||||
|
},
|
||||||
|
"custom": {
|
||||||
|
"axisCenteredZero": false,
|
||||||
|
"axisColorMode": "text",
|
||||||
|
"axisLabel": "",
|
||||||
|
"axisPlacement": "auto",
|
||||||
|
"barAlignment": 0,
|
||||||
|
"drawStyle": "line",
|
||||||
|
"fillOpacity": 30,
|
||||||
|
"gradientMode": "opacity",
|
||||||
|
"hideFrom": {
|
||||||
|
"legend": false,
|
||||||
|
"tooltip": false,
|
||||||
|
"viz": false
|
||||||
|
},
|
||||||
|
"lineInterpolation": "smooth",
|
||||||
|
"lineWidth": 1,
|
||||||
|
"pointSize": 5,
|
||||||
|
"scaleDistribution": {
|
||||||
|
"type": "linear"
|
||||||
|
},
|
||||||
|
"showPoints": "never",
|
||||||
|
"spanNulls": true,
|
||||||
|
"stacking": {
|
||||||
|
"group": "A",
|
||||||
|
"mode": "normal"
|
||||||
|
},
|
||||||
|
"thresholdsStyle": {
|
||||||
|
"mode": "off"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mappings": [],
|
||||||
|
"thresholds": {
|
||||||
|
"mode": "absolute",
|
||||||
|
"steps": [
|
||||||
|
{
|
||||||
|
"color": "green",
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "red",
|
||||||
|
"value": 80
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"unit": "short"
|
||||||
|
},
|
||||||
|
"overrides": []
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 7,
|
||||||
|
"w": 15,
|
||||||
|
"x": 9,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
"id": 3,
|
||||||
|
"interval": "$smooth",
|
||||||
|
"options": {
|
||||||
|
"legend": {
|
||||||
|
"calcs": [
|
||||||
|
"mean",
|
||||||
|
"sum"
|
||||||
|
],
|
||||||
|
"displayMode": "table",
|
||||||
|
"placement": "right",
|
||||||
|
"showLegend": true
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"mode": "none",
|
||||||
|
"sort": "none"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pluginVersion": "8.1.2",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "loki",
|
||||||
|
"uid": "P8E80F9AEF21F6940"
|
||||||
|
},
|
||||||
|
"editorMode": "code",
|
||||||
|
"expr": "count_over_time({job=\"syslog\", routerboard=\"$routerboard\"} [$__interval] |regexp \"(?P<prefix>\\\\w+)\\\\: \" |~\"(?i)$topics\" |~\"(?i)$searchable_pattern\" !~\"(?i)$exclude\")",
|
||||||
|
"legendFormat": "{{prefix}}",
|
||||||
|
"queryType": "range",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "Log Counts By Topic Over Time",
|
||||||
|
"transformations": [],
|
||||||
|
"type": "timeseries"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "loki",
|
||||||
|
"uid": "P8E80F9AEF21F6940"
|
||||||
|
},
|
||||||
|
"description": "",
|
||||||
|
"gridPos": {
|
||||||
|
"h": 23,
|
||||||
|
"w": 24,
|
||||||
|
"x": 0,
|
||||||
|
"y": 7
|
||||||
|
},
|
||||||
|
"id": 5,
|
||||||
|
"options": {
|
||||||
|
"dedupStrategy": "none",
|
||||||
|
"enableLogDetails": true,
|
||||||
|
"prettifyLogMessage": false,
|
||||||
|
"showCommonLabels": false,
|
||||||
|
"showLabels": false,
|
||||||
|
"showTime": false,
|
||||||
|
"sortOrder": "Descending",
|
||||||
|
"wrapLogMessage": false
|
||||||
|
},
|
||||||
|
"pluginVersion": "7.3.6",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "loki",
|
||||||
|
"uid": "P8E80F9AEF21F6940"
|
||||||
|
},
|
||||||
|
"editorMode": "code",
|
||||||
|
"expr": "{job=\"syslog\", routerboard=\"$routerboard\"} |~\"(?i)$topics\" |~\"(?i)$searchable_pattern\" !~\"(?i)$exclude\"",
|
||||||
|
"legendFormat": "",
|
||||||
|
"queryType": "range",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "Logs Lines By Topic",
|
||||||
|
"type": "logs"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"refresh": "5s",
|
||||||
|
"schemaVersion": 37,
|
||||||
|
"style": "dark",
|
||||||
|
"tags": [
|
||||||
|
"mikrotik",
|
||||||
|
"loki"
|
||||||
|
],
|
||||||
|
"templating": {
|
||||||
|
"list": [
|
||||||
|
{
|
||||||
|
"current": {
|
||||||
|
"selected": false,
|
||||||
|
"text": "MKT-GT",
|
||||||
|
"value": "MKT-GT"
|
||||||
|
},
|
||||||
|
"datasource": {
|
||||||
|
"type": "loki",
|
||||||
|
"uid": "P8E80F9AEF21F6940"
|
||||||
|
},
|
||||||
|
"definition": "",
|
||||||
|
"hide": 0,
|
||||||
|
"includeAll": false,
|
||||||
|
"label": "Routerboard",
|
||||||
|
"multi": false,
|
||||||
|
"name": "routerboard",
|
||||||
|
"options": [],
|
||||||
|
"query": {
|
||||||
|
"label": "routerboard",
|
||||||
|
"refId": "LokiVariableQueryEditor-VariableQuery",
|
||||||
|
"stream": "",
|
||||||
|
"type": 1
|
||||||
|
},
|
||||||
|
"refresh": 1,
|
||||||
|
"regex": "",
|
||||||
|
"skipUrlSync": false,
|
||||||
|
"sort": 0,
|
||||||
|
"type": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"current": {
|
||||||
|
"selected": true,
|
||||||
|
"text": [
|
||||||
|
"All"
|
||||||
|
],
|
||||||
|
"value": [
|
||||||
|
"$__all"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"hide": 0,
|
||||||
|
"includeAll": true,
|
||||||
|
"label": "Topics",
|
||||||
|
"multi": true,
|
||||||
|
"name": "topics",
|
||||||
|
"options": [
|
||||||
|
{
|
||||||
|
"selected": true,
|
||||||
|
"text": "All",
|
||||||
|
"value": "$__all"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"selected": false,
|
||||||
|
"text": "account",
|
||||||
|
"value": "account"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"selected": false,
|
||||||
|
"text": "caps",
|
||||||
|
"value": "caps"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"selected": false,
|
||||||
|
"text": "critical",
|
||||||
|
"value": "critical"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"selected": false,
|
||||||
|
"text": "error",
|
||||||
|
"value": "error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"selected": false,
|
||||||
|
"text": "firewall",
|
||||||
|
"value": "firewall"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"selected": false,
|
||||||
|
"text": "info",
|
||||||
|
"value": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"selected": false,
|
||||||
|
"text": "warning",
|
||||||
|
"value": "warning"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"selected": false,
|
||||||
|
"text": "wireless",
|
||||||
|
"value": "wireless"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"selected": false,
|
||||||
|
"text": "dns",
|
||||||
|
"value": "dns"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"selected": false,
|
||||||
|
"text": "health",
|
||||||
|
"value": "health"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"selected": false,
|
||||||
|
"text": "dhcp",
|
||||||
|
"value": "dhcp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"selected": false,
|
||||||
|
"text": "interface",
|
||||||
|
"value": "interface"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"selected": false,
|
||||||
|
"text": "ipsec",
|
||||||
|
"value": "ipsec"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"selected": false,
|
||||||
|
"text": "l2tp",
|
||||||
|
"value": "l2tp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"selected": false,
|
||||||
|
"text": "ppp",
|
||||||
|
"value": "ppp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"selected": false,
|
||||||
|
"text": "raw",
|
||||||
|
"value": "raw"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"selected": false,
|
||||||
|
"text": "ssh",
|
||||||
|
"value": "ssh"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"selected": false,
|
||||||
|
"text": "system",
|
||||||
|
"value": "system"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"selected": false,
|
||||||
|
"text": "ups",
|
||||||
|
"value": "ups"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"query": "account,caps,critical,error,firewall,info,warning,wireless,dns,health,dhcp,interface,ipsec,l2tp,ppp,raw,ssh,system,ups",
|
||||||
|
"queryValue": "",
|
||||||
|
"skipUrlSync": false,
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"current": {
|
||||||
|
"selected": true,
|
||||||
|
"text": "",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"description": "Search (case insensitive)",
|
||||||
|
"hide": 0,
|
||||||
|
"label": "Search",
|
||||||
|
"name": "searchable_pattern",
|
||||||
|
"options": [
|
||||||
|
{
|
||||||
|
"selected": true,
|
||||||
|
"text": "",
|
||||||
|
"value": ""
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"query": "",
|
||||||
|
"skipUrlSync": false,
|
||||||
|
"type": "textbox"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"current": {
|
||||||
|
"selected": false,
|
||||||
|
"text": "None",
|
||||||
|
"value": "None"
|
||||||
|
},
|
||||||
|
"description": "Exclude pattern (case-insensitive, None includes everything)",
|
||||||
|
"hide": 0,
|
||||||
|
"includeAll": false,
|
||||||
|
"label": "Exclude",
|
||||||
|
"multi": false,
|
||||||
|
"name": "exclude",
|
||||||
|
"options": [
|
||||||
|
{
|
||||||
|
"selected": true,
|
||||||
|
"text": "None",
|
||||||
|
"value": "None"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"query": "None,",
|
||||||
|
"queryValue": "None",
|
||||||
|
"skipUrlSync": false,
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"current": {
|
||||||
|
"selected": false,
|
||||||
|
"text": "5m",
|
||||||
|
"value": "5m"
|
||||||
|
},
|
||||||
|
"hide": 0,
|
||||||
|
"includeAll": false,
|
||||||
|
"label": "Smooth",
|
||||||
|
"multi": false,
|
||||||
|
"name": "smooth",
|
||||||
|
"options": [
|
||||||
|
{
|
||||||
|
"selected": false,
|
||||||
|
"text": "30s",
|
||||||
|
"value": "30s"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"selected": false,
|
||||||
|
"text": "1m",
|
||||||
|
"value": "1m"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"selected": false,
|
||||||
|
"text": "2m",
|
||||||
|
"value": "2m"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"selected": true,
|
||||||
|
"text": "5m",
|
||||||
|
"value": "5m"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"selected": false,
|
||||||
|
"text": "10m",
|
||||||
|
"value": "10m"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"selected": false,
|
||||||
|
"text": "15m",
|
||||||
|
"value": "15m"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"selected": false,
|
||||||
|
"text": "30m",
|
||||||
|
"value": "30m"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"selected": false,
|
||||||
|
"text": "1h",
|
||||||
|
"value": "1h"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"selected": false,
|
||||||
|
"text": "2h",
|
||||||
|
"value": "2h"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"query": "30s,1m,2m,5m,10m,15m,30m,1h,2h",
|
||||||
|
"queryValue": "",
|
||||||
|
"skipUrlSync": false,
|
||||||
|
"type": "custom"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"time": {
|
||||||
|
"from": "now-12h",
|
||||||
|
"to": "now"
|
||||||
|
},
|
||||||
|
"timepicker": {},
|
||||||
|
"timezone": "",
|
||||||
|
"title": "Mikrotik Loki Logs",
|
||||||
|
"uid": "awslix6doiakp-mkt-loki",
|
||||||
|
"version": 1,
|
||||||
|
"weekStart": ""
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
apiVersion: 1
|
||||||
|
|
||||||
|
providers:
|
||||||
|
- name: logging-dashboards
|
||||||
|
orgId: 1
|
||||||
|
folder: Network
|
||||||
|
type: file
|
||||||
|
disableDeletion: false
|
||||||
|
updateIntervalSeconds: 30
|
||||||
|
allowUiUpdates: false
|
||||||
|
options:
|
||||||
|
path: /var/lib/grafana/dashboards
|
||||||
|
foldersFromFilesStructure: false
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
apiVersion: 1
|
||||||
|
|
||||||
|
datasources:
|
||||||
|
- name: Loki
|
||||||
|
uid: P8E80F9AEF21F6940
|
||||||
|
type: loki
|
||||||
|
access: proxy
|
||||||
|
url: http://loki:3100
|
||||||
|
isDefault: true
|
||||||
|
editable: false
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
auth_enabled: false
|
||||||
|
|
||||||
|
server:
|
||||||
|
http_listen_address: 0.0.0.0
|
||||||
|
http_listen_port: 3100
|
||||||
|
grpc_listen_address: 0.0.0.0
|
||||||
|
grpc_listen_port: 9096
|
||||||
|
log_level: info
|
||||||
|
|
||||||
|
common:
|
||||||
|
instance_addr: 127.0.0.1
|
||||||
|
path_prefix: /loki
|
||||||
|
storage:
|
||||||
|
filesystem:
|
||||||
|
chunks_directory: /loki/chunks
|
||||||
|
rules_directory: /loki/rules
|
||||||
|
replication_factor: 1
|
||||||
|
ring:
|
||||||
|
kvstore:
|
||||||
|
store: inmemory
|
||||||
|
|
||||||
|
schema_config:
|
||||||
|
configs:
|
||||||
|
# Keep the old stack's schema start and TSDB v13 format so its existing
|
||||||
|
# /tmp/loki data can be mounted at /loki without conversion.
|
||||||
|
- from: 2020-05-15
|
||||||
|
store: tsdb
|
||||||
|
object_store: filesystem
|
||||||
|
schema: v13
|
||||||
|
index:
|
||||||
|
prefix: index_
|
||||||
|
period: 24h
|
||||||
|
|
||||||
|
limits_config:
|
||||||
|
reject_old_samples: true
|
||||||
|
reject_old_samples_max_age: 168h
|
||||||
|
retention_period: 8760h
|
||||||
|
max_query_series: 5000
|
||||||
|
split_queries_by_interval: 24h
|
||||||
|
max_query_parallelism: 16
|
||||||
|
|
||||||
|
query_scheduler:
|
||||||
|
max_outstanding_requests_per_tenant: 2048
|
||||||
|
|
||||||
|
compactor:
|
||||||
|
working_directory: /loki/compactor
|
||||||
|
compaction_interval: 10m
|
||||||
|
retention_enabled: true
|
||||||
|
retention_delete_delay: 2h
|
||||||
|
delete_request_store: filesystem
|
||||||
|
|
||||||
|
ruler:
|
||||||
|
storage:
|
||||||
|
type: local
|
||||||
|
local:
|
||||||
|
directory: /loki/rules
|
||||||
Reference in New Issue
Block a user