안녕하세유 간만에 블로깅이네유
아무도 안보겠지만유
그냥 쓰는거에유
요즘 그라파나를 열심히 ? 파고있는데 말입쇼
그라파나 로키라는 로그 모니터링 서비스가 있더라구용?
실제 실무자들에게 더 필요로되는 서비스가 아닐까 싶습니다요.
저희회사는 ECS 기반으로 돌아가는 앱이 많기 때문에 컨테이너 로그를 확인하는 것이 가장 유용할 것 같아서 컨테이너 로그를 확인하는 방식으로 적용해보려고 합니다..
그러면서 AWS CloudWatch 로그랑도 비교를 해보자구요
일단 가보자고
Grafana Loki 란?
Grafana Loki는 모든 기능을 갖춘 로깅 스택으로 구성할 수 있는 구성 요소 집합입니다.
다른 로깅 시스템과 달리 Loki는 로그에 대한 메타데이터만 인덱싱한다는 아이디어, 즉 레이블(Prometheus 레이블과 마찬가지로)을 기반으로 구축되었습니다. 그런 다음 로그 데이터 자체는 압축되어 Amazon Simple Storage Service(S3) 또는 Google Cloud Storage(GCS)와 같은 객체 저장소에 청크로 저장되거나 파일 시스템에 로컬로 저장됩니다.
작은 인덱스와 고도로 압축된 청크는 작업을 단순화하고 Loki 비용을 크게 낮춥니다.
Grafana, GrafanaLoki 구조
로그 모니터링이 필요한 서버에 설치된 promtail이 서버 내에 저장되는 로그 파일을 찾아서 로키 서버로 보내주는 구조이다.
장비 세팅
실제 적용기 ~
그라파나 대시보드를 시각화하여 보여주는 그라파나
프롬테일이 보내주는 로그를 수집하는 그라파나 로키
모니터링할 서버에 로그를 수집해서 로키로 보내주는 프롬테일
이렇게 세가지 설치가 필요하다.
Grafana, Grafana Loki 설치 (docker compose)
그라파나와 그라파나로키는 같은 서버에 docker compose로 컨테이너로 동작되도록 만들었다.
로키와 그라파나를 도커 컨테이너로 구동시키기 위한 docker-compose.yml 파일과
그라파나 로키의 로그 저장, 전송 설정을 위한 loki-config.yml 파일을 적당한 폴더를 만들어 저장해주쟝
설치 명령어
mkdir /loki
cd loki
wget https://raw.githubusercontent.com/grafana/loki/v2.2.1/production/docker-compose.yaml -O docker-compose.yaml
mkdir config
wget https://raw.githubusercontent.com/grafana/loki/v2.2.1/cmd/loki/loki-local-config.yaml -O config/loki-config.yaml
docker-compose.yml
그라파나는 3000, 그라파나로키는 3100 포트를 사용하도록 설정해주었다.
그라파나와 그라파나 로키는 같은 서버에 구동되고있고 그라파나 로키에서 그라파나로 전송되는 데이터가 있다.
따라서 방화벽작업이 필요하다구용
따라서 인스턴스 보안그룹에 인바운드를 해당 서버 아이피로 뚫어주었당ㅎㅋㅎ
version: "3"
networks:
loki:
services:
loki:
container_name: gafana-loki
image: grafana/loki:latest
volumes:
- /loki/config:/mnt/config
- /loki:/loki
ports:
- "3100:3100"
command: -config.file=/mnt/config/loki-config.yaml
networks:
- loki
grafana:
container_name: grafana
image: grafana/grafana:latest
ports:
- "3000:3000"
networks:
- loki
loki-config.yaml
로키 서버 config 파일이에용
auth_enabled: false
server:
http_listen_port: 3100
grpc_listen_port: 9096
ingester:
wal:
enabled: true
dir: /tmp/wal
lifecycler:
address: 127.0.0.1
ring:
kvstore:
store: inmemory
replication_factor: 1
final_sleep: 0s
chunk_idle_period: 1h # Any chunk not receiving new logs in this time will be flushed
max_chunk_age: 1h # All chunks will be flushed when they hit this age, default is 1h
chunk_target_size: 1048576 # Loki will attempt to build chunks up to 1.5MB, flushing first if chunk_idle_period or max_chunk_age is reached first
chunk_retain_period: 30s # Must be greater than index read cache TTL if using an index cache (Default index read cache TTL is 5m)
max_transfer_retries: 0 # Chunk transfers disabled
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: /tmp/loki/boltdb-shipper-active
cache_location: /tmp/loki/boltdb-shipper-cache
cache_ttl: 24h # Can be increased for faster performance over longer query periods, uses more disk space
shared_store: filesystem
filesystem:
directory: /tmp/loki/chunks
compactor:
working_directory: /tmp/loki/boltdb-shipper-compactor
shared_store: filesystem
limits_config:
reject_old_samples: true
reject_old_samples_max_age: 326h
chunk_store_config:
max_look_back_period: 0s
table_manager:
retention_deletes_enabled: false
retention_period: 0s
ruler:
storage:
type: local
local:
directory: /tmp/loki/rules
rule_path: /tmp/loki/rules-temp
alertmanager_url: http://localhost:9093
ring:
kvstore:
store: inmemory
enable_api: true
Promtail 설치
로그 모니터링이 필요한 서버에 프롬테일을 설치해야한다.
프롬테일도 마찬가지고 적당한 폴더를 만들어 promtail-config.yml 파일을 만들어주었다.
promtail-config.yml
scrape_configs 부분에 모니터링을 원하는 로그 경로를 작성해주면 된다.
컨테이너 로그를 확인하기 위하여 컨테이너 로그만 전송되도록 설정해주었당.
clients 부분에는 그라파나 로키라 설치되어있는 ip와 포트를 작성해주면되는데 저의 경우 3100포트로 열어주었기 때문에 3100번으로 작성한거에용
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://{grafana loki server ip}:3100/loki/api/v1/push
scrape_configs:
- job_name: containers
static_configs:
- targets:
- localhost
labels:
job: containerlogs
__path__: /var/lib/docker/containers/*/*.log
프롬테일을 도커로 컨테이너로 동작할경우 로키로 전송할 로그 저장소의 볼륨을 설정해주어야한다.
따라서 프롬테일을 구동시킬때는 docker-compose로 구성하는 것을 추천!
docker-compose.yml
version: "3"
networks:
loki:
services:
loki:
container_name: loki-promtail
image: grafana/promtail:latest
volumes:
- /loki/config:/mnt/config
- /loki:/loki
ports:
- "3100:3100"
command: -config.file=/mnt/config/loki-config.yaml
networks:
- loki
grafana:
container_name: grafana
image: grafana/grafana:latest
ports:
- "3000:3000"
networks:
- loki
docker-compose 를 사용하지 않고 컨테이너를 실행하려면 아래처럼 볼륨을 잡아주면됩니당.
다른 방법이 잇나용?
있다면 알려주세용~
누가 볼 지는 모르겠다만..
sudo docker run --name loki-promtail -d \
-v /var/log:/var/log \
-v /loki/config:/mnt/config \
-v /var/log/journal/:/var/log/journal/ \
-v /run/log/journal/:/run/log/journal/ \
-v /etc/machine-id:/etc/machine-id \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /var/lib/docker/containers:/var/lib/docker/containers \
grafana/promtail:latest \
-config.file=/mnt/config/promtail-config.yaml
Grafana Dashboard 사용방법
일단은 DataSource를 가장먼저 등록해야합니당.
Home - Connections - Data sources 로 진입
add new data source 클릭
loki 검색하면 바로 나오고용
connection url 에 로키 서버 ip:port 작성하면되는데
모니터링 장비에 로키를 설치하고 3100포트로 열어주었기 때문에
http://모니터링서버IP:3100 주소로 작성해준당
Home - Explore 에서 그림과 같이 설정해주면 장비에 세팅해둔 로그들이 쫙쫙 떠용
위에 confing 파일에서 job : containerlogs 로 설정해줌에 따라 아래처럼 {job="containerlogs"} 가 select box에 노출됩니당
클릭하면
이렇게 실시간 로그를 찍어볼 수 있어용
AWS 라이브테일처럼 쓸 수 있음
그리고 DashBoard 도 datasource 고르면 대시보드로 조회도 가능합니다!
'Devops Skill Up > Monitoring' 카테고리의 다른 글
[Grafana] Grafana를 구축해보아요 (2) | 2024.04.17 |
---|