Loki 日志管理
有待整理更新
一、loki
Installation | Grafana Loki documentation
1、loki介绍
Loki是 Grafana Labs 团队发布的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统。
项目受 Prometheus 启发,官方的介绍就是:Like Prometheus, but for logs.,类似于 Prometheus 的日志系统
2、组件
Loki 包含以下几个功能组件
-
Promtail
-
Distributor
-
Ingester
-
Querier
-
Query Frontend
-
Overrides
-
TableManager
-
RuntimeConfig
Promtail
负责日志数据的采集、提取、匹配、过滤、打 lables、Push to loki 这写工作的
支持的采集方式包括 File Target、Journal Target、Syslog Target、Stdin Target
整个 Promtail 对日志数据处理流程如下
Distributor
主要接收 Promtail Push 过来的日志数据,并把日志数据分发给 Ingester
Distributor 与 Ingester 之间以 RPC 的方式进行通信,它通过对元数据进行 hash 算法计算出将日志数据分发到哪一个 Ingester 上
Distributor 以日志数据的 TenantID、Labels 作为 Hash key
Ingester
Ingester 负责接收数据并构建 chunk,存储日志索引及数据
详解轻量日志聚合系统Loki架构_Grafana_运维研习社_InfoQ写作社区
二、docker 容器的log
1、安装loki的docker plugin
Docker driver | Grafana Loki documentation
docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions #当有新版本时, 更新plugins docker plugin disable loki --force docker plugin upgrade loki grafana/loki-docker-driver:latest --grant-all-permissions docker plugin enable loki systemctl restart docker
全局收集配置
编辑daemon.json。
{ "log-driver": "loki", "log-opts": { "loki-url": "http://YOUR_IP:3100/loki/api/v1/push", "max-size": "50m", "max-file": "10", "loki-pipeline-stages": "- multiline:\n firstline: '^\[\d{2}:\d{2}:\d{2} \w{4}\]'\n" }, "registry-mirrors": ["https://registry.docker-cn.com"] }
记得把YOUR_IP换成loki所在主机的IP,一般都是本机的局域网地址,如果loki映射的端口换了记得这里也需要换。镜像仓库地址也可以换成自己云服务的。
其中max-size表示日志文件最大大小,max-file表示最多10个日志文件,都是对单个容器来说的, multiline是配置多行识别(默认最多128行),转为单行, firstline表示单条日志的首行正则表达式
我的是 [03:00:32 INFO] 开头这种格式,所以对应正则是
^\[\d{2}:\d{2}:\d{2} \w{4}\]
按照你自己的日志开头编写对应正则替换即可
2、安装promtail代理,挂载容器日志路径
docker部署grafana loki日志系统_docker loki_freesharer的博客-CSDN博客
三、kubelet
是如何管理pod
内的容器日志的
1、结论
k8s
下容器日志默认目录为:
pod
会按容器的重启次数对应保留日志,具体保留个数应该与GC
策略有关
/var/log/pods/<pod namespace>_<pod name>_<pod uid>/<容器名称>/重启重启次数.log,并且是文件 /var/lib/docker/containers/<容器id>/<容器id>-json.log的链接
自定义路径类型(pvc、hostpath等)
kubectl get pod xxx -n namespace -o yaml | grep -i volumes -C 5 volumes: - hostPath: path: /mnt/nfs/xxx/backend/