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
相关推荐
THMAIL2 小时前
mac M芯片运行docker-desktop异常问题
macos·docker·容器
两点王爷3 小时前
IDEA中springboot项目中连接docker
spring boot·docker·intellij-idea
家庭云计算专家3 小时前
还没用过智能文档编辑器吗?带有AI插件的ONLYOFFICE介绍
服务器·人工智能·docker·容器·编辑器
孤的心了不冷6 小时前
【Docker】CentOS 8.2 安装Docker教程
linux·运维·docker·容器·eureka·centos
头疼的程序员7 小时前
docker学习与使用(概念、镜像、容器、数据卷、dockerfile等)
学习·docker·容器
IT小郭.7 小时前
使用 Docker Desktop 安装 Neo4j 知识图谱
windows·python·sql·docker·知识图谱·database·neo4j
淡水猫.7 小时前
hbit资产收集工具Docker(笔记版)
运维·docker·容器
旧故新长15 小时前
访问 Docker 官方镜像源(包括代理)全部被“重置连接”或超时
运维·docker·容器
white.tie16 小时前
Docker部署单节点Elasticsearch
elasticsearch·docker·jenkins
haven-85221 小时前
win11安装Joplin Server私有化部署(docker)
运维·docker·容器