K8s云原生

Kubernetes + Loki Stack 快速上手指南(面

2025-08-23  本文已影响0人  _浅墨_

1. 什么是 Loki Stack?

Loki Stack 是 Grafana Labs 提供的 云原生日志收集与管理解决方案,专门针对 Kubernetes 和微服务架构设计。

核心特点:

核心组件:

2. Loki Stack 的使用场景

  1. 集中式日志收集:Kubernetes Pod 日志统一收集和管理。
  2. 微服务故障排查:结合 Trace ID 或 Request ID 快速定位问题。
  3. 多租户日志管理:不同命名空间、服务或团队的日志隔离。
  4. 资源优化:只索引元数据,存储成本低,查询效率高。

3. Loki Stack 架构

+----------------+          +-----------------+           +----------------+
|   Kubernetes   |  --->    |   Promtail      |  --->     |     Loki       |
|     Pods       |          |  (日志采集)     |           |  (日志存储)   |
+----------------+          +-----------------+           +----------------+
                                                           |
                                                           v
                                                     +-------------+
                                                     |  Grafana    |
                                                     |  (可视化)  |
                                                     +-------------+

4. Kubernetes 上部署 Loki Stack

4.1 使用 Helm 部署

helm repo add grafana https://grafana.github.io/helm-charts
helm repo update

# 部署 Loki Stack(Grafana + Promtail)
helm install loki-stack grafana/loki-stack   --set grafana.enabled=true   --set promtail.enabled=true   --namespace logging --create-namespace

4.2 Loki 配置示例(ConfigMap)

apiVersion: v1
kind: ConfigMap
metadata:
  name: loki-config
  namespace: logging
data:
  loki.yaml: |
    auth_enabled: false
    server:
      http_listen_port: 3100
    ingester:
      lifecycler:
        ring:
          kvstore:
            store: inmemory
    schema_config:
      configs:
        - from: 2020-10-15
          store: boltdb
          object_store: filesystem
          schema: v11
          index:
            prefix: index_
            period: 168h
    storage_config:
      boltdb:
        directory: /loki/index
      filesystem:
        directory: /loki/chunks

4.3 Promtail 配置示例

server:
  http_listen_port: 9080
positions:
  filename: /tmp/positions.yaml
clients:
  - url: http://loki.logging.svc.cluster.local:3100/loki/api/v1/push
scrape_configs:
  - job_name: kubernetes-pods
    kubernetes_sd_configs:
      - role: pod
    relabel_configs:
      - source_labels: [__meta_kubernetes_pod_label_app]
        target_label: app
      - source_labels: [__meta_kubernetes_namespace]
        target_label: namespace
      - source_labels: [__meta_kubernetes_pod_name]
        target_label: pod

5. Java 微服务日志采集示例

Spring Boot 应用日志配置示例:

logging:
  pattern:
    console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"

日志输出到容器 stdout,Promtail 会采集,例如:

2025-08-24 17:00:01 [http-nio-8080-exec-1] INFO  com.example.OrderService - New order created: orderId=12345

在 Grafana 中可用标签 app, namespace, pod 进行过滤,快速定位日志。

6. 使用示例

  1. 用户下单触发微服务链:OrderService → PaymentService → InventoryService
  2. 日志输出:
    • OrderService: 记录订单创建日志
    • PaymentService: 记录支付成功日志
    • InventoryService: 记录库存扣减日志
  3. Grafana 查询:
    • {app="OrderService", namespace="production"} 查看 OrderService 日志
    • 结合 Trace ID 可以追踪整个请求链路

7. 总结

上一篇 下一篇

猜你喜欢

热点阅读