【k8s】【ELK】Sidecar容器运行日志Agent

news2025/1/16 13:44:44

1、日志收集场景分析与说明

对于那些能够将日志输出到本地文件的Pod,我们可以使用Sidecar模式方式运行一个日志采集Agent,对其进行单独收集日志

在这里插入图片描述

1、首先需要将Pod中的业务容器日志输出至本地文件,而后运行一个Filebeat边车容器,采集本地路径下的日志;
2、Filebeat容器需要传递如下变量;环境:了解Pod属于隶属于哪个环境;项目名称:为了后期能在单个索引中区分出不同的项目;
podip:为了让用户清楚该Pod属于哪个IP;
3、Logstash根据不同的环境,拉取不同的topic数据,然后将数据存储至ES对应的索引中;
4、Kibana添加不同环境的 index pattern,而后选择对应环境 不同的项目 进行日志探索与展示;

Sidecar部署思路

1、制作一个业务镜像,要求镜像输出日志至本地;
2、制作Filebeat镜像,配置Input、output等信息;
3、采用边车模式运行不同环境的Pod,确保日志信息能输出至Kafka集群;
4、准备不同环境下Logstash配置文件,而后读取数据写入ES集群;
5、使用kibana添加索引,进行日志探索与展示;

2、制作Tomcat业务镜像

下载tomcat包

#wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.27/bin/apache-tomcat-10.0.27.tar.gz --no-check-certificate
wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.8/bin/apache-tomcat-10.1.8.tar.gz --no-check-certificate

[root@master01 tomcatImage]# ls
apache-tomcat-10.1.8.tar.gz

编写Dockerfile

FROM openjdk:8-jre

RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    echo 'Asia/Shanghai' > /etc/timezone

ENV VERSION=10.1.8
ADD ./apache-tomcat-${VERSION}.tar.gz /app
RUN mv /app/apache-tomcat-${VERSION} /app/tomcat && \
    rm -f /app/apache-tomcat-${VERSION}.tar.gz 
    
ADD ./entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

EXPOSE 8080
CMD ["/bin/bash","-c","/entrypoint.sh"]

编写entrypoint.sh

# entrypoint.sh
# 启动tomcat方法,并且将日志打到对应的文件中
# 异常是多行的;  这里测试将tomcat jvm调整到20m  不断访问 就会抛出异常  OOM;
OPTS="-Xms${JVM_XMS:-25m} -Xmx${JVM_XMX:-25m} -XX:+UseConcMarkSweepGC"
sed -i "2a JAVA_OPTS=\"${OPTS}\"" /app/tomcat/bin/catalina.sh

cd /app/tomcat/bin && \
./catalina.sh  run &>>/app/tomcat/logs/stdout.log

编写entrypoint.sh

# 启动tomcat方法,并且将日志打到对应的文件中
# 异常是多行的;  这里测试将tomcat jvm调整到20m  不断访问 就会抛出异常  OOM;
OPTS="-Xms${JVM_XMS:-25m} -Xmx${JVM_XMX:-25m} -XX:+UseConcMarkSweepGC"
sed -i "2a JAVA_OPTS=\"${OPTS}\"" /app/tomcat/bin/catalina.sh

cd /app/tomcat/bin && \
./catalina.sh  run &>>/app/tomcat/logs/stdout.log

构建镜像并推送仓库

[root@master01 tomcatImage]# ls
apache-tomcat-10.1.8.tar.gz  Dockerfile  entrypoint.sh

docker build -t harbor.oldxu.net/base/tomcat:10.1.8_with_log .
docker push harbor.oldxu.net/base/tomcat:10.1.8_with_log

3.制作Filebeat镜像

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.17.6-x86_64.rpm

Dockerfile

FROM centos:7
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    echo 'Asia/Shanghai' > /etc/timezone
    
#拷贝filebeat 和 拷贝filebeat配置文件(核心)
ENV VERSION=7.17.6
ADD ./filebeat-${VERSION}-x86_64.rpm /
RUN rpm -ivh /filebeat-${VERSION}-x86_64.rpm && \
    rm -f /filebeat-${VERSION}-x86_64.rpm

ADD ./filebeat.yml /etc/filebeat/filebeat.yml

ADD ./entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

CMD ["/bin/bash","-c","/entrypoint.sh"]  

编写filebeat配置

{ENV} :用于定义环境的变量;
{PROJECT_NAME} :用于定义项目名称的变量;
{MULTILINE} :用于定义多行合并的正则变量;
{KAFKA_HOSTS} :用于定义KAFKA集群地址的变量;
{PodIP} :用于获取该Pod地址的变量;
{Node} :用于获取该Pod所处的节点;

filebeat.yml

filebeat.input
- type: log
  enabled: true
  paths:
    - /logu/*.log
    - /logu/*/*.log
  tags: ["logu"]
  fields:
    topic: {PROJECT_NAME}
    podip: {PodIP}
    node: {Node}
  fields_under_root: true # 增加的所有字段都为顶级字段
  multiline.pattern: '{MULTILINE}'
  multiline.negate: true
  multiline.match: after
  multiline.max_lines: 10000
  
output.kafka:
  hosts: [{KAFKA_HOSTS}]
  topic: app-{ENV}-%{[topic]}
  required_acks: 1
  compression: gzip
  max_message_bytes: 1000000

entrypoint.sh

#1、替换filbeat配置文件中的内容
Beat_Conf=/etc/filebeat/filebeat.yml
sed -i s@{ENV}@${ENV:-test}@g ${Beat_Conf}
sed -i s@{PodIP}@${PodIP:-"no-ip"}@g ${Beat_Conf}
sed -i s@{Node}@${Node:-"none"}@g ${Beat_Conf}

sed -i s@{PROJECT_NAME}@${PROJECT_NAME:-"no-define"}@g ${Beat_Conf}
sed -i s@{MULTILINE}@${MULTILINE:-"^\\\d{2}"}@g ${Beat_Conf}  # \\用来转义
sed -i s@{KAFKA_HOSTS}@${KAFKA_HOSTS}@g ${Beat_Conf}

# 运行filebeat
filebeat -e -c /etc/filebeat/filebeat.yml

制作镜像&推送

[root@master01 filebeatImage]# ls
Dockerfile  entrypoint.sh  filebeat-7.17.6-x86_64.rpm  filebeat.yml
docker build -t harbor.oldxu.net/base/filebeat_sidecar:7.17.6 .
docker push harbor.oldxu.net/base/filebeat_sidecar:7.17.6

4.以边车模式运行Pod

4.1 运行测试环境Pod

4.1.1 创建namespace 和 Secrets

4.1.2 创建tomcat deployment

4.1.3 创建tomcat svc

4.1.4 进行压力测试

4.1.5 检查KafkaTopic

分割线

4.2 运行生产环境Pod (prod)

4.2.1 创建namespace和 Secrets

4.2.2 创建tomcat deployment (prod)

4.2.3 创建service (prod)

4.2.4 进行压力测试 (prod)

4.2.5 检查KafkaTopic (prod)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/533019.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Mysql实战】存储过程详解

快速入门 创建存储过程 CREATE PROCEDURE p1()BEGIN-- SQL语句SELECT count(*) FROM user; END;调用存储过程 CALL p1();查看存储过程 SHOW CREATE PROCEDURE 存储过程名称删除存储过程 DROP PROCEDURE [ IF EXISTS ] 存储过程名称 ;入参出参 IN:该类参数作为输…

关于不同处理器的函数调用规则

关于不同处理器的函数调用规则 接前面一篇变长参数调用的记录,这次从原理上进行了进一步研究。 不同调用规则对对于编译出来的汇编影响很大的,这里之前的理解比较粗浅,尤其是一般教科书或者网上能看到的内容都比较老,这里记录一下…

【马蹄集】第十一周作业

第十一周作业 目录 MT2012 竹鼠的白色季节MT2013 照亮街道MT2014 打靶MT2026 二维坐标点移动MT2027 一秒成零 MT2012 竹鼠的白色季节 难度:黄金    时间限制:1秒    占用内存:250M 题目描述 小码哥的竹鼠养殖场中的竹鼠都在一条直线的隔间…

深度学习笔记之递归网络(一)引子:序列模型

深度学习笔记之递归网络——引子:序列模型 引言回顾:齐次马尔可夫假设序列模型序列信息序列数据建模 引言 从本节开始,将介绍递归网络系列。本节将介绍序列模型。 回顾:齐次马尔可夫假设 齐次马尔可夫假设——在隐马尔可夫模型…

LeetCode 124. 二叉树中的最大路径和

124. 二叉树中的最大路径和 描述 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一…

收藏|必读10本pcb设计书籍推荐

1."High-Speed Digital Design: A Handbook of Black Magic"。 作者是Howard Johnson和Martin Graham。这是一本关于高速数字电路设计的优秀教材,适合那些需要设计高速电路的工程师。 作为比较早出来的信号完整性参考书,对国内的信号完整性研…

Apollo与SpringBoot整合原理深度剖析

Apollo与SpringBoot整合原理深度剖析 Spring环境上下文模块Value注解如何完成属性注入application.yml等配置文件加载时机监听环境上下文prepared事件Loader加载配置文件 Apollo与SpringBoot整合原理Value注解的热更新原理 Spring环境上下文模块 Spring Envionment设计如下: 需…

Unlimiformer:一个Transformers输入无限长文本思路和中文长文本摘要上的性能实验

Unlimiformer:一个Transformers输入无限长文本思路和中文长文本摘要上的性能实验 1、前言 在处理长文本输入时,以往方法常采用截断(如:max_len512)、分块(将输入分成多个块,并进行逐块处理&am…

【EasyPoi实战系列】Spring Boot使用EasyPoi实现多Sheet导出 - 第470篇

悟纤:师傅,那个讨人厌的产品又来捣乱了~ 😒 师傅:哈哈,你又来抱怨老板设定的无休止需求了啊? 😆 悟纤:没错,这次竟然要求导出多个Sheet,这还能不能好好地活着…

十九、Sleuth整合Zipkin链路跟踪

目录 链路跟踪概述 SpringCloud Sleuth 1、架构图 2、主要概念 2.1、跟踪:Trace (一条完整链路--包含很多span(微服务接口)) 2.2、跨度:Span 2.3、标注:Annotation Sleuth整合Zipkin实现分布式链路跟踪 1、搭建zipkin环境 1.1、下载…

2023年5月中国数据库排行榜:OTO组合回归育新机,华为高斯蓄势待发展雄心

路漫漫其修远兮,吾将上下而求索。 2023年5月的 墨天轮中国数据库流行度排行 火热出炉,本月共有262个数据库参与排名。本月排行榜前十变动较大,可以用一句话概括为:openGauss 立足创新夺探花;华为云GaussDB 云上之争成赢…

单片机设计_室内环境智能监测系统(STM32 OLED ESP8266 DHT11 MQ-2 加湿器)

想要更多项目私wo!!! 一、电路设计 室内环境智能监测系统 主要功能: 1.检测空气温湿度 2.检测光照强度 3.检测烟雾浓度 4.数据显示在手机端和设备OLED屏幕上 5.当空气温度高于设定的阈值时,风扇开启 6.当空气湿度…

【Linux从入门到精通】上下文概念详解

上篇文章(进程的基本概念)我们讲解了进程后,还留下了一个上下文数据概念还没有解释。本篇文章会对上下文概念进行详解。在理解上下文概念时,同时会引出很多新的概念。我们都会对此进行详细解释,希望本篇文章会对你有所…

7款产品经理必备的交互软件

作为UI/UX设计师,我相信你或多或少接触过很多交互设计软件。 为您整理总结了几款流行的交互软件。如果您在上述交互设计软件中确实存在选择困难,希望通过阅读本文帮助您快速做出正确的选择。 即时设计 即时设计是一款「专业UI设计工具」,不…

redis从零开始(1)----基本类型:string/hash/list

认识redis NoSQL Nosql not only sql,泛指非关系型数据库,与之相对的是RDBMS(Relational Database Management System),即关系型数据库 关系型数据库:列行,同一个表下数据的结构是一样的。 非关系型数据库&#xff…

企业有必要对三方应用进行安全管控吗?

什么是三方应用? 三方应用是指由第三方开发者创建的软件应用程序,与操作系统或其他主要平台的开发公司无关。这些应用程序通常被设计为在特定平台上运行,并且具有特定的功能或服务,例如社交媒体应用程序、游戏和生产力工具等。 简…

IntersectionObserver“替代”滚动条监听

概要 IntersectionObserver 接口提供了一种异步观察目标元素与其祖先元素或顶级文档视口(viewport)交叉状态的方法。其祖先元素或视口被称为根(root)。 当一个 IntersectionObserver 对象被创建时,其被配置为监听根中…

Blender渲染分辨率如何优化设置?这些渲染技巧你要知道!

尽管 Blender不断改进其功能,随着硬件的不断进步而变得越来越复杂,该软件最好的是允许很多人免费试用它。但即使所有人都可以访问,这并不意味着Blender可以克服低端GPU的局限性。 并非所有PC都是平等的,也不是每个3D设计师都可以使…

Aho-Corasick automaton,ac自动机实现

文章目录 写在前面算法概述trie树的构建trie树的节点结构插入P串到trie树中fail指针的创建 搜索过程测试程序 写在前面 原作者的视频讲解链接:[算法]轻松掌握ac自动机_哔哩哔哩_bilibili 原作者的代码实现:data-structure-and-algorithm/aho_corasick.c…

机器视觉表面划痕检测流程

表面缺陷检测常见的检测主要有物体表面的划痕、污渍、缺口、平面度、破损、边框对齐度、物体表面的亮度、皱纹、斑点、孔等。 表面缺陷检测设备凝聚了机器视觉领域的许多技术成果,吸取了许多创新的检测理念,可以与现有生产线无缝对接检测,也…