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

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

来源: 责编: 时间:2023-10-23 17:05:56 401观看
导读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节点性能。 Jxn28资讯网——每日最新资讯28at.com

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

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

注意事项

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

部署模拟日志程序

项目地址

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

日志格式

模拟常见的后端服务日志,格式如下Jxn28资讯网——每日最新资讯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路径下。Jxn28资讯网——每日最新资讯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。Jxn28资讯网——每日最新资讯28at.com

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

自定义ingest处理

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

多应用采集思路

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

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

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • 太卷!Redmi MAX 100英寸电视便宜了:12999元买Redmi史上最大屏

    8月5日消息,从小米商城了解到,Redmi MAX 100英寸巨屏电视日前迎来官方优惠,到手价12999元,比发布价便宜了7000元,在大屏电视市场开卷。据了解,Redmi MAX 100
  • CSS单标签实现转转logo

    转转品牌升级后更新了全新的Logo,今天我们用纯CSS来实现转转的新Logo,为了有一定的挑战性,这里我们只使用一个标签实现,将最大化的使用CSS能力完成Logo的绘制与动画效果。新logo
  • 之家push系统迭代之路

    前言在这个信息爆炸的互联网时代,能够及时准确获取信息是当今社会要解决的关键问题之一。随着之家用户体量和内容规模的不断增大,传统的靠"主动拉"获取信息的方式已不能满足用
  • 自动化在DevOps中的力量:简化软件开发和交付

    自动化在DevOps中扮演着重要角色,它提升了DevOps的效能。通过自动化工具和方法,DevOps团队可以实现以下目标:消除手动和重复性任务。简化流程。在整个软件开发生命周期中实现更
  • “又被陈思诚骗了”

    作者|张思齐 出品|众面(ID:ZhongMian_ZM)如今的国产悬疑电影,成了陈思诚的天下。最近大爆电影《消失的她》票房突破30亿断层夺魁暑期档,陈思诚再度风头无两。你可以说陈思诚的
  • 超闭合精工铰链 彻底消灭缝隙 三星Galaxy Z Flip5与Galaxy Z Fold5发布

    2023年7月26日,三星电子正式发布了Galaxy Z Flip5与Galaxy Z Fold5。三星新一代折叠屏手机采用超闭合精工铰链,让折叠后的缝隙不再可见。同时,配合处
  • 超级标准版旗舰!iQOO 11S全球首发iQOO超算独显芯片

    上半年已接近尾声,截至目前各大品牌旗下的顶级旗舰都已悉数亮相,而下半年即将推出的顶级旗舰已经成为了数码圈爆料的主流,其中就包括全新的iQOO 11S系
  • 苹果140W USB-C充电器:采用氮化镓技术

    据10 月 30 日 9to5 Mac 消息报道,当苹果推出新的 MacBook Pro 2021 时,该公司还推出了新的 140W USB-C 充电器,附赠在 MacBook Pro 16 英寸机型的盒子里,也支
  • 三翼鸟智能家居亮相电博会,让用户体验更真实

    2021电博会在青岛国际会展中心开幕中,三翼鸟直接把“家”搬到了现场,成为了展会的一大看点。这也是三翼鸟继9月9日发布了行业首个一站式定制智慧家平台后的
Top