【Kubernetes】集成ELK收集日志

news/2025/11/23 13:49:58/文章来源:https://www.cnblogs.com/WilsonPan/p/19260476

Kubernetes集成ELK日志

由于我们使用Helm部署ELK,这里将分别部署Elasticsearch、Kibana和Logstash。同时,我们还需要部署Filebeat作为日志收集器

步骤:

  1. 添加Elastic Helm仓库
  2. 部署Elasticsearch
  3. 部署Kibana
  4. 部署Logstash(可选,因为Filebeat也可以直接发送到Elasticsearch,但通常用于更复杂的处理)
  5. 部署Filebeat

各组件说明

Elasticsearch: 一个分布式、RESTful 风格的搜索和分析引擎。它是整个架构的核心,负责存储、搜索和分析从各种来源收集来的海量数据
Kibana: 一个为 Elasticsearch 设计的开源数据可视化和管理工具。用户可以通过 Kibana 在网页上直接与 Elasticsearch 中的数据交互
Logstash: 一个服务器端的数据处理管道,可以同时从多个来源接收数据,对数据进行转换和丰富,然后将其发送到像 Elasticsearch 这样的“存储库”中
Filebeat: 一个轻量级的、用于转发和集中日志数据的工具。Filebeat 被安装在需要收集日志的服务器上,监视指定的日志文件或位置,并将日志事件转发到 Logstash 或 Elasticsearch 进行索引

一个最常见的数据流是这样的:

应用日志 --> Filebeat --> Logstash --> Elasticsearch --> Kibana

前置条件

  1. 一个正在运行的 Kubernetes 集群。

参考: k8s入门

  1. 已安装 kubectl 并配置好对集群的访问

参考: macOS上优雅运行Docker容器

  1. 已安装 Helm。

参考: k8s使用helm简化安装

部署ELK Stack到Kubernetes

1. 添加Elastic Helm仓库

# 添加Elastic官方仓库
helm repo add elastic https://helm.elastic.co
helm repo update elastic

2. 创建命名空间

kubectl create namespace logging

3. 部署Elasticsearch

3.1 创建自定义values文件

elasticsearch-values.yaml

# elasticsearch-values.yaml
clusterName: "elasticsearch"
nodeGroup: "master"replicas: 2# 资源配置
resources:requests:cpu: "1000m"memory: "2Gi"limits:cpu: "2000m"memory: "4Gi"# 持久化配置
volumeClaimTemplate:accessModes: [ "ReadWriteOnce" ]storageClassName: "local-path"  # 根据你的存储类修改resources:requests:storage: 50Gi# 配置参数
esConfig:elasticsearch.yml: |xpack.security.enabled: truexpack.monitoring.collection.enabled: true# 环境变量
extraEnvs:- name: "ES_JAVA_OPTS"value: "-Xms2g -Xmx2g"# 启用服务
service:type: ClusterIPloadBalancerIP: ""# 安全配置
secret:enabled: truepasswords:elastic: "admin123!"  # 修改为强密码# 探针配置
readinessProbe:failureThreshold: 3initialDelaySeconds: 10periodSeconds: 10successThreshold: 3timeoutSeconds: 5livenessProbe:failureThreshold: 3initialDelaySeconds: 10periodSeconds: 10successThreshold: 3timeoutSeconds: 5

3.2 部署Elasticsearch

helm install elasticsearch elastic/elasticsearch \--namespace logging \--values elasticsearch-values.yaml \--version 8.5.1

3.3 验证Elasticsearch部署

# 检查Pod状态
kubectl get pods -n logging -l app=elasticsearch-master# 检查服务
kubectl get svc -n logging# 端口转发
kubectl port-forward svc/elasticsearch-master -n logging 9200:9200# curl
curl -u elastic:elastic123! http://localhost:9200

正常应该有下面这样输出

{"name" : "elasticsearch-master-0","cluster_name" : "elasticsearch","cluster_uuid" : "iZdUU_7eSDGOtwcg6KqRaQ","version" : {"number" : "7.17.3","build_flavor" : "default","build_type" : "docker","build_hash" : "5ad023604c8d7416c9eb6c0eadb62b14e766caff","build_date" : "2022-04-19T08:11:19.070913226Z","build_snapshot" : false,"lucene_version" : "8.11.1","minimum_wire_compatibility_version" : "6.8.0","minimum_index_compatibility_version" : "6.0.0-beta1"},"tagline" : "You Know, for Search"
}

4. 部署Kibana

4.1 创建Kibana values文件

kibana-values.yaml

# kibana-values.yaml
elasticsearchHosts: "http://elasticsearch-master.logging.svc.cluster.local:9200"# 服务配置
service:type: LoadBalancer  # 或者使用NodePort/ClusterIP + IngressloadBalancerIP: ""port: 5601# Elasticsearch连接配置
elasticsearch:username: "elastic"password: "YourElasticPassword123"  # 与Elasticsearch相同的密码# 配置参数
kibanaConfig:kibana.yml: |server:name: kibanahost: "0.0.0.0"monitoring:ui:enabled: truexpack:security:enabled: true# 探针配置
readinessProbe:httpGet:path: /api/statusport: 5601initialDelaySeconds: 10timeoutSeconds: 5periodSeconds: 10livenessProbe:httpGet:path: /api/statusport: 5601initialDelaySeconds: 10timeoutSeconds: 5periodSeconds: 30

4.2 部署Kibana

helm install kibana elastic/kibana \--namespace logging \--values kibana-values.yaml \--version 7.17.3

4.3 访问Kibana

kubectl get svc -n logging kibana-kibanakubectl port-forward -n logging svc/kibana-kibana 5601:5601

访问 http://localhost:5601,用户名:elastic,密码:elastic123!

4.4 使用Ingress暴露Kibana

kibana-ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: kibana-ingressnamespace: loggingannotations:nginx.ingress.kubernetes.io/rewrite-target: /nginx.ingress.kubernetes.io/ssl-redirect: "false"nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
spec:ingressClassName: nginxrules:- host: kibana.wilson.localhttp:paths:- path: /pathType: Prefixbackend:service:name: kibana-kibanaport:number: 5601

部署Kibana Ingress

kubectl apply -f kibana-ingress.yaml

5. 部署Filebeat

5.1 创建Filebeat values文件

创建 filebeat-values.yaml

# filebeat-values-clean.yaml
clusterRoleRules:- apiGroups: [coordination.k8s.io]resources: [leases]verbs: ['get', 'create', 'update']- apiGroups: [""]resources: ["nodes", "nodes/stats", "events", "endpoints", "pods", "services"]verbs: ["get", "list", "watch"]# 如果不需要采集容器日志,可以注释掉以下部分
daemonset:enabled: true# 确保卷定义不重复volumes:- name: varloghostPath:path: /var/log- name: varlibdockercontainershostPath:path: /var/lib/docker/containers- name: varlogpodshostPath:path: /var/log/pods- name: varlibcontainershostPath:path: /var/lib/containersvolumeMounts:- name: varlogmountPath: /var/logreadOnly: true- name: varlibdockercontainersmountPath: /var/lib/docker/containersreadOnly: true- name: varlogpodsmountPath: /var/log/podsreadOnly: true- name: varlibcontainersmountPath: /var/lib/containersreadOnly: true# 环境变量配置 - 确保不重复env:- name: NODE_NAMEvalueFrom:fieldRef:fieldPath: spec.nodeNamefilebeatConfig:filebeat.yml: |filebeat.inputs:- type: containerpaths:- /var/log/containers/*.logprocessors:- add_kubernetes_metadata:host: ${NODE_NAME}matchers:- logs_path:logs_path: "/var/log/containers/"output.elasticsearch:hosts: ['elasticsearch-master:9200']username: "elastic"password: "elastic123!"

5.2 部署Filebeat

helm install filebeat elastic/filebeat \--namespace logging \--values filebeat-values.yaml \--version 7.17.3

5.3 验证Filebeat部署

kubectl get pods --namespace=logging -l app=filebeat-filebeat -wkubectl get svc -n logging

6. 部署Logstash

6.1 创建Logstash values文件

创建 logstash-values.yaml

6.2 部署Logstash

helm install logstash elastic/logstash \--namespace logging \--values logstash-values.yaml \--version 7.17.3

6.3 验证Logstash部署

kubectl get pods --namespace=logging -l app=logstash-logstash -w

测试日志收集

kubectl run test-logger --image=busybox --restart=Never -- /bin/sh -c 'i=0; while true; do echo "$(date) - Test log message $i"; i=$((i+1)); sleep 5; done'

在Kibana中创建索引模式并查看日志

k8s_logging_kibana

清理资源

# 删除所有ELK组件
helm uninstall filebeat -n logging
helm uninstall logstash -n logging
helm uninstall kibana -n logging
helm uninstall elasticsearch -n logging# 删除命名空间
kubectl delete namespace logging# 清理持久卷(如果不再需要)
kubectl delete pvc -n logging --all

引用

https://github.com/WilsonPan/java-developer

例子: https://github.com/WilsonPan/java-developer/k8s/logging

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

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

相关文章

2025防脱洗护品牌最新TOP5实测推荐:老姜王+草本双核心,洗发水+按摩

​​随着消费者对天然洗护理念的深入追求,草本防脱洗发水市场迎来爆发式增长。本榜单基于成分天然度、防脱效果、头皮适配性、用户口碑四大维度,结合《2025中国洗护用品消费趋势报告》及第三方检测机构数据,权威解析…

2025草本防脱洗护品牌怎么选?名花贵族(大宏生物),以植萃力量,重新定义头皮健康养护,老姜王防脱洗发水、头皮按摩膏,效果明显,口碑推荐

在当代快节奏生活中,脱发、头痒、头油等头皮问题已成为困扰国民健康的重要议题。据《中国头皮健康白皮书》数据显示,我国2.5亿脱发人群中,25-35岁青壮年占比达63%,头皮敏感问题发生率较十年前上升27%。在此背景下,…

2025草本洗护哪个品牌效果最好?老姜王防脱、草本洗发水、头皮按摩膏十大品牌测评推荐

随着现代生活节奏加快,工作压力增大,长期熬夜、饮食不规律等问题导致我国超60%的成年人存在头皮敏感、头油头痒、发丝干枯,以及肌肤干燥、易过敏等亚健康状态。在日常洗护场景中,传统化学合成洗护产品虽清洁力强,…

ios17可自动清除短信验证码吗安全吗

可以。二、自动清除短信验证码的方法iOS 17 系统更新包括一个新选项,可以在通过自动填充功能将消息(和邮件)中的验证码插入 App 或网站后删除验证码。用户可以在【密码选项】下的【密码】应用中为验证码打开【自动清理…

iOS 虚拟现实开发怎样简化开发流程

在iOS上进行虚拟现实(VR)开发可能会遇到一些挑战,但通过使用合适的工具、框架和最佳实践,可以有效地简化开发流程。以下是一些建议,可以帮助你简化iOS虚拟现实开发的流程: 使用高效的开发工具和框架虚幻引擎5:对…

iOS 虚拟现实开发怎样应对高帧率

在iOS虚拟现实开发中,应对高帧率是一个重要的挑战,因为它直接影响到用户的体验和沉浸感。以下是一些有效的策略和技术,可以帮助开发者优化iOS虚拟现实应用的性能,以支持高帧率: 加速传感器优化优化采样率:根据应…

实用指南:【开发者导航】集成多引擎与离线查询的macOS开源翻译工具:Easydict

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

微信小程序 分享功能

/*** 用户点击右上角分享*/onShareAppMessage: function () {const pages = getCurrentPages();const currentPage = pages[pages.length - 1];return this.getPageShareInfo(currentPage);},onShareTimeline : funct…

微软Dynamics 365 CRM从入门到就业之路的规划

长沙爱码士IT给我们的一个学习进阶就业的规划如下:,聚焦微软 Dynamics 365 CRM 与 Power Platform 生态的实战型,主打从零基础到高薪就业的全链路培养,适配应届生、转行人群等想要进入 IT 咨询领域的学习者,以下是…

iOS 虚拟现实开发怎样优化体验

iOS 虚拟现实开发可以通过多种方式优化体验,以下是一些关键的策略和技术: 性能优化几何体优化:移除用户看不到的几何体面,简化模型设计,减少不必要的细节。 纹理和材质优化:使用纹理贴图集,避免使用normal maps…

LiveCD镜像

puppy镜像简介 Puppy Linux is a unique family of Linux distributions meant for the home-user computers. It was originally created by Barry Kauler in 2003. Puppy Linux是专用于家庭用户计算机的独特Linux发行…

最轻量的图片处理工具:一个可以很方便地添加文字和裁剪图片的.html

点击Chrome工具栏上的截图—区域截图—编辑,就能写字、画框、画线,缩放、填充。 但它不能改文字大小和字体。我这个可以。还能裁剪图片。 添加后的文字可用鼠标拖拽。多一个width: 1em,文字就竖着写了:玩法很多。H…

依旧面向对象Java基础学习

依旧Java基础学习final用final修饰类,则类不能被继承 用final修饰方法,则方法不能被重写 用final修饰变量,则变量仅能被赋值一次单例设计模式(一个类只有一个对象) //饿汉式单例类 public class A{//1.私有构造器…

Oracle数据库密码过期问题终极解决方案:期限取消+用户解锁+原密码保留

Oracle数据库密码过期问题终极解决方案:期限取消+用户解锁+原密码保留合集 - Oracle(36)1.实战!oracle 11g一键安装脚本分享2024-10-142.Oracle数据库七种闪回技术详解与实践示例10-313.Oracle ADG 切换方式详解:Sw…

岐金兰AI元人文理论深度研究报告:从价值对齐到价值共生的范式革命

岐金兰AI元人文理论深度研究报告:从价值对齐到价值共生的范式革命 引言:理论背景与研究动机 在人工智能技术引发全球性伦理与治理焦虑的时代背景下,传统的"价值对齐"范式正面临前所未有的挑战。2025年,独…

AI元人文:以LLM为舟,以元人文为罗盘,驶向人机共生文明的彼岸

AI元人文:以LLM为舟,以元人文为罗盘,驶向人机共生文明的彼岸 引言:一个文明级问题的浮现 当人工智能,特别是大语言模型,以超越摩尔定律的速度闯入人类文明的中心,我们面临的已不再是一个单纯的技术问题,而是一…

iOS 虚拟现实开发如何改进设备适配

在iOS虚拟现实开发中,改进设备适配是确保良好用户体验的关键。以下是一些建议,可以帮助你优化iOS虚拟现实应用的设备适配: 加速传感器优化优化采样率:根据应用需求和目标设备调整加速计传感器的采样率,以平衡性能…

iOS 虚拟现实开发如何提高性能

在iOS上进行虚拟现实(VR)开发时,性能优化是至关重要的。以下是一些提高iOS VR应用性能的策略和技术: 虚幻引擎5优化使用现代化Xcode:虚幻引擎5.3及以上版本支持现代化Xcode,这可以简化打包和分发流程。 配置IOSE…

深入解析:自用提示词01 || Prompt Engineering || 学习路线大纲 || 作用:通过启发式的问题来带动学习

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

iOS 虚拟现实开发如何提升可维护性

在iOS虚拟现实开发中,提升可维护性是一个重要的方面,它涉及到代码结构、框架选择、工具使用等多个方面。以下是一些提升可维护性的建议: 使用现代化的开发工具和框架Xcode现代化:使用最新的Xcode版本,它提供了更好…