Loki日志聚合分析系统-kubernetes

Promtail 介绍

Loki 是 Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统。它的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,而是为每个日志流编制一组标签,专门为 Prometheus 和 Kubernetes 用户做了相关优化。

与传统日志收集系统(例ELK)相比,Loki的优势有哪些?

  •  不对日志进行全文索引。通过存储压缩非结构化日志和仅索引元数据,Loki操作起来会更简单,更省成本
  •  通过与 Prometheus 相同的标签记录流对日志进行索引和分组,这使得日志的扩展和操作效率更高
  •  特别适合存储 Kubernetes Pod 日志;诸如 Pod 标签之类的元数据会被自动删除和编入索引
  •  受 Grafana 原生支持,与 Prometheus 配合更加方便

解决痛点?

 无需再去其他界面,或者终端上查看单个Pod的日志

Loki的架构

  •  Loki 为主服务器。负责存储日志和处理查询
  •  Promtail 是代理。负责收集日志并将其发送给Loki
  •  Grafana 用来UI展示。

Promtail 将本地日志内容传送到 Loki 实例。需要监控的应用程序的机器上都需要部署该组件。

它的主要工作流程可以划分为:

  • 使用 fsnotify 监听指定目录下(例如:/var/log/*.log)的文件创建与删除
  • 对每个活跃的日志文件起一个 goroutine 进行类似 tail -f 的读取,读取到的内容发送给 channel
  • 有一个单独的 goroutine 会读取 channel 中的日志行,分批并附加上标签后推送给 Loki

一、部署

Loki项目地址:https://github.com/grafana/loki/

                官网:https://grafana.com/oss/loki/

1. helm下载value

 

# 添加chart
helm repo add loki https://grafana.github.io/loki/charts

# 更新chart
helm repo update 

## 将loki template下载到本地
helm pull loki/loki-stack

# 解压并自定义修改参数
tar zxvf loki-stack-2.9.29tgz
cd loki-stack/ $$ ls
charts  Chart.yaml  README.md  requirements.lock  requirements.yaml  templates  values.yaml

cd charts/ $$ ls
filebeat  fluent-bit  grafana  logstash  loki  prometheus  promtail

2. 修改部署文件

可以修改values.yaml文件,指定是否开启Grafana、Prometheus等服务,默认不开启的:

loki:
  enabled: true

promtail:
  enabled: true

fluent-bit:
  enabled: false

grafana:
  enabled: true
  sidecar:
    datasources:
      enabled: true
  image:
    tag: 6.7.0

prometheus:
  enabled: false

 

 在此只开启Grafana

修改Grafana的values.yaml,使其Service暴露方式为NodePort(默认为ClusterIp):

vim charts/grafana/values.yaml

service:
  type: NodePort
  port: 80
  nodePort: 30003  # 端口范围:30000-32767
  targetPort: 3000
    # targetPort: 4181 To be used with a proxy extraContainer
  annotations: {}
  labels: {}
  portName: service

 修改账号密码

# Administrator credentials when not using an existing secret (see below)
adminUser: admin
adminPassword: admin

 3. promtail服务在构建时会自动挂载

  1.  宿主机docker主目录下的containers目录,一般默认都为/var/lib/docker/containers
  2.  pod的日志目录,一般默认为/var/log/pods

这就需要特别注意一下,如果是修改过docker默认的存储路径的,需要将mount的路径进行修改,promtail找不到对应的容器日志

具体docker 存储路径,可以使用docker info 命令查询

vim charts/promtail/values.yaml

volumes:
- name: docker
  hostPath:
    path: /data/lib/docker/containers  ## 我的是放在了data下
- name: pods
  hostPath:
    path: /var/log/pods

volumeMounts:
- name: docker
  mountPath: /data/lib/docker/containers  ## 挂载点也要进行修改
  readOnly: true
- name: pods
  mountPath: /var/log/pods
  readOnly: true

 

4. 安装

helm install -n loki loki -f values.yaml ../loki-stack
2020/11/11 17:18:54 Warning: Merging destination map for chart 'logstash'. The destination item 'filters' is a table and ignoring the source 'filters' as it has a non-table value of: <nil>
NAME:   loki
LAST DEPLOYED: Wed Nov 11 17:18:53 2020
NAMESPACE: loki
STATUS: DEPLOYED

5. 查看暴露的服务

查看pods节点

kubectl get pods -n loki

  二、使用Loki

通过服务器ip+30002访问,登录成功后,有一点需要注意的地方,也是非常容易踩坑的地方!!!

如果是安装Loki时采用的以上方法,开启了Grafana,那系统会自动配置好Data sources,应该不会有什么问题。

但是,如果是手动搭建的Grafana,需要手动添加Data Sources时,一定注意:

数据源名称中的Loki,L一定要是大写!!!

如果不是大写,会导致连接不到Loki源,一般回报错:Error connecting to datasource: Loki: Bad Gateway. 502

 Kubernetes-20:日志聚合分析系统—Loki的搭建与使用

如果是Loki,L大写,结局完全不一样

Kubernetes-20:日志聚合分析系统—Loki的搭建与使用

数据源添加完毕后,开始查看日志

点击Explore,可以看到选择labels的地方

总之部署到k8s中,你想怎么看就怎么看

 

 点击show logs就可以查看具体日志。

 

 

 

 

end.

 

posted @ 2023-03-28 17:09  王竹笙  阅读(222)  评论(0编辑  收藏  举报