前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Helm部署Filebeat + ELK

Helm部署Filebeat + ELK

作者头像
院长技术
发布2021-02-19 14:35:42
发布2021-02-19 14:35:42
2.8K00
代码可运行
举报
文章被收录于专栏:院长运维开发院长运维开发
运行总次数:0
代码可运行

系统架构图:

代码语言:javascript
代码运行次数:0
运行
复制
1) 多个Filebeat在各个Node进行日志采集,然后上传至Logstash
2) 多个Logstash节点并行(负载均衡,不作为集群),对日志记录进行过滤处理,然后上传至Elasticsearch集群
3) 多个Elasticsearch构成集群服务,提供日志的索引和存储能力
4) Kibana负责对Elasticsearch中的日志数据进行检索、分析

一、Elasticsearch部署

官方chart地址:https://github.com/elastic/helm-charts/tree/master/elasticsearch

创建logs命名空间

代码语言:javascript
代码运行次数:0
运行
复制
kubectl create ns logs

添加elastic helm charts 仓库

代码语言:javascript
代码运行次数:0
运行
复制
helm repo add elastic https://helm.elastic.co

安装

代码语言:javascript
代码运行次数:0
运行
复制
helm install -name elasticsearch elastic/elasticsearch --namespace logs

参数说明

代码语言:javascript
代码运行次数:0
运行
复制
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

二、Filebeat部署

官方chart地址:https://github.com/elastic/helm-charts/tree/master/filebeat

添加elastic helm charts 仓库

代码语言:javascript
代码运行次数:0
运行
复制
helm repo add elastic https://helm.elastic.co

安装

代码语言:javascript
代码运行次数:0
运行
复制
helm install -name filebeat elastic/filebeat --namespace logs

参数说明:

代码语言:javascript
代码运行次数:0
运行
复制
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参数:

代码语言:javascript
代码运行次数:0
运行
复制
- name: varlibdockercontainers
  hostPath:
    path: /var/lib/docker/containers   #改为docker安装路径

对java程序的报错异常log实现多行合并,用multiline定义正则来匹配。

代码语言:javascript
代码运行次数:0
运行
复制
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}'

三. Kibana部署

官方chart地址:https://github.com/elastic/helm-charts/tree/master/kibana

添加elastic helm charts 仓库

代码语言:javascript
代码运行次数:0
运行
复制
helm repo add elastic https://helm.elastic.co

安装

代码语言:javascript
代码运行次数:0
运行
复制
helm install -name kibana elastic/kibana --namespace logs

参数说明:

代码语言:javascript
代码运行次数:0
运行
复制
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"

四. Logstash部署

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

安装

代码语言:javascript
代码运行次数:0
运行
复制
$ helm install -name logstash stable/logstash --namespace logs

参数说明:

代码语言:javascript
代码运行次数:0
运行
复制
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日志,没有的话正常收集。

代码语言:javascript
代码运行次数:0
运行
复制
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}'

五. Elastalert部署

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

安装

代码语言:javascript
代码运行次数:0
运行
复制
helm install -n elastalert ./elastalert --namespace logs

效果图:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-02-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 系统架构图:
  • 一、Elasticsearch部署
    • 创建logs命名空间
    • 添加elastic helm charts 仓库
    • 安装
    • 参数说明
  • 二、Filebeat部署
    • 添加elastic helm charts 仓库
    • 安装
    • 参数说明:
    • 那么问题来了,filebeat默认收集宿主机上docker的日志路径:/var/lib/docker/containers。如果我们修改了docker的安装路径要怎么收集呢,很简单修改chart里的DaemonSet文件里边的hostPath参数:
    • 对java程序的报错异常log实现多行合并,用multiline定义正则来匹配。
  • 三. Kibana部署
    • 添加elastic helm charts 仓库
    • 安装
    • 参数说明:
  • 四. Logstash部署
    • 安装
    • 参数说明:
    • 匹配label:json的pod日志,没有的话正常收集。
  • 五. Elastalert部署
    • 安装
    • 效果图:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档