PromTail, Loki, Grafana๋กœ ๋กœ๊ทธ ์ˆ˜์ง‘ ํ™˜๊ฒฝ ๊ตฌ์ถ•

1. ๊ฐœ์š”

๋กœ๊ทธ ์ˆ˜์ง‘์„ ํ•˜๊ธฐ ์œ„ํ•œ ์†”๋ฃจ์…˜์ด๋ผ๊ณ  ํ•˜๋ฉด ๋‹น์—ฐํžˆ ELK(Elasticsearch, Logstash, Kibana)๋ฅผ ๋– ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฌด๊ฑฐ์šด ELK๋ฅผ ๊ฐ๋‹นํ•˜๊ธฐ์—” ์„œ๋ฒ„ ์ŠคํŽ™์ด ๋‚ฎ์•˜๊ณ , ๋น„๊ต์  ๊ฐ€๋ณ๊ฒŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” PromTail, Loki, Grafana๋ฅผ ๋„์ž…ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. 

 

๋˜ํ•œ ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘์€ Prometheus, Grafana๋กœ ์ด๋ฏธ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋„์ž…์˜ ๊ทผ๊ฑฐ๋Š” ๋”์šฑ ๋ช…ํ™•ํ–ˆ๋‹ค. 

 

์–ด์ฉŒ๋‹ค๋ณด๋‹ˆ ๋กœ๊ทธ ์ˆ˜์ง‘ ํ™˜๊ฒฝ ๊ตฌ์ถ•๋งŒ 3๋ฒˆ์งธ์ด๋‹ค. Cloud Watch, ELK, Loki.. 

 

 

 

 

 

2. Grafana & Promtail & Loki ์„ค์น˜

Grafana๋Š” ์˜คํ”ˆ ์†Œ์Šค๋กœ ์ œ๊ณต๋˜๋Š” ๋Œ€์‹œ๋ณด๋“œ ๋ฐ ์‹œ๊ฐํ™” ํ”Œ๋žซํผ์ด๋‹ค. ๊ทธ๋ผํŒŒ๋‚˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ์†Œ์Šค๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ ๋Œ€์‹œ๋ณด๋“œ์™€ ๊ทธ๋ž˜ํ”„ ๋“ฑ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐํ™”ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค(Prometheus), ๋กœํ‚ค(Loki), ์—˜๋ผ์Šคํ‹ฑ์„œ์น˜ ๋“ฑ๊ณผ ํ†ตํ•ฉ์ด ์ž˜ ๋˜์–ด ์žˆ๋‹ค.

 

Promtail์€ ๋กœ๊ทธ ํŒŒ์ผ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ฐ์‹œํ•˜๊ณ  ์ƒˆ๋กœ์šด ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๊ฐ€ ์ถ”๊ฐ€๋  ๋•Œ๋งˆ๋‹ค ๋กœ๊ทธ๋ฅผ ์ฝ์–ด์„œ ๋กœํ‚ค๋กœ ์ „์†กํ•œ๋‹ค. ํ”„๋กฌํ…Œ์ผ์€ ๋กœ๊ทธ ํŒŒ์ผ์„ ์ง์ ‘ ์ฝ์–ด์„œ ๋กœํ‚ค์— ์ „์†กํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ tailing์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋กœ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š”๋‹ค. ์ด๋Š” ๋กœ๊ทธ ํŒŒ์ผ์„ ์ฝ๋Š” ๊ณผ์ •์—์„œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์œผ๋ฉฐ ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ์ œ๊ณตํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, ๋Œ€๊ทœ๋ชจ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋กœ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ˆ˜์ง‘ํ•˜๊ณ  ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Loki๋Š” ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ทธ๋ผํŒŒ๋‚˜ ๋žฉ์Šค(Grafana Labs)์—์„œ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ๋‹ค. ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค๋Š” ์ˆ˜์ง‘๋œ ๋ฉ”ํŠธ๋ฆญ์„ ์ €์žฅํ•˜๊ณ  ๊ทธ๋ž˜ํ”„๋กœ ์‹œ๊ฐํ™”ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” ์‹œ์Šคํ…œ์ด๋‹ค. ํ•˜์ง€๋งŒ, ๋กœ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ธฐ๋Šฅ์€ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด์— ๋ฐ˜ํ•ด ๋กœํ‚ค๋Š” ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค์˜ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํ˜•์‹์ธ ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ๋กœ๊ทธ ํฌ๋งท์„ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ์ €์žฅํ•œ๋‹ค.

 

 

๋‚˜๋Š” ๋„์ปค๋ฅผ ์‚ฌ์šฉํ•ด ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์—์„œ ์„ค์น˜ํ–ˆ๋‹ค. 

 

 

- Grafana ์„ค์น˜

docker run -d --name=grafana -p 3000:3000 grafana/grafana

 

- Loki ์„ค์น˜

docker run -d --name=loki -p 3100:3100 grafana/loki

 

 

- Promtail ์„ค์น˜

docker run -d --name=promtail -v /home/ubuntu/log:/logs grafana/promtail

 

promtail์€ ์™ธ๋ถ€์—์„œ ์ ‘์†ํ• ๊ฒŒ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— port๋Š” ๋”ฐ๋กœ ์„ค์ •ํ•˜์ง€ ์•Š์•„๋„๋œ๋‹ค. 

๋Œ€์‹ , ๋ณผ๋ฅจ์€ ๊ฐ์ž์— ๋งž๊ฒŒ ์ž˜ ์„ค์ •ํ•ด์ฃผ์ž. ๋‚˜์˜ ๊ฒฝ์šฐ /home/ubuntu/log ๊ฒฝ๋กœ์— Spring Boot log๋ฅผ ํŒŒ์ผ๋กœ ๊ธฐ๋กํ•ด๋‘๊ณ  ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์œ„์™€ ๊ฐ™์ด ์ž‘์„ฑํ–ˆ๋‹ค. 

 

 

 

 

 

3. ์„ค์ • ํŒŒ์ผ ์ˆ˜์ •

์ด์ œ Loki, Promtail์˜ ymlํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค. 

 

 

๋จผ์ € Promtail์ด๋‹ค. 

docker exec -it promtail /bin/bash // ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ์ ‘์†
cd /etc/promtail // confํŒŒ์ผ ์œ„์น˜

 

- config.yml (Promtail)

server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://[ip์ฃผ์†Œ]:3100/loki/api/v1/push

scrape_configs:
- job_name: [job name]
  static_configs:
  - targets:
      - localhost
    labels:
      job: [label name]
      __path__: [log ํŒŒ์ผ ๊ฒฝ๋กœ]

 

Clients์˜ url์€ Promtail์ด ๋กœ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  Loki ์„œ๋ฒ„์˜ ์ฃผ์†Œ์ด๋‹ค. 

 

๋‚˜๋Š” ํ•˜๋‚˜์˜ job๋งŒ ๋“ฑ๋ก์‹œ์ผฐ์ง€๋งŒ ๋งŒ์•ฝ ์—๋Ÿฌ ๋กœ๊ทธ ๋ ˆ๋ฒจ ๋ณ„๋กœ ๋กœ๊ทธ๋ฐฑ์„ ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์—ฌ๋Ÿฌ ๊ฐœ ์„ค์ •๊ฐ€๋Šฅํ•˜๋‹ค. 

 

 

 

๋‹ค์Œ์€ Promtail์˜ ์„ค์ • ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด์ฃผ์ž.

docker exec -it promtail /bin/bash // ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ์ ‘์†
cd /etc/loki // confํŒŒ์ผ ์œ„์น˜

 

 

- local-config.yaml (Loki)

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

 

 

 

 

 

 

 

4. Grafana์—์„œ ๋กœ๊ทธ ํ™•์ธ

prometheus์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Loki๋„ Data sources๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๊ณ , Dashboard์— ์—ฐ๊ฒฐํ•˜๋ฉด ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.