官方文档:https://grafana.com/docs/loki/latest/setup/install/docker/
环境准备
安装 Docker和Docker Compose
创建loki目录
shell
mkdir -p /opt/loki/config
mkdir -p /data/monitoring/loki/
拷贝配置
shell
##运行容器
docker run --rm -d --name=loki-test \
--user root grafana/loki:3.4.2
##从容器拷贝配置文件
docker cp loki-test:/etc/loki/. /opt/loki/config/
docker cp loki-test:/loki/. /data/monitoring/loki/
##释放容器
docker stop loki-test
docker-compose 配置
参考:https://grafana.org.cn/docs/loki/latest/configure/
shell
cat /opt/loki/config/local-config.yaml
Loki v3.4.x 配置
shell
# 启用通过X-Scope-OrgID头进行身份验证,如果为真,则必须存在。如果为假,则OrgID将始终设置为'fake'。 CLI标志:-auth.enabled
auth_enabled: false
server:
http_listen_port: 3100
grpc_listen_port: 9096 # gRPC server listen port.
grpc_server_max_recv_msg_size: 104857600 # 限制此服务器可以接收的 gRPC 消息的大小(字节)。
grpc_server_max_send_msg_size: 104857600 # 限制此服务器可以发送的 gRPC 消息的大小(字节)。
grpc_server_max_concurrent_streams: 0 # 限制 gRPC 调用的并发流数(0 = 无限制)
graceful_shutdown_timeout: 300s # 正常关机的超时| default = 30s
http_server_read_timeout: 90s # HTTP服务器的读取超时| default = 30s
http_server_write_timeout: 90s # HTTP服务器的读取超时| default = 30s
http_server_idle_timeout: 300s
ingester:
wal:
enabled: true
dir: /loki/wal
lifecycler: # 配置输入的生命周期将如何运行以及它将在何处注册以进行发现。
address: 127.0.0.1
ring:
kvstore:
store: inmemory
replication_factor: 1
final_sleep: 0s
chunk_idle_period: 1h # 此时未收到新日志的任何区块都将被刷新。如果块未达到最大块大小,则在刷新之前,块应在内存中放置多长时间,没有更新。这意味着半空的块在一段时间后仍然会被刷新,只要它们没有收到进一步的活动。
max_chunk_age: 1h # 所有块在达到此年龄时将被刷新,默认值为 1h
chunk_target_size: 1048576 # Loki 将尝试构建最大 1.5MB 的块,如果首先达到 chunk_idle_period 或 max_chunk_age,则首先 刷新
chunk_retain_period: 1m # 如果使用索引缓存,则必须大于索引读缓存 TTL(默认索引读缓存 TTL 为 5m)
#max_transfer_retries: 0 # 已禁用区块传输
chunk_encoding: gzip # 用于压缩块的算法。(none, gzip, lz4-64k, snappy, lz4-256k, lz4-1M, lz4, flate, zstd)| default = "gzip"
chunk_block_size: 262144 # 块块的目标 _uncompressed_ 大小(以字节为单位) 当超过此阈值时,头块将被切割并压缩在块内。
# 配置区块索引架构及其存储位置。
schema_config:
configs:
- from: "2020-10-24"
store: boltdb-shipper
object_store: filesystem
schema: v11
index:
prefix: index_
period: 24h
# New TSDB schema below
- from: "2025-03-18"
store: tsdb
object_store: aws
schema: v13
index:
prefix: loki_index_
period: 24h
storage_config:
boltdb_shipper:
active_index_directory: /loki/boltdb-shipper-active
cache_location: /loki/boltdb-shipper-cache
cache_ttl: 24h # 可以增加以在更长的查询周期内提高性能,使用更多的磁盘空间
filesystem:
directory: /loki/chunks
# New tsdb-shipper configuration
tsdb_shipper:
active_index_directory: /loki/tsdb-active
cache_location: /loki/tsdb-cache
cache_ttl: 24h # 可以在较长的查询周期内提高性能,使用更多磁盘空间
aws:
access_key_id: xxxxxxxxxxxxxxx
bucketnames: ops-loki
endpoint: obs.cn-north-4.myhuaweicloud.com
insecure: true
region: cn-north-4
s3: http://obs.cn-north-4.myhuaweicloud.com
s3forcepathstyle: false
secret_access_key: Mxxxxxxxxxxxxxxxxxxxxxxxxxxx
# 压缩器块配置压缩器组件,该组件压缩索引分片以提高性能。
compactor:
working_directory: /loki/boltdb-shipper-compactor # 是将保存标记 chunks 和临时表的目录。
retention_enabled: true
compaction_interval: 10m # 决定了应用压缩和/或保留的频率。如果 Compactor 落后,则会尽快进行压缩和/或保留。
delete_request_store: filesystem # 应设置配置为 DELETE 请求的存储。启用保留时,这是必需的。
retention_delete_worker_count: 300 # 指定了实例化以删除 chunks 的 goroutine worker 的最大数量。
retention_delete_delay: 2h # 是 Compactor 将删除标记 chunks 的延迟时间。
# limits_config块在 Loki 中配置全局和每租户限制。
limits_config:
# 全局应用于所有日志流。
retention_period: 2160h # 数据存储的保留期,仅在 compactor 配置中 retention_enabled 为 true 时适用。从版本 2.8.0 开始,空值 0 或 0s 将禁用保留。默认值(30 天)保留。744h
max_query_lookback: 2160h # 限制可以查询的时间序列数据和元数据的回溯时间,直到回溯持续时间之前。此限制在查询frontend 、querier和ruler中强制执行。如果请求的时间范围超出允许的范围,则请求不会失败,但会修改为仅查询允许的时间范围内的数据。默认值 0 不设置限制。
retention_stream: # 仅应用于与选择器匹配的日志流。
- selector: '{env="test"}'
priority: 1 # priority 值越大,优先级越高。
period: 72h # 保留期为 72 小时。
- selector: '{env="pre"}'
priority: 1
period: 720h
reject_old_samples: true # 旧采样是否会被拒绝。
reject_old_samples_max_age: 168h # 在拒绝之前,接受最大样本年龄。default = 1w
max_label_name_length: 512 # 标签名称可接受的最大长度。default = 1024
max_query_length: 200d1h # 块存储查询的长度限制。0 表示禁用。
per_stream_rate_limit: 20M # 每个流每秒的最大字节速率,也可以以人类可读的形式(1MB、256KB 等)表示。default = 3MB
ingestion_rate_strategy: local # 引入速率限制单独应用于每个分发服务器实例(本地)
ingestion_rate_mb: 50 # 每个用户每秒的采样率限制. 单位单位(以 MB 为单位)。
ingestion_burst_size_mb: 50 # 每个用户允许的采样突发大小 单位单位(以 MB 为单位)。
# chunk_store_config 块配置块的缓存方式以及将其保存到后备存储之前要等待的时间。
chunk_store_config:
cache_lookups_older_than: 0s # 缓存早于此时间段的索引条目。0 表示禁用。default = 0s
#max_look_back_period: 0s #此标志已弃用。使用-querier.max-query-lookback代替。default = 0s
# table_manager块配置表管理器以进行保留。
table_manager:
chunk_tables_provisioning:
inactive_read_throughput: 0
inactive_write_throughput: 0
provisioned_read_throughput: 0
provisioned_write_throughput: 0
index_tables_provisioning:
inactive_read_throughput: 0
inactive_write_throughput: 0
provisioned_read_throughput: 0
provisioned_write_throughput: 0
retention_deletes_enabled: true # 如果为 true,则启用数据库表的保留删除
retention_period: 2880h # 早于此保留期的表将被删除。表的保留日期 180天。启用后,请注意此设置对数据具有破坏性!
# query_range 块配置 Loki query-frontend 中的查询拆分和缓存。
query_range:
results_cache:
# https://grafana.org.cn/docs/loki/latest/configure/#cache_config
cache: # cache_config 块配置特定 Loki 组件的缓存后端。
embedded_cache:
enabled: true # 是否启用内置缓存。
max_size_mb: 2048 # 缓存的最大内存大小 (MB)。| default = 100
ttl: 1h # 缓存中项目在被清除之前的生存时间。| default = 1h
ruler:
# 用于后端规则存储的方法(configdb、azure、gcs、s3、swift、local、bos)
storage:
type: local
local:
directory: /loki/rules
rule_path: /loki/rules-temp # 用于存储临时规则文件的文件路径。
alertmanager_url: https://alertmanager.qqqqq.com
ring:
# 用于ring的后端存储。支持的值有:consul、etcd、inmemory、memberlist、multi。
kvstore:
store: inmemory
enable_api: true # Enable the ruler API.
enable_alertmanager_v2: true
query_scheduler:
max_outstanding_requests_per_tenant: 2048 # 限制每个租户(tenant)的最大未完成请求数,目的是控制每个租户在同时发起的 请求数量,以防止滥用或超出系统资源的范围。
Loki v2.8.x 配置
shell
# 启用通过X-Scope-OrgID头进行身份验证,如果为真,则必须存在。如果为假,则OrgID将始终设置为'fake'。 CLI标志:-auth.enabled
auth_enabled: false
server:
http_listen_port: 3100
grpc_listen_port: 9096 # gRPC server listen port.
grpc_server_max_recv_msg_size: 104857600 # 限制此服务器可以接收的 gRPC 消息的大小(字节)。
grpc_server_max_send_msg_size: 104857600 # 限制此服务器可以发送的 gRPC 消息的大小(字节)。
grpc_server_max_concurrent_streams: 0 # 限制 gRPC 调用的并发流数(0 = 无限制)
graceful_shutdown_timeout: 300s # 正常关机的超时| default = 30s
http_server_read_timeout: 90s # HTTP服务器的读取超时| default = 30s
http_server_write_timeout: 90s # HTTP服务器的读取超时| default = 30s
http_server_idle_timeout: 300s
ingester:
wal:
enabled: true
dir: /loki/wal
lifecycler: # 配置输入的生命周期将如何运行以及它将在何处注册以进行发现。
address: 127.0.0.1
ring:
kvstore:
store: inmemory
replication_factor: 1
final_sleep: 0s
chunk_idle_period: 1h # 此时未收到新日志的任何区块都将被刷新。如果块未达到最大块大小,则在刷新之前,块应在内存中放置多长时间,没有更新。这意味着半空的块在一段时间后仍然会被刷新,只要它们没有收到进一步的活动。
max_chunk_age: 1h # 所有块在达到此年龄时将被刷新,默认值为 1h
chunk_target_size: 1048576 # Loki 将尝试构建最大 1.5MB 的块,如果首先达到 chunk_idle_period 或 max_chunk_age,则首先刷新
chunk_retain_period: 1m # 如果使用索引缓存,则必须大于索引读缓存 TTL(默认索引读缓存 TTL 为 5m)
max_transfer_retries: 0 # 已禁用区块传输
chunk_encoding: gzip # 用于压缩块的算法。(none, gzip, lz4-64k, snappy, lz4-256k, lz4-1M, lz4, flate, zstd)| default = "gzip"
chunk_block_size: 262144 # 块块的目标 _uncompressed_ 大小(以字节为单位) 当超过此阈值时,头块将被切割并压缩在块内。
# 配置区块索引架构及其存储位置。
schema_config:
configs:
- from: "2020-10-24"
store: boltdb-shipper
object_store: filesystem
schema: v11
index:
prefix: index_
period: 24h
storage_config:
boltdb_shipper:
active_index_directory: /loki/boltdb-shipper-active
cache_location: /loki/boltdb-shipper-cache
cache_ttl: 24h # 可以增加以在更长的查询周期内提高性能,使用更多的磁盘空间
shared_store: filesystem
filesystem:
directory: /loki/chunks
# 压缩器块配置压缩器组件,该组件压缩索引分片以提高性能。
compactor:
working_directory: /loki/boltdb-shipper-compactor # 是将保存标记 chunks 和临时表的目录。
retention_enabled: true
shared_store: filesystem # 用于存储 boltdb 文件的共享存储。支持的类型:gcs、s3、azure, swift, filesystem, bos.
compaction_interval: 10m # 决定了应用压缩和/或保留的频率。如果 Compactor 落后,则会尽快进行压缩和/或保留。
retention_delete_worker_count: 150 # 指定了实例化以删除 chunks 的 goroutine worker 的最大数量。
retention_delete_delay: 2h # 是 Compactor 将删除标记 chunks 的延迟时间。
# limits_config块在 Loki 中配置全局和每租户限制。
limits_config:
# 全局应用于所有日志流。
retention_period: 4320h # 数据存储的保留期,仅在 compactor 配置中 retention_enabled 为 true 时适用。从版本 2.8.0 开始,空值 0 或 0s 将禁用保留。默认值(30 天)保留。744h
retention_stream: # 仅应用于与选择器匹配的日志流。
- selector: '{namespace="test"}'
priority: 1 # priority 值越大,优先级越高。
period: 72h # 保留期为 72 小时。
reject_old_samples: true # 旧采样是否会被拒绝。
reject_old_samples_max_age: 168h # 在拒绝之前,接受最大样本年龄。default = 1w
max_label_name_length: 512 # 标签名称可接受的最大长度。default = 1024
max_query_length: 200d1h # 块存储查询的长度限制。0 表示禁用。
per_stream_rate_limit: 20M # 每个流每秒的最大字节速率,也可以以人类可读的形式(1MB、256KB 等)表示。default = 3MB
ingestion_rate_strategy: local # 引入速率限制单独应用于每个分发服务器实例(本地)
ingestion_rate_mb: 50 # 每个用户每秒的采样率限制. 单位单位(以 MB 为单位)。
ingestion_burst_size_mb: 50 # 每个用户允许的采样突发大小 单位单位(以 MB 为单位)。
# chunk_store_config 块配置块的缓存方式以及将其保存到后备存储之前要等待的时间。
chunk_store_config:
cache_lookups_older_than: 0s # 缓存早于此时间段的索引条目。0 表示禁用。default = 0s
#max_look_back_period: 0s #此标志已弃用。使用-querier.max-query-lookback代替。default = 0s
# table_manager块配置表管理器以进行保留。
table_manager:
chunk_tables_provisioning:
inactive_read_throughput: 0
inactive_write_throughput: 0
provisioned_read_throughput: 0
provisioned_write_throughput: 0
index_tables_provisioning:
inactive_read_throughput: 0
inactive_write_throughput: 0
provisioned_read_throughput: 0
provisioned_write_throughput: 0
retention_deletes_enabled: true # 如果为 true,则启用数据库表的保留删除
retention_period: 4320h # 早于此保留期的表将被删除。表的保留日期 180天。启用后,请注意此设置对数据具有破坏性!
ruler:
# 用于后端规则存储的方法(configdb、azure、gcs、s3、swift、local、bos)
storage:
type: local
local:
directory: /loki/rules
rule_path: /loki/rules-temp # 用于存储临时规则文件的文件路径。
alertmanager_url: https://alertmanager.qqq.com
ring:
# 用于ring的后端存储。支持的值有:consul、etcd、inmemory、memberlist、multi。
kvstore:
store: inmemory
enable_api: true # Enable the ruler API.
enable_alertmanager_v2: true
query_scheduler:
max_outstanding_requests_per_tenant: 2048 # 限制每个租户(tenant)的最大未完成请求数,目的是控制每个租户在同时发起的请求数量,以防止滥用或超出系统资源的范围。
服务配置
cat /opt/loki/docker-compose-loki.yml
注意配置文件的格式为yaml,语法问题请参考yaml规则
shell
version: "3"
#配置容器网络
networks:
monitor:
services:
###添加loki服务
loki:
user: root
container_name: loki-server
image: grafana/loki:3.4.2
environment:
- TZ=Asia/Shanghai
restart: unless-stopped
ports:
- "3100:3100"
command: >
-config.file=/etc/loki/local-config.yaml
volumes:
- "/opt/loki/config:/etc/loki:rw"
- "/data/monitoring/loki:/loki:rw"
networks:
- monitor
启动服务
shell
# 启动容器:
docker-compose -f /opt/loki/docker-compose-loki.yml up -d
# 查看状态
docker ps -a
其他操作
shell
# 重启容器:
docker-compose -f /opt/loki/docker-compose-loki.yml restart
docker restart <id>
# 删除容器:
docker-compose -f /opt/loki/docker-compose-loki.yml down