helm部署Filebeat + ELK
helm部署Filebeat + ELK
系统架构图:
1) 多个Filebeat在各个Node进行日志采集,然后上传至Logstash
2) 多个Logstash节点并行(负载均衡,不作为集群),对日志记录进行过滤处理,然后上传至Elasticsearch集群
3) 多个Elasticsearch构成集群服务,提供日志的索引和存储能力
4) Kibana负责对Elasticsearch中的日志数据进行检索、分析
1. Elasticsearch部署
官方chart地址:https://github.com/elastic/helm-charts/tree/master/elasticsearch
创建logs命名空间
1 | kubectl create ns logs |
添加elastic helm charts 仓库
1 | helm repo add elastic https: //helm .elastic.co |
安装
1 | helm install --name elasticsearch elastic /elasticsearch --namespace logs |
参数说明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | image: "docker.elastic.co/elasticsearch/elasticsearch" imageTag: "7.2.0" imagePullPolicy: "IfNotPresent" podAnnotations: {} esJavaOpts: "-Xmx1g -Xms1g" resources: requests: cpu: "100m" memory: "2Gi" limits: cpu: "1000m" memory: "2Gi" volumeClaimTemplate: accessModes: [ "ReadWriteOnce" ] storageClassName: "nfs-client" resources: requests: storage: 50Gi |
2. Filebeat部署
官方chart地址:https://github.com/elastic/helm-charts/tree/master/filebeat
Add the elastic helm charts repo
1 | helm repo add elastic https: //helm .elastic.co |
Install it
1 | helm install --name filebeat elastic /filebeat --namespace logs |
参数说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | image: "docker.elastic.co/beats/filebeat" imageTag: "7.2.0" imagePullPolicy: "IfNotPresent" resources: requests: cpu: "100m" memory: "100Mi" limits: cpu: "1000m" memory: "200Mi" |
那么问题来了,filebeat默认收集宿主机上docker的日志路径:/var/lib/docker/containers。如果我们修改了docker的安装路径要怎么收集呢,很简单修改chart里的DaemonSet文件里边的hostPath参数:
1 2 3 | - name: varlibdockercontainers hostPath: path: /var/lib/docker/containers #改为docker安装路径 |
对java程序的报错异常log实现多行合并,用multiline定义正则来匹配。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | filebeatConfig: filebeat.yml: | filebeat.inputs: - type : docker containers.ids: - '*' multiline.pattern: '^[0-9]' multiline.negate: true multiline.match: after processors: - add_kubernetes_metadata: in_cluster: true output.elasticsearch: hosts: '${ELASTICSEARCH_HOSTS:elasticsearch-master:9200}' |
3. Kibana部署
官方chart地址:https://github.com/elastic/helm-charts/tree/master/kibana
Add the elastic helm charts repo
1 | helm repo add elastic https: //helm .elastic.co |
Install it
1 | helm install --name kibana elastic /kibana --namespace logs |
参数说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | elasticsearchHosts: "http://elasticsearch-master:9200" replicas: 1 image: "docker.elastic.co/kibana/kibana" imageTag: "7.2.0" imagePullPolicy: "IfNotPresent" resources: requests: cpu: "100m" memory: "500m" limits: cpu: "1000m" memory: "1Gi" |
4. Logstash部署
官方chart地址:https://github.com/helm/charts/tree/master/stable/logstash
安装
1 | $ helm install --name logstash stable /logstash --namespace logs |
参数说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | image: repository: docker.elastic.co /logstash/logstash-oss tag: 7.2.0 pullPolicy: IfNotPresent persistence: enabled: true storageClass: "nfs-client" accessMode: ReadWriteOnce size: 2Gi |
匹配label:json的pod日志,没有的话正常收集。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | filebeatConfig: filebeat.yml: | filebeat.autodiscover: providers: - type : kubernetes templates: - condition: equals: kubernetes.labels.logFormat: "json" config: - type : docker containers.ids: - "${data.kubernetes.container.id}" json.keys_under_root: true json.overwrite_keys: true json.add_error_key: true - config: - type : docker containers.ids: - "${data.kubernetes.container.id}" processors: - add_kubernetes_metadata: in_cluster: true output.elasticsearch: hosts: '${ELASTICSEARCH_HOSTS:elasticsearch-master:9200}' |
5. Elastalert部署
官方chart地址:https://github.com/helm/charts/tree/master/stable/elastalert
安装
1 | helm install -n elastalert . /elastalert --namespace logs |
效果图:
微信

支付宝

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类