一、前言¶
本文主要以下几方面介绍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

修改完成后,执行以下命令进行更新后
[root@k8s-master01 loki-stack]# helm upgrade --install loki . --set grafana.enabled=true --set grafana.service.type=NodePort -n loki

也会提示你修改密码

输入完成后进入Granfana界面

点击【Explore】-【Loki】

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


三、Loki语法¶
Loki查询语法与PromQL 类似,基本语法如下:
- =~ :正则模糊匹配
- = :完全匹配
- != :不等于
- !~ :正则模糊不等于
更多语法请参考:Granfana官网
下面针对完全匹配进行举例说明:
假如查询命名空间为 kube-system 下的所有 Pod 的日志,只需要在 Log browser 输入{namespace="kube-system"}, 然后点击 【Run query】 即可

下面针对正则模糊匹配进行举例说明:
假如查询命名空间为 kube-system 下中包含calico的 Pod 的日志,只需要在 Log browser 输入{namespace="kube-system, pod=~"calico.*"}, 然后点击 【Run query】 即可

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

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

假如查询命名空间为 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清理¶
执行以下语句进行清理
[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