当前位置: 首页 > news >正文

K8S部署ELK(一):部署Filebeat日志收集器

目录

1. ELK简介

1.1 ELK 的组成

1.2 核心功能

1.3 常见应用场景

1.4 扩展与变体

1.5 工作原理示例

1.6 优势与挑战

1.7 架构图

2. Filebeat 简介

2.1 核心功能

2.2 主要特点

2.3 工作原理

2.4 典型应用场景

2.5 与Logstash的比较

3. K8S部署Filebeat

3.1 创建Namespace

3.2 创建ServiceAccount

3.3 创建RBAC

3.4 创建ConfigMap

3.5 创建Deamonset

3.6 部署所有资源

3.7 检查Filebeat Pod状态


1. ELK简介

ELK 是一个开源的日志管理平台组合,由三个核心组件组成,用于高效地收集、存储、搜索和可视化日志数据。以下是详细介绍:


1.1 ELK 的组成

  • E: Elasticsearch

    • 功能:分布式搜索和分析引擎,负责存储和索引数据,提供近实时的搜索能力。

    • 特点:高扩展性、支持全文检索、RESTful API。

  • L: Logstash

    • 功能:数据采集和处理管道,负责从多种来源(如文件、数据库、消息队列)收集日志,进行过滤、解析和转换后发送到 Elasticsearch。

    • 特点:支持多种输入/输出插件(如 Kafka、MySQL)、强大的数据解析(如正则、Grok)。

  • K: Kibana

    • 功能:数据可视化工具,通过图表、仪表盘展示 Elasticsearch 中的数据,支持日志分析和监控。

    • 特点:交互式图表、自定义仪表盘、支持地理数据等。


1.2 核心功能

  • 集中式日志管理:统一收集分散的日志(如服务器、应用、网络设备)。

  • 实时搜索与分析:快速检索日志,支持复杂查询(如错误追踪、性能分析)。

  • 可视化监控:通过仪表盘实时监控系统状态(如流量、错误率)。

  • 告警功能:结合 Elasticsearch 的 Alerting 或第三方工具(如 ElastAlert)设置阈值告警。


1.3 常见应用场景

  • 运维故障排查:快速定位服务器或应用错误。

  • 安全分析:检测异常行为(如频繁登录失败)。

  • 业务分析:分析用户行为日志(如点击流、API 调用)。

  • 合规审计:长期存储日志以满足合规要求。


1.4 扩展与变体

  • Elastic Stack:ELK 的官方名称,现包含更多组件如:

    • Beats:轻量级数据采集器(如 Filebeat 收集日志,Metricbeat 收集指标)。

    • X-Pack:提供安全、监控、告警等企业级功能(需付费)。

  • 替代方案

    • Grafana Loki:轻量级日志系统,侧重存储效率。

    • Splunk:商业日志分析工具,功能强大但成本高。


1.5 工作原理示例

  1. 数据流应用日志Filebeat(采集) → Logstash(解析) → Elasticsearch(存储) → Kibana(展示)。

  2. 典型配置

    • 使用 Filebeat 替代 Logstash 采集日志,降低资源消耗。

    • 使用 Index Lifecycle Management (ILM) 自动管理日志保留策略。


1.6 优势与挑战

  • 优势:开源免费、社区活跃、横向扩展能力强。

  • 挑战:大规模部署时需优化性能(如分片策略、集群调优),存储成本可能较高。

1.7 架构图

传统架构

云原生架构

2. Filebeat 简介

Filebeat 是 Elastic Stack(ELK)中的一个轻量级日志数据收集器,属于 Beats 数据采集器家族的一员,专门用于高效、可靠地转发和集中日志文件。

2.1 核心功能

  1. 日志收集

    • 监控指定的日志文件或目录

    • 支持多种日志格式(如文本、JSON、Syslog等)

    • 自动处理日志轮转(log rotation)

  2. 日志转发

    • 将收集的日志发送到 Elasticsearch、Logstash、Kafka、Redis 等多种目的地

    • 支持负载均衡和故障转移

  3. 轻量高效

    • 占用资源极少(Go语言编写)

    • 没有依赖项,部署简单

2.2 主要特点

  • 模块化设计:预置了常见应用(如Nginx、MySQL、Apache等)的日志解析模块

  • 可靠性保证:使用注册表文件记录文件读取位置,确保至少一次交付

  • 资源友好:CPU和内存占用低,适合在生产环境中大量部署

  • 支持压缩和加密:数据传输可配置SSL/TLS加密

2.3 工作原理

  1. Prospector(探测者):

    • 监控配置的日志文件路径

    • 检测新文件和文件变化

  2. Harvester(收割者):

    • 逐行读取文件内容

    • 将内容发送到输出目标

    • 记录每个文件的读取位置

  3. Registry(注册表):

    • 记录每个文件的状态和读取位置

    • 确保重启后能从正确位置继续读取

2.4 典型应用场景

  1. 集中式日志管理

    服务器日志 → Filebeat → Logstash/Elasticsearch → Kibana
  1. 分布式系统监控

    在每台服务器上部署Filebeat,统一收集所有节点的日志

  1. 安全审计

    • 收集系统安全日志(如SSH登录记录)

    • 发送到SIEM系统进行分析

2.5 与Logstash的比较

特性FilebeatLogstash
资源占用非常低较高
功能仅收集和转发丰富处理
部署简单较复杂
适用场景大规模日志收集复杂ETL

Filebeat通常与Logstash配合使用:Filebeat负责收集和传输,Logstash负责复杂的日志处理和转换。

3. K8S部署Filebeat

3.1 创建Namespace

kubectl create namespace elk

3.2 创建ServiceAccount

vim filebeat-serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:name: filebeatnamespace: elklabels:k8s-app: filebeat

3.3 创建RBAC

vim filebeat-rbac.yaml
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: filebeat
subjects:
- kind: ServiceAccountname: filebeatnamespace: elk
roleRef:kind: ClusterRolename: filebeatapiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: filebeatnamespace: elk
subjects:- kind: ServiceAccountname: filebeatnamespace: elk
roleRef:kind: Rolename: filebeatapiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: filebeat-kubeadm-confignamespace: elk
subjects:- kind: ServiceAccountname: filebeatnamespace: elk
roleRef:kind: Rolename: filebeat-kubeadm-configapiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: filebeatlabels:k8s-app: filebeat
rules:
- apiGroups: [""]resources:- namespaces- pods- nodesverbs:- get- watch- list
- apiGroups: ["apps"]resources:- replicasetsverbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:name: filebeatnamespace: elklabels:k8s-app: filebeat
rules:- apiGroups:- coordination.k8s.ioresources:- leasesverbs: ["get", "create", "update"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:name: filebeat-kubeadm-confignamespace: elklabels:k8s-app: filebeat
rules:- apiGroups: [""]resources:- configmapsresourceNames:- kubeadm-configverbs: ["get"]

3.4 创建ConfigMap

vim filebeat-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: filebeat-confignamespace: elklabels:k8s-app: filebeat
data:filebeat.yml: |-filebeat.inputs:- type: containerpaths:- /var/log/containers/*.log  #采集容器日志fields: project: "k8s-outlog"  #打上自定义标签,便于后续识别用途和来源logtype: "k8s-outlog"multiline.pattern: '^[[:space:]]+(at|\.{3})\b|^Caused by:'multiline.negate: falsemultiline.match: afterprocessors:- add_kubernetes_metadata:host: ${NODE_NAME}matchers:- logs_path:logs_path: "/var/log/containers/"
​- type: logpaths:- /var/log/messages  #采集系统日志fields: project: "k8s-messagelog"logtype: "k8s-messagelog"processors:- add_fields:when:regexp:message: ".* kubelet.*: .*"  #处理器,使用正则匹配fields:component: "kubelet"
​processors:- add_host_metadata:
​output.kafka:  #设置kafka作为输出目标hosts: ["kafka-0.kafka-headless.elk.svc.cluster.local:9092"]  #kafka的service地址topic: 'k8s-outlog'  #写入kafka的topic中sasl.mechanism: "SCRAM-SHA-256"partition.round_robin: reachable_only: true required_acks: 1max_message_bytes: 10000000

3.5 创建Deamonset

vim filebeat-daemonset.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:name: filebeatnamespace: elklabels:k8s-app: filebeat
spec:selector:matchLabels:k8s-app: filebeattemplate:metadata:labels:k8s-app: filebeatspec:serviceAccountName: filebeatterminationGracePeriodSeconds: 30hostNetwork: truednsPolicy: ClusterFirstWithHostNetcontainers:- name: filebeatimage: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/docker.elastic.co/beats/filebeat:7.17.2args: ["-c", "/etc/filebeat.yml","-e",]env:- name: NODE_NAMEvalueFrom:fieldRef:fieldPath: spec.nodeNamesecurityContext:runAsUser: 0resources:limits:cpu: 500mmemory: 500Mirequests:cpu: 100mmemory: 100MivolumeMounts:- name: configmountPath: /etc/filebeat.ymlreadOnly: truesubPath: filebeat.yml- name: datamountPath: /usr/share/filebeat/data- name: varlibdockercontainersmountPath: /data/docker/containersreadOnly: true- name: varlogmountPath: /var/logreadOnly: true- name: tz-configmountPath: /etc/localtimereadOnly: truevolumes:- name: configconfigMap:defaultMode: 0640name: filebeat-config- name: varlibdockercontainershostPath:path: /data/docker/containers- name: varloghostPath:path: /var/log- name: datahostPath:path: /var/lib/filebeat-datatype: DirectoryOrCreate- name: tz-confighostPath:path: /etc/localtime

3.6 部署所有资源

[root@master1 Filebeat]# ls
filebeat-configmap.yaml  filebeat-rbac.yaml
filebeat-daemonset.yaml  filebeat-serviceaccount.yaml
[root@master1 Filebeat]# kubectl apply  -f ./
configmap/filebeat-config created
daemonset.apps/filebeat created
clusterrolebinding.rbac.authorization.k8s.io/filebeat created
rolebinding.rbac.authorization.k8s.io/filebeat created
rolebinding.rbac.authorization.k8s.io/filebeat-kubeadm-config created
clusterrole.rbac.authorization.k8s.io/filebeat created
role.rbac.authorization.k8s.io/filebeat created
role.rbac.authorization.k8s.io/filebeat-kubeadm-config created
serviceaccount/filebeat created

3.7 检查Filebeat Pod状态

[root@master1 Filebeat]# kubectl get all -n elk 
NAME                 READY   STATUS    RESTARTS   AGE
pod/filebeat-6db9l   1/1     Running   0          27s
pod/filebeat-qllxg   1/1     Running   0          27s
pod/filebeat-r5hw7   1/1     Running   0          27s
​
NAME                      DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset.apps/filebeat   3         3         3       3            3           <none>          27s
http://www.dtcms.com/a/311216.html

相关文章:

  • 红黑树(RBTree)
  • Redis面试精讲 Day 7:GEO地理位置应用详解
  • Mysql在页内是怎么查找数据的?
  • 第14届蓝桥杯Python青少组中/高级组选拔赛(STEMA)2022年11月真题
  • web练习
  • 初始C语言---第四讲(数组)
  • Tlias案例-登录 退出 打包部署
  • 【自动化运维神器Ansible】YAML语法详解:Ansible Playbook的基石
  • 【自动化运维神器Ansible】YAML支持的数据类型详解:构建高效Playbook的基石
  • 人工智能与农业:智慧农业的发展与未来
  • 基于Postman进行http的请求和响应
  • 基于SpringBoot+MyBatis+MySQL+VUE实现的在线课程管理系统(附源码+数据库+毕业论文+开题报告+部署教程+配套软件)
  • Ubuntu系统VScode实现opencv(c++)图像放缩与插值
  • 高效轻量的C++ HTTP服务:cpp-httplib使用指南
  • Android 15 限制APK包手动安装但不限制自升级的实现方案
  • 把“多视图融合、深度传感”组合在一起,今天分享3篇3D传感技术干货
  • [硬件电路-120]:模拟电路 - 信号处理电路 - 在信息系统众多不同的场景,“高速”的含义是不尽相同的。
  • Word怎样转换为PDF
  • Qwen3 Embedding:新一代文本表征与排序模型
  • 2411. 按位或最大的最小子数组长度
  • Django开发中医针灸经络图系统实战
  • 【iOS】3GShare仿写
  • 【Linux网络】netstat 的 -anptu 各个参数各自表示什么意思?
  • 2025 年 VSCode 插件离线下载硬核攻略
  • 打破传统养育框架:梁婉昕的 “非矫正式教育” 探索|创客匠人
  • 八股取士--docker
  • 在 AKS 中运行 Azure DevOps 自托管代理-2
  • 贪心算法应用:3D打印支撑结构问题详解
  • CommonJS和ES6 Modules区别
  • 如何安装和使用 Cursor AI 编辑器