通过rancher部署loki-distributed loki日志高可用集群 helm方式部署

本人最近一直在找loki高可用部署的文档,一直没找到有效的部署文档,后面依照官方文档和自己摸索,部署出了以下一套loki高可用方案。

Distributor:Distributor是Loki日志写入的最前端,当它收到日志时会验证其正确性,之后会将日志切成块(chunk)后,转给Ingester负责存储。
Ingester:Ingester主要负责将收到的日志数据写入到后端存储,如DynamoDB,S3,Cassandra等),同时它还会将日志信息发送给Querier组件。
Querier:Querier主要负责从Ingester和后端存储里面提取日志,并用LogQL查询语言处理后返回给客户端。
Query Frontend:Query frontend主要提供查询API,它可以将一条大的查询请求拆分成多条让Querier并行查询,并汇总
后返回。它是一个可选的部署组件,通常我们部署它用来防止大型查询在单个查询器中引起内存不足的问题。
Gateway:gateway是一个外部自定义的nginx负载均衡器,主要是将Loki的日志写入和查询请求做负载均衡。

相关镜像:docker.io/grafana/loki:2.2.0

docker.io/nginxinc/nginx-unprivileged:1.19-alpine

以下使用rancher部署,使用的fluent-bit作为日志收集器,存储使用的minio、grafana作为日志UI展示界面,本文没有部署grafana和minio的步骤,这个很简单,不多描述:

1、从应用商店部署loki-distributed,选择版本是0.28.1,使用helm v3方式部署,部署后将会创建如下pod,创建出来的pod副本数默认均为一个: 

 

2、修改loki-distributed的配置映射(需要修改的内容为存储的相关配置信息storage_config):

auth_enabled: false

server:
  http_listen_port: 3100

distributor:
  ring:
    kvstore:
      store: memberlist

memberlist:
  join_members:
    - loki-distributed-memberlist

ingester:
  lifecycler:
    ring:
      kvstore:
        store: memberlist
      replication_factor: 1
  chunk_idle_period: 3m
  chunk_block_size: 262144
  chunk_encoding: snappy
  chunk_retain_period: 1m
  max_transfer_retries: 0

limits_config:
  enforce_metric_name: false
  reject_old_samples: true
  reject_old_samples_max_age: 168h
  max_cache_freshness_per_query: 10m

schema_config:
  configs:
    - from: 2020-09-07
      store: boltdb-shipper
      object_store: s3
      schema: v11
      index:
        prefix: loki_index_
        period: 24h

# 使用的minio存储
storage_config:
  aws:
    access_key_id: gdfgd1fgddffsdf3g3  # minio存储的access_key,在minio控制台手动创建生成
    bucketnames: lokitest  # loki使用的minio存储桶名称,在minio控制台手动创建生成
    endpoint: minio.loki-test:9000  # loki访问minio的方式,minio服务名称.部署minio的命名空间:minio数据传输端口
    insecure: true
    s3forcepathstyle: true
    secret_access_key: wJalrXUtnFFSUFSFHKEFSBGJKDSMARHL  # minio存储的secret_key,在minio控制台手动创建生成
  boltdb_shipper:
    shared_store: filesystem
    active_index_directory: /var/loki/index
    cache_location: /var/loki/cache
    cache_ttl: 168h
  filesystem:
    directory: /var/loki/chunks

chunk_store_config:
  max_look_back_period: 0s

table_manager:
  retention_deletes_enabled: false
  retention_period: 0s

query_range:
  align_queries_with_step: true
  max_retries: 5
  split_queries_by_interval: 15m
  cache_results: true
  results_cache:
    cache:
      enable_fifocache: true
      fifocache:
        max_size_items: 1024
        validity: 24h

frontend_worker:
  frontend_address: loki-distributed-query-frontend:9095

frontend:
  log_queries_longer_than: 5s
  compress_responses: true

compactor:
  shared_store: filesystem

ruler:
  storage:
    type: local
    local:
      directory: /etc/loki/rules
  ring:
    kvstore:
      store: memberlist
  rule_path: /tmp/loki/scratch
  alertmanager_url: https://alertmanager.xx
  external_url: https://alertmanager.xx

3、修改日志收集器fluent-bit的配置fluent-bit.conf和parsers.conf(修改output中loki的配置),在fluent-bit中使用loki-distributed-distributor此服务名称:

fluent-bit.conf:

 [SERVICE]
    HTTP_Server    On
    HTTP_Listen    0.0.0.0
    HTTP_PORT      2020
    Flush          1
    Daemon         Off
    Log_Level      warn
    Parsers_File   parsers.conf
[INPUT]
    Name           tail
    Tag            kube.*
    Path           /var/log/containers/*.log
    Multiline      On
    Parser_Firstline  multilinejson
    Parser          docker
    DB             /run/fluent-bit/flb_kube.db
    Mem_Buf_Limit  4000MB
[FILTER]
    Name           kubernetes
    Match          kube.*
    Kube_URL       https://kubernetes.default.svc:443
    Merge_Log On
    K8S-Logging.Exclude Off
    K8S-Logging.Parser Off
[Output]
    Name grafana-loki
    Match kube.*
    Url http://loki-distributed-distributor.loki-test:3100/api/prom/push  
    TenantID ""
    BatchWait 1
    BatchSize 1048576
    Labels {job="fluent-bit"}
    RemoveKeys kubernetes,stream
    AutoKubernetesLabels true
    LabelMapPath /fluent-bit/etc/labelmap.json
    LineFormat json
    LogLevel warn

parsers.conf(作用于日志展示格式):

[PARSER]
    Name        docker
    Format      json
    Time_Key    time
    Time_Format %Y-%m-%dT%H:%M:%S.%L
[PARSER]
    Name  multilinejson
    Format  regex
    Regex  /(?<data>\${2}.+)/
    Time_Key    time
    Time_Format %Y-%m-%dT%H:%M:%S.%L

关键配置是这个:Url http://loki-distributed-distributor.loki-test:3100/api/prom/push,loki-distributed-distributor作为loki服务的最前端,需要把loki-distributed-distributor服务名称配置在日志收集器fluent-bit中,修改好fluent-bit配置后,重启fluent-bit服务。

4、在grafana中添加loki的Data Source,测试日志查询(在grafana中使用loki-distributed-querier此服务名称):

关键配置:http://loki-distributed-querier.loki-test:3100 ,此处配置loki-distributed-querier这个服务名称,Querier主要负责从Ingester和后端存储里面提取日志,并用LogQL查询语言处理后返回给客户端(即grafana)。

5、增加pod副本数实现高可用(副本数为1时,loki-distributed-distributor会报错找不到成员列表,是因为此时pod数为1,成员列表为0,增加副本数量即可解决此报错,此报错不影响日志使用)。本次部署将loki-distributed-querier和loki-distributed-distributor设置为了双副本数(根据实际内存/CPU资源情况,设置成三副本也没问题),以实现高可用,loki-distributed-gateway内置的nginx提供负载均衡。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

运维无止境

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值