一、前言

本文主要以下几方面介绍Loki:

  • Loki安装
  • Loki语法
  • Loki清理

二、Loki安装

提前下载好安装文件

[root@k8s-master01 ~]# git clone https://gitee.com/jeckjohn/k8s.git

1.创建独立命名空间

[root@k8s-master01 ~]# cd /root/k8s/loki/loki-stack
[root@k8s-master01 loki-stack]# kubectl create ns loki

2.添加并更新 Loki 的 Helm 仓库

[root@k8s-master01 loki-stack]# helm repo add grafana https://grafana.github.io/helm-charts
[root@k8s-master01 loki-stack]# helm repo update

3.创建 Loki Stack

[root@k8s-master01 loki-stack]# helm upgrade --install loki . --set grafana.enabled=true --set grafana.service.type=NodePort -n loki

上面配置参数说明:

  • grafana.enabled=true:启用 Grafana 组件
  • grafana.service.type=NodePort: 服务类型为NodePort

注意:上面没有涉及到持久化

如果想配置持久化,参考下面配置

[root@k8s-master01 loki-stack]# helm upgrade --install loki .  --set grafana.enabled=true,prometheus.enabled=true,prometheus.alertmanager.persistentVolume.enabled=false,prometheus.server.persistentVolume.enabled=false,loki.persistence.enabled=true,loki.persistence.storageClassName=standard,loki.persistence.size=5Gi

上面配置参数说明:

  • grafana.enabled=true:启用 Grafana 组件
  • prometheus.enabled=true:启用 Prometheus 组件
  • prometheus.alertmanager.persistentVolume.enabled=false:禁用 Alertmanager 组件的持久化存储
  • prometheus.server.persistentVolume.enabled=false:禁用 Prometheus Server 组件的持久化存储
  • loki.persistence.enabled=true:启用 Loki 组件的持久化存储
  • loki.persistence.storageClassName=standard:设置 Loki 组件持久化存储的存储类名称为 "standard"
  • loki.persistence.size=5Gi:设置 Loki 组件持久化存储的大小为 5G

4.查看 Pod 状态

[root@k8s-master01 loki-stack]# kubectl get po -n loki
NAME                           READY   STATUS    RESTARTS   AGE
loki-0                         1/1     Running   0          8h
loki-grafana-c47f9599f-gck48   2/2     Running   0          8h
loki-promtail-bpz7q            1/1     Running   0          8h
loki-promtail-j6sz8            1/1     Running   0          8h
loki-promtail-lvm7l            1/1     Running   0          8h
loki-promtail-qj7lz            1/1     Running   0          8h
loki-promtail-sz4nf            1/1     Running   0          8h

5.查看 Grafana 的 Service 暴露的端口号31454

[root@k8s-master01 loki-stack]# kubectl get svc -n loki
NAME              TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
loki              ClusterIP   10.0.96.191    <none>        3100/TCP       8h
loki-grafana      NodePort    10.0.103.132   <none>        80:31454/TCP   8h
loki-headless     ClusterIP   None           <none>        3100/TCP       8h
loki-memberlist   ClusterIP   None           <none>        7946/TCP       8h

6.打开浏览器,输入http://192.168.1.31:31454,账号admin

密码可以通过下面的方式进行查询

[root@k8s-master01 loki-stack]# kubectl get secret --namespace loki loki-grafana -o jsonpath="{.data.admin-password}" | base64 -d ; echo
utq5XSKhbNNzGc3FXzB9X52EPsC9031Y5CCViP5B

如果想修改成固定密码且不加密,需要修改values.yaml,添加adminPassword: admin字段

[root@k8s-master01 ~]# cd /root/k8s/loki/loki-stack
[root@k8s-master01 loki-stack]# vim values.yaml
###添加内容
adminPassword: admin

修改成固定密码-1

修改完成后,执行以下命令进行更新后

[root@k8s-master01 loki-stack]# helm upgrade --install loki . --set grafana.enabled=true --set grafana.service.type=NodePort -n loki

Loki安装-1

也会提示你修改密码

Loki安装-2

输入完成后进入Granfana界面

Loki安装-3

点击【Explore】-【Loki】

Loki安装-4

输入namespace="kube-system"}后,点击【Run query】查询kube-system下面的日志

Loki安装-5

Loki安装-6

三、Loki语法

Loki查询语法与PromQL 类似,基本语法如下:

  • =~ :正则模糊匹配
  • = :完全匹配
  • != :不等于
  • !~ :正则模糊不等于

更多语法请参考:Granfana官网

下面针对完全匹配进行举例说明:

假如查询命名空间为 kube-system 下的所有 Pod 的日志,只需要在 Log browser 输入{namespace="kube-system"}, 然后点击 【Run query】 即可

Loki语法-1

下面针对正则模糊匹配进行举例说明:

假如查询命名空间为 kube-system 下中包含calico的 Pod 的日志,只需要在 Log browser 输入{namespace="kube-system, pod=~"calico.*"}, 然后点击 【Run query】 即可

Loki语法-2

假如查询命名空间为 kube-system 下中包含calico的 Pod 并且过滤日志包含 avg 字段的日志,只需要在 Log browser 输入{namespace="kube-system", pod=~"calico.*"} |~ "avg", 然后点击 【Run query】 即可

Loki语法-3

假如查询命名空间为 kube-system 下中包含calico的 Pod 并且过滤日志包含 avg 字段的日志,并且longest的值大于6ms,只需要在 Log browser 输入{namespace="kube-system", pod=~"calico.*"} |~ "avg" | logfmt | longest > 6ms, 然后点击 【Run query】 即可

Loki语法-4

假如查询命名空间为 kube-system 下中包含calico的 Pod 并且过滤日志包含 avg 字段的日志,并且longest的值大于6ms,avg的值大于3ms,只需要在 Log browser 输入{namespace="kube-system", pod=~"calico.*"} |~ "avg" | logfmt | longest > 6ms and avg > 3ms, 然后点击 【Run query】 即可

Loki语法-5

四、Loki清理

执行以下语句进行清理

[root@k8s-master01 ~]# cd /root/k8s/loki/loki-stack
[root@k8s-master01 loki-stack]# helm uninstall loki  -n loki
[root@k8s-master01 loki-stack]# kubectl delete ns  loki