elk对于集群实例的日志的整合-基于filebeat+k8s采集日志

说明:基于filebeat采集日志

概述:

在Kubernetes环境中,Filebeat不需要和业务服务部署在同一个容器中。通常的做法是将Filebeat作为一个DaemonSet部署在集群中,这样它可以在每个节点上运行一个实例,并从所有容器中收集日志。这种方式不仅简化了日志收集的配置和管理,还提高了系统的扩展性和可靠性。

2. 业务服务部署

你的业务服务可以像往常一样部署为Deployment、StatefulSet或其他适合的Kubernetes资源。Filebeat DaemonSet会自动发现并收集这些服务生成的日志。

3. 原理解析

  • 文件挂载:Filebeat通过挂载主机的日志目录(如 /var/log/containers/var/lib/docker/containers)来访问所有容器的日志文件。
  • 自动发现:Filebeat的autodiscover功能会自动发现集群中的Pod和容器,并根据配置收集日志。
  • Kubernetes元数据add_kubernetes_metadata处理器会从Kubernetes API服务器获取Pod的元数据,并将其添加到日志中。这些元数据包括命名空间、Pod名称、容器名称、节点名称等。
  • 日志传输:Filebeat将收集到的日志发送到Logstash或Elasticsearch等日志处理系统。

4. 业务服务和Filebeat分离的好处

  • 资源隔离:业务服务和日志收集工具分开部署,可以独立管理资源,避免相互影响。
  • 简化管理:Filebeat作为DaemonSet统一管理日志收集,简化了配置和运维工作。
  • 扩展性:可以方便地对Filebeat进行独立扩展和更新,而不影响业务服务。
  • 安全性:通过分离业务服务和日志收集,可以更好地控制权限和安全策略。

实现步骤:

1. Filebeat作为DaemonSet部署

DaemonSet是一种Kubernetes资源,用于确保在集群中的每个节点上运行一个Pod。通过将Filebeat部署为DaemonSet,可以从所有节点上的所有容器中收集日志。

Filebeat DaemonSet配置示例

创建一个Filebeat的DaemonSet,使其在集群中创建的每个节点上运行,从而收集所有节点上的日志。

apiVersion: apps/v1
kind: DaemonSet
metadata:name: filebeatnamespace: kube-system
spec:selector:matchLabels:app: filebeattemplate:metadata:labels:app: filebeatspec:containers:- name: filebeatimage: docker.elastic.co/beats/filebeat:7.10.0volumeMounts:- name: varlibdockercontainersmountPath: /var/lib/docker/containersreadOnly: true- name: varlogmountPath: /var/logreadOnly: true- name: filebeat-configmountPath: /usr/share/filebeat/filebeat.ymlsubPath: filebeat.ymlvolumes:- name: varlibdockercontainershostPath:path: /var/lib/docker/containers- name: varloghostPath:path: /var/log- name: filebeat-configconfigMap:name: filebeat-config

确保配置文件已存储在ConfigMap中,并在Deployment中正确挂载。

Filebeat ConfigMap配置示例

创建一个ConfigMap来存储Filebeat的配置文件:

apiVersion: v1
kind: ConfigMap
metadata:name: filebeat-confignamespace: kube-system
data:filebeat.yml: |filebeat.autodiscover:providers:- type: kuberneteshints.enabled: truetemplates:- condition:equals:kubernetes.namespace: defaultconfig:- type: containerpaths:- /var/log/containers/*-${data.kubernetes.container.id}.logprocessors:- add_kubernetes_metadata:in_cluster: trueprocessors:- add_cloud_metadata:- add_host_metadata:output.logstash:hosts: ["logstash:5044"]

在这个配置中:

  • autodiscover 部分定义了Filebeat如何自动发现和监控Pod。
  • providers 部分指定了Kubernetes作为自动发现的提供者。
  • templates 部分定义了在满足特定条件(如命名空间为 default)时应用的配置。
  • add_kubernetes_metadata 处理器用于将Kubernetes API中获取的元数据添加到日志事件中。这个处理器会为每条日志添加以下信息:
    • 命名空间(namespace)
    • Pod名称(pod_name)
    • 容器名称(container_name)
    • 节点名称(node_name)
    • 其他相关元数据

2. 在Logstash中处理日志

在Logstash中,可以使用不同的过滤器(如 jsonmutategrok)进一步处理日志和元数据。

例如:

input {beats {port => 5044}
}filter {json {source => "message"remove_field => ["message"]}if [kubernetes] {mutate {add_field => {"namespace" => "%{[kubernetes][namespace]}""pod_name" => "%{[kubernetes][pod][name]}""container_name" => "%{[kubernetes][container][name]}""node_name" => "%{[kubernetes][node][name]}"}}}grok {match => { "log" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:loglevel} %{DATA:class} - %{GREEDYDATA:message}" }}date {match => [ "timestamp", "ISO8601" ]}mutate {rename => { "loglevel" => "severity" }remove_field => [ "timestamp" ]}
}output {elasticsearch {hosts => ["http://elasticsearch:9200"]index => "logs-%{+YYYY.MM.dd}"}stdout {codec => rubydebug}
}

在这个配置中:

  • json 过滤器解析从Filebeat接收到的JSON格式的日志。
  • mutate 过滤器将Kubernetes元数据字段添加到日志中。
  • grok 过滤器解析日志内容,提取特定字段。
  • date 过滤器解析时间戳,将其转换为Logstash的 @timestamp 字段。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/861898.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu下TensorRT与trtexec工具的安装

新版(这里测试的是10.1版)的onnx转tensorrt engine工具trtexec已经集成在TensorRT中,不需要额外单独安装。 教程来源于此网页:https://medium.com/moshiur.faisal01/install-tensorrt-with-command-line-wrapper-trtexec-on-unun…

redis需要知道的点

目录 一、为什么要用缓存 二、使用 Redis有哪些好处 三、什么是 redis? 四、redis和memcached区别 五、为什么redis单线程模型效率也能那么高 六、redis的线程模型 七、redis 6.0 引入多线程 八、为什么Redis需要把所有数据放到内存中? 九、Red…

cad由于找不到mfc140u.dll的解决方法,彻底解决mfc140u.dll丢失问题

在计算机辅助设计(CAD)的时候,我们可能会遇到各种错误和问题。其中,“CAD由于找不到mfc140u.dll,无法继续执行代码”的错误提示。这个问题可能会导致CAD无法启动运行,因此,我希望通过分享我的经…

site 搜索技巧 指定网站 屏蔽网站

指定某网站内容:site:xxx 屏蔽某网站内容:-site:xxx 例如:搜 springboot项目demo,你想只搜csdn,屏蔽掉博客园,51cto,等,在输入框中输入如下: springboot项目demo site:c…

基于elastic stack搭建的ELK系统资源占用预估

1、ES 1.1 内存:ES非常消耗内存,不是JVM用到的内存,而是机器的物理内存,ES在运行期间对JVM Heap(堆内存)的需求较小 实践建议: 数据量过百万,建议单台服务器的内存至少要有16GB;数据量过亿,建议单台服务器的内存至少要有64GB 1.2 CPU:ES集…

计算机网络之数据通信原理(下)

上一讲内容:数据传输方式、数据传输形式、传输差错处理、常用差错检测方法 数据通信过程中,一个很重要的问题就是如何控制数据的传输,就涉及到了传输控制规程(协议) 下面介绍两种: ①BSC:面向…

鸿蒙 HarmonyOS NEXT星河版APP应用开发-阶段一

一、鸿蒙开发环境搭建 DevEco Studio安装 下载 访问官网:https://developer.huawei.com/consumer/cn/deveco-studio/选择操作系统版本后并注册登录华为账号既可下载安装包 安装 建议:软件和依赖安装目录不要使用中文字符软件安装包下载完成后&#xff0…

GGUF模型转换入门

一、定义 1 定义 2 案例 二、实现 定义 GGUF是一种大模型文件格式,由开发者Georgi Gerganov提出。 这是一种针对大规模机器学习模型设计的二进制格式文件规范。它的主要优势在于能够将原始的大模型预训练结果经过特定优化后转换成这种格式,从而可以更…

鸿蒙Harmony开发实战案例:使用OpenGL绘制3D图形

XComponent控件常用于相机预览流的显示和游戏画面的绘制,在OpenHarmony上,可以配合Native Window创建OpenGL开发环境,并最终将OpenGL绘制的图形显示到XComponent控件。本文将采用"Native C"模板,调用OpenGL ES图形库绘制3D图形&…

python之__call__函数介绍

Python 中的 __call__ 方法是一种特殊的方法,它允许对象像函数一样被调用。当你创建一个对象并使用括号 () 调用它时,Python 会自动调用这个对象的 __call__ 方法。 1. 基本用法 下面是一个简单的例子: class MyClass:def __init__(self, value):self.value valued…

yaml文件的介绍-K8S

yaml 文件是我们使用K8S管理应用程序常用的部署方式,它主要是通过一系列键值对组成,键和值使用冒号和空格分隔。以下是对yaml的介绍 首先我们可以使用命令生成一个简单的YAML模版文件 Kubectl run nginx-pod –imagenginx:latest –port80 –dry-runcli…

使用FRP 0.58版本进行内网穿透的详细教程

什么是FRP? FRP(Fast Reverse Proxy)是一款高性能的反向代理应用,主要用于内网穿透。通过FRP,您可以将内网服务暴露给外网用户,无需进行复杂的网络配置。 准备工作 服务器:一台具备公网IP的服…

CSS基础学习记录(6)

目录 1、从最基本的页面开始 2、添加图像/浮层部分 3、位置调整 4、添加动效 4.1、添加浮层动效 4.2、添加背景动画 根据前面css的学习,本篇来实践下前面学习的知识,主要实现如下这样的效果。 下面我们一步步实现上面的效果。 1、从最基本的页面开…

Redis 缓存问题及解决

所有问题解决的关键就是尽少的访问数据库,或者避免太集中的访问。 一,缓存穿透(key在数据库不存在) 当数据既不在缓存中,也不在数据库中,导致请求访问缓存没数据,访问数据库也没数据&#xff0c…

理解java AWT中的FlowLayout的使用

目录 背景: 代码示例: 代码详细解析: 总结: 背景: 在java的AWT(Abstract Window Toolkit)库中,Frame和FlowLayout是两个常用的类,它们分别用于创建窗口和设置窗口内组件的布局,下面的代码示例,解释Frame和FlowLayout的基本用…

【LeetCode】八、堆的使用:第K个最大元素 + 前K和高频单词

文章目录 1、Java中的堆结构2、leetcode215:数组中的第K个最大元素3、leetcode692:前K个高频单词 1、Java中的堆结构 PriorityQueue类取堆顶元素删除堆顶元素堆的元素个数遍历堆 2、leetcode215:数组中的第K个最大元素 这题应该快排来解&…

使用 privacyIDEA 实现 Windows RDP 多因素认证 (MFA)

前言 在等保 2.0 标准中有要求: d)应采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别,且其中一种鉴别技术至少应使用密码技术来实现。 可以借助开源的 privacyIDEA 配合 AD 域环境实现 RDP MFA 认证登录以满足上面的要…

Dxf库中的DL_CreationAdapter与DL_CreationInterface

在软件工程中,适配器模式(Adapter Pattern)用于将一个类的接口转换成客户希望的另一个接口。在 DXF 文件解析中,DL_CreationAdapter 和 DL_CreationInterface 可能用于适配不同的数据结构或接口,使得解析器能够处理不同…

音视频入门基础:H.264专题(7)——FFmpeg源码中 指数哥伦布编码的解码实现

一、引言 由于视频的传输和存贮是十分在乎体积的,对于每一个比特(bit)都要格外珍惜,所以H.264中用到了多种熵编码来对原本的数据进行压缩。 比如Sequence Paramater Set(sps / 序列参数集)中,s…

pyqt的QWidgetList如何多选?如何按下Ctrl多选?

通过设置setSelectionMode(QAbstractItemView.MultiSelection),可以实现QWidgetList的多选。 但是上述结果不太符合我们需求。设置多选模式后,只需鼠标点击就可以选择多个条目。 我希望按下Ctrl键时才进行多选,仅鼠标单击的话,只进…