mirror of
https://github.com/Dannecron/grafana-for-dev.git
synced 2025-12-25 15:52: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