feat(monitoring): 接入 Loki + Promtail 日志采集,Grafana 可直接搜索容器日志
This commit is contained in:
1 parent
5d139783c9
commit
fc9e429187
4 files changed
+135
No files matched your search
@@ -197,9 +197,40 @@ services:
|
||||
GF_SECURITY_ADMIN_USER: ${GRAFANA_ADMIN_USER:-admin}
|
||||
GF_SECURITY_ADMIN_PASSWORD: ${GRAFANA_ADMIN_PASSWORD:?Grafana 管理员密码必填,见 .env.example}
|
||||
GF_USERS_ALLOW_SIGN_UP: "false"
|
||||
# 新用户默认界面语言:简体中文
|
||||
GF_USERS_LANGUAGE: "zh-Hans"
|
||||
TZ: Asia/Shanghai
|
||||
depends_on:
|
||||
- prometheus
|
||||
- loki
|
||||
|
||||
# ─────────── 日志(Loki + Promtail)───────────
|
||||
# Loki:日志存储与查询引擎;Promtail:采集容器 stdout/stderr 推给 Loki。
|
||||
# Grafana 里通过 Loki 数据源可直接搜索/过滤各容器的请求日志。
|
||||
loki:
|
||||
image: grafana/loki:latest
|
||||
container_name: fruitshorts-loki
|
||||
restart: unless-stopped
|
||||
command: -config.file=/etc/loki/local-config.yaml
|
||||
volumes:
|
||||
- ./loki-config.yml:/etc/loki/local-config.yaml:ro
|
||||
- loki-data:/loki
|
||||
expose:
|
||||
- "3100"
|
||||
# 镜像为 distroless(无 shell/wget),无法在容器内做 HTTP 探活;
|
||||
# 靠 restart: unless-stopped 自动拉起,Grafana 数据源状态可反映可用性。
|
||||
|
||||
promtail:
|
||||
image: grafana/promtail:latest
|
||||
container_name: fruitshorts-promtail
|
||||
restart: unless-stopped
|
||||
command: -config.file=/etc/promtail/config.yml
|
||||
volumes:
|
||||
- ./promtail-config.yml:/etc/promtail/config.yml:ro
|
||||
# 读取容器日志需要 Docker socket
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
depends_on:
|
||||
- loki
|
||||
|
||||
# 黑盒探活:从外部探测接口可用性与耗时
|
||||
blackbox:
|
||||
@@ -227,3 +258,4 @@ volumes:
|
||||
redis-data:
|
||||
prometheus-data:
|
||||
grafana-data:
|
||||
loki-data:
|
||||
@@ -0,0 +1,14 @@
|
||||
# Author: fruit.com.cn
|
||||
# Grafana 数据源:Loki 日志
|
||||
apiVersion: 1
|
||||
|
||||
datasources:
|
||||
- name: Loki
|
||||
uid: loki
|
||||
type: loki
|
||||
access: proxy
|
||||
url: http://loki:3100
|
||||
isDefault: false
|
||||
editable: false
|
||||
jsonData:
|
||||
maxLines: 1000
|
||||
@@ -0,0 +1,55 @@
|
||||
# Author: fruit.com.cn
|
||||
# Loki 单机配置:文件系统存储,7 天保留,供 Grafana 查询容器日志。
|
||||
auth_enabled: false
|
||||
|
||||
server:
|
||||
http_listen_port: 3100
|
||||
grpc_listen_port: 9096
|
||||
|
||||
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
|
||||
|
||||
query_range:
|
||||
results_cache:
|
||||
cache:
|
||||
embedded_cache:
|
||||
enabled: true
|
||||
max_size_mb: 100
|
||||
|
||||
schema_config:
|
||||
configs:
|
||||
- from: 2024-01-01
|
||||
store: tsdb
|
||||
object_store: filesystem
|
||||
schema: v13
|
||||
index:
|
||||
prefix: index_
|
||||
period: 24h
|
||||
|
||||
# 7 天保留,避免磁盘无限增长
|
||||
limits_config:
|
||||
retention_period: 168h
|
||||
max_query_series: 1000
|
||||
# 允许采集历史日志(容器启动时的旧日志也能入库),靠 retention_period 控制总量
|
||||
reject_old_samples: false
|
||||
ingestion_rate_mb: 20
|
||||
ingestion_burst_size_mb: 40
|
||||
per_stream_rate_limit: 10MB
|
||||
per_stream_rate_limit_burst: 40MB
|
||||
|
||||
compactor:
|
||||
working_directory: /loki/compactor
|
||||
compaction_interval: 10m
|
||||
retention_enabled: true
|
||||
retention_delete_delay: 2h
|
||||
retention_delete_worker_count: 150
|
||||
delete_request_store: filesystem
|
||||
@@ -0,0 +1,34 @@
|
||||
# Author: fruit.com.cn
|
||||
# Promtail:通过 Docker 服务发现自动采集所有容器的 stdout/stderr 日志,推送到 Loki。
|
||||
server:
|
||||
http_listen_port: 9080
|
||||
grpc_listen_port: 0
|
||||
|
||||
positions:
|
||||
filename: /tmp/positions.yaml
|
||||
|
||||
clients:
|
||||
- url: http://loki:3100/loki/api/v1/push
|
||||
batchwait: 1s
|
||||
batchsize: 1048576
|
||||
|
||||
scrape_configs:
|
||||
- job_name: docker-containers
|
||||
docker_sd_configs:
|
||||
- host: unix:///var/run/docker.sock
|
||||
refresh_interval: 5s
|
||||
relabel_configs:
|
||||
# 容器名(去掉开头的 /)
|
||||
- source_labels: ['__meta_docker_container_name']
|
||||
regex: '/(.*)'
|
||||
target_label: container
|
||||
# 日志流:stdout / stderr
|
||||
- source_labels: ['__meta_docker_container_log_stream']
|
||||
target_label: stream
|
||||
# 容器 ID 前 12 位
|
||||
- source_labels: ['__meta_docker_container_id']
|
||||
target_label: container_id
|
||||
regex: '(.{12}).*'
|
||||
# 镜像名
|
||||
- source_labels: ['__meta_docker_container_image']
|
||||
target_label: image
|
||||
Reference in new issue
Block a user