簡體   English   中英

如果 Loki pod 在 EKS Fargate 中意外終止,EFS 是否是一個好的日志備份選項

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM