第三章:配置详解
深入学习 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 命令行工具。