图片来自宝途网来看看到底有多轻量:Loki是一个为有效保存日志数据而优化的数据存储。日志数据的高效索引使Loki有别于其他日志系统。与其他日志系统不同,Loki索引是根据标签构建的,原始日志消息没有索引。代理(也称为客户端)获取日志,将它们转换为流,并通过HTTPAPI将流推送到Loki。Promtail代理专为Loki安装而设计,但许多其他代理与Loki无缝集成。Loki的特点如下:索引日志的高效内存使用:通过在一组标签上建立索引,索引可以比其他日志聚合产品小得多。更少的内存使操作更便宜。多租户:Loki允许多个租户使用单个Loki实例。不同租户的数据与其他租户完全隔离。通过在代理中分配租户ID来配置多租户。LogQL,Loki的查询语言:Prometheus的查询语言PromQL的用户会发现LogQL很熟悉并且可以灵活地生成针对日志的查询。该语言还有助于从日志数据生成指标,这是一个远远超出日志聚合的强大功能。可扩展性:Loki在小范围内运行良好。在单进程模式下,所有需要的微服务都运行在一个进程中。单进程模式非常适合测试本地或小规模运行的Loki。Loki还设计用于横向扩展以进行大规模安装。Loki的每个微服务组件都可以分解为单独的进程,配置允许组件单独扩展。灵活性:许多代理(客户端)都有插件支持。这允许当前的可观察性结构将Loki添加为他们的日志聚合工具,而无需切换可观察性堆栈的现有部分。Grafana集成:Loki与Grafana无缝集成,提供完整的可观察性堆栈。Loki/Promtail/Grafana与EFKEFK(Elasticsearch、Fluentd、Kibana)堆栈,用于从各种来源摄取、可视化和查询日志。Elasticsearch中的数据作为非结构化JSON对象存储在磁盘上。每个对象的键和每个键的内容都被索引。然后可以使用JSON对象定义查询(称为查询DSL)或通过Lucene查询语言来查询数据。相比之下,单二进制模式下的Loki将数据存储在磁盘上,但在水平扩展模式下,数据存储在S3、GCS或Cassandra等云存储系统中。日志以纯文本形式存储,并使用一组标签名称和值进行标记,其中仅对标签对进行索引。这种权衡使得操作比完全索引更便宜,并允许开发人员从他们的应用程序内部积极登录。使用LogQL查询Loki中的日志。然而,由于这种设计权衡,基于内容(即日志行中的文本)过滤的LogQL查询需要加载搜索窗口中与查询中定义的标签匹配的所有块。Fluentd通常用于收集日志并将其转发到Elasticsearch。Fluentd被称为数据收集器,它可以从多个来源获取日志、处理它们并将它们转发到一个或多个目标。相比之下,Promtail的用例是专门为Loki量身定做的。它的主要操作模式是发现存储在磁盘上的日志文件,并将它们与一组标签关联起来转发给Loki。Promtail可以为与Promtail在同一节点上运行的Kubernetespod进行服务发现,充当容器边车或Docker日志记录驱动程序,从指定文件夹读取日志,并跟踪systemd日志。Loki通过一组标签对表示日志的方式类似于Prometheus表示指标的方式。当与Prometheus一起部署在环境中时,由于使用相同的服务发现机制,Promtail的日志通常具有与应用程序指标相同的标签。使用具有相同标签的日志和指标使用户能够在指标和日志之间无缝切换上下文,从而有助于根本原因分析。Kibana用于可视化和搜索Elasticsearch数据,并且在对这些数据执行分析方面非常强大。Kibana提供了许多用于数据分析的可视化工具,例如位置图、用于异常检测的机器学习以及用于发现数据关系的图形。警报可以配置为在发生意外情况时通知用户。相比之下,Grafana是专门为来自Prometheus和Loki等来源的时间序列数据量身定制的。可以设置仪表板以可视化指标(即将提供日志记录支持),并且可以使用浏览视图对数据进行临时查询。与Kibana一样,Grafana支持基于您的指标的警报。架构图:收集日志的架构图:一套轻量级的日志收集方案:Promtail:日志收集工具Loki:日志聚合系统Grafana:可视化工具部署Loki官网地址:https://github.com/grafana/loki①loki编辑loki配置文件:loki-config.yaml,参考:https://grafana.com/docs/loki/latest/configuration/examples/https://grafana.com/docs/loki/latest/installation/docker/---apiVersion:v1kind:ConfigMapmetadata:name:loki-configlabels:name:lokidata:loki-config.yaml:|-auth_enabled:falseserver:http_listen_port:3100grpc_listen_port:9096ingester:lifecycler:address:127.0.0.1ring:kvlestore:store:inmemoryreplication:1ring_factors:0schunk_idle_period:5mchunk_retain_period:30schunk_target_size:1048576#Lokiwillattempttobuildchunksupto1.5MB,flushingfirstifchunk_idle_periodormax_chunk_ageisreachedfirstmax_transfer_retries:0#Chunktransfersdisabledschema_config:configs:-from:2021-08-18store:boltdbsystemsobjecthema:v11index:prefix:index_period:168hstorage_config:boltdb:directory:/tmp/loki/indexfilesystem:directory:/tmp/loki/chunkslimits_config:enforce_metric_name:falsereject_old_samples:truereject_old_samples_max_age:168hingestion_rate_mb:15chunk_store_config:max_look_back_period:0stable_manager:retention_deletes_enabled:falseretention_period:0skubectlapply-floki-config.yaml创建Service和StatefulSet,loki,.yaml:---apiVersion:v1kind:Servicemetadata:name:lokiannotations:k8s.kuboard.cn/displayName:lokik8s.kuboard.cn/workload:lokilabels:name:lokispec:ports:-name:httpport:3100protocol:TCPtargetPort:3100selector:name:loki---apiVersion:apps/v1kind:StatefulSetmetadata:name:lokispec:serviceName:lokiselector:matchLabels:name:lokitemplate:metadata:labels:name:lokispec:volumes:-name:loki-configconfigMap:#defaultMode:0640name:loki-configcontainers:-name:loki#image:grafana/loki:2.3。0image:grafana/loki:masterargs:--config.file=/etc/loki/loki-config.yamlports:-containerPort:3100name:lokiprotocol:TCPvolumeMounts:-name:loki-configmountPath:/etc/loki/readOnly:true执行命令创建:kubectlapply-floki.yaml②grafana根据自己时间情况您可以更改存储块。如果你不改变它,它将是emptyDir。你知道的账号密码是admin/admin123。你可以自己修改。apiVersion:v1kind:Servicemetadata:name:grafanalabels:k8s-app:grafanaspec:type:NodePortports:-name:httpport:3000targetPort:3000selector:k8s-app:grafana---apiVersion:apps/v1kind:Deploymentmetadata:name:grafanalabels:k8s-app:grafanaspec:selector:matchLabels:k8s-app:grafanatemplate:metadata:labels:k8s-app:grafanaspec:#initContainers:##初始化容器,用于修改挂载的存储文件夹所属组和所属用户#-名称:init-file#image:busybox:1.28#imagePullPolicy:IfNotPresent#securityContext:#runAsUser:0#command:['chown','-R',"472:0","/var/lib/grafana"]#volumeMounts:#-name:data#mountPath:/var/lib/grafana#subPath:grafanacontainers:-name:grafana##Grafanacontainers#image:grafana/grafanaimage:grafana/grafana:7.4.3#securityContext:##containers安全策略,设置运行容器使用的所属组和用户#fsGroup:0#runAsUser:472ports:-name:httpcontainerPort:3000protocol:TCPenv:##配置环境变量,设置Grafana的默认管理员用户名称/密码-名称:GF_SECURITY_ADMIN_USER值:“admin”-名称:GF_SECURITY_ADMIN_PASSWORD值:“admin123”readinessProbe:##readinessprobefailureThreshold:10httpGet:path:/api/healthport:3000scheme:HTTPinitialDelaySeconds:10periodSeconds:10successThreshold:1timeoutSeconds:30livenessProbe:##存活探针failureThreshold:10httpGet:path:/api/healthport:3000scheme:HTTPinitialDelaySeconds:10periodSeconds:10successThreshold:1timeoutSeconds:1volumeMounts:##Containermountconfiguration-name:datamountPath:/var/lib/grafanasubPath:grafanavolumes:##Sharedstoragemountconfiguration-name:dataemptyDir:{}#persistentVolumeClaim:#claimName:grafana##指定使用PVC③promtail应用组合Promtail,对于日志收集,这里使用Sidecar模式。一个pod运行两个容器,一个是业务容器,一个是promtail。两个容器挂载相同的存储目录,promtail可以收集日志。编辑promtail-config.yaml,根据不同业务设置标签。参考:https://grafana.com/docs/loki/latest/clients/promtail/installation/---apiVersion:v1kind:ConfigMapmetadata:name:promtail-configlabels:k8s-app:promtaildata:promtail.yaml:|-server:http_listen_port:9080grpc_listen_port:0positions:filename:./positions.yaml#ThislocationneedstobewriteablebyPromtail.#filename:/tmp/positions.yaml#ThislocationneedstobewriteablebyPromtail.client:url:http://loki:3100/loki/api/v1/push-scrape_configsjob_name:system#-job_name:busyboxstatic_configs:-targets:-localhostlabels:job:varlog#customhost:busybox#custom__path__:/tmp/*log收集日志的目录---apiVersion:apps/v1kind:Deploymentmetadata:name:promtail-deploymentspec:replicas:2selector:matchLabels:name:promtailtemplate:metadata:labels:name:promtailspec:volumes:-name:logemptyDir:{}-name:promtail-configconfigMap:name:promtail-configcontainers:-name:promtailimage:grafana/promtail:masterimagePullPolicy:IfNotPresentargs:--config.file=/etc/promtail/promtail.yamlvolumeMounts:-name:logmountPath:/tmp/-name:promtail-configmountPath:/etc/promtail/-name:busyboximage:centos:7imagePullPolicy:IfNotPresentargs:-/bin/sh--c-"while:;doecho'---promtaillogtest---'`date`&&echo'---promtaillogtest---'`date`>>/tmp/healthy.log&&sleep3;done"volumeMounts:-name:logmountPath:/tmp/配置grafana,查看log查看grafana的nodeport端口:kubectlgetsvc浏览器进入节点IP+上面看到的端口打开grafana页面:输入账号密码登录admin123配置数据源:找到loki,在url中写上loki的服务名和端口号,即http://锁:3100。然后点击页面底部的“Save&&test”按钮:查看日志:选择主机或作业查看不同业务的日志:可以看到日志内容:至此,Loki+Promtail+Grafana的日志采集方案结束了。作者:Sunzz编辑:陶佳龙来源:cnblogs.com/Sunzz/p/15190702.html
