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日志,没有的话正常收集。

5. Elastalert部署

官方chart地址:https://github.com/helm/charts/tree/master/stable/elastalert

安装

1
helm install -n elastalert ./elastalert --namespace logs

 效果图:

 

posted @   西门运维  阅读(3274)  评论(0编辑  收藏  举报
编辑推荐:
· .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技术实操系列(六):基于图像分类模型对图像进行分类
点击右上角即可分享
微信分享提示