热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

kubernetes日志采集与解析

需求:当我们创建deployment后,我们希望能够收集到这些deployment每个pod的终端日志,并且能够通过deployment的名字以及pod的名字进行过滤日志方案filebe

需求:当我们创建deployment后,我们希望能够收集到这些deployment每个pod的终端日志,并且能够通过deployment的名字以及pod的名字进行过滤

日志方案

filebeat -> kafka -> logstash -> elasticsearch

Filebeat采集

容器中输出到终端(stdout)的日志,都会以*-json.log的命名方式保存在/var/lib/docker/containers/目录下,而且会在/var/log/containers/目录下生成这些日志文件的软链接。所以,我们可以直接在/var/log/containers/目录下采集容器的终端日志。
由于/var/log/containers/目录下除了deployment的pod的日志文件外,还会有其他容器的日志,而我们只需要采集deployment的日志。在/var/log/containers/目录下,deployment的pod的日志文件命名规则为(一个pod只有一个主容器和一个pause容器)

[podName]_[namespace]_[deploymentName]-[containerId].log # 通过deployment生成的pod内的主容器
[podName]_[namespace]_POD-[containerId].log # 通过deployment生成的pod内的pause容器

deployment的podName的命名规则为

[deploymentName]-[xxxx]-[yyyy]

所以,deployment的pod的日志文件的命名规则又可以扩展为

[deploymentName]-[xxxx]-[yyyy]_[namespace]_[deploymentName]-[containerId].log 
[deploymentName]-[xxxx]-[yyyy]_[namespace]_POD-[containerId].log

其中deploymentNamenamespace只能由小写、数字、中划线组成,xxxxyyyycontainerId只能由小写和数字组成。于是,我们采集的匹配规则可以设置为

/var/log/containers/*-*-*_*_*.log

至于为什么匹配规则定义的这么严格,主要是防止采集了不是deployment的pod的日志文件,从而导致logstash在从文件名解析相应字段时报错或者搜索时检索到了不应该检索到的日志。
比如,我们的pod还有可能是由daemonSet生成的,daemonSet的pod的日志文件的格式为

[daemonSetName]-[xxxx]_[namespace]_[daemonSetName]-[containerId].log # 通过daemonSet生成的pod内的主容器
[daemonSetName]-[xxxx]_[namespace]_POD-[containerId].log # 通过daemonSet生成的pod内的pause容器

daemonSetName可以由小写、数字、中划线组成。如果我们把匹配规则设置为(1),那么第一个*号代表的daemonSetName不一定有两个中划线,从而解析出错

/var/log/containers/*_*_*.log    # (1)

Logstash解析

Filebeat采集后,我们需要从/var/log/containers/*-*-*_*_*.log这个字符串中解析出deploymentNamepodName两个字段。根据前面的命名规则,先根据斜杠/把字符串拆分成一个数组filepath;取数组最后一个元素,也就是文件名,再根据下划线_进行拆分成一个另一个数组filename;数组filename的第一个元素就为podName,根据中划线-把podName拆分成一个数组,去掉数据后面两个元素,把前面的元素再用中划线-拼接起来便是deploymentName


推荐阅读
  • 在ElasticStack日志监控系统中,Logstash编码插件自5.0版本起进行了重大改进。插件被独立拆分为gem包,每个插件可以单独进行更新和维护,无需依赖Logstash的整体升级。这不仅提高了系统的灵活性和可维护性,还简化了插件的管理和部署过程。本文将详细介绍这些编码插件的功能、配置方法,并通过实际生产环境中的应用案例,展示其在日志处理和监控中的高效性和可靠性。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • vue引入echarts地图的四种方式
    一、vue中引入echart1、安装echarts:npminstallecharts--save2、在main.js文件中引入echarts实例:  Vue.prototype.$echartsecharts3、在需要用到echart图形的vue文件中引入:   importechartsfrom"echarts";4、如果用到map(地图),还 ... [详细]
  • 本文介绍了 Go 语言中的高性能、可扩展、轻量级 Web 框架 Echo。Echo 框架简单易用,仅需几行代码即可启动一个高性能 HTTP 服务。 ... [详细]
  • 微服务优雅上下线的最佳实践
    本文介绍了微服务上下线的正确姿势,避免使用 kill -9 等粗暴手段,确保服务的稳定性和可靠性。 ... [详细]
  • 本文详细介绍了如何在PHP中记录和管理行为日志,包括ThinkPHP框架中的日志记录方法、日志的用途、实现原理以及相关配置。 ... [详细]
  • Python 3 Scrapy 框架执行流程详解
    本文详细介绍了如何在 Python 3 环境下安装和使用 Scrapy 框架,包括常用命令和执行流程。Scrapy 是一个强大的 Web 抓取框架,适用于数据挖掘、监控和自动化测试等多种场景。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • Bootstrap 插件使用指南
    本文详细介绍了如何在 Web 前端开发中使用 Bootstrap 插件,包括自动触发插件的方法、插件的引用方式以及具体的实例。 ... [详细]
  • 面试题总结_2019年全网最热门的123个Java并发面试题总结
    面试题总结_2019年全网最热门的123个Java并发面试题总结 ... [详细]
  • Spark与HBase结合处理大规模流量数据结构设计
    本文将详细介绍如何利用Spark和HBase进行大规模流量数据的分析与处理,包括数据结构的设计和优化方法。 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 本文详细介绍了视高视频会议系统的音频、数据协作、会议交互以及协同办公功能,并探讨了其在实际应用中的优势。系统支持多种语音编解码技术,提供稳定的语音通信;数据协作功能包括远程电子白板、屏幕共享等;会议交互设计人性化,提升会议效率;协同办公模块则进一步增强了系统的实用性和扩展性。 ... [详细]
author-avatar
百变睛灵_345
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有