当前位置:首页 > 科技  > 软件

ELK Stack生产实践——pod日志采集(Elastic Agent方案)

来源: 责编: 时间:2023-10-23 17:05:56 431观看
导读pod日志采集方案方案选型DaemonSet+Elastic Agent方案:使用DaemonSet控制器在每个kubernetes集群节点上运行elastic agent服务,业务容器日志目录统一挂载到节点指定目录下。在fleet中配置集成Custom Logs集成策略,指定日

pod日志采集方案

方案选型

  1. DaemonSet+Elastic Agent方案:使用DaemonSet控制器在每个kubernetes集群节点上运行elastic agent服务,业务容器日志目录统一挂载到节点指定目录下。在fleet中配置集成Custom Logs集成策略,指定日志采集目录和ingest pipeline,实现自定义路径下的日志收集和清理操作。
  2. DaemonSet+filebeat+logstash方案:通过DaemonSet方式在每个kubernetes集群节点上运行filebeat服务。以容器运行时containerd为例,配置filebeat输入路径为/var/log/containers/<kubernetes.container.id>.log,输出路径为logstash。并在logstash中配置规则提取container名称变量,然后在logstash输出中引用container名称变量,以此来实现写入到es的不同index中。
  3. sidecar+fluentd方案:每个业务容器中通过sidecar方式运行一个fluentd日志采集处理容器,Fluentd是一个开源的数据收集器,专为处理数据流设计,使用JSON作为数据格式。它采用了插件式的架构,具有高可扩展性高可用性,同时还实现了高可靠的信息转发。由于logstash处理性能较弱且占用资源较高,可以通过fluentd一个组件替代filebeat+logstash的功能,从而简化日志采集流程与配置。
  4. sidecar+filebeat+kafka+logstash方案:每个业务容器中通过sidecar方式运行一个filebeat日志采集容器,用于采集业务容器产生的日志并输出到kafka中。借助Kafka的Consumer Group技术可部署多个logstash副本,提升数据处理能力和高可用性。需要注意的是每个consumer最多只能使用一个partition,当一个Group内consumer的数量大于partition的数量时,只有等于partition个数的consumer能同时消费,其他的consumer处于等待状态。因此想要增加logstash的消费性能,可以适当的增加topic的partition数量,但kafka中partition数量过多也会导致kafka集群故障恢复时间过长。

适用场景

在小规模日志场景下,首选DaemonSet+Elastic Agent方案采集pod日志,我们只需要调整集成策略的采集日志路径和ingest pipeline管道处理规则即可,集群性能瓶颈取决于ingest节点性能。 VBr28资讯网——每日最新资讯28at.com

在大规模日志场景下,推荐使用sidecar+fluentd方案,由fluentd实现日志的采集与过滤处理后直接写入ES集群,集群性能瓶颈取决于es集群hot节点性能。 VBr28资讯网——每日最新资讯28at.com

在超大规模且业务存在瞬间高峰的日志场景下,推荐使用sidecar+filebeat+kafka+logstash方案。可将日志内容暂存到kafka消息队列中,由logstash集群逐个消费并写入ES,防止瞬间高峰导致直接写入ES失败,集群性能瓶颈取决于logstash节点性能。VBr28资讯网——每日最新资讯28at.com

注意事项

应用日志应配置日志轮换以防止日志文件无限增长并占用过多的磁盘空间。通过设置日志轮换参数,可以控制日志文件的大小、保留的日志文件数量以及轮换的频率。这种做法可以高效管理日志,避免磁盘空间问题。VBr28资讯网——每日最新资讯28at.com

部署模拟日志程序

项目地址

代码仓库地址:https://gitee.com/cuiliang0302/log_demoVBr28资讯网——每日最新资讯28at.com

日志格式

模拟常见的后端服务日志,格式如下VBr28资讯网——每日最新资讯28at.com

2023-07-23 09:35:18.987 | INFO     | __main__:debug_log:49 - {'access_status': 200, 'request_method': 'GET', 'request_uri': '/account/', 'request_length': 67, 'remote_address': '186.196.110.240', 'server_name': 'cu-36.cn', 'time_start': '2023-07-23T09:35:18.879+08:00', 'time_finish': '2023-07-23T09:35:19.638+08:00', 'http_user_agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.2999.0 Safari/537.36'}2023-07-23 09:35:19.728 | WARNING  | __main__:debug_log:47 - {'access_status': 403, 'request_method': 'PUT', 'request_uri': '/public/', 'request_length': 72, 'remote_address': '158.113.125.213', 'server_name': 'cu-35.cn', 'time_start': '2023-07-23T09:35:18.948+08:00', 'time_finish': '2023-07-23T09:35:20.343+08:00', 'http_user_agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.2999.0 Safari/537.36'}2023-07-23 09:35:19.793 | INFO     | __main__:debug_log:49 - {'access_status': 200, 'request_method': 'GET', 'request_uri': '/public/', 'request_length': 46, 'remote_address': '153.83.121.71', 'server_name': 'cm-17.cn', 'time_start': '2023-07-23T09:35:19.318+08:00', 'time_finish': '2023-07-23T09:35:20.563+08:00', 'http_user_agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:57.0) Gecko/20100101 Firefox/57.0'}2023-07-23 09:35:20.614 | ERROR    | __main__:debug_log:45 - {'access_status': 502, 'request_method': 'GET', 'request_uri': '/public/', 'request_length': 62, 'remote_address': '130.190.246.56', 'server_name': 'cu-34.cn', 'time_start': '2023-07-23T09:35:20.061+08:00', 'time_finish': '2023-07-23T09:35:21.541+08:00', 'http_user_agent': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Hot Lingo 2.0)'}

打包并上传镜像

[root@es-master ~]# cd /opt/[root@es-master opt]# git clone https://gitee.com/cuiliang0302/log_demo.git[root@es-master opt]# cd log_demo/[root@es-master log_demo]# lsDockerfile  log.py  main.py  readme.md  requirements.txt[root@es-master log_demo]# docker build -t harbor.local.com/app/log_demo:1.0 .[root@es-master log_demo]# docker push harbor.local.com/app/log_demo:1.0

部署服务

在本案例中,我们将容器日志目录通过hostPath方式挂载到宿主机的/var/log/logDemo路径下。VBr28资讯网——每日最新资讯28at.com

[root@tiaoban fleet]# cat log-demo.yaml apiVersion: apps/v1kind: Deploymentmetadata:  name: log-demospec:  replicas: 2  selector:    matchLabels:      app: log-demo  template:    metadata:      labels:        app: log-demo    spec:      containers:      - name: log-demo        image: harbor.local.com/app/log_demo:1.0        resources:          requests:            memory: "32Mi"            cpu: "100m"          limits:            memory: "128Mi"            cpu: "500m"        volumeMounts:          - mountPath: /opt/logDemo/log            name: logs      volumes:        - name: logs          hostPath:            path: /var/log/logDemo            type: DirectoryOrCreate[root@tiaoban fleet]# kubectl apply -f log-demo.yaml deployment.apps/log-demo created[root@tiaoban fleet]# kubectl get pod -o wideNAME                        READY   STATUS    RESTARTS       AGE     IP             NODE    NOMINATED NODE   READINESS GATESlog-demo-76c57cf9dc-9znrd   1/1     Running   0              2m45s   10.244.3.124   work3   <none>           <none>log-demo-76c57cf9dc-lkvrq   1/1     Running   0              2m45s   10.244.4.158   work2   <none>           <none>

配置代理采集日志

创建集成策略

日志路径填写挂载到Elastic agent的日志路径,即/var/log/logDemo/info.log,代理策略选择现有的Elastic Agent on ECK policy。VBr28资讯网——每日最新资讯28at.com

图片图片VBr28资讯网——每日最新资讯28at.com

自定义ingest处理

在先前的自定义日志采集(fleet方式)中已有详细讲解,具体内容可参考文档https://www.cuiliangblog.cn/detail/article/62,此处不再赘述。VBr28资讯网——每日最新资讯28at.com

多应用采集思路

通常情况下我们需要采集多个自定义应用的日志内容,我们只需要保证应用日志目录均挂载至宿主机/var/log目录下,然后配置fleet代理策略,指定对应的日志路径和名称以及ingest pipeline即可。VBr28资讯网——每日最新资讯28at.com

图片图片VBr28资讯网——每日最新资讯28at.com

如下所示,我们需要采集myapp和springboot两个应用的日志,只需要添加多条Custom logs集成策略即可。VBr28资讯网——每日最新资讯28at.com

图片图片VBr28资讯网——每日最新资讯28at.com

博客地址:https://www.cuiliangblog.cn/VBr28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-14621-0.htmlELK Stack生产实践——pod日志采集(Elastic Agent方案)

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Python高频面试题——如何在字符串中删除指定字符

下一篇: Go并发可视化解释:sync.WaitGroup

标签:
  • 热门焦点
  • 中兴AX5400Pro+上手体验:再升级 双2.5G网口+USB 3.0这次全都有

    2021年11月的时候,中兴先后发布了两款路由器产品,中兴AX5400和中兴AX5400 Pro,从产品命名上就不难看出这是隶属于同一系列的,但在外观设计上这两款产品可以说是完全没一点关系
  • 5月安卓手机好评榜:魅族20 Pro夺冠

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年5月1日至5月31日,仅限国内市场。第一名:魅族20 Pro好评率:97.50%不得不感慨魅族老品牌还
  • 消息称迪士尼要拍真人版《魔发奇缘》:女主可能也找黑人演员

    8月5日消息,迪士尼确实有点忙,忙着将不少动画改成真人版,继《美人鱼》后,真人版《白雪公主》、《魔发奇缘》也在路上了。据外媒消息称,迪士尼将打造真人版
  • Rust中的高吞吐量流处理

    作者 | Noz编译 | 王瑞平本篇文章主要介绍了Rust中流处理的概念、方法和优化。作者不仅介绍了流处理的基本概念以及Rust中常用的流处理库,还使用这些库实现了一个流处理程序
  • 得物效率前端微应用推进过程与思考

    一、背景效率工程随着业务的发展,组织规模的扩大,越来越多的企业开始意识到协作效率对于企业团队的重要性,甚至是决定其在某个行业竞争中突围的关键,是企业长久生存的根本。得物
  • JavaScript学习 -AES加密算法

    引言在当今数字化时代,前端应用程序扮演着重要角色,用户的敏感数据经常在前端进行加密和解密操作。然而,这样的操作在网络传输和存储中可能会受到恶意攻击的威胁。为了确保数据
  • 冯提莫签约抖音公会 前“斗鱼一姐”消失在直播间

    来源:直播观察提起&ldquo;冯提莫&rdquo;这个名字,很多网友或许听过,但应该不记得她是哪位主播了。其实,作为曾经的&ldquo;斗鱼一姐&rdquo;,冯提莫在游戏直播的年代影响力不输于现
  • 华为将推出盘古数字人大模型 可帮助用户12小时完成数字人生成

    在今日举行的2023年华为云数字文娱AI创新峰会上,华为云全球Marketing与销售服务总裁石冀琳表示,华为云将在后续推出盘古数字人大模型,可帮助用户12小
  • 利用职权私自解除被封帐号 Meta开除20多名员工

    11月18日消息,据外媒援引知情人士表示,过去一年时间内,Facebook母公司Meta解雇或处罚了20多名员工以及合同工,指控这些人通过内部系统以不当方式重置用户帐号,其
Top