Day 7 ELK Stack + Filebeat 收集 k8s log

2021 铁人赛 DAY7

今天来安装 ELK Stack,并且收集 k8s 的 log,但是会有一点点不同,我们看下图:

ELK

这个图简单表现出一个利用 ELK 收集 log 的流程,你的 log file 会被送到 logstash 做资料清洗或是处理, logstash 再将处理好的资料(log)送至 elsaticsearch 做储存,最後再由 kibana 将你的资料视觉化、展示给你看,而今天所分享的方法较为简单,虽然也可以收集 log 但却在实际应用上会不大方便使用,我们看下图:

ELK+Beat

跟上面那张图相比,多了一个 beat,那 beat 在这里担任什麽工作呢?beat 负责的主要是收集资料,并送至 elasticsearch 或 logstash 做资料处理,再送至 elasticsearch,不过beat有分很多种,metricbeat 、 filebeat 等,每个 beat 的分工各不相同,像 filebeat ,顾名思义就是会去收集 file 的 data ,而这也是我们今天要使用的,不过我们今天不做资料处理,也就是没有 logstash 的部分,所以会导致数面所提到的问题,那不赘述太多,先来安装看看吧!

利用官方CRD部署

安装elk自定义的resource

kubectl apply -f https://download.elastic.co/downloads/eck/1.3.1/all-in-one.yaml

安装elasticsearch

kubectl apply -f es.yaml

es.yaml

apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: quickstart
spec:
  version: 7.10.2
  nodeSets:
    - name: default
      count: 1
      config:
        node.store.allow_mmap: false
      podTemplate:
        spec:
          volumes:
          - name: elasticsearch-data
            emptyDir: {}

测试elasticsearch是否成功部属

Port-foward the elasticsearch service

kubectl port-forward service/quickstart-es-http 9200

从secret中获取密码

默认帐号:elastic

PASSWORD=$(kubectl get secret quickstart-es-elastic-user -o go-template='{{.data.elastic | base64decode}}')
echo $PASSWORD

测试

curl -u "elastic:$PASSWORD" -k "https://localhost:9200"

安装kibana

 kubectl apply -f kibana.yaml

kibana.yaml

apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:
  name: quickstart
spec:
  version: 7.10.2
  count: 1
  elasticsearchRef:
    name: quickstart

测试kibana是否成功部属

Port-foward the kibana service

kubectl port-forward --address=0.0.0.0 service/quickstart-kb-http 5601:5601

从secret中获取密码

默认帐号:elastic

kubectl get secret quickstart-es-elastic-user -o=jsonpath='{.data.elastic}' | base64 --decode; echo

测试

https://{node-IP}:5601

安装filebeat

kubectl apply -f filebeat.yaml

filebeat.yaml

apiVersion: beat.k8s.elastic.co/v1beta1
kind: Beat
metadata:
  name: quickstart
spec:
  type: filebeat
  version: 7.10.2
  elasticsearchRef:
    name: quickstart
  config:
    filebeat.inputs:
      - type: container
        paths:
          - /var/log/containers/*.log
  daemonSet:
    podTemplate:
      spec:
        dnsPolicy: ClusterFirstWithHostNet
        hostNetwork: true
        securityContext:
          runAsUser: 0
        containers:
          - name: filebeat
            volumeMounts:
              - name: varlogcontainers
                mountPath: /var/log/containers
              - name: varlogpods
                mountPath: /var/log/pods
              - name: varlibdockercontainers
                mountPath: /var/lib/docker/containers
        volumes:
          - name: varlogcontainers
            hostPath:
              path: /var/log/containers
          - name: varlogpods
            hostPath:
              path: /var/log/pods
          - name: varlibdockercontainers
            hostPath:
              path: /var/lib/docker/containers

建立测试pod来产生log

test.yaml

apiVersion: v1
kind: Pod
metadata:
  name: counter
spec:
  containers:
  - name: count
    image: busybox
    # 输出hello world
    args: [/bin/sh, -c,
            'i=0; while true; do echo "hello world: $i: $(date)"; i=$((i+1)); sleep 3; done']

ps: 记得create 或 apply :)

观察log

至kibana查找上述pod所产生的log

Ya! 有 log 了,不过省略 logstash 其实还蛮麻烦的,这些 log 一但多了起来,样式也多样化之後,会挺不好看的,目前我不清楚是否能在 filebeat 上进行简单的资料处理,所以资料处理的部分都在 logstash 上做,如果有人知道 filebeat 可以多做一些什麽的话,还请各位留言告知谢谢!

一天:)


<<:  EP 14: The MenuItem of ListView binds Command in itself Model

>>:  Alpine Linux Porting (一点一?)

透过 RISC-V 模拟器搞懂指令管线化

本文目标 理解处理器在各个 stage 会有何种行为 Pinpline 的概念 现代处理器面临的挑战...

Day 01 前言

这次有幸能藉由铁人赛重新认识及学习Azure AI的相关技术, 以下为这次参赛的课题以及时程(会再陆...

Day 29 使用 docker-compose 来安装 Wordpress

使用 docker 安装 Wordpress 这个相当热门的 CMP 内容管理平台,可以省去不少过往...

第 3 集:CSS 魔力

此篇内容不会有 CSS 语法教学,而是着重在使用 Bootstrap 5 时需要具备的 CSS kn...

this指向who

我们很常会在function中看到使用this这个关键字。但它是甚麽,要怎麽用?听说它的判断方法很麻...