🧱 一、在日志服务节点(192.168.203.131)上操作
第一步:创建目录结构
mkdir -p /opt/logs-stack/{loki/config,grafana/provisioning/{datasources,dashboards}}
cd /opt/logs-stack
第二步:编写 Loki 配置文件
cat > loki/docker-compose.yml << 'EOF'
services:
loki:
image: registry.cn-hangzhou.aliyuncs.com/toolsss/grafana-loki:2.9.5
container_name: loki
ports:
- "3100:3100"
volumes:
- ./config/loki-config.yml:/etc/loki/local-config.yaml
- loki_data:/loki
environment:
TZ: Asia/Shanghai
restart: unless-stopped
mem_limit: 1g
command: -config.file=/etc/loki/local-config.yaml
volumes:
loki_data:
driver: local
networks:
observability-net:
driver: bridge
EOF
cat > loki/config/loki-config.yml << 'EOF'
auth_enabled: false
server:
http_listen_port: 3100
grpc_listen_port: 9095
common:
path_prefix: /loki
storage:
filesystem:
chunks_directory: /loki/chunks
rules_directory: /loki/rules
replication_factor: 1
ingester:
lifecycler:
address: 127.0.0.1
ring:
kvstore:
store: inmemory
replication_factor: 1
chunk_idle_period: 1h
max_transfer_retries: 0
schema_config:
configs:
- from: 2020-10-24
store: boltdb-shipper
object_store: filesystem
schema: v11
index:
prefix: index_
period: 24h
storage_config:
boltdb_shipper:
active_index_directory: /loki/index
cache_location: /loki/boltdb-cache
shared_store: filesystem
cache_ttl: 24h
compactor:
working_directory: /loki/compactor
shared_store: filesystem
limits_config:
enforce_metric_name: false
reject_old_samples: true
reject_old_samples_max_age: 168h
max_cache_freshness_per_query: 10m
chunk_store_config:
max_look_back_period: 0s
table_manager:
retention_deletes_enabled: true # ✅ 开启自动删除过期日志
retention_period: 168h # ✅ 设置保留 7 天
index_tables_provisioning:
inactive_read_thr