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

                              **                      loki配置使用**

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

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

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 也支持根据你的指标进行报警。

3.安装

  为了方便,我们使用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

[root@k8s-1 ~]# 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

[root@k8s-1 ~]# 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)
​[root@k8s-1 ~]# 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

[root@k8s-1 ~]# 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实现云原生日志分析
也可以使用这种方式选择
可以看到下面已经有日志信息了

猜你喜欢

转载自blog.51cto.com/14181888/2542721