在k8s中部署Logstash多节点示例(超详细讲解)

🐇明明跟你说过:个人主页

🏅个人专栏:《洞察之眼:ELK监控与可视化》🏅

🔖行路有良友,便是天堂🔖

目录

一、引言

1、Logstash简介

2、在K8s中部署Logstash多节点实例的优势

二、Logstash概述 

1、Logstash的主要组件

2、Logstash的配置文件结构和语法

三、准备部署环境

1、准备k8s集群

2、准备Logstash镜像

3、准备StorageClass 

四、部署Logstash

1、编写YAML文件

2、部署Logstash多节点实例


一、引言

1、Logstash简介

Logstash 是一个开源的数据收集引擎,可以从多个来源实时收集、解析和传输日志数据到多个输出目标。它是由 Elastic 开发和维护的,通常与 Elasticsearch 和 Kibana 一起使用,形成称为 "ELK Stack" 或 "Elastic Stack" 的强大日志管理和分析系统。

Logstash 的主要功能


1. 数据收集(Inputs)

  • Logstash 可以从多种数据源收集数据,包括日志文件、消息队列、数据库等。支持的输入插件种类繁多,如文件、syslog、TCP/UDP、HTTP、Kafka、JDBC 等。


2. 数据解析和过滤(Filters)

  • 收集到的数据可以通过过滤器插件进行解析和转换。Logstash 提供了丰富的过滤器插件,例如:
    •  grok:用于解析和结构化文本数据。
    •  date:用于解析时间戳。
    •  mutate:用于重命名、移除和修改字段。
    •  geoip:根据 IP 地址添加地理位置数据。


3. 数据输出(Outputs)

  • 处理后的数据可以发送到多个目的地,包括 Elasticsearch、文件、数据库、消息队列等。常用的输出插件包括 Elasticsearch、Kafka、HTTP、File、Email、STDOUT 等。


4. 实时处理

  • Logstash 具备实时处理能力,可以在数据生成的同时进行收集、解析和传输,确保数据的及时性。

 

2、在K8s中部署Logstash多节点实例的优势

1. 高可用性和容错性

  • 容器编排和自动恢复:Kubernetes 提供了容器编排和自动恢复功能。如果某个 Logstash 实例出现故障,Kubernetes 可以自动重新调度和重启容器,确保日志处理服务的持续可用性。
  • 多副本部署:通过部署多个 Logstash 实例(副本),即使某些节点或容器出现故障,其他副本仍然可以继续处理日志,提供高可用性和容错能力。


2. 弹性伸缩

  • 自动扩展:Kubernetes 的 Horizontal Pod Autoscaler 可以根据 CPU 使用率或自定义的指标(如日志处理延迟、队列长度)自动扩展或缩减 Logstash 实例的数量,确保在流量高峰期能够及时处理日志,同时在流量低谷期节省资源。
  • 资源管理:Kubernetes 通过资源配额和限制(如 CPU 和内存的请求和限制)来高效管理资源,确保 Logstash 实例得到合理的资源分配。


3. 集中管理和监控

  • 统一管理:在 Kubernetes 中,可以使用 Kubernetes 的控制面板(如 Kubernetes Dashboard 或其他监控工具)集中管理和监控所有 Logstash 实例,简化了运维管理。
  • 日志和指标收集:Kubernetes 可以通过内置的日志和指标收集工具(如 Fluentd、Prometheus 等)集中收集和分析 Logstash 的运行状态和性能指标,及时发现和处理异常情况。


4. 灵活部署和滚动升级

  • 滚动更新和回滚:Kubernetes 支持滚动更新和回滚功能,可以在不影响服务可用性的情况下更新 Logstash 实例的配置或版本,并在发生问题时快速回滚到上一版本。
  • 灵活部署:可以通过 Kubernetes 配置文件(YAML 或 JSON)灵活定义 Logstash 的部署配置(如副本数量、环境变量、持久化存储、网络配置等),实现快速和一致的部署。

   

二、Logstash概述 

1、Logstash的主要组件

Logstash 是一个功能强大的数据处理引擎,它的主要功能由三大核心组件组成:输入(Inputs)、过滤器(Filters)和输出(Outputs)。这些组件共同作用,使 Logstash 能够从多种来源收集数据,对数据进行处理和转换,并将处理后的数据传输到多个目标位置。

1. 输入(Inputs)

  • 输入插件用于定义数据的来源。Logstash 可以从各种来源收集数据,包括文件、消息队列、数据库、网络协议等。

 

2. 过滤器(Filters)

  • 过滤器插件用于对输入的数据进行处理和转换。可以使用过滤器插件来解析、增强、清洗和格式化数据。

3. 输出(Outputs)

  • 输出插件定义数据的目的地。Logstash 可以将处理后的数据发送到多个目标位置,包括搜索引擎、数据库、文件、消息队列等。

工作流程
Logstash 的工作流程可以简要描述为:数据从输入端进入,通过过滤器进行处理和转换,最后通过输出端发送到目标位置。

  1. 输入阶段:Logstash 从配置的输入源收集数据。
  2. 过滤阶段:收集到的数据通过配置的过滤器进行解析、转换和增强。
  3. 输出阶段:处理后的数据被发送到配置的输出目标。
     

2、Logstash的配置文件结构和语法

Logstash 的配置文件使用 .conf 格式,定义了数据处理管道的三大主要组件:输入(Inputs)、过滤器(Filters)和输出(Outputs)。每个配置文件包含多个阶段,通过管道(pipeline)配置来组织这些组件。

配置文件结构
一个典型的 Logstash 配置文件结构如下:

input {# 输入插件配置
}filter {# 过滤器插件配置
}output {# 输出插件配置
}


配置语法
Logstash 配置文件的语法主要由插件、插件参数和条件表达式组成。以下是详细的说明:

1. 输入(Inputs)
输入插件定义数据的来源。每个输入插件都有自己的参数,用于指定数据源的详细信息。

input {file {path => "/var/log/syslog"start_position => "beginning"}beats {port => 5044}
}


2. 过滤器(Filters)
过滤器插件用于解析、转换和增强数据。过滤器插件可以有多个,每个过滤器都有其特定的参数。过滤器之间可以用条件表达式进行控制。

filter {grok {match => { "message" => "%{SYSLOGTIMESTAMP:timestamp} %{SYSLOGHOST:hostname} %{DATA:process}: %{GREEDYDATA:message}" }}date {match => [ "timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]}mutate {remove_field => [ "timestamp" ]}
}


3. 输出(Outputs)
输出插件定义数据的目的地。每个输出插件都有自己的参数,用于指定目标位置的详细信息。

output {elasticsearch {hosts => ["http://localhost:9200"]index => "syslog-%{+YYYY.MM.dd}"}stdout {codec => rubydebug}
}

三、准备部署环境

1、准备k8s集群

这里示范的k8s集群版本为1.23,也可以是其他版本,如果还未搭建k8s集群,请参考《在Centos中搭建 K8s 1.23 集群超详细讲解》这篇文章

2、准备Logstash镜像

拉取部署Logstash所需的Docker镜像,镜像我已经上传到资源列表了,大家直接下载后导入到k8s node节点即可

3、准备StorageClass 

因为我们要对Logstash中的数据进行持久化,避免Pod漂移后数据丢失,保证数据的完整性与可用性

如果还未创建存储类,请参考《k8s 存储类(StorageClass)创建与动态生成PV解析,(附带镜像)》这篇文件。

 

四、部署Logstash

1、编写YAML文件

编写部署Logstash所需的YAML文件,这里我们设置节点的数量为3个,并设置Logstash从Kafka集群消费日志,然后将日志发送到es集群中

[root@master ~]# vim logstash.yaml
# 输入如下内容
apiVersion: v1
kind: Namespace
metadata:name: logstash
#创建Service
---
apiVersion: v1
kind: Service
metadata:name: logstash-cluster  #无头服务的名称,需要通过这个获取ip,与主机的对应关系namespace: logstashlabels:app: logstash
spec:ports:- port: 5044name: logstashclusterIP: Noneselector:app: logstash
---
apiVersion: v1
kind: ConfigMap
metadata:name: logstash-confignamespace: logstashlabels:app: logstash
data:             #具体挂载的配置文件test.conf: |+input{kafka {bootstrap_servers => "192.168.40.181:30092,192.168.40.181:30093,192.168.40.181:30094"topics => ["test"]group_id => "logstashGroup"}}output {elasticsearch {hosts => ["192.168.40.181:30000","192.168.40.181:30001","192.168.40.181:30002","192.168.40.181:30003","192.168.40.181:30004"]index => "test3"     }}
---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: logstashnamespace: logstash
spec:serviceName: "logstash-cluster"   #填写无头服务的名称replicas: 3selector:matchLabels:app: logstashtemplate:metadata:labels:app: logstashspec:containers:- name: logstashimage: lm-logstash:7.17.18imagePullPolicy: Neverresources:requests:memory: "500Mi"cpu: "500m"limits:memory: "1000Mi"cpu: "1000m"command:- sh- -c- "exec /app/logstash-7.17.18/bin/logstash -f /app/logstash-7.17.18/config/test.conf"ports:- containerPort: 5044name: logstashenv:- name: node.namevalueFrom:fieldRef:fieldPath: metadata.name- name: ES_JAVA_OPTSvalue: "-Xms1g -Xmx1g"volumeMounts:- name: data                  #挂载数据mountPath: /data- name: logstash-configmountPath: /app/logstash-7.17.18/config/test.confsubPath: test.confvolumes:- name: logstash-configconfigMap:                                #configMap挂载name: logstash-config volumeClaimTemplates:                     #这步自动创建pvc,并挂载动态pv- metadata:name: dataspec:accessModes: ["ReadWriteMany"]storageClassName: nfsresources:requests:storage: 10Gi

这个 StatefulSet 定义了一个名为 logstash 的应用,部署了三个副本。关键配置如下:

  • serviceName 指定使用无头服务 logstash-cluster。
  • 每个 Pod 都使用 lm-logstash:7.17.18 镜像,并从 ConfigMap 中挂载 test.conf 配置文件。
  • 使用环境变量 node.name 和 ES_JAVA_OPTS 进行配置。
  • 挂载了两个卷:一个用于数据存储,一个用于配置文件。
  • volumeClaimTemplates 自动创建一个 data 的 PVC,每个 Pod 使用独立的 PV。

 

部署优势

  1. 高可用性:通过多副本 StatefulSet,确保 Logstash 的高可用性。
  2. 服务发现:使用无头服务和 StatefulSet,Kubernetes 自动管理 Pod 的 DNS 解析,使集群内其他服务能够轻松找到 Logstash 实例。
  3. 集中配置管理:通过 ConfigMap 管理配置文件,方便配置更新和版本控制。
  4. 持久存储:使用动态创建的 PV 和 PVC,确保数据持久化,避免因 Pod 重启或迁移导致的数据丢失。

2、部署Logstash多节点实例

执行下面的命令

[root@master ~]# kubectl apply -f  logstash.yaml

   

查看Pod状态

至此,Logstash多节点实例部署完成, 如果你有其他的建议和想法,欢迎在评论区留言

💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于ELK的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!  

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

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

相关文章

ubuntu的home内存不足的解决办法(win和ubuntu双系统)

这种解决办法前提是windows和ubuntu双系统 首先在windows系统上创建一个空的硬盘分区 然后在ubuntu系统上把这个空的硬盘放在主目录里 然后可以把东西存在这个文件夹中 如下图,但实际主目录的内存没有变,以后存东西就在这个文件夹里面就好了 具体操作…

git 大文本上传和下载git-lfs

1. ubuntu 1)下载脚本来自动化配置系统上的包存储库,导入签名密钥等过程。这些脚本必须在root下运行。 # apt/deb repos: curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash # curl -s https://packag…

资源不是问题,极空间全自动小雅Alist以及Emby全家桶部署教程,同时实现自动更新

资源不是问题,极空间全自动小雅Alist以及Emby全家桶部署教程,同时实现自动更新 哈喽小伙伴,我是Stark-C~ 在上次更新了极空间虚拟机教程之后,终于有小伙伴催更了小雅Alist的搭建方案。作为当前市面最强、最大、最全的影视资源合…

基于springboot高校就业招聘系统的设计

管理员账户功能包括:系统首页,个人中心,就业咨询管理,毕业去向管理,简历管理,管理员管理,基础数据管理 辅导员账户功能包括:系统首页,个人中心,就业咨询管理…

uni-app文件下载 h5 xls 乱码 锟斤拷 Blob pdf打不开

原先下载方式,PC管理端和浏览器打开文件能下载,xls没出现乱码,pdf能正常显示,H5下载xls乱码锟斤拷,PDF显示空白内容 怀疑是前端问题,也尝试过修改后端代码 后端设置编码格式 response.setCharacterEncoding(characte…

人类如何挣脱被人工智能替代的命运?

人工智能技术的迭代升级,使得“换脸”“拟声”成为可能,我如何证明不是“我”?面对人工智能超高的生产效率,我如何与人工智能“抢工作”?在人工智能时代,如何回应这类疑问?挣脱被替代的命运&…

Java爬虫——正则表达式应用

Pattern Matcher均属于regex下 步骤:pattern获取正则,matcher获取文本对象,find截取字符串(返回true、false),group获得字符 例题:爬取指定文字 分析: 二次调用时: 循环…

2024年6月13日 英语角策划

🌟 English Corner 🌟 Theme for Today: What Do You Hope to Gain? How Was Your Day? 📅 Date: June 13, 2024 📍 Location: Floor 11, Room F1111, Building F ⏰ Time: 17:00 - 17:30 🎉 Welcome to Our Engli…

搭建一个简单的深度神经网络

目录 一、引入所需要的库 二、制作数据集 三、搭建神经网络 四、训练网络 五、测试网络 本博客实验环境为jupyter 一、引入所需要的库 torch库是核心,其中torch.nn 提供了搭建网络所需的所有组件,nn即神经网络。matplotlib类似与matlab&#xff0…

Day53 触发器,存储过程,预定义函数,自定义函数

Day53 1.触发器 由某个事件去触发某个操作,这些事件有:insert、update、delete语句; 创建触发器: [ delimiter XX ] create trigger 触发器名 [before | after] 触发事件 on 表名 for each row 执行语句begin多条执行语句end 加上…

透平油氧化安定性检测 发动机油运动粘度40℃检测

透平油氧化安定性检测 透平油,也称为涡轮机油或汽轮机油,是专门用于汽轮机的润滑油。它具有良好的抗氧化安定性和抗乳化性能,主要用于发电厂蒸气轮机、水电站水轮发电机以及其他需要深度精细润滑的场合。透平油的氧化安定性是衡量其在高温条件…

服务器防漏扫,主机加固方案来解决

什么是漏扫? 漏扫是漏洞扫描的简称。漏洞扫描是一种安全测试方法,用于发现计算机系统、网络或应用程序中的潜在漏洞和安全弱点。通过使用自动化工具或软件,漏洞扫描可以检测系统中存在的已知漏洞,并提供相关的报告和建议&#xf…

编程课面向和右转的区别:深入解析与实际应用

编程课面向和右转的区别:深入解析与实际应用 在编程课程中,尤其是在学习图形化编程或更高级的文本编程时,我们常常会遇到“面向”和“右转”这两个指令。虽然它们看似简单,但在实际应用中却有着显著的区别和重要性。本文将详细探…

Python教程:一文了解从Bytes到Bits的数据转换

目录 1. 什么是Bit? 1.1 Bit的定义 1.2 Bit的用途 1.3 示例 2. 什么是Byte? 2.1 Byte的定义 2.2 Byte的用途 2.3 示例 3. Byte与Bit的关系 3.1 转换关系 3.2 示例 4. 实际应用中的Byte和Bit 4.1 数据传输 4.2 数据存储 4. Bytes与Bits的转…

YOLOv10原理与实战训练自己的数据集

课程链接:YOLOv10原理与实战训练自己的数据集_在线视频教程-CSDN程序员研修院 YOLOv10是最近提出的YOLO的改进版本。在后处理方面,提出了一致性双重分配策略用于无NMS训练,从而实现了高效的端到端检测。在模型架构方面,引入了全面…

Unity中的AssetBundleManifest

在Unity中,AssetBundleManifest是一个重要的类,它包含了关于AssetBundles的元数据,如依赖关系、哈希值等。以下是对AssetBundleManifest类中常用属性和方法的清晰归纳: 常用属性 无直接公开属性:AssetBundleManifest…

等保测评在防范数据泄露中的关键作用

#等保测评##黑龙江等保测评##哈尔滨等保测评# 在信息时代,数据已成为企业最为宝贵的资产之一,而数据泄露事件频发,不仅严重威胁企业的经济利益,更关乎国家安全和社会稳定。信息安全等级保护测评(简称“等保测评”&…

OpenCV中的圆形标靶检测——findCirclesGrid()(一)

如前所述,OpenCV中可以使用findCirclesGrid()实现圆形标靶的检测,该函数的计算流程分为1)斑点形状的检测,和2)基于规则的斑点形状的过滤与定位。第一步将类似圆斑形状的区域检测出来,但可能存在一些误检测的噪声,第二步则利用圆斑的分布规则(M*N排列)进行进一步的过滤…

ubuntu如何查看ip地址

ubuntu如何查看ip地址 方法一:使用ifconfig方法二:使用ip命令 方法一:使用ifconfig 命令行输入ifconfig: 这里inet后跟的内容就是IP地址。 方法二:使用ip命令 命令行输入:ipa ddr: 这里ine…

【Python入门与进阶】Python的运算符

Python中的运算符可以分为几类,每种运算符有特定的用法。 以下是一些主要的Python运算符及其用法: 1. 算术运算符 :加法 a 5 b 3 print(a b) # 输出 8-:减法 print(a - b) # 输出 2*:乘法 print(a * b) # 输出 …