[{"data":1,"prerenderedAt":108},["ShallowReactive",2],{"home-gallery":3,"home-articles":95},[4,35,65],{"slug":5,"title":6,"category":7,"cover":8,"description":9,"date":10,"featured":11,"photos":12,"content":33,"_path":34},"cat-portrait","寵物寫真","pet","https://images.unsplash.com/photo-1514888286974-6c03e2ca1dba?w=800","毛小孩的可愛瞬間","2024-07-10T00:00:00.000Z",true,[13,17,21,25,29],{"url":14,"title":15,"description":16},"https://images.unsplash.com/photo-1514888286974-6c03e2ca1dba?w=1200","慵懶午後","貓咪慵懶的午後時光",{"url":18,"title":19,"description":20},"https://images.unsplash.com/photo-1529778873920-4da4926a72c2?w=1200","玩耍時刻","活潑玩耍的可愛模樣",{"url":22,"title":23,"description":24},"https://images.unsplash.com/photo-1495360010541-f48722b34f7d?w=1200","專注神情","專注看著窗外的神情",{"url":26,"title":27,"description":28},"https://images.unsplash.com/photo-1574158622682-e40e69881006?w=1200","好奇寶寶","充滿好奇心的眼神",{"url":30,"title":31,"description":32},"https://images.unsplash.com/photo-1519052537078-e6302a4968d4?w=1200","甜蜜睡姿","熟睡中的可愛模樣","\n# 寵物寫真\n\n為您的毛小孩留下最可愛的回憶。\n\n每一張照片都記錄了毛小孩最真實的樣子，捕捉那些轉瞬即逝的可愛瞬間。\n","/gallery/cat-portrait",{"slug":36,"title":37,"category":38,"cover":39,"description":40,"date":41,"featured":11,"photos":42,"content":63,"_path":64},"wedding-shoot","婚禮紀實","wedding","https://images.unsplash.com/photo-1519741497674-611481863552?w=800","捕捉每個珍貴時刻","2024-06-15T00:00:00.000Z",[43,47,51,55,59],{"url":44,"title":45,"description":46},"https://images.unsplash.com/photo-1519741497674-611481863552?w=1200","婚禮儀式","莊重的婚禮儀式",{"url":48,"title":49,"description":50},"https://images.unsplash.com/photo-1606216794074-735e91aa2c92?w=1200","新人合影","幸福的笑容",{"url":52,"title":53,"description":54},"https://images.unsplash.com/photo-1511285560929-80b456fea0bc?w=1200","賓客祝福","親友的祝福時刻",{"url":56,"title":57,"description":58},"https://images.unsplash.com/photo-1465495976277-4387d4b0b4c6?w=1200","婚宴現場","溫馨的婚宴場地",{"url":60,"title":61,"description":62},"https://images.unsplash.com/photo-1583939003579-730e3918a45a?w=1200","捧花時刻","新娘手捧鮮花","\n# 婚禮紀實\n\n記錄新人最重要的一天，每一個感動的瞬間。\n\n這組婚禮紀實包含了從儀式到宴客的完整記錄，捕捉每一個珍貴的瞬間。\n","/gallery/wedding-shoot",{"slug":66,"title":67,"category":68,"cover":69,"description":70,"date":71,"featured":11,"photos":72,"content":93,"_path":94},"band-performance","樂團演出","event","https://images.unsplash.com/photo-1501281668745-f7f57925c3b4?w=800","記錄精彩的演出瞬間","2024-05-20T00:00:00.000Z",[73,77,81,85,89],{"url":74,"title":75,"description":76},"https://images.unsplash.com/photo-1501281668745-f7f57925c3b4?w=1200","主唱演出","充滿熱情的演唱",{"url":78,"title":79,"description":80},"https://images.unsplash.com/photo-1470229722913-7c0e2dbbafd3?w=1200","樂團全景","舞台上的精彩演出",{"url":82,"title":83,"description":84},"https://images.unsplash.com/photo-1514320291840-2e0a9bf2a9ae?w=1200","觀眾互動","與觀眾的互動時刻",{"url":86,"title":87,"description":88},"https://images.unsplash.com/photo-1493225457124-a3eb161ffa5f?w=1200","吉他手特寫","專注彈奏的吉他手",{"url":90,"title":91,"description":92},"https://images.unsplash.com/photo-1506157786151-b8491531f063?w=1200","舞台燈光","絢麗的舞台燈光效果","\n# 樂團演出\n\n捕捉舞台上的熱情與活力，記錄每一個精彩時刻。\n\n這次演出充滿了能量與激情，每一個瞬間都值得記錄。\n","/gallery/band-performance",[96],{"slug":97,"title":98,"description":99,"date":100,"category":101,"tags":102,"content":106,"_path":107},"loki","Loki 相關筆記","Loki 部署筆記 [未整理]","2025-11-23","技術",[103,104,105],"Kubernetes","Logs","Loki","# Loki   \n- storageclass   \n   \n```yaml\napiVersion: storage.k8s.io/v1\nkind: StorageClass\nmetadata:\n  name: ebs-sc-log\nprovisioner: ebs.csi.eks.amazonaws.com\nparameters:\n  type: gp3\nreclaimPolicy: Retain\nallowVolumeExpansion: true\nvolumeBindingMode: Immediate\nallowedTopologies:\n  - matchLabelExpressions:\n      - key: topology.kubernetes.io/zone\n        values:\n          - us-east-1a\n          - us-east-1c\n          - us-east-1d\n\n```\n- values.yaml   \n   \n```\ndeploymentMode: Distributed\n\n# configuration for Loki with S3 storage\nserviceAccount:\n  annotations:\n    # 要先建置service role\n    # policy 要incude s3 bueckt 存取權限\n    \"eks.amazonaws.com/role-arn\": \"arn:aws:iam::354950674167:role/bit-au-prod-nv-loki-service-role\"\n\n# Main Loki configuration\nloki:\n  # Schema configuration for TSDB with S3\n  schemaConfig:\n    configs:\n      - from: 2024-04-01\n        store: tsdb\n        object_store: s3\n        schema: v13\n        index:\n          prefix: bit_prod_au_hk_loki_index_\n          period: 24h\n\n  # Server configuration\n  server:\n    http_listen_port: 3100\n    log_level: info\n    log_format: json\n    http_server_read_timeout: 1m\n    http_server_write_timeout: 1m\n\n  # Authentication disabled\n  auth_enabled: false\n\n  # Common configuration (this will be merged with storage config automatically)\n  commonConfig:\n    path_prefix: /var/loki\n    replication_factor: 3\n\n  limits_config:\n    # 查詢性能優化\n    split_queries_by_interval: 5m\n    query_timeout: 5m\n    max_query_parallelism: 64\n    max_cache_freshness_per_query: 1m\n    max_query_series: 5000\n    max_query_length: 24h\n\n    # 保持你的其他現有配置不變\n    reject_old_samples: true\n    reject_old_samples_max_age: 168h\n    creation_grace_period: 10m\n    ingestion_rate_mb: 50\n    ingestion_burst_size_mb: 100\n    max_line_size: 1MB\n    max_line_size_truncate: true\n    max_label_name_length: 1024\n    max_label_value_length: 4096\n    max_label_names_per_series: 30\n    max_streams_per_user: 100000\n    max_global_streams_per_user: 100000\n    per_stream_rate_limit: 10MB\n    per_stream_rate_limit_burst: 20MB\n    volume_enabled: true\n    unordered_writes: true\n    use_owned_stream_count: false\n\n  # Ingester configuration\n  ingester:\n    chunk_encoding: snappy\n    chunk_target_size: 1048576 # 1MB\n    chunk_idle_period: 30m\n    max_chunk_age: 2h\n    chunk_retain_period: 1m\n    wal:\n      dir: /var/loki/wal\n    lifecycler:\n      ring:\n        kvstore:\n          store: memberlist\n        replication_factor: 3\n        heartbeat_timeout: 1m\n        zone_awareness_enabled: false\n\n  # Distributor configuration\n  distributor:\n    ring:\n      kvstore:\n        store: memberlist\n\n  # Querier configuration\n  querier:\n    max_concurrent: 32\n    tail_max_duration: 1h\n\n  # Storage configuration\n  # s3 這定檔在這\n  storage:\n    type: s3\n    bucketNames:\n      chunks: \"bit-prod-au-hk-loki-data\"\n      ruler: \"bit-prod-au-hk-loki-data\"\n      admin: \"bit-prod-au-hk-loki-data\"\n    s3:\n      region: ap-east-1\n      s3ForcePathStyle: false\n      insecure: false\n      http_config:\n        idle_conn_timeout: 90s\n        response_header_timeout: 0s\n        insecure_skip_verify: false\n\n  # Storage config for TSDB\n  storage_config:\n    tsdb_shipper:\n      active_index_directory: /var/loki/tsdb-index\n      cache_location: /var/loki/tsdb-cache\n      cache_ttl: 24h\n\n  # Compactor configuration\n  compactor:\n    working_directory: /tmp/loki/compactor\n    compaction_interval: 10m\n    retention_enabled: true # 如果不需要 retention，設為 false\n    retention_delete_delay: 2h\n    retention_delete_worker_count: 150\n    delete_request_store: s3 # 只有當 retention_enabled=true 時才需要\n\n  # Frontend configuration\n  frontend:\n    log_queries_longer_than: 5s\n    compress_responses: true\n    max_outstanding_per_tenant: 2048\n\n  # Ruler configuration (internal)\n  ruler:\n    storage:\n      type: s3\n    rule_path: /var/loki/rules-temp\n    wal:\n      dir: /var/loki/ruler-wal\n    ring:\n      kvstore:\n        store: memberlist\n    enable_api: true\n\n  # Tracing\n  tracing:\n    enabled: true\n\n  # Index gateway configuration\n  index_gateway:\n    mode: simple\n\n  # Memberlist configuration\n  memberlist:\n    node_name: \"\"\n    randomize_node_name: true\n    stream_timeout: 10s\n    retransmit_mult: 4\n    push_pull_interval: 30s\n    gossip_interval: 200ms\n    gossip_nodes: 3\n    gossip_to_dead_time: 30s\n    dead_node_reclaim_time: 0s\n    compression_enabled: true\n\n# Component-specific configurations\ningester:\n  replicas: 6\n  resources:\n    requests:\n      cpu: 2\n      memory: 2560Mi\n    limits:\n      cpu: 2\n      memory: 2560Mi\n  podDisruptionBudget:\n    maxUnavailable: 1\n  nodeSelector:\n    karpenter.sh/nodepool: bit-au-ops-node-pool\n\nquerier:\n  replicas: 6\n  maxUnavailable: 1\n  resources:\n    requests:\n      cpu: 3 # 從 2 增加到 3\n      memory: 6Gi # 從 4Gi 增加到 6Gi\n    limits:\n      cpu: 3\n      memory: 6Gi\n  podDisruptionBudget:\n    maxUnavailable: 1\n  nodeSelector:\n    karpenter.sh/nodepool: bit-au-ops-node-pool\n\nqueryFrontend:\n  replicas: 6\n  maxUnavailable: 1\n  resources:\n    requests:\n      cpu: 3 # 從 2 增加到 3\n      memory: 6Gi # 從 4Gi 增加到 6Gi\n    limits:\n      cpu: 3\n      memory: 6Gi\n  podDisruptionBudget:\n    maxUnavailable: 1\n  nodeSelector:\n    karpenter.sh/nodepool: bit-au-ops-node-pool\n\nqueryScheduler:\n  replicas: 6\n  resources:\n    requests:\n      cpu: 3\n      memory: 6Gi\n    limits:\n      cpu: 3\n      memory: 6Gi\n  nodeSelector:\n    karpenter.sh/nodepool: bit-au-ops-node-pool\n\ndistributor:\n  replicas: 3\n  maxUnavailable: 1\n  resources:\n    requests:\n      cpu: 2\n      memory: 2Gi\n    limits:\n      cpu: 2\n      memory: 2Gi\n  podDisruptionBudget:\n    maxUnavailable: 1\n  nodeSelector:\n    karpenter.sh/nodepool: bit-au-ops-node-pool\n\ncompactor:\n  replicas: 3\n  resources:\n    requests:\n      cpu: 2\n      memory: 2Gi\n    limits:\n      cpu: 2\n      memory: 2Gi\n  nodeSelector:\n    karpenter.sh/nodepool: bit-au-ops-node-pool\n  persistence:\n    size: 20Gi\n    storageClass: ebs-sc-log\n\nindexGateway:\n  replicas: 3\n  maxUnavailable: 1\n  resources:\n    requests:\n      cpu: 2\n      memory: 2Gi\n    limits:\n      cpu: 2\n      memory: 2Gi\n  nodeSelector:\n    karpenter.sh/nodepool: bit-au-ops-node-pool\n  podDisruptionBudget:\n    maxUnavailable: 1\n\n# Cache configurations\n\n# Ruler configuration\nruler:\n  enabled: true\n  replicas: 1\n  resources:\n    requests:\n      cpu: 100m\n      memory: 256Mi\n    limits:\n      cpu: 200m\n      memory: 512Mi\n\n# Disabled components (using distributed mode)\nbloomCompactor:\n  replicas: 0\nbloomGateway:\n  replicas: 0\nbackend:\n  replicas: 0\nread:\n  replicas: 0\nwrite:\n  replicas: 0\nsingleBinary:\n  replicas: 0\nresultsCache:\n  enabled: true\n  resources:\n    requests:\n      memory: \"2Gi\" # 從 512Mi 增加\n      cpu: \"500m\" # 從 200m 增加\n    limits:\n      memory: \"4Gi\" # 從 1Gi 增加\n      cpu: \"1000m\" # 從 500m 增加\n\nchunksCache:\n  enabled: true\n  replicas: 3\n  resources:\n    requests:\n      cpu: 3 # 從 2 增加\n      memory: 8Gi # 從 4Gi 增加\n    limits:\n      cpu: 3\n      memory: 8Gi\n\n# Disable minio (using S3)\nminio:\n  enabled: false\n\n# Gateway configuration (optional - for external access)\ngateway:\n  enabled: true\n  replicas: 6\n  resources:\n    requests:\n      cpu: 2\n      memory: 2Gi\n    limits:\n      cpu: 2\n      memory: 2Gi\n  nodeSelector:\n    karpenter.sh/nodepool: bit-au-ops-node-pool\n  ingress:\n    enabled: false # Set to true if you need external access\n\nmonitoring:\n  serviceMonitor:\n    enabled: true\n    labels:\n      app: loki\n      release: prometheus\n    interval: 30s\n    scrapeTimeout: 10s\n    metricRelabelings: []\n    relabelings: []\n\n  prometheusRule:\n    enabled: true\n    groups:\n      - name: loki-alerts\n        rules:\n          - alert: LokiIngestionRateHigh\n            expr: rate(loki_distributor_ingester_append_failures_total[5m]) > 0.1\n            for: 5m\n            labels:\n              severity: warning\n            annotations:\n              summary: \"Loki ingestion failure rate is high\"\n              description: \"Loki ingestion failure rate is {{ $value }} per second\"\n\n          - alert: LokiRequestLatencyHigh\n            expr: histogram_quantile(0.99, rate(loki_request_duration_seconds_bucket[5m])) > 1\n            for: 5m\n            labels:\n              severity: warning\n            annotations:\n              summary: \"Loki request latency is high\"\n              description: \"Loki 99th percentile latency is {{ $value }}s\"\n\n          - alert: LokiIngesterDown\n            expr: up{job=~\"loki/ingester\"} == 0\n            for: 5m\n            labels:\n              severity: critical\n            annotations:\n              summary: \"Loki ingester is down\"\n              description: \"Loki ingester {{ $labels.instance }} has been down for more than 5 minutes\"\n\n          - alert: LokiDistributorDown\n            expr: up{job=~\"loki/distributor\"} == 0\n            for: 5m\n            labels:\n              severity: critical\n            annotations:\n              summary: \"Loki distributor is down\"\n              description: \"Loki distributor {{ $labels.instance }} has been down for more than 5 minutes\"\n\n# Network policies (optional security enhancement)\nnetworkPolicy:\n  enabled: false # Set to true if you want network isolation\n  # egress:\n  #   enabled: true\n  #   ports:\n  #     - port: 443\n  #       protocol: TCP\n  #     - port: 53\n  #       protocol: UDP\n  # ingress:\n  #   enabled: true\n  #   namespaceSelector: {}\n\n# Pod Security Context\nsecurityContext:\n  runAsNonRoot: true\n  runAsUser: 10001\n  runAsGroup: 10001\n  fsGroup: 10001\n\n# Container Security Context\ncontainerSecurityContext:\n  readOnlyRootFilesystem: false # 允許寫入 /var/loki\n  capabilities:\n    drop:\n      - ALL\n  allowPrivilegeEscalation: false\n\n# Resource quotas and limits (optional)\n# rbac:\n#   pspEnabled: false\n\n# Enterprise features (if using Grafana Enterprise Logs)\nenterprise:\n  enabled: false\n\n# Test configuration\ntest:\n  enabled: true\n  prometheusAddress: \"http://prometheus-stack-kube-prom-prometheus.monitoring.svc.cluster.local:9090\"\n\n# Global settings\nglobal:\n  # Pod annotations\n  podAnnotations:\n    prometheus.io/scrape: \"true\"\n    prometheus.io/port: \"3100\"\n    prometheus.io/path: \"/metrics\"\n\n  # Image settings\n  image:\n    registry: docker.io\n    pullPolicy: IfNotPresent\n\n  # Priority class (optional)\n  # priorityClassName: \"high-priority\"\n\n# Grafana Agent configuration (if using)\ngrafanaAgent:\n  enabled: false\n\n```\n   \n### Install   \n```bash\nhelm repo add grafana https://grafana.github.io/helm-charts \nhelm upgrade --install --values values.yaml loki grafana/loki -n logs --create-namespace   \n\n```\n","/articles/loki",1784608354338]