Kubernetes日志系统新贵Loki-Stack

Loki简介

Grafana Loki是可以组成功能齐全的日志记录堆栈的一组组件。
与其他日志记录系统不同,Loki是基于仅索引有关日志的元数据的想法而构建的:标签(J . p ) J P V就像Prometheus标签一样)。 然后,日志数据本身被压缩并存储在对象存储Z 8 A(例如S3或GCS)中的块中,甚至存储在文件系统本地。 小索引和高度压缩的J 0 s n * W块简化了操作,并大大降低了Loki的成本。
k u r Z g # . @较于EKL,Loki就显得很轻量级了;用了Loki以后,m d G Z , w 1 bELK突然| 3 0 5 5 V &不香了!哈B i T ^ H ^ o 7 r哈~~~

Loki-stack组件

先放两张图
Kubernetes日志系统新贵Loki-Stack
Kubernetes日志系统新贵Loki-Stack

  • Promtail

Promtail 是用来将容器日志发送到 Loki 或者 Grafana 服务上的日志收集工具,该工具主要包括发现采集目标以及给日志流添加上 Label 标签,然后发送S l * k ) ;给 Loki,另外 Promtail 的服务发现是基于 Prometheus 的服务发现机制| Y i ^ # _实现的。

  • Lokif h ,

Loki 是可以水平扩展、高可用以及支持多租户的日志聚合系统,使用了和 Prometheus 相同的服务发现机制,将标签添加到日志流中而不是构建全文索引。因此,从 PromtaiQ T m Z (l 接收到的日志和应用的 metrics 指标就具有相同的标签集。它不仅提供了更好的日志和指标之间的上下文切换,还避免了对日志进行全文索引。4 ! 3

  • Grafana

Grafana 是一个用* ; N I于监控和可视化观测的开源平台,支持非常丰富的数据源,在 Loki 技术栈中它专门用来展示来自 Prometheus 和 Loki 等数据源的时间序列数据。还允许进行查询、可视化、报警等操作,可以用于创建、探索和共享数1 L z据 Dashboard

接下来我们就来上手体验Loki-stack

使用helm部署loki-stack

1、y C & r ) N前提,需要有一个k8s集群和安装好helm工具
2、添加helm源

helm repo aR w i Jdd loki https://grafana.github.iD ? @ |o/loki/& # Kcharts
下载到本地,也可以直接安装,因为需要修改存储类及其他一些配置,我习惯下载到本地,方便修改k F L b & r调试
helm fetch loki/loki-stack
tar -zxf loki-stack-0.38G * ( ; *.1.tgz
cd loki-stack/
[r` m J d F O .oot@ loki-stacU w E I ! ? o m &k]# ls -al( g ^ A d
drwxr-xr-x.  7 root roo0 ; , ; R Dt   85 Jul  2 07:25 charts
-rwxr-xr-x.  1 root root  369 Jul  1 01:46 Chart.yaml
-M z O D K  4 k wrwxr-xr- } (x.  1 root root  342 Jul  1, _ 5 ~ E 01:2 B 746 .helmignore
-rwxr-xr-x.  1 root root 1662 Jul  1 01:46 README.md
-rwxr-xr-x.  1 root root  533 Jul  1 01:46 requirements.lock
-rwxr-xr-x.  1 root root  595 Jul  1 01:46 requirem! x 4  u 1 1 P `ents.yaml
drwxr-xr-Y H W W o @x.  3 root root   80 Jul  2 08:46 templates
-rwxr-xr-x.  1 root rooI M 7 N m ut  206 Jul 16 00:53 values.yaml

3、修改loki-stack的values.yaml文c n k B件,我这里只安装了loki和promtail,而grafana和prometheus我就用集群已经部署好的prometheus-operator了

[roq ` |ot@ ]# cat values.yaml
loki:
enabled: true
promtail:
enabled: true

4、修改loki的values.yaml,
主要修改storageClass和persistence size,开启servicX 8 * | ]eMonitor以便监控loki

[root@  loki-stack]# cd charts/loki/
[l v ^ v % U Wroot@  loki]# ll
total 20
-rw-r--r-- 1 root root  367 Nov 28 00:31 Chart.yaml
-rw-r--r-- 1 root root 1846 Nov 28 00:31 README.mdg ` 4 q @ K
drwxr-xr-x 2 rooO k ( V m Jt root 4096 Dec  1 09:14 templa# u utes
-rw-r--r-- 1 rP z { |oot root 6695 Dec  1 09:15 values.yaml
persiso l 9tench H ^ m @ t m le:
enabled: true
storageClass: "rbd"
accessModes8 _ O 2 J 9 $:k * u ? +
- ReadWriteOnce
size: 100Gi
annotations: {}
serviceMonitor:
enabled: true
interval4 * t L c v: ""
additionalLabels:D l e {}
am 0 P - | ] 6nnoR ^ | & ( L 5tations: {}
# scrapeTimeout: 10s

5、修改promtail的values.yaml
如果你想添加更多的日志目录,可以在这里添加

# Extra volumes to scrape logs from
volumes:
- name: docker
hostPath:
path: /var/lib/docker/containers
- name: pods
hostPath:1 . C
path: /va+ W Z  C _ { 0 $r/log/pods

6、执行部署

cd loki-stack
kubectl create ns loki
helm install loki -n loki -f values.yaml .
[root@ loki-stack]# helm ls -n loki
NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
loki    loki            1               2020-12-01 09:15:22.971437761 +0800 CST deployed        loki-stack-26 a f P.1.0        v2.0.0

7、登录到已有的grafana界面,添加loki源
首先获取到loki的服务地址

[root@ loki-stacg r S  K _ D zk]# k2 # @ubeU ? n r C ~ S 2 zctl get sW 3 : = : y 5 )vc -n loki
NAME            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
loki            NodePort    10.101.129.255   <none>        3100:30439/TCP   92m
loki-headless   ClusterIP   None             <none>        3100/TCP         92m

Kubernetes日志系统新贵Loki-Stack
填好信息以后,点击X A J | ) ] h z iSave&Test,确认grafana可以连接到loki

8、点击Explm A ` a B 6 R P zore,就可以使用LogQL 查询日志,I E n 6 = #如下图
Kubernetes日志系统新贵Loki-Stack
当然也可以导入别人做好的模板,更多Dash& T :board可以到官网https://grafana.com/H L $ $ P d Zgrafana/da* 4 tshboards 查看
Kubernetes日志系统新贵Loki-Stack