mirror of
https://github.com/Dannecron/grafana-for-dev.git
synced 2025-12-26 00:02:35 +03:00
initial: create stack, add readme
This commit is contained in:
4
.env.example
Normal file
4
.env.example
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
COMPOSE_PROFILES=grafana,promtail
|
||||||
|
|
||||||
|
GRAFANA_VERSION=9.1.7
|
||||||
|
LOKI_STACK_VERSION=2.6.0
|
||||||
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
/.idea/
|
||||||
|
|
||||||
|
/.env
|
||||||
|
/docker-compose.override.yml
|
||||||
50
docker-compose.yml
Normal file
50
docker-compose.yml
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
---
|
||||||
|
version: "3.9"
|
||||||
|
|
||||||
|
services:
|
||||||
|
grafana:
|
||||||
|
image: grafana/grafana:${GRAFANA_VERSION:-latest}
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.grafana.rule=Host(`grafana.docker.localhost`)"
|
||||||
|
- "traefik.http.services.grafana.loadbalancer.server.port=3000"
|
||||||
|
expose:
|
||||||
|
- 3000
|
||||||
|
volumes:
|
||||||
|
- ./grafana/provisioning:/etc/grafana/provisioning
|
||||||
|
- grafana-storage:/var/lib/grafana
|
||||||
|
profiles:
|
||||||
|
- grafana
|
||||||
|
|
||||||
|
loki:
|
||||||
|
image: grafana/loki:${LOKI_STACK_VERSION:-2.6.0}
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.loki.rule=Host(`loki.docker.localhost`)"
|
||||||
|
- "traefik.http.services.loki.loadbalancer.server.port=3100"
|
||||||
|
expose:
|
||||||
|
- 3100
|
||||||
|
volumes:
|
||||||
|
- ./loki:/loki/config
|
||||||
|
command: --config.file=/loki/config/config.yml
|
||||||
|
profiles:
|
||||||
|
- grafana
|
||||||
|
|
||||||
|
promtail:
|
||||||
|
image: grafana/promtail:${LOKI_STACK_VERSION:-2.6.0}
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.grafana.rule=Host(`promtail.docker.localhost`)"
|
||||||
|
- "traefik.http.services.grafana.loadbalancer.server.port=9080"
|
||||||
|
expose:
|
||||||
|
- 9080
|
||||||
|
volumes:
|
||||||
|
- /var/lib/docker/containers:/var/lib/docker/containers:ro
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||||
|
- ./promtail:/opt/promtail
|
||||||
|
command: -config.file=/opt/promtail/config.yml
|
||||||
|
profiles:
|
||||||
|
- promtail
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
grafana-storage:
|
||||||
16
grafana/provisioning/datasources/datasource.yml
Normal file
16
grafana/provisioning/datasources/datasource.yml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
---
|
||||||
|
apiVersion: 1
|
||||||
|
|
||||||
|
deleteDatasources:
|
||||||
|
- name: Loki
|
||||||
|
orgId: 1
|
||||||
|
|
||||||
|
datasources:
|
||||||
|
- name: Loki
|
||||||
|
type: loki
|
||||||
|
orgId: 1
|
||||||
|
access: proxy
|
||||||
|
url: http://loki:3100
|
||||||
|
jsonData:
|
||||||
|
maxLines: 1000
|
||||||
|
editable: true
|
||||||
42
loki/config.yml
Normal file
42
loki/config.yml
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
---
|
||||||
|
auth_enabled: false
|
||||||
|
|
||||||
|
server:
|
||||||
|
http_listen_port: 3100
|
||||||
|
|
||||||
|
common:
|
||||||
|
path_prefix: /loki
|
||||||
|
storage:
|
||||||
|
filesystem:
|
||||||
|
chunks_directory: /loki/chunks
|
||||||
|
rules_directory: /loki/rules
|
||||||
|
replication_factor: 1
|
||||||
|
ring:
|
||||||
|
kvstore:
|
||||||
|
store: inmemory
|
||||||
|
|
||||||
|
schema_config:
|
||||||
|
configs:
|
||||||
|
- from: 2020-10-24
|
||||||
|
store: boltdb-shipper
|
||||||
|
object_store: filesystem
|
||||||
|
schema: v11
|
||||||
|
index:
|
||||||
|
prefix: index_
|
||||||
|
period: 24h
|
||||||
|
|
||||||
|
ruler:
|
||||||
|
alertmanager_url: http://localhost:9093
|
||||||
|
|
||||||
|
# By default, Loki will send anonymous, but uniquely-identifiable usage and configuration
|
||||||
|
# analytics to Grafana Labs. These statistics are sent to https://stats.grafana.org/
|
||||||
|
#
|
||||||
|
# Statistics help us better understand how Loki is used, and they show us performance
|
||||||
|
# levels for most users. This helps us prioritize features and documentation.
|
||||||
|
# For more information on what's sent, look at
|
||||||
|
# https://github.com/grafana/loki/blob/main/pkg/usagestats/stats.go
|
||||||
|
# Refer to the buildReport method to see what goes into a report.
|
||||||
|
#
|
||||||
|
# If you would like to disable reporting, uncomment the following lines:
|
||||||
|
#analytics:
|
||||||
|
# reporting_enabled: false
|
||||||
30
promtail/config.yml
Normal file
30
promtail/config.yml
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
---
|
||||||
|
server:
|
||||||
|
http_listen_address: 0.0.0.0
|
||||||
|
http_listen_port: 9080
|
||||||
|
|
||||||
|
positions:
|
||||||
|
filename: /tmp/positions.yaml
|
||||||
|
|
||||||
|
clients:
|
||||||
|
- url: http://loki:3100/loki/api/v1/push
|
||||||
|
|
||||||
|
scrape_configs:
|
||||||
|
- job_name: docker
|
||||||
|
docker_sd_configs:
|
||||||
|
- host: unix:///var/run/docker.sock
|
||||||
|
refresh_interval: 5s
|
||||||
|
filters:
|
||||||
|
- name: label
|
||||||
|
values: ["loki.log=true"]
|
||||||
|
pipeline_stages:
|
||||||
|
- docker: {}
|
||||||
|
- static_labels:
|
||||||
|
job: "promtail"
|
||||||
|
relabel_configs:
|
||||||
|
- source_labels: ['__meta_docker_container_name']
|
||||||
|
regex: '/(.*)'
|
||||||
|
target_label: 'container'
|
||||||
|
- source_labels: ['__meta_docker_container_log_stream']
|
||||||
|
regex: '/(.*)'
|
||||||
|
target_label: 'source_stream'
|
||||||
69
readme.md
Normal file
69
readme.md
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
## Grafana + loki logging stack
|
||||||
|
|
||||||
|
Стек docker-compose для упрощённого сбора и просмотра логов контейнеров с grafana loki.
|
||||||
|
|
||||||
|
### Installing
|
||||||
|
|
||||||
|
1. Скопировать [.env.example](/.env.example) в `.env`
|
||||||
|
|
||||||
|
#### With promtail
|
||||||
|
|
||||||
|
1. Добавить новый лейбл к контейнеру, чьи логи необходимо отсылать в loki
|
||||||
|
|
||||||
|
Например, достаточно просто добавить новый лейбл в `docker-compose`-файл искомого стека:
|
||||||
|
```yaml
|
||||||
|
services:
|
||||||
|
my-service:
|
||||||
|
labels:
|
||||||
|
- "loki.log=true"
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Запустить весь стек `docker-compose`
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
#### With docker plugin
|
||||||
|
|
||||||
|
1. Установить [лог-драйвер grafana loki для docker](https://grafana.com/docs/loki/latest/clients/docker-driver/)
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions
|
||||||
|
```
|
||||||
|
|
||||||
|
По факту, данный драйвер работает аналогично стандартному драйверу `json-file`, который позволяет просматривать логи стандартной командой `docker logs`, но при этом дополнительно пытается отправить логи в инстанс `loki`.
|
||||||
|
|
||||||
|
2. Активировать лог-драйвер для контейнера
|
||||||
|
|
||||||
|
К примеру, можно определить данный конфиг в искомом `docker-compose`-стеке:
|
||||||
|
```yaml
|
||||||
|
x-loki-log-config: &loki-log-config
|
||||||
|
logging:
|
||||||
|
driver: loki
|
||||||
|
options:
|
||||||
|
loki-url: "http://loki.docker.localhost/loki/api/v1/push"
|
||||||
|
loki-retries: 5
|
||||||
|
loki-batch-size: 400
|
||||||
|
max-size: "50m"
|
||||||
|
max-file: "10"
|
||||||
|
```
|
||||||
|
|
||||||
|
а затем просто подключить к конкретному контейнеру:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
services:
|
||||||
|
my-service:
|
||||||
|
<<: *loki-log-config
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Убрать профиль `promtail` из значения `COMPOSE_PROFILES` в файле [.env](/.env)
|
||||||
|
4. Запустить стек `grafana` + `loki`
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
### Difference between driver and promtail
|
||||||
|
|
||||||
|
Использование драйвера - [рекомендованный способ доставки логов в loki](https://grafana.com/docs/loki/latest/clients/promtail/configuration/#example-docker-config). К тому же, он имеет очень много предопределённых лейблов для фильтрации контейнеров в `grafana`. Но его необходимо вручную ставить на всех машинах, на которых необходимо настроить подобный сбор логов.
|
||||||
Reference in New Issue
Block a user