第三章:配置详解

深入学习 Loki 的配置文件结构和各项配置参数。

最后更新: 2024-01-17
页面目录

Loki 配置详解

本章详细介绍 Loki 的配置文件结构和各项参数。

配置文件结构

┌─────────────────────────────────────────────────────────────────┐
│                    Loki 配置文件结构                              │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│   /etc/loki/config.yaml                                         │
│   ├── server           # HTTP/gRPC 服务配置                       │
│   ├── schema_config    # 索引和存储配置                          │
│   ├── storage_config   # 存储后端配置                            │
│   ├── ingester        # 写入组件配置                             │
│   ├── querier         # 查询组件配置                             │
│   ├── query_scheduler # 查询调度配置                             │
│   ├── frontend        # 前端配置                                 │
│   ├── limits_config   # 限制配置                                 │
│   ├── memberlist      # 服务发现配置                             │
│   └── common          # 通用配置                                 │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

完整配置示例

# /etc/loki/config.yaml
---
# 服务器配置
server:
  http_listen_address: 0.0.0.0
  http_listen_port: 3100
  grpc_listen_address: 0.0.0.0
  grpc_listen_port: 9095
  http_server_read_timeout: 30s
  http_server_write_timeout: 30s
  http_server_idle_timeout: 120s

# 通用配置
common:
  storage:
    s3:
      endpoint: s3.amazonaws.com
      bucketnames: loki-data
      region: us-east-1
      access_key_id: ${AWS_ACCESS_KEY_ID}
      secret_access_key: ${AWS_SECRET_ACCESS_KEY}
  path_prefix: /var/loki
  compactor_address: http://loki-compactor:3100

# Schema 配置
schema_config:
  configs:
    - from: 2023-01-01
      store: boltdb-shipper
      object_store: s3
      schema: v11
      index:
        prefix: loki_index_
        period: 24h
      row_shards: 16

# 存储配置
storage_config:
  boltdb_shipper:
    active_index_directory: /var/loki/index
    cache_location: /var/loki/cache
    cache_ttl: 24h
    shared_store: s3
    ingester_name: nil

  aws:
    s3forcepathstyle: false
    http_config:
      idle_conn_timeout: 90s
      response_header_timeout: 0s

  filesystem:
    directory: /var/loki/chunks

  azure:
    account_key: ${AZURE_STORAGE_KEY}
    account_name: ${AZURE_STORAGE_ACCOUNT}
    container_name: loki
    use_https: true

  gcs:
    bucket_name: loki-data
    service_account: ${GCS_SERVICE_ACCOUNT}

# Ingestion 配置
ingester:
  lifecycler:
    address: 127.0.0.1
    ring:
      kvstore:
        store: memberlist
      replication_factor: 1
      heartbeat_timeout: 1m
    min_ready_duration: 15s
    auto_join: true

  chunk_encoding: snappy
  parse_timer_enabled: false
  flush_check_period: 10s
  flush_op_timeout: 10m
  chunk_retain_period: 30s
  chunk_idle_period: 30m
  chunk_target_size: 1572864
  max_chunk_age: 1h
  max_transfer_retries: 0
  wal:
    enabled: true
    dir: /var/loki/wal
    flush_on_shutdown: true

# Querier 配置
querier:
  query_timeout: 1m
  engine:
    timeout: 1m
    max_look_back_period: 30s
  max_streams_matchers: 1000
  prefer_object_storage: true

# Query Frontend 配置
query_scheduler:
  max_outstanding_per_tenant: 4096
  scheduler_ring:
    kvstore:
      store: memberlist

frontend:
  compress_responses: true
  max_outstanding_per_tenant: 4096
  log_level: info
  downstream_url: ""
  scheduler_address: ""
  scheduler_dns_lookup_period: 10s

# Ruler 配置
ruler:
  enable_api: true
  enable_sharding: true
  rule_path: /var/loki/rules
  evaluation_interval: 10s
  poll_interval: 10s
  storage:
    type: local
    local:
      directory: /etc/loki/rules
  rule_group_iteration_interval: 10s
  alertmanager_url: http://alertmanager:9093
  alertmanager_discovery: false
  external_url: http://alertmanager:9093

# Limits 配置
limits_config:
  reject_old_samples: true
  reject_old_samples_max_age: 168h
  ingestion_rate_mb: 50
  ingestion_burst_size_mb: 100
  max_label_name_length: 1024
  max_label_value_length: 2048
  max_label_names_per_series: 30
  enforce_metric_name: false
  enforce_labels_name_max_length: true
  enforce_label_value_max_length: true
  creation_grace_period: 10m
  enforce_body_size: true
  max_entries_limit_per_query: 5000000
  max_streams_per_user: 0
  max_global_streams_per_user: 5000
  max_query_parallelism: 32
  max_query_series: 15000
  cardinality_limit: 100000
  shard_streams:
    enabled: true
    logging_enabled: false

# Memberlist 配置
memberlist:
  join_members:
    - loki:7946
  bind_port: 7946
  bind_addr: 0.0.0.0
  dns_cache_ttl: 15m
  advertise_addr: ""
  gossip_intervals:
    - probe_interval: 1s
    - probe_timeout: 1s
    - push_pull_interval: 5s
    - gossip_interval: 1m
  gossip_nodes: 3
  max_join_retries: 10
  min_join_backoff: 1s
  max_join_backoff: 1m
  max_packet_size: 1400
  compression_level: 1

# Compactor 配置
compactor:
  working_directory: /var/loki/compactor
  shared_store: s3
  compaction_interval: 10m
  retention_enabled: true
  retention_delete_delay: 2h
  retention_delete_worker_count: 150

# 日志配置
log_level: info
log_format: logfmt

# 分析配置
analytics:
  reporting_enabled: true

核心配置详解

server 配置

server:
  http_listen_address: 0.0.0.0      # HTTP 监听地址
  http_listen_port: 3100             # HTTP 端口
  grpc_listen_address: 0.0.0.0       # gRPC 监听地址
  grpc_listen_port: 9095              # gRPC 端口
  http_server_read_timeout: 30s     # 读取超时
  http_server_write_timeout: 30s    # 写入超时

schema_config 配置

schema_config:
  configs:
    - from: 2023-01-01              # 生效日期
      store: boltdb-shipper         # 索引存储类型
      object_store: s3              # 日志存储类型
      schema: v11                   # schema 版本
      index:
        prefix: loki_index_         # 索引前缀
        period: 24h                 # 索引周期
      row_shards: 16                # 行分片

存储类型选项:

store 说明
boltdb 单实例 BoltDB
boltdb-shipper 分布式 BoltDB(推荐)
cassandra Apache Cassandra
bigtable Google Bigtable
dynamodb AWS DynamoDB
object_store 说明
filesystem 本地文件系统
s3 AWS S3
gcs Google Cloud Storage
azure Azure Blob Storage
swift OpenStack Swift

storage_config 配置

# S3 存储配置
storage_config:
  aws:
    s3: s3://bucket/path
    bucketnames: loki-data
    region: us-east-1
    endpoint: s3.amazonaws.com
    s3forcepathstyle: false
    http_config:
      idle_conn_timeout: 90s

# GCS 存储配置
  gcs:
    bucket_name: loki-data
    service_account: /path/to/sa.json

# Azure 存储配置
  azure:
    account_name: storage_account
    account_key: secret_key
    container_name: loki
    use_https: true

# 文件系统存储配置
  filesystem:
    directory: /var/loki/chunks

limits_config 配置

limits_config:
  # 样本拒绝配置
  reject_old_samples: true           # 是否拒绝旧样本
  reject_old_samples_max_age: 168h  # 最大样本年龄

  # 采集速率限制
  ingestion_rate_mb: 50             # 每秒摄入速率 (MB)
  ingestion_burst_size_mb: 100      # 突发摄入大小 (MB)

  # 标签限制
  max_label_name_length: 1024       # 标签名最大长度
  max_label_value_length: 2048      # 标签值最大长度
  max_label_names_per_series: 30    # 每系列最大标签数

  # 查询限制
  max_entries_limit_per_query: 5000000  # 每查询最大条目数
  max_query_parallelism: 32        # 最大查询并行度
  max_query_series: 15000           # 最大查询系列数

  # 全局限制
  max_global_streams_per_user: 5000 # 每用户最大全局流数

环境变量支持

# 使用环境变量
auth_enabled: true
admin_api: ${ADMIN_API_KEY}

storage_config:
  aws:
    access_key_id: ${AWS_ACCESS_KEY_ID}
    secret_access_key: ${AWS_SECRET_ACCESS_KEY}

运行时配置覆盖

# 通过命令行覆盖配置
loki -config.file=/etc/loki/config.yaml \
  -limits_config.ingestion_rate_mb=100

# 查看可覆盖的配置
loki -h | grep -A2 "limits_config"

下一步

接下来让我们学习 LogCLI 命令行工具。

👉 LogCLI 命令行工具