initial: create stack, add readme

This commit is contained in:
2022-10-18 10:19:21 +07:00
commit 9d61a1ceeb
7 changed files with 215 additions and 0 deletions

4
.env.example Normal file
View 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
View File

@@ -0,0 +1,4 @@
/.idea/
/.env
/docker-compose.override.yml

50
docker-compose.yml Normal file
View 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:

View 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
View 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
View 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
View 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`. Но его необходимо вручную ставить на всех машинах, на которых необходимо настроить подобный сбор логов.