k8s部署ELK補充篇:kubernetes-event-exporter收集Kubernetes集群中的事件

k8s部署ELK補充篇:kubernetes-event-exporter收集Kubernetes集群中的事件

文章目錄

  • k8s部署ELK補充篇:kubernetes-event-exporter收集Kubernetes集群中的事件
  • 一、kubernetes-event-exporter簡介
  • 二、kubernetes-event-exporter實戰部署
    • 1. 創建Namespace(elk-namespace.yaml)
    • 2. 部署Logstash(event-logstash.yaml)
    • 3. 部署kubernetes-event-exporter(event-exporter.yaml)
    • 4. 部署所有資源
    • 5. 驗證Logstash Pod狀態
  • 三、Kibana頁面展示
  • 總結


在 Kubernetes 集群中,事件(Event) 是用于記錄資源狀態變化和異常信息的重要機制,常用于排查部署問題、資源調度異常或系統錯誤等。然而,Kubernetes 默認只保留最近一小時內的事件,且僅能通過 kubectl get events 命令臨時查看,無法滿足集中管理、持久化存儲和告警通知等生產需求。

為了解決這一問題,我們可以引入 kubernetes-event-exporter,它能夠實時捕捉集群中的事件,并將其導出到日志系統、告警平臺或其他后端存儲系統中。配合 ELK(Elasticsearch + Logstash + Kibana)這一成熟的日志分析平臺,我們可以實現對集群事件的統一采集、分析和可視化展示。

本篇文章將介紹如何在 Kubernetes 環境中部署 kubernetes-event-exporter,實現事件的收集與輸出,為集群可觀測性和故障排查提供更全面的數據支撐。在這里插入圖片描述

一、kubernetes-event-exporter簡介

kubernetes-event-exporter 是一款專為 Kubernetes 設計的輕量級事件收集與導出工具,能夠實時捕捉 Kubernetes 集群中的事件(Events),并將其導出到指定的后端系統,如 Elasticsearch、Loki、Kafka、Webhook 或文件等。
相比于通過 kubectl get events 命令手動查看事件,這款工具支持 自動化持久化結構化 地處理事件數據,特別適用于與日志系統、監控平臺或告警系統集成,實現對集群狀態的可觀測性增強和異常快速響應。
kubernetes-event-exporter 提供了靈活的過濾規則和接收器配置,用戶可以根據事件的類型、命名空間、資源或原因等條件,自定義輸出策略,是構建 Kubernetes 運維監控體系的有力補充組件。

二、kubernetes-event-exporter實戰部署

1. 創建Namespace(elk-namespace.yaml)

首先,創建一個新的命名空間,用于部署 ELK 相關的資源

apiVersion: v1
kind: Namespace
metadata:name: elk

2. 部署Logstash(event-logstash.yaml)

以下配置將部署 Logstash,并從 Kafka 中拉取事件數據,再輸出到 Elasticsearch

kind: Deployment
apiVersion: apps/v1
metadata:name: kube-event-logstashnamespace: elklabels:app: kube-event-logstash
spec:replicas: 1selector:matchLabels:app: kube-event-logstashtemplate:metadata:creationTimestamp: nulllabels:app: kube-event-logstashannotations:kubesphere.io/restartedAt: '2024-02-22T09:03:36.215Z'spec:volumes:- name: kube-event-logstash-pipeline-configconfigMap:name: kube-event-logstash-pipeline-configdefaultMode: 420- name: kube-event-logstash-configconfigMap:name: kube-event-logstash-config- name: logstash-configemptyDir: {}initContainers:- name: copy-logstash-configimage: harbor.local/k8s/busybox:1.37.0command: ['sh', '-c', 'cp /tmp/logstash.yml /usr/share/logstash/config/logstash.yml && chmod 777 /usr/share/logstash/config/logstash.yml']volumeMounts:- name: kube-event-logstash-configmountPath: /tmp/logstash.ymlsubPath: logstash.yml- name: logstash-configmountPath: /usr/share/logstash/configcontainers:- name: kube-event-logstashimage: harbor.local/k8s/logstash:7.17.0env:- name: NODE_NAMEvalueFrom:fieldRef:apiVersion: v1fieldPath: metadata.name- name: PIPELINE_BATCH_SIZEvalue: '4000'- name: PIPELINE_BATCH_DELAYvalue: '100'- name: PIPELINE_WORKERSvalue: '4'- name: LS_JAVA_OPTSvalue: '-Xms2g -Xmx3500m'  #JVM內存設置resources:limits:cpu: '2'memory: 4Girequests:cpu: '1'memory: 1GivolumeMounts:- name: kube-event-logstash-pipeline-configmountPath: /usr/share/logstash/pipeline- name: logstash-configmountPath: /usr/share/logstash/config/logstash.ymlsubPath: logstash.ymllivenessProbe:tcpSocket:port: 9600initialDelaySeconds: 39timeoutSeconds: 5periodSeconds: 30successThreshold: 1failureThreshold: 2readinessProbe:tcpSocket:port: 9600initialDelaySeconds: 39timeoutSeconds: 5periodSeconds: 30successThreshold: 1failureThreshold: 2terminationMessagePath: /dev/termination-logterminationMessagePolicy: FileimagePullPolicy: IfNotPresentrestartPolicy: AlwaysterminationGracePeriodSeconds: 30dnsPolicy: ClusterFirstsecurityContext: {}schedulerName: default-schedulerstrategy:type: RollingUpdaterollingUpdate:maxUnavailable: 25%maxSurge: 25%revisionHistoryLimit: 10progressDeadlineSeconds: 600
---
kind: ConfigMap
apiVersion: v1
metadata:name: kube-event-logstash-pipeline-confignamespace: elk
data:logstash.conf: |-input {kafka {bootstrap_servers => "kafka-0.kafka-headless.elk.svc.cluster.local:9092"group_id => "logstash-consumer-group-event"topics => ["k8s-event"]codec => "json"consumer_threads => 1decorate_events => truesecurity_protocol => "PLAINTEXT"  }}output {elasticsearch {hosts => ["http://elasticsearch-0.elasticsearch-cluster.elk.svc.cluster.local:9200"]index => "k8s-event-%{+YYYY.MM.dd}"}}
---
kind: ConfigMap
apiVersion: v1
metadata:name: kube-event-logstash-confignamespace: elk
data:logstash.yml: |-http.host: "0.0.0.0"xpack.monitoring.elasticsearch.hosts: ["http://elasticsearch-0.elasticsearch-cluster.elk.svc.cluster.local:9200"]

3. 部署kubernetes-event-exporter(event-exporter.yaml)

包含 ServiceAccount、ClusterRoleBinding、配置文件 ConfigMap 及 Deployment

apiVersion: v1
kind: ServiceAccount
metadata:namespace: elkname: event-exporter
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: event-exporter
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: view
subjects:- kind: ServiceAccountnamespace: elkname: event-exporter
---
apiVersion: v1
kind: ConfigMap
metadata:name: event-exporter-cfgnamespace: elk
data:config.yaml: |logLevel: errorlogFormat: jsonroute:routes:- match:- receiver: "kafka"drop:- kind: "Service"  #可選,忽略 Service 類型事件receivers:- name: "kafka"kafka:clientId: "kubernetes"topic: "k8s-event"brokers:- "kafka-0.kafka-headless.elk.svc.cluster.local:9092"compressionCodec: "snappy"layout:  #自定義字段格式kind: "{{ .InvolvedObject.Kind }}"namespace: "{{ .InvolvedObject.Namespace }}"name: "{{ .InvolvedObject.Name }}"reason: "{{ .Reason }}"message: "{{ .Message }}"type: "{{ .Type }}"timestamp: "{{ .GetTimestampISO8601 }}"cluster: "sda-pre-center"
---
apiVersion: apps/v1
kind: Deployment
metadata:name: event-exporternamespace: elk
spec:replicas: 1template:metadata:labels:app: event-exporterversion: v1spec:serviceAccountName: event-exportercontainers:- name: event-exporterimage: harbor.local/k8s/kubernetes-event-exporter:v1imagePullPolicy: IfNotPresentargs:- -conf=/data/config.yamlvolumeMounts:- mountPath: /dataname: cfgvolumes:- name: cfgconfigMap:name: event-exporter-cfgselector:matchLabels:app: event-exporterversion: v1

4. 部署所有資源

將上述 YAML 文件保存后,使用以下命令統一部署

kubectl apply -f elk-namespace.yaml
kubectl apply -f event-logstash.yaml
kubectl apply -f event-exporter.yaml

5. 驗證Logstash Pod狀態

kubectl get pod -n elk

在這里插入圖片描述

三、Kibana頁面展示

訪問地址:http://ip:30601
在 Kibana 中創建索引模式 k8s-event-*,可視化展示集群事件數據(不知道怎么創建的可以看我前面的文章)

在這里插入圖片描述


總結

📌 本文作為對 ELK 在 Kubernetes 中部署使用的補充,介紹了如何通過部署 kubernetes-event-exporter 實時采集集群事件,并結合 Kafka 與 Logstash 將事件數據統一輸出至 Elasticsearch,從而實現對集群事件的集中管理與可視化展示。
通過這一方案,Kubernetes 原生事件不再局限于短時查看和手動排查,而是納入到完整的日志與監控體系中,極大提升了運維的效率與可觀測性,是生產環境中不可或缺的重要組成部分。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/82854.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/82854.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/82854.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Apache 高級配置實戰:從連接保持到日志分析的完整指南

Apache 高級配置實戰:從連接保持到日志分析的完整指南 前言 最近在深入學習 Apache 服務器配置時,發現很多朋友對 Apache 的高級功能還不夠了解。作為一個在運維路上摸爬滾打的技術人,我想把這些實用的配置技巧分享給大家。今天這篇文章會帶…

【Stable Diffusion 1.5 】在 Unet 中每個 Cross Attention 塊中的張量變化過程

系列文章目錄 文章目錄 系列文章目錄前言特征圖和注意力圖的尺寸差異原因在Break-a-Scene中的具體實現總結 前言 特征圖 (Latent) 尺寸和注意力圖(attention map)尺寸在擴散模型中有差異,是由于模型架構和注意力機制的特性決定的。 特征圖和注意力圖的尺寸差異原…

【監控】Prometheus+Grafana 構建可視化監控

在云原生和微服務架構盛行的今天,監控系統已成為保障業務穩定性的核心基礎設施。作為監控領域的標桿工具,Prometheus和Grafana憑借其高效的數據采集、靈活的可視化能力,成為運維和開發團隊的“標配”。 一、Prometheus Prometheus誕生于2012…

替代 WPS 的新思路?快速將 Word 轉為圖片 PDF

在這個數字化辦公日益普及的時代,越來越多的人開始關注文檔處理工具的功能與體驗。當我們習慣了某些便捷操作時,卻發現一些常用功能正逐漸變為付費項目——比如 WPS 中的一項實用功能也開始收費了。 這款工具最特別的地方在于,可以直接把 W…

CodeTop之數組中的第K個最大的元素

題目鏈接 215. 數組中的第K個最大元素 - 力扣(LeetCode) 題目解析 算法原理 解法一: 直接理由java內部的排序函數,Arrays.sort()進行排序, 然后我們直接返回第k個最大的元素 nums[nums.length-k] 解法二: 使用堆 我們先把所有元素丟到大根堆里面…

AI任務相關解決方案1-基于NLP的3種模型實現實體識別,以及對比分析(包括基于規則的方法、CRF模型和BERT微調模型)

大家好,我是微學AI,今天給大家介紹一下AI任務相關解決方案1-基于NLP的3種模型實現實體識別,以及對比分析。本文將深入探討三種不同的命名實體識別(NER)方法,包括基于規則的方法、CRF模型和BERT微調模型,用于識別文本中的地名(LOC)、機構名稱(ORG)和人名(PER)實體。通過系統…

IP動態偽裝開關

IP動態偽裝開關 在OpenWrt系統中,IP動態偽裝(IP Masquerading)是一種網絡地址轉換(NAT)技術,用于在私有網絡和公共網絡之間轉換IP地址。它通常用于允許多個設備共享單個公共IP地址訪問互聯網。以下是關于O…

【MySQL】第10節|MySQL全局優化與Mysql 8.0新增特性詳解

全局優化 mysql server參數 1. max_connections(最大連接數) 含義:MySQL 服務允許的最大并發連接數(包括正在使用和空閑的連接)。超過此限制時,新連接會被拒絕(報錯 Too many connections&am…

VS Code 插件 Git History Diff

插件名 進命令行,進Git自己那個分支 查看分支 提交到Git的后想再把另一個也提交到那個分支,用這個命令

Shell腳本中的常用命令

一.設置主機名稱 文件設置 文件開機時已讀取所以要重新進入 命令更改(即使生效) 二.網絡管理命令 1.查看網卡命令 設置網卡 1)DHCP工作模式 2)靜態IP 3)修改網卡信息 三.簡單處理字符 1.打印連續數字 連續打印3個數字 指定打…

C++ 中 std::wstring::c_str() 的潛在風險與安全使用指南

一、問題背景 在開發過程中,我們經常會遇到不同接口之間的數據傳遞問題。例如,當調用某個接口時,需要傳入一個字符串指針作為數據接收的緩沖區,但外圍接口使用的是 std::wstring 類型。此時,如果直接將 std::wstring:…

‘js@https://registry.npmmirror.com/JS/-/JS-0.1.0.tgz‘ is not in this registry

解決方法: 1. npm cache clean --force 2.臨時切換到官方源 npm config set registry https://registry.npmjs.org/ npm install js0.1.0 npm config set registry https://registry.npmmirror.com/ # 切換回鏡像源

ubuntu24 安裝MongoDB-6.0.24 數據庫操作步驟和配置參數說明

目錄 1 下載MongoDB軟件 2 操作系統信息 3 MongoDB 軟件安裝步驟 4 編寫mongodb的配置文件 5 生成keyfile 6 使用mongo用戶啟動mongodb服務 7 設置開機啟動(mongo用戶) 8 安裝MongoDB shell,因為MongoDB-6.0.24 已經移除mongo命令 1 下載MongoDB軟件 https:…

單片機——keil5

文章目錄 安裝教程使用介紹案例展示 接下來進行keil5軟件的相關學習使用 安裝教程 參考視頻鏈接bilibili 51單片機 大約在8分鐘位置處 使用介紹 首先新建project選擇對應的芯片型號(例如:STC89C52 —— 由于STC系列是國產,keil5軟件不支持…

計算機網絡相關發展以及常見性能指標

目錄 一、因特網概述 1.1 基本概念 1.2 因特網發展的三個階段 1.3 英特網服務提供者ISP 1.4 英特網的標準化工作 1.5 因特網的組成 1.6 簡單總結 二、3種交換方式 2.1 電路交換(Circuit Switching) 2.2 分組交換(Packet Switching&…

Java 面試實錄:從Spring到微服務的技術探討

在一個明亮的會議室里,嚴肅的面試官與搞笑的程序員謝飛機正進行一場關于Java技術棧的面試。場景設定在一家知名互聯網大廠,他們的對話充滿了技術性與娛樂性。 第一輪:Spring框架與數據庫 面試官:“謝飛機,能解釋一下…

OpenCV CUDA模塊圖像過濾------創建一個 Scharr 濾波器函數createScharrFilter()

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 該函數用于創建一個 Scharr 濾波器(基于 CUDA 加速),用于圖像的一階導數計算。它常用于邊緣檢測任務中&#…

yolov8分割任務的推理和后處理解析

文章目錄 一、前言二、分割模型的前向推理1. 檢測結果:來自Detect類的輸出2. 分割結果(最終)3. 與Detect的主要區別4. 工作流程 三、后處理1. 非極大值抑制(NMS)過濾檢測框2. 分割原型(Mask Prototypes&…

4.1.1 Spark SQL概述

Spark SQL是Apache Spark的一個模塊,專門用于處理結構化數據。它引入了DataFrame這一編程抽象,DataFrame是帶有Schema信息的分布式數據集合,類似于關系型數據庫中的表。用戶可以通過SQL、DataFrames API和Datasets API三種方式操作結構化數據…

華為OD機試真題——書籍疊放(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳實現

2025 A卷 200分 題型 本專欄內全部題目均提供Java、python、JavaScript、C、C++、GO六種語言的最佳實現方式; 并且每種語言均涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、3個測試用例以及綜合分析; 本文收錄于專欄:《2025華為OD真題目錄+全流程解析+備考攻略+經驗分…