10 分钟在K8s 中部署轻量级日志系统 Loki

2024-02-04 04:28

本文主要是介绍10 分钟在K8s 中部署轻量级日志系统 Loki,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转载至我的博客 https://www.infrastack.cn ,公众号:架构成长指南

Loki 是什么?

Loki是由Grafana Labs开源的一个水平可扩展、高可用性,多租户的日志聚合系统的日志聚合系统。它的设计初衷是为了解决在大规模分布式系统中,处理海量日志的问题。Loki采用了分布式的架构,并且与Prometheus、Grafana密切集成,可以快速地处理大规模的日志数据。该项目受 Prometheus 启发

  • Promtail是代理,负责收集日志并将其发送给 Loki 。
  • Loki 是主服务器,负责存储日志和处理查询。
  • Grafana则 用于 UI 展示。

与ELK相比优势在哪里?

ELK是大规模日志解决方案中的佼佼者说到Loki,免不了要拿来跟ELK做个对比

  1. 架构简单:Loki 则采用分布式架构、可以将日志存储在多个节点上,也可以存储在一个节点上,其中Promtail进行日志收集、Loki 负责存储查询、Grafana用于展现
  2. 存储更小:Loki使用了紧凑的索引和压缩算法,相比ES 可以减少不少存储空间
  3. 没有采集日志格式要求:提供了更大的灵活性以及在查询时格式化的选项
  4. 与 Prometheus、Grafana 和 K8s 原生集成:可以在单个用户界面中无缝切换查询指标、日志等数据
  5. 轻量级:相比ELK,Loki更加轻量级,因为它不需要一个单独的Elasticsearch集群来存储和索引日志数据

如何采集数据?

k8s 集群不提供日志收集的解决方案,一般来说有3 种方案来做日志收集:

  1. 在Node节点上运行一个 agent 来收集日志(DaemonSet 采集方式)
  2. 在 Pod 中包含一个 sidecar 容器来收集应用日志(sidecar 采集方式)
  3. 由应用程序将日志信息推送到采集后端(主动采集方式)
节点采集方式

日志系统会以DaemonSet 方式是在每个node 节点上部署一个agent,来采集这个节点上所有的日志,默认会收集k8s 下/var/log/pod/var/lib/docker/containers下的日志,对应用程序的要求就是开启控制台打印,否则会收集不到日志,比较适用于功能单一或业务不是很多的集群;

Sidecar采集方式

Sidecar 方式会在每一个Pod中部署一个 sidecar 容器,来进行当前容器的日志采集,有多少个 pod,就会有多少个Sidecar容器,因此Sidecar相对资源占用较多,但灵活性以及多租户隔离性较强,适合大型的 K8s 集群使用,因为除了占用资源多点,采集性能不会有影响

Loki的Pormtail同时支持以上两种方式,默认为节点采集方式,下面我们演示如何在k8s 中快速部署一个Loki日志分析系统

Loki 部署

添加仓库
helm repo add grafana https://grafana.github.io/helm-charts
下载仓库
helm pull grafana/loki-stack
解压包

解压完成以后,可以查看相关参数的使用

tar -xvf loki-stack-2.10.0.tgz
配置概览

此Chart不止包含了Loki 、promtail、grafana,还包括其他组件,但是默认未开启,只开启了Loki 、promtail,这里为了演示,也开启grafana配置,通过grafana.enabled=true指定,同时如果要指定相关子 chart 参数,根据子 chart 名称.参数进行指定,比如要指定的grafana 的admin 密码,可以用grafana.adminPassword=admin指定

启动

注意:启动示例没有对日志数据进行持久化处理,正式部署要进行持久化配置

loki-stack中Grafana 的密码获取比较复杂,所以直接通过参数指定

helm install loki ./loki-stack -n loki-stack \
--set grafana.enabled=true \
--set grafana.adminPassword=admin \
--create-namespace  

以上启动完成以后,会收集/var/log/pod/var/lib/docker/containers日志信息,

查看启动pod,由于本人k8s 集群有 6 个node节点,所以部署了6 个promtail

Grafana访问

修改 Grafana 为 nodeport 访问方式

 kubectl edit svc loki-grafana -n loki-stack

登录成功以后,访问Explore 功能,并点击Log browser按钮,会看到已经采集相关数据,并自动创建

appcomponentcontainernamepsacepod等多个维度的 labels

比如要查看 ingress 的日志,选择命名空间为ingress-nginx并点击 show logs

同时查询结果可以支持换行、日期排序等功能


以上默认的查询界面,使用起来可能没那么顺手,那么可以根据需求去定制不同的查询界面,在https://grafana.com/grafana/dashboards中输入 loki,可以下载感兴趣的Dashboard

loki卸载

helm uninstall loki -n loki-stack

总结

以上我们快速演示了如何在 k8s 中部署一个Loki,可以看到非常简单,由于Loki 对k8s友好支持,默认就可以采集到pod、namespace 等标签数据,不需要额外配置,但是要达到生产级可用,还需要对 Loki的数据进行持久化配置、同时要根据采集日志数据的大小做好采集速率调整、以及日志过期策略设置

又到过年了,龙年红包封面是必备的,大家不要花钱购买了,我制作一款封面红包,数量4千个,效果如下

图片

领取方法,关注公众号架构成长指南,回复「封面」领取

这篇关于10 分钟在K8s 中部署轻量级日志系统 Loki的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/676346

相关文章

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

k8s中实现mysql主备过程详解

《k8s中实现mysql主备过程详解》文章讲解了在K8s中使用StatefulSet部署MySQL主备架构,包含NFS安装、storageClass配置、MySQL部署及同步检查步骤,确保主备数据一致... 目录一、k8s中实现mysql主备1.1 环境信息1.2 部署nfs-provisioner1.2.

linux系统中java的cacerts的优先级详解

《linux系统中java的cacerts的优先级详解》文章讲解了Java信任库(cacerts)的优先级与管理方式,指出JDK自带的cacerts默认优先级更高,系统级cacerts需手动同步或显式... 目录Java 默认使用哪个?如何检查当前使用的信任库?简要了解Java的信任库总结了解 Java 信

k8s admin用户生成token方式

《k8sadmin用户生成token方式》用户使用Kubernetes1.28创建admin命名空间并部署,通过ClusterRoleBinding为jenkins用户授权集群级权限,生成并获取其t... 目录k8s admin用户生成token创建一个admin的命名空间查看k8s namespace 的

k8s搭建nfs共享存储实践

《k8s搭建nfs共享存储实践》本文介绍NFS服务端搭建与客户端配置,涵盖安装工具、目录设置及服务启动,随后讲解K8S中NFS动态存储部署,包括创建命名空间、ServiceAccount、RBAC权限... 目录1. NFS搭建1.1 部署NFS服务端1.1.1 下载nfs-utils和rpcbind1.1

Java 日志中 Marker 的使用示例详解

《Java日志中Marker的使用示例详解》Marker是SLF4J(以及Logback、Log4j2)提供的一个接口,它本质上是一个命名对象,你可以把它想象成一个可以附加到日志语句上的标签或戳... 目录什么是Marker?为什么使用Markejavascriptr?1. 精细化的过滤2. 触发特定操作3

Oracle数据库在windows系统上重启步骤

《Oracle数据库在windows系统上重启步骤》有时候在服务中重启了oracle之后,数据库并不能正常访问,下面:本文主要介绍Oracle数据库在windows系统上重启的相关资料,文中通过代... oracle数据库在Windows上重启的方法我这里是使用oracle自带的sqlplus工具实现的方

linux部署NFS和autofs自动挂载实现过程

《linux部署NFS和autofs自动挂载实现过程》文章介绍了NFS(网络文件系统)和Autofs的原理与配置,NFS通过RPC实现跨系统文件共享,需配置/etc/exports和nfs.conf,... 目录(一)NFS1. 什么是NFS2.NFS守护进程3.RPC服务4. 原理5. 部署5.1安装NF

linux查找java项目日志查找报错信息方式

《linux查找java项目日志查找报错信息方式》日志查找定位步骤:进入项目,用tail-f实时跟踪日志,tail-n1000查看末尾1000行,grep搜索关键词或时间,vim内精准查找并高亮定位,... 目录日志查找定位在当前文件里找到报错消息总结日志查找定位1.cd 进入项目2.正常日志 和错误日