轻量级日志系统Loki原理简介和使用(3)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 轻量级日志系统Loki原理简介和使用(3)

image.png


image.png


上面咱说完了 liki架构、实现原理及环境搭建过程


现在就结束了吗? No 那多显得那么出类拔萃呀 哈哈


咱再结合一个具体的案例:


使用loki对接下k8s下面的pod日志


let's go !


具体过程如下:


1、nacos为注册中心


2、user和order为2个springboot项目


3、将user和order使用k8s部署


4、访问user接口 ,user访问order 打印出日志


5、该日志通过loki显示出来


1-4过程 咱们之前的文章介绍过


【实战】K8S部署Nacos微服务


朋友们如果自己想实际操练一遍的话可以先看下这篇文章 使用k8s把项目部署起来


部署的效果是


nacos界面


image.png


image.png


image.png


现在loki有了,k8s pod 日志也有了 下面咱看看loki和k8s如何关联起来 达到通过loki查询k8s的效果


这里只需要实现 promtail访问到k8s日志就可以了


promtail可以直接访问到k8s集群内部的日志


也可以将k8s集群内部的日志挂载到宿主机器上 然后再通过promtail访问宿主机上的日志

这里介绍4种实现方式


咱们分别实现下看看


备注:这篇文章先简单介绍下4种方式的思路,下篇文章咱们针对这4种方式实现相应的效果


方式1:将默认路径 var/logs/*log 修改成/var/log/container


promtail可以直接访问到k8s集群内部的日志


首先需要知道 k8s集群下面的pod生成的日志 默认目录为/var/log/containers


1、咱先看看上面的promtail的docker-compose的配置命令


promtail:
    image: grafana/promtail:1.5.0
    volumes:
      - /var/log/container:/var/log/container
    command: -config.file=/etc/promtail/docker-config.yaml
    networks:
      - loki


其中 /etc/promtail/docker-config.yaml


是访问的docker内部的配置文件


咱进去docker内部看下


a、查看容器id


docker ps |grep promtail


b、进入容器


docker exec -it 71cb21c2d0a3 sh


image.png


看到了

job=varlogs

对应的日志文件路径是 /var/log/*log

是不是有似曾相识的感觉


image.png


job对应varlogs

filenames是对应的日志路径 /var/log/*log下面的日志文件

当然只是在promtail容器内部的

在这里只需要将/var/log/*log路径修改成 /var/log/container/*log 这个路径就可以了

那如何修改呢

我们知道 这个配置文件是在容器内部的

要想修改这个配置文件 需要在宿主机也弄一份 然后修改宿主机上的这份文件 然后替换掉docker种的这个配置即可


image.png


image.png


看到界面效果 发现问题了没?


1、路径不是修改成 /var/log/container/*log 这个了吗 怎么还是 /var/log下面的日志?


2、选中一个日志文件怎么显示不出来该文件的内容


这2个问题放到下篇文章解答下吧 (先埋个坑 哈哈 我这么这么坏)


方式2



- replacement: /var/log/container/*.log


这种方式也放到下篇文章再说吧


方式3:将k8s集群内部的日志挂载到宿主机器上 然后再通过promtail访问宿主机上的日志


这种方式 我试过了 也是达到期望效果的


1、


首先给springboot项目添加日志文件输出 咱们这个示例中 以user项目为例说下


  • 增加日志文件


image.png


  • 日志文件的输出目录是 /opt/logs


2、将springboot项目生成docker镜像 然后上传到阿里的镜像库 然后在k8s user 配置文件中引用这个镜像库


这些都在之前那篇文章中详细说过了 这里就不再附述了


这里只需要不同点


image.png


圈红的地方是添加的映射


volumeMounts 这个是将docker内部的/opt/logs目录作为挂载目录


volumes 这个是将宿主机中的


/Users/mengfanxiao/Documents/third_software/loki/log


目录作为映射目录 即docker中的/opt/logs下面的日志会映射到该目录下


需要注意:


我一开始用的目录是 /opt/logs 但是在我的mac环境中一直不能将docker中的日志目录

映射到宿主机上 但 centos就可以 这个原因也放到下篇文章说下吧


3、最后 只需要让promtail访


问/Users/mengfanxiao/Documents/third_software/loki/log 这个目录下面的日志就行了


至于怎么让promtail访问 下篇再说吧


方式4:promtail不是从/var/log目录下读取的日志嘛 那么我将user日志输出到/var/log 下面不就行了


可能遇到的问题


  • 如果k8s状态是start fail状态 则service暴露NodePort的端口也访问不了的情况下 需要重新启动下k8s


启动方式 可以参考下我之前的那篇文章K8S原理简介及环境搭建

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
9天前
|
Windows Python
如何反向读取Windows系统日志EVTX文件?
以下是如何反向读取Windows系统日志EVTX文件
20 2
|
1月前
|
SQL 存储 关系型数据库
美团面试:binlog、redo log、undo log的底层原理是什么?它们分别实现ACID的哪个特性?
老架构师尼恩在其读者交流群中分享了关于 MySQL 中 redo log、undo log 和 binlog 的面试题及其答案。这些问题涵盖了事务的 ACID 特性、日志的一致性问题、SQL 语句的执行流程等。尼恩详细解释了这些日志的作用、所在架构层级、日志形式、缓存机制以及写文件方式等内容。他还提供了多个面试题的详细解答,帮助读者系统化地掌握这些知识点,提升面试表现。此外,尼恩还推荐了《尼恩Java面试宝典PDF》和其他技术圣经系列PDF,帮助读者进一步巩固知识,实现“offer自由”。
美团面试:binlog、redo log、undo log的底层原理是什么?它们分别实现ACID的哪个特性?
|
15天前
|
存储 Linux Docker
centos系统清理docker日志文件
通过以上方法,可以有效清理和管理CentOS系统中的Docker日志文件,防止日志文件占用过多磁盘空间。选择合适的方法取决于具体的应用场景和需求,可以结合手动清理、logrotate和调整日志驱动等多种方式,确保系统的高效运行。
16 2
|
1月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1636 14
|
27天前
|
XML JSON 监控
告别简陋:Java日志系统的最佳实践
【10月更文挑战第19天】 在Java开发中,`System.out.println()` 是最基本的输出方法,但它在实际项目中往往被认为是不专业和不足够的。本文将探讨为什么在现代Java应用中应该避免使用 `System.out.println()`,并介绍几种更先进的日志解决方案。
48 1
|
1月前
|
监控 网络协议 安全
Linux系统日志管理
Linux系统日志管理
45 3
|
1月前
|
监控 应用服务中间件 网络安全
#637481#基于django和neo4j的日志分析系统
#637481#基于django和neo4j的日志分析系统
35 4
|
2月前
|
存储 缓存 关系型数据库
redo log 原理解析
redo log 原理解析
40 0
redo log 原理解析
|
2月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
46 2
|
1月前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控总结
Linux系统命令与网络,磁盘和日志监控总结
55 0