130 lines
3.7 KiB
YAML
130 lines
3.7 KiB
YAML
# =============================================================================
|
|
# Promtail Configuration - 日志收集代理
|
|
# =============================================================================
|
|
# 功能:
|
|
# - 自动发现 Docker 容器日志
|
|
# - 解析并标签化日志
|
|
# - 推送到 Loki
|
|
# =============================================================================
|
|
|
|
server:
|
|
http_listen_port: 9080
|
|
grpc_listen_port: 0
|
|
|
|
positions:
|
|
filename: /tmp/positions.yaml
|
|
|
|
clients:
|
|
- url: http://loki:3100/loki/api/v1/push
|
|
tenant_id: rwa
|
|
|
|
scrape_configs:
|
|
# ===========================================================================
|
|
# Docker 容器日志收集
|
|
# ===========================================================================
|
|
- job_name: docker
|
|
docker_sd_configs:
|
|
- host: unix:///var/run/docker.sock
|
|
refresh_interval: 5s
|
|
filters:
|
|
- name: label
|
|
values: ["com.docker.compose.project"]
|
|
|
|
relabel_configs:
|
|
# 使用容器名作为日志标签
|
|
- source_labels: ['__meta_docker_container_name']
|
|
regex: '/(.*)'
|
|
target_label: 'container'
|
|
|
|
# 使用 compose 项目名
|
|
- source_labels: ['__meta_docker_container_label_com_docker_compose_project']
|
|
target_label: 'project'
|
|
|
|
# 使用 compose 服务名
|
|
- source_labels: ['__meta_docker_container_label_com_docker_compose_service']
|
|
target_label: 'service'
|
|
|
|
# 容器 ID
|
|
- source_labels: ['__meta_docker_container_id']
|
|
target_label: 'container_id'
|
|
|
|
pipeline_stages:
|
|
# 解析 JSON 格式日志 (NestJS 默认格式)
|
|
- json:
|
|
expressions:
|
|
level: level
|
|
message: message
|
|
context: context
|
|
timestamp: timestamp
|
|
trace_id: traceId
|
|
span_id: spanId
|
|
|
|
# 设置日志级别标签
|
|
- labels:
|
|
level:
|
|
context:
|
|
trace_id:
|
|
span_id:
|
|
|
|
# 时间戳解析
|
|
- timestamp:
|
|
source: timestamp
|
|
format: RFC3339Nano
|
|
fallback_formats:
|
|
- RFC3339
|
|
- UnixMs
|
|
|
|
# 过滤健康检查日志 (可选,减少噪音)
|
|
- match:
|
|
selector: '{service=~".+"}'
|
|
stages:
|
|
- regex:
|
|
expression: '.*(health|healthcheck|ready|live).*'
|
|
- drop:
|
|
expression: '.*(health|healthcheck|ready|live).*'
|
|
drop_counter_reason: healthcheck_noise
|
|
|
|
# ===========================================================================
|
|
# RWA 微服务日志 (直接从服务器采集)
|
|
# ===========================================================================
|
|
- job_name: rwa-services
|
|
static_configs:
|
|
- targets:
|
|
- localhost
|
|
labels:
|
|
job: rwa-backend
|
|
__path__: /var/log/rwa/*.log
|
|
|
|
pipeline_stages:
|
|
- json:
|
|
expressions:
|
|
level: level
|
|
message: message
|
|
context: context
|
|
service: service
|
|
- labels:
|
|
level:
|
|
context:
|
|
service:
|
|
|
|
# ===========================================================================
|
|
# 系统日志 (可选)
|
|
# ===========================================================================
|
|
- job_name: system
|
|
static_configs:
|
|
- targets:
|
|
- localhost
|
|
labels:
|
|
job: system
|
|
__path__: /var/log/syslog
|
|
|
|
pipeline_stages:
|
|
- regex:
|
|
expression: '^(?P<timestamp>\w+\s+\d+\s+\d+:\d+:\d+)\s+(?P<host>\S+)\s+(?P<process>\S+):\s+(?P<message>.*)$'
|
|
- labels:
|
|
host:
|
|
process:
|
|
- timestamp:
|
|
source: timestamp
|
|
format: 'Jan 02 15:04:05'
|