Docker Compose 部署 Loki

官方文档: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
相关推荐
geek_super3 小时前
Docker学习--容器生命周期管理相关命令--docker pause/unpause 命令
docker
FGGIT3 小时前
香橙派开发板玩法分享:Docker部署1Panel打造全能控制台远程访问
运维·docker·容器
朱剑君4 小时前
Windows下Docker部署GitHub项目案例——NewsNow
运维·docker·容器
geek_super5 小时前
Docker学习--容器操作相关命令--docker logs 命令
docker
Toormi6 小时前
Mac Apple silicon如何指定运行amd64架构的ubuntu Docker?
linux·ubuntu·docker·架构
Archie_IT6 小时前
5分钟搞定pichome本地部署方案并配置远程在线多端同步访问权限
网络·git·http·docker
geek_super7 小时前
Docker学习--容器操作相关命令--docker events 命令
docker
geek_super7 小时前
Docker学习--容器生命周期管理相关命令--start/stop/restart命令
学习·docker
多模态大语言模型MLLM7 小时前
Ubuntu 系统 Docker 中搭建 CUDA & cuDNN 开发环境
linux·ubuntu·docker
夏旭晨7 小时前
Mac通过容器ip访问服务
docker·mac