Loki的架构非常简单,主要由以下三部分组成: ①,Loki:主服务器,负责存储日志和处理查询,类似于es,使用了和Prometheus相同的服务发现机制,将标签添加到日志流中而不是构建全文索引。因此,从promtail接收到的日志和应用的metrics指标就具有相同的标签集。它不仅提供了更好的日志和指标之间的上下文切换,还避免了对日志进行全文索引。
②,promtail:采集端,负责采集日志发送给Loki,类似于filebeat,该工具主要包括发现采集目标以及给日志流添加上label标签,然后发送给Loki。promtail的服务发现是基于Prometheus的服务发现机制实现的。
③,grafana(大家都已很熟悉了):负责采集日志的展示,支持非常丰富的数据源。在Loki技术栈中grafana主要用来展示来自Prometheus和Loki等数据源的时间序列数据,还允许进行查询、可视化、告警等操作,可以在页面查询指定标签pod的日志。
二,安装helm
注:Loki提供了helm的安装方式,可以直接下载包进行安装,所以先进行helm的安装(master节点安装)
1,下载helm安装包
[root@master ~]# wget https://get.helm.sh/helm-v3.9.0-linux-amd64.tar.gz
图片
2、 解压安装包,并将helm的可执行命令移动到/usr/bin/目录下(安装简单)
[root@master ~]# tar -xf helm-v3.9.0-linux-amd64.tar.gz #解压
[root@master ~]# cd linux-amd64/
[root@master linux-amd64]# ls
helm LICENSE README.md
[root@master linux-amd64]# mv helm /usr/bin/
图片
3、 设置helm的自动补全
[root@master linux-amd64]# vim /etc/profile #编辑该文件
source <(helm completion bash) #文档最后写入该命令
[root@master linux-amd64]# source /etc/profile #使其生效
图片
4、 验证是否安装成功
[root@master ~]# helm version #查看版本
version.BuildInfo{Version:"v3.9.0", GitCommit:"7ceeda6c585217a19a1131663d8cd1f7d641b2a7", GitTreeState:"clean", GoVersion:"go1.17.5"}
[root@master ~]# helm repo list #查看仓库
Error: no repositories to show #还没有添加仓库
[root@master ~]# helm env #查看helm的配置信息
HELM_BIN="helm"
HELM_CACHE_HOME="/root/.cache/helm"
HELM_CONFIG_HOME="/root/.config/helm"
HELM_DATA_HOME="/root/.local/share/helm"
HELM_DEBUG="false"
HELM_KUBEAPISERVER=""
HELM_KUBEASGROUPS=""
HELM_KUBEASUSER=""
HELM_KUBECAFILE=""
HELM_KUBECONTEXT=""
HELM_KUBETOKEN=""
HELM_MAX_HISTORY="10"
HELM_NAMESPACE="default"
HELM_PLUGINS="/root/.local/share/helm/plugins"
HELM_REGISTRY_CONFIG="/root/.config/helm/registry/config.json"
HELM_REPOSITORY_CACHE="/root/.cache/helm/repository"
HELM_REPOSITORY_CONFIG="/root/.config/helm/repositories.yaml"
三,部署Loki
1、 添加helm源(仓库)
[root@master ~]# helm repo add grafana https://grafana.github.io/helm-charts #添加仓库
"grafana" has been added to your repositories
[root@master ~]#
[root@master ~]#
[root@master ~]# helm repo list #查看仓库
NAME URL
grafana https://grafana.github.io/helm-charts
[root@master ~]# helm search repo | grep loki #在仓库中搜索可用的helm的charts
grafana/loki 5.36.3 2.9.2 Helm chart for Grafana Loki in simple, scalable...
grafana/loki-canary 0.14.0 2.9.1 Helm chart for Grafana Loki Canary
grafana/loki-distributed 0.76.1 2.9.2 Helm chart for Grafana Loki in microservices mode
grafana/loki-simple-scalable 1.8.11 2.6.1 Helm chart for Grafana Loki in simple, scalable...
grafana/loki-stack 2.9.11 v2.6.1 Loki: like Prometheus, but for logs. #下载最后一个堆栈类型,包含了各日志工具
下载helm的charts 注:也可以直接安装,因需要修改一些配置,可以选择先下载到本地
[root@master ~]# helm pull grafana/loki-stack #下载
[root@master ~]# ls
anaconda-ks.cfg calico.yaml helm-v3.9.0-linux-amd64.tar.gz linux-amd64 loki-stack-2.9.11.tgz
解压
[root@master ~]# tar -xf loki-stack-2.9.11.tgz #解压
[root@master ~]# cd loki-stack
[root@master loki-stack]# ls #可以看到,解压后目录下会有多个资源文件
charts Chart.yaml README.md requirements.lock requirements.yaml templates values.yaml
修改主配置文件(资源文件),启用grafana
[root@master loki-stack]# vim values.yaml
36 grafana:
37 enabled: true #由false修改为true,启用grafana
38 sidecar:
39 datasources:
40 label: ""
41 labelValue: ""
42 enabled: true
43 maxLines: 1000
44 image:
45 tag: 8.3.5
图片
5、安装部署应用并查看资源
先创建一个名为loki的命名空间
[root@master loki-stack]# kubectl create ns loki
namespace/loki created
[root@master loki-stack]# helm install loki -n loki . #安装,这里最后有个点,为引用当前目录下的资源
NAME: loki
LAST DEPLOYED: Sat Nov 18 14:43:20 2023
NAMESPACE: loki
STATUS: deployed
REVISION: 1
NOTES:
The Loki stack has been deployed to your cluster. Loki can now be added as a datasource in Grafana.
See http://docs.grafana.org/features/datasources/loki/ for more detail.
[root@master loki-stack]# kubectl -n loki get pods #查看pod资源
NAME READY STATUS RESTARTS AGE
loki-0 1/1 Running 0 8m43s
loki-grafana-6b5f7dc79-rjcwm 2/2 Running 0 8m43s
loki-promtail-t69rd 1/1 Running 0 8m43s
loki-promtail-tckwm 1/1 Running 0 8m43s
[root@master loki-stack]#
[root@master loki-stack]#
[root@master loki-stack]#
[root@master loki-stack]# kubectl -n loki get deploy #查看控制器
NAME READY UP-TO-DATE AVAILABLE AGE
loki-grafana 1/1 1 1 8m49s
图片
此时grafana的service类型为clusterip,需要修改类型为nodeport,以供外网访问
图片
6、 通过edit修改grafana的service类型
[root@master loki-stack]# kubectl -n loki edit svc loki-grafana
service/loki-grafana edited #修改类型为nodeport
[root@master loki-stack]# kubectl -n loki get svc #查看暴露的端口
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
loki ClusterIP 10.96.209.225 3100/TCP 14m
loki-grafana NodePort 10.96.164.26 80:31276/TCP 14m
loki-headless ClusterIP None 3100/TCP 14m
loki-memberlist ClusterIP None 7946/TCP 14m
四、 访问
1、 先获取登录密码
[root@master loki-stack]# kubectl get secret -n loki loki-grafana -o jsnotallow="{.data.admin-password}" | base64 --decode ; echo
hdHI2C0vBAWdE6dw8Mbx7j846JZSsCUXbmUXLx4g #获取到的密码
2、 登录,任一节点ip+端口 用户为admin,密码为命令行获取到的密码
图片
默认已经添加了Loki数据源
图片
3、 导入模板
可以到官网下载
grafana模板官网:https://grafana.com/grafana/dashboards/?search=linux
导入下载的模板,并选择Loki数据源
图片
日志展示
图片
图片