@@ -15,134 +15,51 @@ scrape_configs:
1515 - job_name : container_logs # 이 job_name은 초기값으로 사용되며, relabel_configs에서 변경됩니다.
1616 docker_sd_configs :
1717 - host : unix:///var/run/docker.sock # Docker 데몬 소켓
18- refresh_interval : 5s # 컨테이너 변경 감지 주기
18+ refresh_interval : 1m # 컨테이너 변경 감지 주기
1919
2020 relabel_configs :
21- # ────────────────────────────────────────────────────────────
22- # 1) 'job' 라벨 할당 (순서 중요!)
23- # - 먼저 모든 로그에 'default-container-logs'를 할당합니다.
24- # - 그 다음 특정 컨테이너에 대해 이 라벨을 덮어씁니다.
25- # ────────────────────────────────────────────────────────────
26- # 모든 로그에 기본 'job' 라벨 할당 (fallback)
27- - source_labels : ['__meta_docker_container_name']
28- regex : ' .*'
29- replacement : ' default-container-logs'
30- target_label : ' job'
31- action : replace
32-
33- # Spring Boot 앱 컨테이너에 'spring-boot-app' job 라벨 할당
34- - source_labels : ['__meta_docker_container_name']
35- regex : ' /?lastdance-(blue-app|green-app)'
36- replacement : ' spring-boot-app'
37- target_label : ' job'
38- action : replace
39-
40- # 모니터링 스택 컨테이너에 'monitoring-stack' job 라벨 할당
41- - source_labels : ['__meta_docker_container_name']
42- regex : ' /?(prometheus|grafana|node-exporter|loki|promtail|alertmanager)' # alertmanager 추가
43- replacement : ' monitoring-stack'
44- target_label : ' job'
45- action : replace
46-
47- # ────────────────────────────────────────────────────────────
48- # 2) 'instance' 라벨 할당 (각 서비스의 고유 식별자)
49- # ────────────────────────────────────────────────────────────
50- # 앱 컨테이너 instance: blue-app:8080, green-app:8081 형태
51- - source_labels : ['__meta_docker_container_name','__meta_docker_container_port']
52- regex : ' /?lastdance-(blue-app|green-app).*?;(.*)'
53- replacement : ' $1:$2'
54- target_label : ' instance'
55- action : replace
56-
57- # 모니터링 스택 각 컴포넌트 instance 라벨
58- - source_labels : ['__meta_docker_container_name']
59- regex : ' /?prometheus'
60- replacement : ' prometheus:9090'
61- target_label : ' instance'
62- action : replace
63- - source_labels : ['__meta_docker_container_name']
64- regex : ' /?grafana'
65- replacement : ' grafana:3000'
66- target_label : ' instance'
67- action : replace
68- - source_labels : ['__meta_docker_container_name']
69- regex : ' /?node-exporter'
70- replacement : ' node-exporter:9100'
71- target_label : ' instance'
72- action : replace
73- - source_labels : ['__meta_docker_container_name']
74- regex : ' /?loki'
75- replacement : ' loki:3100'
76- target_label : ' instance'
77- action : replace
78- - source_labels : ['__meta_docker_container_name']
79- regex : ' /?promtail'
80- replacement : ' promtail:9080'
81- target_label : ' instance'
82- action : replace
83- - source_labels : ['__meta_docker_container_name']
84- regex : ' /?alertmanager' # alertmanager 추가
85- replacement : ' alertmanager:9093'
86- target_label : ' instance'
87- action : replace
88-
89- # ────────────────────────────────────────────────────────────
90- # 3) 기타 유용한 라벨 할당
91- # ────────────────────────────────────────────────────────────
9221 # 'container_name' 라벨: 실제 컨테이너 이름만 추출 (예: 'lastdance-blue-app')
9322 - source_labels : ['__meta_docker_container_name']
9423 regex : ' /(.*)'
9524 replacement : ' $1'
9625 target_label : ' container_name'
9726 action : replace
9827
99- # 'image' 라벨: Docker 이미지 이름만 추출 (예: 'lastdance-ecr')
100- - source_labels : ['__meta_docker_image']
101- regex : ' .*/(.*):.*'
102- replacement : ' $1'
103- target_label : ' image'
104- action : replace
105-
106- # 'host' 라벨: 컨테이너 ID 사용
107- - source_labels : ['__meta_docker_container_id']
108- target_label : ' host'
109- action : replace
28+ - action : labeldrop
29+ regex : ' component|host|instance|job|logger|service_name|thread'
11030
11131 pipeline_stages :
11232 - docker : {} # Docker JSON 로그 파싱
11333
11434 # Spring Boot 표준 로그 정규식
11535 - match :
116- selector : ' {job="spring-boot -app"}'
36+ selector : ' {container_name=~"lastdance-(blue|green) -app"}'
11737 stages :
11838 - regex :
119- expression : ' ^(?P<timestamp>\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z)\s+(?P<level>\S+)\s+(?P<pid>\d+)\s+---\s+\[(?P<thread>.*?)\]\s+\[(?P<application_name>.*?)\]\s+(?P<logger>[a-zA-Z0-9.$]+)\s+ :\s+(?P<message>.*)$'
39+ expression : ' ^(?P<timestamp>\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z)\s+(?P<level>\S+)\s+.* :\s+(?P<message>.*)$'
12040 - timestamp :
12141 source : timestamp
12242 format : RFC3339Nano
12343 - labels :
12444 level :
125- logger :
45+ - drop :
46+ source : level
47+ regex : ' DEBUG|TRACE'
12648
12749 # 'monitoring-stack' job의 로그에만 logfmt을 적용합니다.
12850 - match :
129- selector : ' {job="monitoring-stack "}'
51+ selector : ' {container_name=~"prometheus|grafana|loki|promtail|alertmanager "}'
13052 stages :
13153 - logfmt :
132- # 로그에 나타나는 key=value 쌍 중 추출하고 싶은 필드들을 명시합니다.
13354 mapping :
134- level : # 'level' 필드 추출
135- ts : # 'ts' 필드 추출
136- caller : # 'caller' 필드 추출 (선택 사항)
137- component : # 'component' 필드 추출 (선택 사항)
138- msg : # 'msg' 필드 추출 (선택 사항)
139- err : # 'err' 필드 추출 (선택 사항)
55+ level :
56+ ts :
57+ msg :
14058 - timestamp :
14159 source : ts
14260 format : RFC3339Nano
14361 - labels :
14462 level :
145- component :
146- # 필요하다면 다른 추출 필드를 라벨로 추가할 수 있습니다:
147- # caller:
148- # err:
63+ - drop :
64+ source : level
65+ regex : ' DEBUG|TRACE|INFO'
0 commit comments