Loki 是一个可水平伸缩的、高可用的以及多租户的日志集中系统,有这么多功能,唯独没有全文检索。在其简介中,自称是受到 Prometheus 的启发:仅保存和处理元数据,而对日志正文不闻不问。
和 EFK 类似,Loki Stack 也由采集端、服务端和交互端三个部分构成,其中采集端是可变的,目前支持 Promtail、FluentBit 和 Fluentd 三种,服务端和交互端分别使用的是 Loki 和 Grafana。
部署
使用helm安装部署非常方便。前提是安装好helm,helm2和helm3都可以。
(1)、安装grafana
helm install stable/grafana \
--set ingress.enabled=true \
--set ingress.hosts={grafana.coolops.cn} \
--generate-name
注意这里没有做数据持久化。如果需要做数据持久化,需要开启—set persistence.enabled=true
然后输出如下:
NAME: grafana-1590559431
LAST DEPLOYED: Wed May 27 14:03:55 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
1. Get your 'admin' user password by running:
kubectl get secret --namespace default grafana-1590559431 -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
2. The Grafana server can be accessed via port 80 on the following DNS name from within your cluster:
grafana-1590559431.default.svc.cluster.local
If you bind grafana to 80, please update values in values.yaml and reinstall:
securityContext: runAsUser: 0 runAsGroup: 0 fsGroup: 0
command:
- “setcap”
- “‘cap_net_bind_service=+ep’”
- “/usr/sbin/grafana-server &&”
- “sh”
“/run.sh” ``` Details refer to https://grafana.com/docs/installation/configuration/#http-port. Or grafana would always crash.
From outside the cluster, the server URL(s) are: http://grafana.coolops.cn
- 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.
#
然后在浏览器登录。[http://grafana.coolops.cn](http://grafana.coolops.cn) ,用户名和密码按着提示操作。<br />获取admin的密码:
```yaml
# kubectl get secret --namespace default grafana-1590559431 -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
jscu09wdW1mjeVdsIFMTHJVt82ufcywJHOQawtef
(2)、安装loki
添加loki仓库
helm repo add loki https://grafana.github.io/loki/charts && helm repo update
安装loki
helm install loki-server loki/loki --set replicas=2
依然没有做持久化
安装日志采集端
helm install fluent-bit loki/fluent-bit \
--set "loki.serviceName=loki-server"
loki的service name以自己的为准
然后查看
# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
fluent-bit default 1 2020-05-28 15:19:52.806057415 +0800 CST deployed fluent-bit-0.1.3 v1.5.0
grafana-1590559431 default 1 2020-05-27 14:03:55.071077667 +0800 CST deployed grafana-5.0.26 6.7.3
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 按钮进入查询交互了。
点击Log labels
就可以把当前系统采集的日志标签给显示出来,可以根据这些标签进行日志的过滤查询,也可直接输入过滤表达式,如图所示,过滤出job=”fluent-bit”的日志
日志选择和过滤
日志选择器
对于查询表达式的标签部分,将其用大括号括起来{},然后使用键值语法选择标签。多个标签表达式用逗号分隔:
{app="mysql",name="mysql-backup"}
当前支持以下标签匹配运算符:
- = 完全相等。
- != 不相等。
- =~ 正则表达式匹配。
- !~ 不进行正则表达式匹配。
例子:
{name=~"mysql.+"}
{name!~"mysql.+"}
日志过滤器
编写日志流选择器后,您可以通过编写搜索表达式来进一步过滤结果。搜索表达式可以只是文本或正则表达式。
查询示例:
{job="mysql"} |= "error"
{name="kafka"} |~ "tsdb-ops.*io:2003"
{instance=~"kafka-[23]",name="kafka"} != kafka.server:type=ReplicaManager
过滤器运算符可以被链接,并将顺序过滤表达式-结果日志行将满足每个过滤器。例如:
{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