首页 > 其他分享 >Kubernetes 部署 ELK

Kubernetes 部署 ELK

时间:2023-01-02 22:23:13浏览次数:60  
标签:ELK filebeat name Kubernetes 部署 elasticsearch k8s logstash metadata

Kubernetes 部署 ELK

项目背景

k8s集群搭建后,平时运维过程中不仅要观察监控平台,查看集群运行情况,还要在集群出现问题时,对问题点进行及时定位,由于集群内pod过多后,日志定位比较费时,因此一个集中式的日志文件系统成了运维人员的好帮手,本次实验采用的是filebeat+logstash+elasticsearch+kibana

组件功能描述

filebeat负责采集每个节点上宿主机和容器的日志,发送给logstash,logstash过滤不必要的信息后传递给elasticsearch进行储存,kibana展示储存在elasticsearch上的数据,并可以通过查询语句提取关键字

这里说一下为什么需要filebeat+logstash而不是单独的logstash,因为logstash中的jvm消耗的资源比较多,性能没有filebeat好,其实也可以不使用logstash,单独使用filebeat,logstash主要作用是有很多插件可以使用,并且提供过滤功能

filebeat收集数据

apiVersion: v1
kind: ConfigMap
metadata:
  name: filebeat-config
  namespace: logging

data:
  filebeat.yml: |
    filebeat.inputs:
      - type: log
        paths:
          - /var/log/nginx
        document_type: k8s-nginx

    setup.template.name: "k8s-nginx"
    setup.template.pattern: "k8s-nginx-*"
    output.elasticsearch:
      hosts: ["elasticsearch:9200"]
      index: "k8s-nginx-%{+yyyy.MM.dd}"
 #   output.logstash:
  #    hosts: ['logging-logstash:5044']
   #   enabled: true
---

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: filebeat
  namespace: logging
spec:
  selector:
    matchLabels:
      app: filebeat
  template:
    metadata:
      labels:
        k8s-app: filebeat
        app: filebeat
    spec:
      terminationGracePeriodSeconds: 30
      containers:
      - name: filebeat
        image: elastic/filebeat:7.14.0 
        imagePullPolicy: IfNotPresent 
        args: [
          "-c", "/etc/filebeat.yml",
          "-e",
        ]
        volumeMounts:
        - name: config
          mountPath: /etc/filebeat.yml
          readOnly: true
          subPath: filebeat.yml
        - name: log
          mountPath: /var/log/
      volumes:
      - name: config
        configMap:
          defaultMode: 0755
          name: filebeat-config
      - name: log
        hostPath:
          path: /var/log/
          type: Directory

logstash过滤数据

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: logstash-configmap
  namespace: logging
  labels:
    k8s-app: logstash-configmap
data:
  logstash.conf: |
      input {
        beats {
            port => "5044"
            codec => "json"
        }
      }
      filter{
        json{
                source =>  "message"
                remove_field => "message"
        }
      }
      output {
        elasticsearch {
            hosts => "elasticsearch:9200"
            index => "nginx-json-log-%{+YYYY.MM.dd}"
        }
      }
---
apiVersion: apps/v1 
kind: Deployment
metadata:
  name: logstash
  namespace: logging
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: logstash
  template:
    metadata:
      labels:
        k8s-app: logstash
    spec:
      containers:
      - name: logstash
        image: logstash:7.14.0 
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 5044
        volumeMounts:
          - name: config-volume
            mountPath: /usr/share/logstash/pipeline/
      volumes:
      - name: config-volume
        configMap:
          name: logstash-configmap
          items:
            - key: logstash.conf
              path: logstash.conf
---
apiVersion: v1
kind: Service
metadata:
  name: logstash
  namespace: logging
spec:
  ports:
  - port: 5044
    targetPort: 5044
    protocol: TCP
  selector:
    k8s-app: logstash
  type: ClusterIP

es存储数据

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv
  namespace: logging
spec:
  capacity:                             # PV的存储容量
    storage: 1Gi
  accessModes:                  # PV的访问模式
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  storageClassName: nfs-storage
  nfs:
    path: /data
    server: 192.168.206.135


apiVersion: v1
kind: Service
metadata:
  name: elasticsearch
  namespace: logging
  labels:
    app: elasticsearch
spec:
  selector:
    k8s-app: elasticsearch
  clusterIP: None
  ports:
    - port: 9200
      name: db
    - port: 9300
      name: inter
      
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: elasticsearch
  namespace: logging
  labels:
    k8s-app: elasticsearch
spec:
  serviceName: elasticsearch
  selector:
    matchLabels:
      k8s-app: elasticsearch
  template:
    metadata:
      labels:
        k8s-app: elasticsearch
    spec:
      containers:
      - image: elasticsearch:7.14.0
        name: elasticsearch
        resources:
          limits:
            cpu: 1
            memory: 2Gi
          requests:
            cpu: 0.5
            memory: 500Mi
        env:
          - name: "discovery.type"
            value: "single-node"
          - name: ES_JAVA_OPTS
            value: "-Xms512m -Xmx2g"
        ports:
        - containerPort: 9200
          name: db
          protocol: TCP
        - name: inter
          containerPort: 9300
        volumeMounts:
        - name: elasticsearch-data
          mountPath: /usr/share/elasticsearch/data
  volumeClaimTemplates:
  - metadata:
      name: elasticsearch-data
    spec:
      storageClassName: "nfs-storage"
      accessModes: [ "ReadWriteMany" ]
      resources:
        requests:
          storage: 1Gi


# 查询es索引
curl http://elasticsearch:9200/_cat/indices?v

kibana展示数据


apiVersion: apps/v1
kind: Deployment
metadata:
  name: kibana
  namespace: logging 
  labels:
    k8s-app: kibana
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: kibana
  template:
    metadata:
      labels:
        k8s-app: kibana
    spec:
      containers:
      - name: kibana
        image: kibana:7.14.0
        resources:
          limits:
            cpu: 1
            memory: 1G
          requests:
            cpu: 0.5
            memory: 500Mi
        env:
          - name: ELASTICSEARCH_HOSTS
            value: http://elasticsearch:9200
        ports:
        - containerPort: 5601
          protocol: TCP

---
apiVersion: v1
kind: Service
metadata:
  name: kibana
  namespace: logging
spec:
  ports:
  - port: 5601
    protocol: TCP
    targetPort: 5601
    nodePort: 30000
  type: NodePort
  selector:
    k8s-app: kibana

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: kibana
  namespace: logging
spec:
  rules:
  - host: "dev-1.ad2cloud.cn"
    http:
      paths:
      - path: /kibana
        pathType: Prefix
        backend:
          service:
            name: kibana
            port:
              number: 5601

参考博客地址

标签:ELK,filebeat,name,Kubernetes,部署,elasticsearch,k8s,logstash,metadata
From: https://www.cnblogs.com/wangchengww/p/17020715.html

相关文章

  • [Grafana监控工具]--安装和部署
    一、参考文档1、安装说明​​http://docs.grafana.org/ ​​2、使用说明​​http://docs.grafana.org/guides/getting_started​​​​http://docs.grafana.org/guides/bas......
  • SonarQube部署
    目录一、部署SonarQube1、准备docker-compose文件2、启动docker-compose3、页面配置二、安装中文插件SnoarQube是一款代码质量、安全扫描、分析的平台,从多维度分析代码:代......
  • aliyun baota 部署 ruoyi-vue
    nginx配置worker_processes1;events{worker_connections1024;}http{includemime.types;default_typeapplication/octet-stream;......
  • walle 1.0最新部署
    环境centos7mysql5.6(预先部署)php5.6(预先部署,php需要开启pdo_mysql,exec函数执行)nginx1.22gitComposeransible安装walle下载walle安装包wget https://github.com/meolu/wall......
  • ELK日志收集&&日志收集方案
    31.ELK日志收集日志分析系统-k8s部署ElasticSearch集群-帝都攻城狮-博客园(cnblogs.com)https://blog.csdn.net/miss1181248983/article/details/11377394331.......
  • yum仓库的灵活部署和nfs共享存储服务
    一、yum仓库的灵活部署1、YUM(YellowdogUpdaterModified)●基于RPM包构建的软件更新机制●可以自动解决依赖关系●所有软件包由集中的YUM软件仓库提供 2、yum仓......
  • Kubernetes(k8s) kubectl convert常用命令
    kubectl在$HOME/.kube目录中查找一个名为config的配置文件。可以通过设置KUBECONFIG环境变量或设置--kubeconfig参数来指定其它kubeconfig文件。本文主要介绍K......
  • 部署mysql-5.7.36主从复制
    24.mysql实战24.1集群要求1.搭建一个主N从的MYsql集群2.从节点可以水平扩展3.所有的写操作,都只能在主节点Master上执行4.所有的读操作可以在所有节点上执行#部署......
  • springboot工程打包与部署(Linux下)
    本文介绍springboot工程在Linux下,打包、部署、日志配置、shell脚本自启动等一系列操作。 1、springboot工程打包 特殊情况:本地jar的打包 2、日志配置 3、部署......
  • 二进制部署mysql
    二进制部署mysql目录二进制部署mysql1.1下载二进制格式的mysql软件包1.2创建用户mysql1.3解压软件包到/usr/local1.4修改mysql目录的属主组1.5添加环境变量1.6建立......