Loki 是一个可水平伸缩的、高可用的以及多租户的日志集中系统,有这么多功能,唯独没有全文检索。在其简介中,自称是受到 Prometheus 的启发:仅保存和处理元数据,而对日志正文不闻不问。

和 EFK 类似,Loki Stack 也由采集端、服务端和交互端三个部分构成,其中采集端是可变的,目前支持 Promtail、FluentBit 和 Fluentd 三种,服务端和交互端分别使用的是 Loki 和 Grafana。

部署

使用helm安装部署非常方便。前提是安装好helm,helm2和helm3都可以。

(1)、安装grafana

  1. helm install stable/grafana \
  2. --set ingress.enabled=true \
  3. --set ingress.hosts={grafana.coolops.cn} \
  4. --generate-name

注意这里没有做数据持久化。如果需要做数据持久化,需要开启—set persistence.enabled=true

然后输出如下:

  1. NAME: grafana-1590559431
  2. LAST DEPLOYED: Wed May 27 14:03:55 2020
  3. NAMESPACE: default
  4. STATUS: deployed
  5. REVISION: 1
  6. NOTES:
  7. 1. Get your 'admin' user password by running:
  8. kubectl get secret --namespace default grafana-1590559431 -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
  9. 2. The Grafana server can be accessed via port 80 on the following DNS name from within your cluster:
  10. grafana-1590559431.default.svc.cluster.local
  11. If you bind grafana to 80, please update values in values.yaml and reinstall:

securityContext: runAsUser: 0 runAsGroup: 0 fsGroup: 0

command:

  1. Login with the password from step 1 and the username: admin
    #
    WARNING: Persistence is disabled!!! You will lose your data when
    the Grafana pod is terminated.
    #
    1. 然后在浏览器登录。[http://grafana.coolops.cn](http://grafana.coolops.cn) ,用户名和密码按着提示操作。<br />获取admin的密码:
    2. ```yaml
    3. # kubectl get secret --namespace default grafana-1590559431 -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
    4. jscu09wdW1mjeVdsIFMTHJVt82ufcywJHOQawtef

(2)、安装loki

添加loki仓库

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

安装loki

  1. helm install loki-server loki/loki --set replicas=2

依然没有做持久化

安装日志采集端

  1. helm install fluent-bit loki/fluent-bit \
  2. --set "loki.serviceName=loki-server"

loki的service name以自己的为准

然后查看

  1. # helm list
  2. NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
  3. fluent-bit default 1 2020-05-28 15:19:52.806057415 +0800 CST deployed fluent-bit-0.1.3 v1.5.0
  4. grafana-1590559431 default 1 2020-05-27 14:03:55.071077667 +0800 CST deployed grafana-5.0.26 6.7.3
  5. loki-server default 1 2020-05-28 15:18:19.600836531 +0800 CST deployed loki-0.29.0 v1.5.0

(3)、登录grafana添加数据源
接下来登入 Grafana,添加 Loki 作为数据源,由于没有开启认证,因此只需要设置 URL 即可,例如:http://loki-server:3100。添加之后,就可以点击 Explore 按钮进入查询交互了。
image.png
image.png
点击Log labels就可以把当前系统采集的日志标签给显示出来,可以根据这些标签进行日志的过滤查询,也可直接输入过滤表达式,如图所示,过滤出job=”fluent-bit”的日志
image.png

日志选择和过滤

日志选择器

对于查询表达式的标签部分,将其用大括号括起来{},然后使用键值语法选择标签。多个标签表达式用逗号分隔:

  1. {app="mysql",name="mysql-backup"}

当前支持以下标签匹配运算符:

  • = 完全相等。
  • != 不相等。
  • =~ 正则表达式匹配。
  • !~ 不进行正则表达式匹配。

例子:

  1. {name=~"mysql.+"}
  2. {name!~"mysql.+"}

日志过滤器

编写日志流选择器后,您可以通过编写搜索表达式来进一步过滤结果。搜索表达式可以只是文本或正则表达式。
查询示例:

  1. {job="mysql"} |= "error"
  2. {name="kafka"} |~ "tsdb-ops.*io:2003"
  3. {instance=~"kafka-[23]",name="kafka"} != kafka.server:type=ReplicaManager

过滤器运算符可以被链接,并将顺序过滤表达式-结果日志行将满足每个过滤器。例如:

  1. {job="mysql"} |= "error" != "timeout"

已实现以下过滤器类型:

  • |= 行包含字符串。
  • != 行不包含字符串。
  • |~ 行匹配正则表达式。
  • !~ 行与正则表达式不匹配。

regex表达式接受RE2语法。默认情况下,匹配项区分大小写,并且可以将regex切换为不区分大小写的前缀(?i)。

这里仅仅是简单的搭建使用的一番,更多功能需要自己的探索了(因为我也不会)。

这里有几个坑。由于有那么一堵墙的原因,添加repo和下载chat的时候下载不下来,所以我就用梯子自己下载了。如果你也遇到这个问题,可以考虑一下~~!

还有下载镜像的问题,也是一样。不过我已经把我安装的这个版本的镜像放到阿里云了。有兴趣的就用我的镜像把。 loki:registry.cn-hangzhou.aliyuncs.com/rookieops/loki:1.5.0 loki-fluent-bit:registry.cn-hangzhou.aliyuncs.com/rookieops/fluent-bit-plugin-loki:1.5.0-amd64