实战:基于Loki采集K8s日志

云计算 云原生
Loki是一个水平可扩展、高可用性、轻量易用、多租户的日志聚合系统,它的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,而是为每一个日志流编制一组标签,项目是受Prometheus启发,专门为Prometheus和k8s用户做了相关优化。

一、 Loki介绍

1、 Loki是一个水平可扩展、高可用性、轻量易用、多租户的日志聚合系统,它的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,而是为每一个日志流编制一组标签,项目是受Prometheus启发,专门为Prometheus和k8s用户做了相关优化。

2、 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.    #下载最后一个堆栈类型,包含了各日志工具

2、下载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

2、 解压

[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

4、修改主配置文件(资源文件),启用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   <none>        3100/TCP       14m
loki-grafana      NodePort    10.96.164.26    <none>        80:31276/TCP   14m
loki-headless     ClusterIP   None            <none>        3100/TCP       14m
loki-memberlist   ClusterIP   None            <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数据源

图片图片

日志展示

图片图片

图片图片


责任编辑:武晓燕 来源: 院长技术
相关推荐

2023-11-06 01:17:25

主机容器选项

2023-09-06 08:12:04

k8s云原生

2022-07-26 00:00:05

QoSK8s日志

2022-04-22 13:32:01

K8s容器引擎架构

2024-01-29 13:03:02

2022-10-10 12:54:00

Flink运维

2023-11-06 07:16:22

WasmK8s模块

2023-09-08 08:09:12

k8sservice服务

2023-02-27 07:40:00

2021-11-04 07:49:58

K8SStatefulSetMySQL

2023-03-06 07:19:50

2023-11-27 13:54:00

kubernetes高可用

2023-11-15 13:44:00

k8s-域名日志

2023-09-15 08:00:20

Ingress网关Istio

2020-05-12 10:20:39

K8s kubernetes中间件

2022-09-05 08:26:29

Kubernetes标签

2023-03-03 07:54:21

2023-08-04 08:19:02

2023-08-03 08:36:30

Service服务架构

2023-05-25 21:38:30

点赞
收藏

51CTO技术栈公众号