一、概述

Filebeat 是一个轻量级的开源数据搜集器,一般用于从不同来历搜集和发送日志和事件数据。在 KubernetesDocker 环境中,Filebeat 常用于搜集容器的日志。以下是通过 Filebeat 搜集容器日志的三种常见办法的实战说明:

【榜首种办法】:Filebeat 与 运用工作在同一容器

  • 安置Filebeat:首要,在Kubernetes中或Docker环境中,安置 Filebeat 作为一个Sidecar容器,它将与运用容器一同工作(在同一个容器中工作)

  • 配备Filebeat:在Filebeat的配备文件(filebeat.yml)中,界说日志途径,以告知 Filebeat 从哪里搜集容器日志。

  • 输出设置:配备Filebeat将搜集到的日志数据发送到所需的目的地,如Elasticsearch、Logstash或Kafka。

  • 发起Filebeat:发起Filebeat容器,它将初步搜集容器的日志,并将其发送到配备的目的地。

【第二种办法】:Filebeat 与 运用工作不在同一容器

  • 安置Filebeat:同样,在Kubernetes中或Docker环境中,安置 Filebeat作为一个独立的 Sidecar 容器。

  • 配备Filebeat:在Filebeat的配备文件中,运用Docker日志驱动来搜集容器日志。

  • 输出设置:配备Filebeat的输出,以将搜集到的日志数据发送到政策。

  • 发起Filebeat:发起Filebeat容器,它将初步搜集容器的日志。

【第三种办法】通过 Kubernetes Filebeat DaemonSet

  • 安置 Filebeat:在Kubernetes中,可以运用Filebeat DaemonSet安置Filebeat作为一个集群等级的日志搜集器。

  • Filebeat配备:在Filebeat的配备中,设置输入插件以搜集容器的日志。

  • Filebeat输出:配备Filebeat的输出插件,以将搜集到的日志数据发送到政策,如Elasticsearch或其他存储。

  • 发起Filebeat:发起Filebeat DaemonSet,它将在Kubernetes集群中搜集容器的日志。

容器日志搜集的三种办法实战操作说明(Filebeat)
Filebeat 官方文档:www.elastic.co/guide/en/be…

曾经也写过关于 filebeat 更具体的介绍和实战操作的文章,只不过 filebeat 不是安置在 k8s 上,感兴趣的小伙伴可以先查阅我之前的文章:

二、K8s 集群安置

k8s 环境设备之前写过许多文档,可以参看我以下几篇文章:

三、ElasticSearch 和 kibana 环境安置

这儿可以挑选以下安置办法:

这儿我挑选 docker-compose 安置办法。

1)安置 docker

# 设备yum-config-manager配备东西
yum -y install yum-utils
# 主张运用阿里云yum源:(举荐)
#yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 设备docker-ce版别
yum install -y docker-ce
# 发起并开机发起
systemctl enable --now docker
docker --version

2)安置 docker-compose

curl -SL https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
chmod  x /usr/local/bin/docker-compose
docker-compose --version

3)创立网络

# 创立
docker network create bigdata
# 查看
docker network ls

4)批改 Linux 句柄数和最大线程数

#查看当时最大句柄数
sysctl -a | grep vm.max_map_count
#批改句柄数
vi /etc/sysctl.conf
vm.max_map_count=262144
#暂时收效,批改后需求重启才干收效,不想重启可以设置暂时收效
sysctl -w vm.max_map_count=262144
#批改后需求从头登录收效
vi /etc/security/limits.conf
# 添加以下内容
* soft nofile 65535
* hard nofile 65535
* soft nproc 4096
* hard nproc 4096
# 重启服务,-h 立刻重启,默许距离一段时间才会初步重启
reboot -h now

5)下载安置包初步安置

# 这儿挑选 docker-compose 安置办法
git clone https://gitee.com/hadoop-bigdata/docker-compose-es-kibana.git
cd docker-compose-es-kibana
chmod -R 777 es kibana
docker-compose -f docker-compose.yaml up -d
docker-compose ps

四、容器日志搜集的三种办法实战操作

1)【榜首种办法】:Filebeat 与 运用工作在同一容器(不举荐)

这种办法运用服务与搜集服务是没有阻隔性的。一般不举荐运用这种办法。这儿运用 Trino on k8s 来测验

1、下载 Trino on k8s 包

helm repo add trino https://trinodb.github.io/charts
helm pull trino/trino
tar -xf trino-0.14.0.tgz

2、从头构建镜像(将filebeat打包到Trino镜像中)

【1】下载 trino 镜像

docker pull trinodb/trino:432

【2】下载 Filebeat 安置包 官网地址www.elastic.co/cn/download…

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.6.2-linux-x86_64.tar.gz

【3】批改发起脚本

# trio的发起服务脚本:/usr/lib/trino/bin/run-trino
# 注意配备文件,可以打包在容器里,也可以通过configmap办理,配备文件怎么配备,可以看我上面filebeat的文章。
#!/bin/bash
set -xeuo pipefail
launcher_opts=(--etc-dir /etc/trino)
if ! grep -s -q 'node.id' /etc/trino/node.properties; then
    launcher_opts =("-Dnode.id=${HOSTNAME}")
fi
# 发起filebeat服务
nohup /opt/filebeat-7.6.2-linux-x86_64/filebeat -e -c /opt/filebeat-7.6.2-linux-x86_64/filebeat.yml >/dev/null 2>&1 &
exec /usr/lib/trino/bin/launcher run "${launcher_opts[@]}" "$@"

【4】初步重构镜像 Dockerfile

FROM trinodb/trino:432
ADD filebeat-7.6.2-linux-x86_64.tar.gz /opt/
COPY run-trino /usr/lib/trino/bin/run-trino
CMD ["/usr/lib/trino/bin/run-trino"]

【5】初步安置

helm install mytrino  ./trino -n trino --create-namespace

2)【第二种办法】:Filebeat 与 运用工作不在同一容器

1、Pod 下容器之间目录同享完成

默许情况下pod中的容器目录是不同享的,kubernets 可以通过emptyDir完成在同一Pod的不同容器间同享文件系统。示例如下:

apiVersion: v1
kind: Pod
metadata: 
  name: volume-emptydir
spec:
  containers:
  - name: write
    image: centos:centos7
    imagePullPolicy: IfNotPresent
    command: ["bash", "-c", "echo haha > /data/1.txt ;sleep 600000" ]
    volumeMounts:
    - name: data
      mountPath: /data
  - name: read
    image: centos:centos7
    imagePullPolicy: IfNotPresent
    command: ["bash", "-c", "cat  /data/1.txt ; sleep 600000"]
    volumeMounts:
    - name: data
      mountPath: /data
  volumes:
  - name: data
    emptyDir: {}

2、初步编排安置

【1】添加 coordinator/worker 日志搜集配备,trino/templates/deployment-coordinator.yamltrino/templates/deployment-worker.yaml

        containers:
        - args:
          - -e
          - -E
          - http.enabled=true
          env:
          - name: POD_NAMESPACE
            valueFrom:
              fieldRef:
                apiVersion: v1
                fieldPath: metadata.namespace
          - name: NODE_NAME
            valueFrom:
              fieldRef:
                apiVersion: v1
                fieldPath: spec.nodeName
          image: docker.elastic.co/beats/filebeat:7.17.3
          imagePullPolicy: IfNotPresent
          livenessProbe:
            exec:
              command:
              - sh
              - -c
              - |
                #!/usr/bin/env bash -e
                curl --fail 127.0.0.1:5066
            failureThreshold: 3
            initialDelaySeconds: 10
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 5
          name: filebeat
          readinessProbe:
            exec:
              command:
              - sh
              - -c
              - |
                #!/usr/bin/env bash -e
                filebeat test output
            failureThreshold: 3
            initialDelaySeconds: 10
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 5
          resources:
            limits:
              cpu: "1"
              memory: 200Mi
            requests:
              cpu: 100m
              memory: 100Mi
          securityContext:
            privileged: false
            runAsUser: 0
          volumeMounts:
          - mountPath: /usr/share/filebeat/filebeat.yml
            name: filebeat-config
            readOnly: true
            subPath: filebeat.yml
          - name: data-share-dir
            mountPath: /data/trino/var
        volumes:
        - configMap:
            defaultMode: 384
            name: filebeat-config
          name: filebeat-config
        - name: data-share-dir
          emptyDir: {}
     # trino 镜像配备也得加上这个同享目录的挂载
          volumeMounts:
          - name: data-share-dir
            mountPath: /data/trino/var

filebeat configmap 配备

apiVersion: v1
data:
  filebeat.yml: |
    filebeat.inputs:
    - type: container
      paths:
        - /data/trino/var/log/*.log
      fields:
        index: k8s-pod-log
      processors:
      - add_kubernetes_metadata:
          host: ${NODE_NAME}
          matchers:
          - logs_path:
              logs_path: "/data/trino/var/log/"

    output.elasticsearch:
      host: '${NODE_NAME}'
      hosts: '192.168.182.110:9200'
      index: "filebeat-%{[fields][index]}-%{ yyyy.MM.dd}"
    setup.template.name: "default@template"
    setup.template.pattern: "filebeat-k8s-*"
    setup.ilm.enabled: false
kind: ConfigMap
metadata:
  annotations:
    meta.helm.sh/release-name: filebeat
    meta.helm.sh/release-namespace: logging
  labels:
    app: filebeat-filebeat
    app.kubernetes.io/managed-by: Helm
  name: filebeat-config

3)【第三种办法】通过 Kubernetes Filebeat DaemonSet

这种搜集办法可以参看我这篇文章:Filebeat on k8s 日志搜集实战操作


容器日志搜集的三种办法实战操作说明就先到这儿了,有任何疑问也可注重我公众号:大数据与云原生技术同享,进行技术交流,如本篇文章对您有所帮助,麻烦帮助一键三连(点赞、转发、收藏)~

容器日志搜集的三种办法实战操作说明(Filebeat)