Filebeat 采集 k8s Pod 和 Events 日志实战操作

这篇具有很好参考价值的文章主要介绍了Filebeat 采集 k8s Pod 和 Events 日志实战操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、概述

要使用 Filebeat 采集 Kubernetes 中的 PodEvents 日志,您需要配置Filebeat 以适应这两种类型的数据。以下是详细说明:

Filebeat 采集 k8s Pod 和 Events 日志实战操作,Kubernetes,filebeat,日志采集,kubernetes,filebeat,日志采集

1)采集 Pod 日志流程介绍

Pod 日志是容器内产生的日志数据。Filebeat 可以监控这些日志并将它们发送到中央存储或分析系统。下面是如何配置 Filebeat 来采集 Pod 日志:

1、配置输入模块:

使用Filebeat的输入模块配置,选择 type: container。这告诉Filebeat应该监控容器的标准输出和日志文件。

filebeat.inputs:
- type: container
  paths:
    - /var/log/containers/*.log
  processors:
  - add_kubernetes_metadata:
      in_cluster: true

这个配置指定 Filebeat 监控容器的日志文件,同时使用add_kubernetes_metadata处理器添加 Kubernetes 元数据,以便在日志中包含有关 Pod 和容器的信息。

2、指定输出目标:
配置Filebeat的输出目标,通常是 ElasticsearchLogstash ,以将采集到的Pod日志发送到中央存储。

output.elasticsearch:
  hosts: ["elasticsearch:9200"]

这个示例配置指定将日志发送到Elasticsearch集群。

3)采集 Events 日志流程介绍

Kubernetes Events 日志记录了集群中发生的事件,如 Pod 的创建、删除、调度等。Filebeat 可以监控这些事件日志并将其发送到相同或不同的目标位置。以下是如何配置 Filebeat 来采集 Kubernetes Events 日志:

1、配置输入模块:

使用Filebeat的输入模块配置,选择type: kubernetes。这告诉Filebeat应该监控Kubernetes Events

filebeat.inputs:
- type: kubernetes
  include_events: [".*"]

这个配置指定 Filebeat 监控所有类型的事件。您可以根据需求过滤特定类型的事件。

2、指定输出目标:
配置 Filebeat 的输出目标,通常是 ElasticsearchLogstash ,以将采集到的 Events 日志发送到中央存储。

output.elasticsearch:
  hosts: ["elasticsearch:9200"]

这个示例配置指定将事件日志发送到 Elasticsearch 集群。

二、K8s 集群部署

k8s 环境安装之前写过很多文档,可以参考我以下几篇文章:

  • 【云原生】k8s 离线部署讲解和实战操作
  • 【云原生】k8s 环境快速部署(一小时以内部署完)

三、ElasticSearch 和 kibana 环境部署

虚拟机部署非常简单,开箱即用的,这里选择更加快捷的部署方式,k8s 部署,可以参考我这篇文章:ElasticSearch+Kibana on K8s 讲解与实战操作(版本7.17.3)

git clone https://gitee.com/hadoop-bigdata/elasticsearch-kibana-on-k8s.git

cd elasticsearch-kibana-on-k8s

### 1、开始部署elasticsearch
# 如果没有挂载目录,则需要提前创建,也可自己更换挂载目录
# 先创建本地存储目录
mkdir -p /opt/bigdata/servers/elasticsearch/data/data1
chmod -R 777 /opt/bigdata/servers/elasticsearch/data/data1

helm install my-elasticsearch ./elasticsearch -n elasticsearch --create-namespace
# 查看
helm get notes my-elasticsearch -n elasticsearch
kubectl get pods,svc -n elasticsearch -owide

# 查看日志
kubectl logs -f elasticsearch-master-0 -n elasticsearch


# 测试验证
curl http://192.168.182.110:30920/
curl http://192.168.182.110:30920/_cat/nodes
curl http://192.168.182.110:30920/_cat/health?pretty

### 2、开始部署kibana
# 先创建本地存储目录
mkdir -p /opt/bigdata/servers/kibana/data/data1
chmod -R 777 /opt/bigdata/servers/kibana/data/data1

helm install my-kibana ./kibana -n kibana --create-namespace
# 查看
helm get notes my-kibana -n kibana 
kubectl get pods,svc -n kibana -owide

四、Filebeat 采集配置

filebeat 的介绍可以参考我这篇文章:轻量级的日志采集组件 Filebeat 讲解与实战操作

1)采集 Pod 日志配置

filebeat.yaml 示例配置如下:

filebeat.inputs:
- type: container
  enabled: true
  paths:
    - /var/log/containers/*.log
  fields:
    app: myapp
    env: production
    index: k8s-pod-log
processors:
  - add_fields:
      fields:
        app: myapp
        env: production
  - drop_fields:
      fields: ["sensitive_data"]
  - add_kubernetes_metadata:
      in_cluster: true

output.elasticsearch:
  hosts: ["192.168.182.110:30920"]
  index: "filebeat-%{[fields][index]}-%{+yyyy.MM.dd}"

setup.template.name: "default@template"
setup.template.pattern: "filebeat-k8s-*"
setup.ilm.enabled: false

主要参数讲解:

  • 上述配置中,Filebeat的输入模块是container,它监视容器的日志文件,然后使用 add_kubernetes_metadata 处理器添加 Kubernetes 元数据,需要设置 in_clustertrue。日志将被发送到Elasticsearch。
  • setup.template.name 是 Filebeat 配置中的一个选项,用于设置为 Elasticsearch 索引模板的名称。索引模板定义了 Elasticsearch 中索引的结构,包括字段映射和设置。
  • setup.template.pattern 是 Filebeat 配置中的一个选项,用于设置 Elasticsearch 索引模板的模式(pattern)。
  • setup.ilm.enabled 是 Filebeat 配置中的一个选项,用于启用或禁用索引生命周期管理(Index Lifecycle Management,ILM)。ILM 是 Elasticsearch 的功能,用于自动管理索引的生命周期,包括索引的创建、滚动、删除等操作。

2)采集 Events 日志配置

【温馨提示】Kubernetes (k8s) 事件(Events)日志通常存储在 Kubernetes 集群的 etcd 存储中,默认情况下,事件数据在 Kubernetes 集群 ETCD 中保存 1 小时。

修改 kube-apiserver 的配置文件(/etc/kubernetes/manifests/kube-apiserver.yaml)可以调整 events 日志保留时长,并为 --event-ttl参数设置新的值。

因为 events 日志不存在文件存储,所以这里使用 k8s api 接口采集方式,当然也可以通过 kubectl get events -A -w 采集。

1、创建 filebeat 授权 token

filebeat-serviceaccount.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: filebeat-service-account

---

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: filebeat-role
rules:
- apiGroups:
  - ""
  resources:
  - events
  verbs:
  - get
  - list
  - watch

---

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: filebeat-role-binding
subjects:
- kind: ServiceAccount
  name: filebeat-service-account
  namespace: default
roleRef:
  kind: ClusterRole
  name: filebeat-role
  apiGroup: rbac.authorization.k8s.io

# 创建用户和角色
kubectl apply -f filebeat-service-account.yaml

获取 ServiceAccount 令牌:

kubectl get secret $(kubectl get serviceaccount filebeat-service-account -o jsonpath='{.secrets[0].name}') -o jsonpath='{.data.token}' | base64 -d

测试一下。

TOKEN=`kubectl get secret $(kubectl get serviceaccount filebeat-service-account -o jsonpath='{.secrets[0].name}') -o jsonpath='{.data.token}' | base64 -d`
echo $TOKEN

curl -ks --header "Authorization: Bearer $TOKEN" https://192.168.182.110:6443/api/v1/events?watch=true

# 也可以通过ca证书这样访问
curl --cacert "/etc/kubernetes/pki/ca.crt" --header "Authorization: Bearer $TOKEN"  https://192.168.182.110:6443/api/v1/events?watch=true

Filebeat 采集 k8s Pod 和 Events 日志实战操作,Kubernetes,filebeat,日志采集,kubernetes,filebeat,日志采集

2、filebeat 配置

filebeat.yaml 示例配置如下:

filebeat.inputs:
- type: httpjson
  enabled: true
  name: k8s-events
  url: "https://192.168.182.110:6443/api/v1/events?watch=true"
  http_method: "GET"
  ssl.certificate_authorities: ["/etc/kubernetes/pki/ca.crt"]
  #ssl.verification_mode: none
  json.keys_under_root: true
  interval: 10s
  fields:
    type: k8s-events
    index: k8s-event-log
  #paths:
  #  - "/"
  #headers:
  #  Authorization: "Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Ilh0Y2k0a1NOdXIyZnRNTUE2STZ5TEtqcnBRMkpOcDh4UHFOZzlMeW9UQXcifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImZpbGViZWF0LXNlcnZpY2UtYWNjb3VudC10b2tlbi1wNGtqNyIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJmaWxlYmVhdC1zZXJ2aWNlLWFjY291bnQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJhNTEyNzQ3Ny0zYjIwLTQzMjAtODY0MS1hNmJmOTFlYTBhMzIiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6ZGVmYXVsdDpmaWxlYmVhdC1zZXJ2aWNlLWFjY291bnQifQ.j3qmbs3n45xpWUHMyviHsmsGLQOhH6gz6FtkPKLDr-1D4m4paOivoS1Coy7pdlC5J40YNQeEwrHA9L7Hy1UQ-02Y98rrHn0O_oOxE4qR06-bmua7j3lAEWHCRrmmsmk9HGkPar1HxIERn6BNwRyWeQdHc6CvnCbwqvBBnpYuZ7lcO1agbZZ3E02MUwNN1ZG2n_dWi9dnRJGuc9Capm50AZzolo8k8frK5nLs8T5GxDI4bMC7Gbq6FaL8RVI_DVJpm7zGFJrtzPwhVFnqCAdMFeQbRIzpmWseSA-GHH4WQ3JpLdkvzUZr8jhZ6jMSCE6u8UGO2AeEjBElZpzpwVk4cg"

logging.level: debug

output.elasticsearch:
  hosts: ["192.168.182.110:30920"]
  index: "filebeat-%{[fields][index]}-%{+yyyy.MM.dd}"

setup.template.name: "default@template"
setup.template.pattern: "filebeat-k8s-*"
setup.ilm.enabled: false

【温馨提示】也可以把header打开,并设置 ssl.verification_mode: none。正对应下面的两种curl方式:

TOKEN=`kubectl get secret $(kubectl get serviceaccount filebeat-service-account -o jsonpath='{.secrets[0].name}') -o jsonpath='{.data.token}' | base64 -d`
echo $TOKEN

curl -ks --header "Authorization: Bearer $TOKEN" https://192.168.182.110:6443/api/v1/events?watch=true

# 也可以通过ca证书这样访问
curl --cacert "/etc/kubernetes/pki/ca.crt" --header "Authorization: Bearer $TOKEN"  https://192.168.182.110:6443/api/v1/events?watch=true

字段解释:

  • json.keys_under_root:默认情况下(json.keys_under_root 为 false),Filebeat 将在 Elasticsearch 中创建一个名为 “json” 的字段,包含整个 JSON 数据。如果将 json.keys_under_root 设置为 true,则 Filebeat 将直接在 Elasticsearch 中创建 “log”、“message” 和 “level” 这些字段,使它们成为根级别字段。
  • setup.template.name 是 Filebeat 配置中的一个选项,用于设置为 Elasticsearch 索引模板的名称。索引模板定义了 Elasticsearch 中索引的结构,包括字段映射和设置。
  • setup.template.pattern 是 Filebeat 配置中的一个选项,用于设置 Elasticsearch 索引模板的模式(pattern)。
  • setup.ilm.enabled 是 Filebeat 配置中的一个选项,用于启用或禁用索引生命周期管理(Index Lifecycle Management,ILM)。ILM 是 Elasticsearch 的功能,用于自动管理索引的生命周期,包括索引的创建、滚动、删除等操作。

【温馨提示】注意版本,低版本的是不支持httpjson的,这里我选择的是这个7.17.14版本,https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.17.14-linux-x86_64.tar.gz

查看ES 索引是否正常采集(索引会自动创建)

curl http://192.168.182.110:30920/_cat/indices

Filebeat 采集 k8s Pod 和 Events 日志实战操作,Kubernetes,filebeat,日志采集,kubernetes,filebeat,日志采集
这里只是为了讲述如何采集 pod 和 Events 日志,一般不会直接采集到 ES,而是会通过 kafka中间件作为缓冲,这样可以避免大数据量导致 ES 压力过大。生成环境的采集架构图如下(后面也会讲解):

Filebeat 采集 k8s Pod 和 Events 日志实战操作,Kubernetes,filebeat,日志采集,kubernetes,filebeat,日志采集


Filebeat 采集 k8s Pod 和 Events 日志实战操作讲解就先到这里了,有任何疑问也可关注我公众号:大数据与云原生技术分享,进行技术交流,如本篇文章对您有所帮助,麻烦帮忙一键三连(点赞、转发、收藏)~文章来源地址https://www.toymoban.com/news/detail-756253.html

到了这里,关于Filebeat 采集 k8s Pod 和 Events 日志实战操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java操作k8s api示例:使用kubeconfig文件认证;获取所有pod;获取pod内应用容器的启动日志

    公司准备将应用容器化部署,先使用了华为云的 Kubernetes 服务,后面又使用阿里云的 Kubernetes 服务。并短期一个月内无法判断走哪个云商。而作为一个在公司内部用于应用发布,部署的应用。在对接完华为云的 Kubernetes 服务 Api 后。再对接阿里云发现阿里云并没用像华为云一

    2023年04月09日
    浏览(58)
  • K8s部署轻量级日志收集系统EFK(elasticsearch + filebeat + kibana)

    目录 K8s部署EFK(elasticsear + filebeat + kibana)日志收集 一.准备镜像 二.搭建Elasticsearch + kibana 1.在可执行kubectl命令的服务器准备安装的yml文件 2.在elasticsearch-kibana目录下创建配置文件elasticsearch.yml 3.创建kibana配置文件kibana.yml 4.在k8s中创建elasticsearch和kibana的配置文件configmap 5.检查

    2024年02月08日
    浏览(65)
  • 【Java】基于fabric8io库操作k8s集群实战(pod、deployment、service、volume)

    一开始了解到Java Api库操作k8s集群,有两个,分别为: kubernetes-client/java fabric8io/kubernetes-client 但个人对比使用了两个发现,还是 fabric8io更易用 ,用的人多是有道理的, fabric8io和yaml文件十分贴切 ,所以 通俗易懂 。本文前提是已配置好集群,已经熟悉了kubectl工具常用命令。

    2024年02月02日
    浏览(48)
  • k8s部署elk+filebeat;springCloud集成elk+filebeat+kafka+zipkin实现多个服务日志链路追踪聚合到es

    如今2023了,大多数javaweb架构都是springboot微服务,一个前端功能请求后台可能是多个不同的服务共同协做完成的。例如用户下单功能,js转发到后台 网关gateway服务 ,然后到 鉴权spring-sercurity服务 ,然后到 业务订单服务 ,然后到 支付服务 ,后续还有发货、客户标签等等服务

    2024年02月16日
    浏览(46)
  • (二)k8s实战-深入Pod详解

    创建Pod nginx样例 参数名 类型 字段说明 apiVersion String K8S APl 的版本,可以用 kubectl api versions 命令查询 kind String yam 文件定义的资源类型和角色 metadata Object 元数据对象,下面是它的属性 metadata.name String 元数据对象的名字,比如 pod 的名字 metadata.namespace String 元数据对象的命名

    2024年02月11日
    浏览(39)
  • 第26关 K8s日志收集揭秘:利用Log-pilot收集POD内业务日志文件

    ------ 课程视频同步分享在今日头条和B站 大家好,我是博哥爱运维。 OK,到目前为止,我们的服务顺利容器化并上了K8s,同时也能通过外部网络进行请求访问,相关的服务数据也能进行持久化存储了,那么接下来很关键的事情,就是怎么去收集服务产生的日志进行数据分析及

    2024年02月03日
    浏览(46)
  • Kubernetes(k8s):精通 Pod 操作的关键命令

    💖The Begin💖点点关注,收藏不迷路💖 Kubernetes 是一个强大的容器编排平台,其中的核心概念之一就是 Pod。Pod 是 Kubernetes 中最小的可部署单元,它由一个或多个容器组成,共享网络和存储资源。 在本篇博客中,我们将深入探讨 Kubernetes 集群中与 Pod 相关的一些重要命令,帮

    2024年04月14日
    浏览(185)
  • K8s(Kubernetes)学习(三):pod概念及相关操作

    摘取官网: https://kubernetes.io/zh-cn/docs/concepts/workloads/pods/#working-with-pods 1.1 简介 Pod 是可以在 Kubernetes 中 创建和管理的、最小的可部署的计算单元 。 Pod (就像在鲸鱼荚或者豌豆荚中) 是一组(一个或多个)容器 ; 这些容器共享存储、网络、以及怎样运行这些容器的声明。 P

    2024年02月13日
    浏览(94)
  • 【云原生|K8s系列第4篇】:实战查看Pod和工作节点

    本期文章是K8s系列第4篇,主要是实战查看pod和工作节点。通过本期文章:我们将学习了解Kubernetes中的Pod和工作节点,并且对已经部署的应用故障排除。 在前期的文章中,已经介绍了一些云原生入门的知识及简单实战,感兴趣的同学可以去我的云原生专栏中学习,任意门:云

    2024年01月16日
    浏览(55)
  • K8S初级入门系列之三-Pod的基本概念和操作

           Pod的原意是豌豆荚的意思,一个豆荚里面包含了很多豆子。在K8S中,Pod也是类似的意思,只不过这里的豆子就是容器。在K8S初级入门系列之一-概述中,我们对Pod有个初步的了解。 1、Pod是K8S编排和调度的最小基础单元。         了解容器的同学会知道,容器之间通过

    2024年02月15日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包