运维开发网

使用loki+promtail实现云原生日志分析

运维开发网 https://www.qedev.com 2020-10-22 12:05 出处:51CTO 作者:jxsdbk
**loki配置使用**11.Loki是GrafanaLabs团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统。它的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,而是为每个日志流配置一组标签。项目受Prometheus启发,官方的介绍就是:LikePrometheus,butforlogs,类似于Prometheus的日志系统。2.和其他日志系统不同的是,Loki只

loki配置使用

  1. Loki 是 Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统。它的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,而是为每个日志流配置一组标签。项目受 Prometheus 启发,官方的介绍就是:Like Prometheus, but for logs,类似于 Prometheus 的日志系统。

  2. 和其他日志系统不同的是,Loki 只会对你的日志元数据标签(就像 Prometheus 的标签一样)进行索引,而不会对原始的日志数据进行全文索引。然后日志数据本身会被压缩,并以 chunks(块)的形式存储在对象存储(比如 S3 或者 GCS)甚至本地文件系统。一个小的索引和高度压缩的 chunks 可以大大简化操作和降低 Loki 的使用成本。

对比其他日志系统

EFK(Elasticsearch、Fluentd、Kibana)用于从各种来源获取、可视化和查询日志。

Elasticsearch 中的数据以非结构化 JSON 对象的形式存储在磁盘上。每个对象的键和每个键的内容都有索引。然后可以使用 JSON 对象来定义查询(称为 Query DSL)或通过 Lucene 查询语言来查询数据。

相比之下,单二进制模式下的 Loki 可以将数据存储在磁盘上,但在水平可扩展模式下,数据存储需要在云存储系统中,如 S3、GCS 或 Cassandra。日志以纯文本的形式存储,并标记了一组标签的名称和值,其中只有标签会被索引。这种权衡使其操作起来比完全索引更便宜。Loki 中的日志使用 LogQL 进行查询。由于这种设计上的权衡,根据内容(即日志行内的文本)进行过滤的 LogQL 查询需要加载搜索窗口内所有与查询中定义的标签相匹配的块。

Fluentd 通常用于收集日志并转发到 Elasticsearch。Fluentd 被称为数据收集器,它可以从许多来源采集日志,并对其进行处理,然后转发到一个或多个目标。

相比之下,Promtail 是为 Loki 量身定做的。它的主要工作模式是发现存储在磁盘上的日志文件,并将其与一组标签关联的日志文件转发到 Loki。Promtail 可以为在同一节点上运行的 Kubernetes Pods 做服务发现,作为 Docker 日志驱动,从指定的文件夹中读取日志,并对 systemd 日志不断获取。

Loki 通过一组标签表示日志的方式与 Prometheus 表示指标的方式类似。当与Prometheus 一起部署在环境中时,由于使用了相同的服务发现机制,来自Promtail 的日志通常与你的应用指标具有相同的标签。拥有相同级别的日志和指标,用户可以在指标和日志之间无缝切换,帮助进行根本性原因分析。

Kibana 被用于可视化和搜索 Elasticsearch 数据,并且在对这些数据进行分析时非常强大。Kibana 提供了许多可视化工具来做数据分析,例如地图、用于异常检测的机器学习,以及关系图。也可以配置报警,当出现意外情况时,可以通知用户。

相比之下,Grafana 是专门针对 Prometheus 和 Loki 等数据源的时间序列数据定制的。仪表板可以设置为可视化指标(即将推出的日志支持),也可以使用探索视图对数据进行临时查询。和 Kibana 一样,Grafana 也支持根据你的指标进行报警。

如何安装

为了方便,我们使用helm安装(其他安装方法可参考github上的方式https://grafana.com/docs/loki/latest/installation/)

  1. 首先需要确保已经部署了 Kubernetes 集群,并安装配置了 Helm 客户端,然后添加 Loki 的 chart 仓库:

    这边我们使用的是helm3的版本

    helm repo add loki https://grafana.github.io/loki/charts

    helm repo add loki

    更新chart仓库

    helm repo update

    [[email protected] ~]# `helm repo list`
    NAME            URL
    nginx-stable    https://helm.nginx.com/stable
    incubator       http://mirror.azure.cn/kubernetes/charts-incubator/
    jetstack        https://charts.jetstack.io
    harbor          https://helm.goharbor.io
    loki            https://grafana.github.io/loki/charts

    可以查看chart包有没有添加进来

    使用namespace安装

helm upgrade --install loki --namespace=loki loki/loki

如果没有namespace可以创建

kubectl create ns loki

[[email protected] ~]# `kubectl get pods -n loki`
NAME             READY   STATUS    RESTARTS   AGE
loki-0           1/1     Running   1          17h
promtail-dpdx7   1/1     Running   0          31m
promtail-kndlm   1/1     Running   0          31m
promtail-w7gbw   1/1     Running   0          31m

可以看到loki的pod已经running了

下面我们来安装Promtail(其他安装方式可以参考文档https://grafana.com/docs/loki/latest/clients/promtail/installation/)

也是使用的helm安装

helm repo add loki https://grafana.github.io/loki/charts

helm repo update

helm upgrade --install promtail loki/promtail --namespace=loki --set "loki.serviceName=loki" (指定namespace)

​[[email protected] ~]#` kubectl get pods -n loki`
NAME             READY   STATUS    RESTARTS   AGE
loki-0           1/1     Running   1          17h
promtail-dpdx7   1/1     Running   0          31m
promtail-kndlm   1/1     Running   0          31m
promtail-w7gbw   1/1     Running   0          31m

可以看到promtail的pod已经running起来了

接下来我们在grafana页面配置

因为我已经装过grafana了,所以这里就没有安装grafana

我们先配置datasource

[[email protected] ~]# `kubectl get svc -n loki`
NAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
loki            ClusterIP   10.10.42.224   <none>        3100/TCP   17h
loki-headless   ClusterIP   None           <none>        3100/TCP   17h

先查到cluster ip

使用loki+promtail实现云原生日志分析

添加datasource

使用loki+promtail实现云原生日志分析

可以看到数据源已经添加成功了

使用loki+promtail实现云原生日志分析

按照箭头选择

使用loki+promtail实现云原生日志分析

可以使用这种方式选择

使用loki+promtail实现云原生日志分析

也可以使用这种方式选择

可以看到下面已经有日志信息了

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号