本人最近一直在找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提供负载均衡。

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

  1. 基于Kubeadm部署Kubernetes1.13.3 HA 高可用集群

    Table of Contents 目录 基于Kubeadm部署Kubernetes1.13.3 HA 高可用集群 01. 部署目的 1.1 Kubernetes的特性 1.2 贴微服务,开发环境快速 ...

  2. Kubeadm HA 1.9 高可用 集群 本地离线部署

    Kubeadm HA 1.9 高可用 集群 本地离线部署 k8s介绍 k8s 发展速度很快,目前很多大的公司容器集群都基于该项目,如京东,腾讯,滴滴,瓜子二手车,北森等等. kubernetes1.9 ...

  3. k8s(一)、 1.9.0高可用集群本地离线部署记录

    一.部署说明 1.节点 master1: IP:192.168.0.170/24 hostname:171 master2: IP:192.168.0.171/24 hostname:172 VIP: ...

  4. k8s高可用集群_搭建高可用集群(初始化和部署keepalived)---K8S_Google工作笔记0055

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后我们来部署keepalived,搭建高可用集群. 然后我们这里需要master,155, ma ...

  5. k8s高可用集群_搭建高可用集群(实现方式介绍)---K8S_Google工作笔记0054

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后我们来说搭建高可用集群,为什么要搭建高可用集群. 因为,首先我们说master节点是用来管理其 ...

  6. CapitalOne - Artifactory高可用集群的自动化部署实践

    背景 本文为大家介绍Capital One如何利用自动化流水线实现Artifactory HA集群进行自动化运维.Capital One银行是美国最大的数字化银行之一,在Capital One的dev ...

  7. kubernetes高可用集群web页面部署

    前言: 前面几篇博客演示了k8s的二进制部署,这篇博客做k8s页面部署 搭建部署 1.下载官方文档 2.创建资源(master01) #创建dashboard工作目录 [root@localhost ...

  8. Helm部署rancher 高可用集群

    Helm部署rancher 高可用集群 Helm简介 Helm是Kubernetes的一个包管理工具,用来简化Kubernetes应用的部署和管理.可以把Helm比作CentOS的yum工具. Hel ...

  9. s19.基于 Kubernetes v1.25 (kubeadm) 和 Docker 部署高可用集群(一)

    基于 Kubernetes v1.25 和 Docker 部署高可用集群 主要内容 Kubernetes 集群架构组成 容器运行时 CRI Kubernetes v1.25 新特性 Kubernete ...

最新文章

  1. GDCM:生成标准SOP类的测试程序
  2. 苏老师首播3小时!超500人观看!录屏!源码!PPT……你要的都在这里!
  3. 使用两个队列实现一个栈
  4. python中集合运算_入门 | 一文带你了解Python集合与基本的集合运算
  5. 异构平台同步(Mysql到Oracle)
  6. DataList:HTML5中的input输入框自动提示宝器
  7. 样本量很少如何获得最佳的效果?最新小样本学习工具包来啦!
  8. 电脑合上盖子不锁屏_笔记本电脑合上盖子或台式机离开后黑屏是“休眠”还是“睡眠”...
  9. 处理收到的Stanzas
  10. java中vector和list_java中vector和list的区别
  11. STM32 - L4系列芯片手册: 总线架构
  12. matlab许可证_MATLAB校园许可证更新指南
  13. 参考文献编号[9]之后出现空格解决方法
  14. 二维码的制作之根据Excel数据批量制作二维码
  15. TE TM TEM模的区别
  16. Flixel横板游戏制作教程(四)— RandomLevels
  17. 宇视科技实习生笔试面试经历
  18. Excel VBA一行代码搞定分组排序
  19. 电话,手机,微信账号,邮箱正则表达式校验
  20. 金三银四过后整理出的阿里最新Java程序员面试题目(2018.4月)

热门文章

  1. python 最好用的数据库模块_Python 使用pymysql模块操作数据库
  2. JAVA版微信机器人(非公众号)【L】
  3. 关于天猫抢茅台的Python秒杀脚本!
  4. 2021美赛总结及常用网站
  5. 可嵌入Excel到系统的前端表格控件SpreadJS v16.0——拥有全新的新文件格式
  6. 创意生日礼物生日视频,老婆生日要送什么礼物,告别毛绒娃娃
  7. IOS类似图片验证码的实现
  8. C语言已知二进制码求循环码,二进制和循环码转换
  9. 导入镜像报错解决方法
  10. 【Unity】虚拟相机跟随Player移动并输出jpg图片