[英]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.