[英]Is EFS a good logs backup option if Loki pod terminated accidentally in EKS Fargate
我目前正在使用 Loki 來存儲我的應用程序從 EKS Fargate 生成的日志。 帶有 promtail 的 Sidecar 模式用於抓取日志。 使用單個 Loki pod,並將 S3 配置為存儲日志的目的地。 它按預期工作得很好。 然而,當我通過刪除 pod 來測試日志系統的可用性時,我發現如果刪除 Loki 的 pod,即使在刪除 pod 之后,也會丟失一些日志(范圍從刪除 pod 前 20 分鍾到刪除 pod 時)豆莢重新啟動。
為了解決這個問題,我嘗試使用EFS作為Loki'pod的持久卷,掛載路徑為/loki。 整個過程遵循本文 ( https://aws.amazon.com/blogs/aws/new-aws-fargate-for-amazon-eks-now-supports-amazon-efs/ )。 但是我從 Loki pod 收到錯誤信息“運行 loki 時出錯”err="mkdir /loki/compactor: permission denied"
因此,我有兩個問題:
在我的案例中,我應該使用 EFS 作為日志備份的解決方案嗎? 為什么我在 pod 中得到了拒絕的權限,有什么方法可以解決這個問題?
我的 Loki-config.yaml
auth_enabled: false
server:
http_listen_port: 3100
# grpc_listen_port: 9096
ingester:
wal:
enabled: true
dir: /loki/wal
lifecycler:
ring:
kvstore:
store: inmemory
replication_factor: 1
# final_sleep: 0s
chunk_idle_period: 3m
chunk_retain_period: 30s
max_transfer_retries: 0
chunk_target_size: 1048576
schema_config:
configs:
- from: 2020-05-15
store: boltdb-shipper
object_store: aws
schema: v11
index:
prefix: index_
period: 24h
storage_config:
boltdb_shipper:
active_index_directory: /loki/index
cache_location: /loki/index_cache
shared_store: s3
aws:
bucketnames: bucketnames
endpoint: s3.us-west-2.amazonaws.com
region: us-west-2
access_key_id: access_key_id
secret_access_key: secret_access_key
sse_encryption: true
compactor:
working_directory: /loki/compactor
shared_store: s3
compaction_interval: 5m
limits_config:
reject_old_samples: true
reject_old_samples_max_age: 48h
chunk_store_config:
max_look_back_period: 0s
table_manager:
retention_deletes_enabled: true
retention_period: 96h
querier:
query_ingesters_within: 0
analytics:
reporting_enabled: false
部署.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: fargate-api-dev
name: dev-loki
spec:
selector:
matchLabels:
app: dev-loki
template:
metadata:
labels:
app: dev-loki
spec:
volumes:
- name: loki-config
configMap:
name: dev-loki-config
- name: dev-loki-efs-pv
persistentVolumeClaim:
claimName: dev-loki-efs-pvc
containers:
- name: loki
image: loki:2.6.1
args:
- -print-config-stderr=true
- -config.file=/tmp/loki.yaml
resources:
limits:
memory: "500Mi"
cpu: "200m"
ports:
- containerPort: 3100
volumeMounts:
- name: dev-loki-config
mountPath: /tmp
readOnly: false
- name: dev-loki-efs-pv
mountPath: /loki
Promtail-config.yaml
server:
log_level: info
http_listen_port: 9080
clients:
- url: http://loki.com/loki/api/v1/push
positions:
filename: /run/promtail/positions.yaml
scrape_configs:
- job_name: api-log
static_configs:
- targets:
- localhost
labels:
job: apilogs
pod: ${POD_NAME}
__path__: /var/log/*.log
我在使用 EFS 作為卷來存儲日志時遇到了類似的問題,我找到了這個解決方案https://github.com/grafana/loki/issues/2018#issuecomment-1030221498
基本上 loki 容器本身無法創建一個目錄來開始工作,所以我們使用了一個 initcotainer 來為它做這件事。
這個解決方案就像一個魅力。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.