云原生日志系统 EFK 实践(一)

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
日志服务 SLS,月写入数据量 50GB 1个月
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 云原生日志系统 EFK 实践

云原生日志系统 EFK 实践(一)


image.png


为什么需要分布式日志系统

在以前的项目中,如果想要在生产环境中通过日志定位业务服务的Bug 或者性能问题,则需要运维人员使用命令挨个服务实例去查询日志文件,这样导致的结果就是:排查问题的效率非常低。


在微服务架构中,服务多实例部署在不同的物理机上,各个微服务的日志也被分散储存在不同的物理机。集群足够大的话,使用上述传统的方式查阅日志就变得非常不合适。因此需要集中化管理分布式系统中的日志,其中有开源的组件如Syslog,用于将所有服务器上的日志收集汇总。


然而集中化日志文件之后,我们面临的是对这些日志文件进行统计和检索,比如哪些服务有报警和异常,这些都需要有详细的统计。所以,在以前出现线上故障时,经常会看到开发和运维人员下载服务的日志,并基于 Linux 下的一些命令(如 grep、awk 和 wc 等)进行检索和统计。这样的方式不仅工作量大、效率低,而且对于要求更高的查询、排序和统计等操作,以及庞大的机器数量,难免会有点“力不从心”,无法很好地胜任。

容器的日志收集方式

如果日志放到容器内部,会随着容器删除而被删除。容器数量很多,按照传统的查看日志方式已变不太现实。

  • K8S 中收集日志与传统条件下的日志收集有什么区别?
  • 他一般是收集哪些日志?
  • 确定收集日志类型之后又是怎么去收集的?

容器日志的分类

关于容器的日志分好几种,针对 k8s 本身而言有三种:

1、资源运行时的event事件。比如在k8s集群中创建pod之后,可以通过 kubectl describe pod 命令查看pod的详细信息。

2、容器中运行的应用程序自身产生的日志,比如 tomcat、nginx、php的运行日志。比如kubectl logs redis-master-bobr0。这也是官方以及网上多数文章介绍的部分。

3、k8s各组件的服务日志,比如 systemctl status kubelet。

k8s 的方式

K8s本身特性是容器日志输出控制台,Docker 本身提供了一种日志采集能力。如果落地到本地文件,目前还没有一种好的采集方式。所以新扩容Pod属性信息(日志文件路径,日志源)可能发生变化流程和传统采集是类似的,如下图。


image.png


一般来说,我们用的日志收集方案有两种:

  • 容器外收集。将宿主机的目录挂载为容器的日志目录,然后在宿主机上收集。
  • 容器内收集。node上部署日志的收集程序,比如用 daemonset 方式部署,对本节点容器下的目录进行采集。并且把容器内的目录挂载到宿主机目录上面。目录为对本节点 /var/log/kubelet/pods 和 /var/lib/docker/containers/ 两个目录下的日志进行采集。
  • 网络收集。容器内应用将日志直接发送到日志中心,比如 java 程序可以使用 log4j 2 转换日志格式并发送到远端。
  • 在 Pod 中附加专用日志收集的容器。每个运行应用程序的 Pod 中增加一个日志收集容器,使用 emtyDir 共享日志目录让日志收集程序读取到。

官方使用的是最后一种方式,将 ElesticSearch 和 kibana 都运行在 k8s 集群中,然后用 daemonset 运行 fluentd。

ELKB 分布式日志系统

  • Kibana :可视化化平台。Kibana 用于搜索、分析和可视化存储在 Elasticsearch 指标中的日志数据,是一个 Web 网页。Kibana 利用 Elasticsearch 的 REST 接口来检索数据,调用 Elasticsearch 存储的数据,将其可视化。它不仅允许用户自定义视图,还支持以特殊的方式查询和过滤数据。
  • Elasticsearch :分布式搜索引擎。具有高可伸缩、高可靠、易管理等特点。可以用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 基于 Lucene 开发,现在使用最广的开源搜索引擎之一,Wikipedia 、StackOverflow、Github 等都基于它来构建自己的搜索引擎。
  • Logstash :数据收集处理引擎。支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储以供后续使用。
  • Filebeat :轻量级数据收集引擎。基于原先 Logstash-fowarder 的源码改造出来。换句话说:Filebeat 就是新版的 Logstash-fowarder,也会是 ELK Stack 第一选择。


image.png

这种架构下我们把 Logstash 实例与 Elasticsearch 实例直接相连。Logstash 实例直接通过 Input 插件读取数据源数据(比如 Java 日志, Nginx 日志等),经过 Filter 插件进行过滤日志,最后通过 Output 插件将数据写入到 ElasticSearch 实例中。


Filebeat 是基于原先 logstash-forwarder 的源码改造出来的,无需依赖 Java 环境就能运行,安装包10M不到。


如果日志的量很大,Logstash 会遇到资源占用高的问题,为解决这个问题,我们引入了Filebeat。Filebeat 是基于 logstash-forwarder 的源码改造而成,用 Go 编写,无需依赖 Java 环境,效率高,占用内存和 CPU 比较少,非常适合作为 Agent 跑在服务器上。

Filebeat 所消耗的 CPU 只有 Logstash 的 70%,但收集速度为 Logstash 的7倍。从应用实践来看,Filebeat 确实用较低的成本和稳定的服务质量,解决了 Logstash 的资源消耗问题。

前置条件:数据储存持久化

部署前需要创建数据持久化存储,pv 和 pvc。

选择 Node1:192.168.11.196  作为 NFS 服务器 。


# 三台都安装 NFS 和 RPCBINDyum -y install nfs-utils rpcbind
mkdir-pv /ifs/kubernetes
systemctl enable rpcbind
systemctl enable nfs
systemctl start nfs
$ vim /etc/exports
/ifs/kubernetes *(rw,no_root_squash)


exportfs -r

找其他机器测试:

mount -t nfs 192.168.11.196:/ifs/kubernetes /mnt/

在 NFS 即 k8snode1 上新建三个文件夹:

mkdir-pv /ifs/kubernetes/{pv00001,pv00002,pv00003}

采用动态分配 pv 的方式。

#生产动态存储卷kubectl apply -f class.yaml
#生成podskubectl apply -f deployment.yaml
#赋权kubectl apply -f rbac.yaml
# 最后自动创建存储卷kubectl apply -f deployment-pvc.yaml
#验证效果kubectl get pv,pvc

image.png

小结

本文主要介绍了云原生日志系统 EFK 的相关概念以及集群搭建的前期准备,接下来的文章将会继续介绍 EFK 的配置实现。



相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
11天前
|
Kubernetes Cloud Native 持续交付
云原生技术在现代应用开发中的角色与实践
【9月更文挑战第9天】 随着云计算技术的飞速发展,云原生(Cloud Native)已经成为推动企业数字化转型的核心力量。本文将深入探讨云原生的基本概念、关键技术及其在实际开发中的应用案例,旨在为读者提供一条清晰的云原生技术学习路径和应用指南。通过实例分析,我们将揭示云原生如何优化资源管理、提升应用性能及加快部署速度,进而帮助企业构建更加灵活、可靠和高效的软件系统。
|
20天前
|
弹性计算 Cloud Native Serverless
云原生应用示例:智能物流管理系统
在电商行业的快速发展中,某企业借助阿里云服务构建了一个云原生智能物流管理系统。此系统基于微服务架构,利用ECS、Kubernetes、ESS及RDS等服务来支撑其核心功能,并采用Serverless函数计算FC处理前端需求,配合消息队列MQ确保通信顺畅。ARMS的应用实现了性能监测与故障快速响应。同时,通过PAI分析数据以提高物流效率,OSS与CDN则优化了文件存储与全球访问速度。此外,系统还整合了Docker及GitLab CI/CD以支持快速迭代,并通过WAF、SLS等工具保障了安全性和合规性,整体上提供了高效、智能且低成本的物流解决方案。
|
8天前
|
Cloud Native 持续交付 云计算
云原生技术在现代应用开发中的应用与实践
【9月更文挑战第12天】随着云计算技术的飞速发展,云原生已成为推动企业数字化转型的关键技术之一。本文将深入探讨云原生的基本概念、核心价值及其在现代应用开发中的实际应用案例,旨在为读者提供一套清晰的云原生应用开发指南。通过分析容器化、微服务架构、持续部署等核心技术的实践过程,我们将揭示云原生如何助力开发者高效构建、部署和管理可扩展的应用。你将看到代码示例,这些示例均选自真实世界的开发场景,帮助你理解云原生技术的强大功能和灵活性。
|
8天前
|
Cloud Native Devops 持续交付
探索云原生架构:构建高效、灵活和可扩展的系统
本文将深入探讨云原生架构的核心概念、主要技术以及其带来的优势。我们将从云原生的定义开始,了解其设计理念和技术原则;接着分析容器化、微服务等关键技术在云原生中的应用;最后总结云原生架构如何助力企业实现数字化转型,提升业务敏捷性和创新能力。通过这篇文章,读者可以全面了解云原生架构的价值和应用前景。
|
8天前
|
运维 Cloud Native Devops
云原生架构的崛起与实践云原生架构是一种通过容器化、微服务和DevOps等技术手段,帮助应用系统实现敏捷部署、弹性扩展和高效运维的技术理念。本文将探讨云原生的概念、核心技术以及其在企业中的应用实践,揭示云原生如何成为现代软件开发和运营的主流方式。##
云原生架构是现代IT领域的一场革命,它依托于容器化、微服务和DevOps等核心技术,旨在解决传统架构在应对复杂业务需求时的不足。通过采用云原生方法,企业可以实现敏捷部署、弹性扩展和高效运维,从而大幅提升开发效率和系统可靠性。本文详细阐述了云原生的核心概念、主要技术和实际应用案例,并探讨了企业在实施云原生过程中的挑战与解决方案。无论是正在转型的传统企业,还是寻求创新的互联网企业,云原生都提供了一条实现高效能、高灵活性和高可靠性的技术路径。 ##
18 3
|
8天前
|
Cloud Native 持续交付 开发者
云原生技术在现代应用开发中的角色与实践
【9月更文挑战第12天】本文将探索云原生技术的核心概念及其在现代软件开发中的应用。通过分析容器化、微服务架构、持续集成/持续部署(CI/CD)和DevOps文化的融合,我们旨在揭示如何利用这些技术提升软件的可靠性、可扩展性和交付速度。同时,文章还将展示一个简化的代码示例,以直观地说明云原生技术的实际应用。
|
14天前
|
监控 Cloud Native 持续交付
云原生时代的微服务架构实践
【9月更文挑战第5天】随着云计算技术的飞速发展,云原生已成为现代软件开发的重要趋势。本文将深入探讨在云原生环境下,如何有效实施微服务架构,包括服务拆分、容器化部署、持续集成与交付等关键环节。通过具体案例,我们将展示如何在云平台上构建弹性、可扩展的微服务应用,并讨论在此过程中可能遇到的挑战及解决策略。
|
13天前
|
监控 Cloud Native 安全
云原生时代的微服务架构实践
【9月更文挑战第6天】在数字化转型的浪潮中,云原生技术以其灵活性、可扩展性成为企业架构升级的首选。本文将通过浅显易懂的语言和生动的比喻,带你一探微服务架构的世界,从理论到实践,逐步揭示如何利用云原生技术构建高效、可靠的微服务系统,同时穿插代码示例,为有志于云原生领域发展的技术人员提供一份实操指南。
30 2
|
15天前
|
Cloud Native 持续交付 Docker
云原生技术实践:Docker容器化部署教程
【9月更文挑战第4天】本文将引导你了解如何利用Docker这一云原生技术的核心工具,实现应用的容器化部署。文章不仅提供了详细的步骤和代码示例,还深入探讨了云原生技术背后的哲学,帮助你理解为何容器化在现代软件开发中变得如此重要,并指导你如何在实际操作中运用这些知识。
|
14天前
|
运维 Cloud Native 持续交付
云原生时代下的微服务架构实践
在数字化转型的浪潮中,云原生技术以其高效、灵活的特性成为企业IT架构升级的首选。本文将通过深入浅出的方式,探讨云原生环境下微服务架构的设计原则、关键技术及实施策略,旨在为读者提供一条清晰的技术路线图,帮助理解和掌握在云平台上构建和管理微服务的实用方法。