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/

pod容器日志管理 - 简书 (jianshu.com)

 

posted @ 2023-04-07 14:50  凡人半睁眼  阅读(506)  评论(0编辑  收藏  举报