elk收集k8s微服务日志

【 云原生 kubernetes 】- 使用Filebeat采集k8s日志 日志采集器Logstash其功能虽然强大,但是它依赖java、在数据量大的时候,Logstash进程会消耗过多的系统资源,这将严重影响业务系统的性能,而filebeat就是一个完美的替代者,它基于Go语言没有任何依赖,配置文件简单,格式明了 阅读详情

一、前言

     使用filebeat自动发现收集k8s的pod日志,这里分别收集前端的nginx日志,还有后端的服务java日志,所有格式都是用json格式,建议还是需要让开发人员去输出java的日志为json,logstash分割java日志为json格式,在日志量大的情况下非常消耗资源

二、收集日志配置

    主要是配置filebeat和logstash进行日志的收集和分割,我这里的后端服务java日志不是json格式,所以需要自己去分割为json日志,有条件的也可以让开发直接输出json格式的日志,前端的只要收集nginx的access日志即可,nginx的可以直接配置为json格式输出

    filebeat配置

   vi filebeat-configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: filebeat-config
  namespace: elk

data:
  filebeat.yml: |
    filebeat.autodiscover:       #使用filebeat自动发现模块
     providers:
       - type: kubernetes        #配置为k8s类型 
         templates:
           - condition:         #通过标签、命名空间筛选需要的pod日志,这里是匹配后端服务的日志
               and:
                 - or:
                     - equals:
                         kubernetes.labels:
                           app: foundation
                     - equals:
                         kubernetes.labels:
                           app: api-gateway
                     - equals:
                         kubernetes.labels:
                           app: field
                     - equals:
                         kubernetes.labels:
                           app: report
                 - equals:
                     kubernetes.namespace: java-service
                     
             config:            #配置收集的pod日志路径,这里配置日志路径时要使用变量的方式定义日志路径,至于为什么使用这些变量,可以自行去看一下该日志目录下的路径名称
                - type: container    #配置为container模式
                  symlinks: true      #使用了软链接的话需要加上该配置
                  paths:
                   - /var/log/containers/${data.kubernetes.pod.name}_${data.kubernetes.namespace}_${data.kubernetes.container.name}-*.log
                  multiline.pattern: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}'  #使用multiline匹配以时间开头的行
                  multiline.negate: true     #反转匹配的内容,即匹配不是以时间开头的行
                  multiline.match: after     #将匹配到不是以时间开头的行就合并到上一个事件中
           - condition:      #通过标签、命名空间筛选需要的pod日志,这里是匹配前端服务的日志,这里是因为前端的日志格式和后端的日志格式不一样,所以分开收集
               and:
                 - or:
                     - equals:
                         kubernetes.labels:
                           app: nodejs
                 - equals:
                     kubernetes.namespace: nodejs
             config:
                - type: container
                  symlinks: true
                  paths:
                   - /var/log/containers/${data.kubernetes.pod.name}_${data.kubernetes.namespace}_${data.kubernetes.container.name}-*.log
                  processors:         #配置filebeat识别收集的日志格式为json,这里前端的日志已经配置为了json格式,所以在filebeat收集的时候需要将日志识别为json格式的日志,不配置的话收集出来的是一整串日志,和普通日志一样
                    - decode_json_fields:
                        fields: ["message"]
                        target: ""
                        overwrite_keys: true
                        add_error_key: true

    output.logstash:          #将收集的日志输出到logstash
      hosts: ['logstash.elk:5044']

   logstash配置

vi logstash-configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: logstash-configmap
  namespace: elk
  labels:
    app: logstash
data:
  logstash.conf: |
      input {
        beats {
            port => 5044
         #   codec => "json"
        }
      }
      filter {
        grok {        #这里使用grok将java日志分割为json格式
          match => { 
            "message" => "%{TIMESTAMP_ISO8601:timestamp}\s+%{LOGLEVEL:level}\s+%{NUMBER:thread}\s+---\s+\[%{DATA:thread_name}\]\s+%{JAVACLASS:java_class}\s+:\s+%{GREEDYDATA:log_message}"
          }
        }
      }
      output {
       # stdout{                 #该项为测试模式,将收集的日志内容输出到logstash的日志中
       #   codec => rubydebug
       # }
        elasticsearch {
            hosts => "elasticsearch:9200"    #这里的索引名称使用日志中包含的变量自动命名
            index => "%{[kubernetes][container][name]}-%{+YYYY.MM.dd}"
        }
      }

这里对java日志进行一下说明,java日志都是特定的日期格式开头,基本上都是单行的,除了报错日志,报错日志会换行,因为报错栈非常多,filebeat收集日志是一行一行收集的,在收集java报错日志的时候就会出现问题,错误日志的报错栈也被分开很多行去收集了,这是有问题的,所以会在filebeat收集java日志的时候加入multiline,进行事务的一个合并,下面来看一下java的日志

正常日志

可以看到都是以特定的时间格式开头

错误日志

其实错误日志的结构和正常日志是一样的,只是后面的报错栈被分行了,所以在filebeat使用multiline将这些不是以时间开头的行合并到上一个事件中即可

 可以使用kibana试验一下对java日志的分割是否能生效

%{TIMESTAMP_ISO8601:timestamp}\s+%{LOGLEVEL:level}\s+%{NUMBER:thread}\s+---\s+\[%{DATA:thread_name}\]\s+%{JAVACLASS:java_class}\s+:\s+%{GREEDYDATA:log_message}

前端日志对于nginx的配置也做一下说明,需要在nginx配置文件中提前定义nginx的日志格式

vi nginx-public.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: public-config
  namespace: nodejs
data:
  nginx.conf: |
    user  nginx;
    worker_processes  auto;

    error_log  /var/log/nginx/error.log notice;
    pid        /var/run/nginx.pid;


    events {
      worker_connections  1024;
    }


    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;

        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
        
        log_format access '{"timestamp":"$time_iso8601",'      #定义json格式的日志
                '"remote_addr":"$remote_addr",'
                '"remote_user":"$remote_user",'
                '"body_bytes_sent":$body_bytes_sent,'
                '"request_time":$request_time,'
                '"status": "$status",'
                '"host":"$host",'
                '"request":"$request",'
                '"request_method":"$request_method",'
                '"uri":"$uri",'
                '"http_referer":"$http_referer",'
                '"http_x_forwarded_for":"$http_x_forwarded_for",'
                '"http_user_agent":"$http_user_agent"'
                '}';        

        access_log  /var/log/nginx/access.log  access;  #使用json格式的日志作为日志的输出

        sendfile        on;
        #tcp_nopush     on;

        keepalive_timeout  65;

        #gzip  on;

        include /etc/nginx/conf.d/*.conf;
    }

 对于filebeat自动发现收集k8s日志的配置也可以参考elk官网,里面还有非常多的一些k8s参数可以定义 使用

参考:Autodiscover | Filebeat Reference [8.12] | Elastic

k8s系列之 ELK 日志收集 一:痛点 在部署完成后 虽然我们能正常的运行我们的服务了 。 但是我们查看日志却是一个很麻烦的事情 , 我们只能去容器当中查看已经打印好的日志 。这很明显非常的不友好 , 而且容器中的日志肯定要定时删除的 。 不利于我们日后去查找对应的日志 二:解决方案 目前很主流的是elk的解决方案 , 但是 l 却有很多不同 这里我使用的是 aliyun的 log-pilot log-pilot 官方... 阅读详情

相关推荐

k8s集群日志收集ELK和Graylog

使用ELK+Filebeat架构,还需要明确Filebeat采集K8S集群日志的方式。 方式1:Node级日志代理 在每个节点(即宿主机)上可以独立运行一个Node级日志代理,通常的实现方式为DaemonSet。用户应用只需要将日志写到标准输出,Docker 的日志驱动会将每个容器的标准输出收集并写入到主机文件系统,这样Node级日志代理就可以将日志统一收集并上传。另外,可以使用K8S的logrotate或Docker 的log-opt 选项负责日志的轮转。 Docker默认的日志驱动(LogDri

dz45693的专栏 3973

k8s学习--基于k8s的ELK日志收集的详细过程

ELK 是 Elasticsearch、Logstash 和 Kibana 三个开源工具的组合,常用于数据搜索、日志管理和数据可视化Elasticsearch 是一个分布式搜索和分析引擎,基于 Apache Lucene 构建,主要用于存储、搜索和分析大量数据。Logstash 是一个数据收集引擎,能够从多个来源收集数据,进行过滤和转换,然后将数据发送到存储引擎(如 Elasticsearch)。Kibana 是一个数据可视化和分析平台,专为与 Elasticsearch 一起使用而设计。

lwxvgdv的博客 3950

Java微服务容器化与K8s部署实战

摘要: 本文详细讲解了Java微服务的容器化与自动化部署全流程。首先通过多阶段Docker构建优化镜像大小和安全性,并演示镜像推送。其次,提供Kubernetes生产级配置模板(Deployment/Service/HPA),涵盖资源限制、健康检查与自动扩缩容。最后,分别给出Jenkins流水线和GitHub Actions的CI/CD实现方案,包含代码编译、镜像构建推送及K8s部署命令,助力实现高效自动化运维。全文聚焦实用技巧,为微服务上云提供完整技术路径。 (字数:150)

java专栏 934

ELK集群搭建/K8S集群日志采集

部署ELK-7.12.0一、所需的基础环境1、JDK环境2、磁盘配置3、修改操作系统限制二、部署ES 1、创建路径2、修改配置3、启动三、安装es-head三、安装kibana四、安装filebeat 一、所需的基础环境 部署包 提取码:anmc 1、JDK环境 对应版本对应支持的JDK环境也有所差异,但基本都支持JDK1.8 三台机器都需要执行 [root@node1 /]# mkdir /home/apps [root@node1 /]# cd /home/apps [root@node1 apps]#

jfcjjg的博客 4180

保姆级教程:30分钟在K8s上部署一套BladeX微服务全家桶(含Saber前端)

本文提供了一套完整的BladeX微服务架构在Kubernetes上的部署方案,包括环境准备、镜像构建、K8s资源配置和Saber前端部署优化。通过详细的步骤和代码示例,帮助开发者在30分钟内快速搭建全栈演示环境,验证微服务架构的可行性。

weixin_33250328的博客 381

解决Linux下Questasim中代码字体非常小

Questasim的source窗口里代码字体非常小 你是不是也遇到这样的问题,在使用Vmware时,Questasim的代码字体非常小,小到完全看不见,连断点都没办法标记。 下面我给出我摸索好久的解决办法,分享给大家。 1.首先,版本是Questasim 10.7c,在Vmware16中打开,情况如下: 不多逼逼,直接上图开搞: 给textFontV2设置值:monospace 12 normal roman 这里一定要注意啦,点完apply之后,不要点ok,直接关闭窗口。 ...

SummerXRT的博客 7815

filebeat+elk搭建日志平台采集K8s容器应用日志

filebeat+elk

fh_luchenxi的博客 3897

Jetson Orin NX系统克隆术:如何快速备份与还原你的开发环境(附完整命令行)

本文详细介绍了Jetson Orin NX系统克隆的完整流程,这是一种超越简单备份的完整镜像方案。通过命令行操作,可实现开发环境(包括引导程序、内核、根文件系统及所有配置)的快速备份与还原,确保批量部署时环境的完全一致性与高效性,尤其适合机器人、边缘AI等项目的团队协作。

weixin_29191081的博客 158

elk收集k8s微服务日志_微服务日志elk

stdout{ #该项为测试模式,将收集的日志内容输出到logstash的日志中。hosts => “elasticsearch:9200” #这里的索引名称使用日志中包含的变量自动命名。grok { #这里使用grok将java日志分割为json格式。

2401_85125175的博客 410

ArcGIS标注太乱?手把手教你用‘要素分类标注’搞定河流分级显示

本文详细介绍了如何在ArcGIS Pro中使用要素分类标注功能实现河流分级显示,解决标注混乱问题。通过数据预处理、分类标注规则定义和高级参数调优,帮助用户打造层次分明、专业清晰的水系地图,提升地图信息传达效率。

weixin_30326741的博客 474

AUTOSAR R20-11标准下载!

这是公众号的第2篇推文,粉丝数49 Document Search Classic Platform Adaptive Platform Foundation 文档截图 以为会在明天的发布会之后才上线,没想到官网现在就悄悄放出来了。 中国由于网络问题,下载速度比较慢或者会中断。 “阅读原文”提供多种下载方式,可以在线浏览,可以集中下载也可单个文档下载。 如有增减我也会及时在公众号里通知大家,不过我觉得不会变动了。 整理不宜,好东西要分...

Adaptive_AUTOSAR的博客 1890

elk收集k8s微服务日志_微服务日志elk,2024年最新掌握这些Linux运维开发热门前沿知识

stdout{ #该项为测试模式,将收集的日志内容输出到logstash的日志中。hosts => “elasticsearch:9200” #这里的索引名称使用日志中包含的变量自动命名。grok { #这里使用grok将java日志分割为json格式。都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**(img-U7m5amit-1712659376475)]

2401_84166147的博客 936

PyTorch深度学习实战(36)——Pix2Pix详解与实现

Pix2Pix 是基于生成对抗网络的图像转换框架,能够将输入图像转换为与之对应的输出图像,能够广泛用于图像到图像转换的任务,如风格转换、图像修复、语义标签到图像的转换等。Pix2Pix 的核心思想是通过对抗训练将输入图像和目标输出图像进行配对,使生成网络可以学习到输入图像到输出图像的映射关系。在本节中,将学习使用 Pix2Pix 根据给定轮廓生成图像。

盼小辉丶的博客 1万+

elk收集k8s微服务日志_微服务日志elk(1),2024年最新超详细讲解

16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?5、LVS、Nginx、HAproxy有什么区别?9、讲述一下Tomcat8005、8009、8080三个端口的含义?7、Tomcat和Resin有什么区别,工作中你怎么选择?3、现在给你三百台服务器,你怎么对他们进行管理?15、讲述一下LVS三种模式的工作过程?

2401_84166147的博客 842

​​​​手把手教你玩转RT-Thread操作系统专栏--​​​​第5章 设备驱动开发:RT-Thread的设备框架​​​​5.4 I2C/SPI驱动:如何驱动外部传感器(以MPU6050为例)​

通过本节学习,掌握了基于RT-Thread设备模型的I2C/SPI驱动开发流程,包括硬件初始化、寄存器读写、设备注册及应用程序调用。I2C(Inter-Integrated Circuit)和SPI(Serial Peripheral Interface)是嵌入式系统中最常用的两种串行总线协议,广泛用于连接传感器、存储器等外设。函数通过I2C协议读取外设寄存器的数据(如MPU6050的加速度寄存器)。SPI读取需先拉低片选(CS),发送寄存器地址,再读取数据,最后拉高CS。查找I2C设备,并调用。

xiaoheshang_123的博客 125

【异常】OpenClaw LLM请求超时故障全链路排查与解决方案 LLM request timed out. 网络连接超时了

摘要: OpenClaw LLM请求超时故障是高频网络交互问题,表现为客户端在预设时间内未收到服务端响应。根因分为四类:客户端配置缺陷(如超时阈值不合理)、网络链路异常(防火墙拦截等)、服务端问题(限流/宕机)及硬件瓶颈(算力不足)。解决方案分三步: 通用排查:检查网络连通性、关闭防火墙/代理校验,调整超时阈值至60-300秒; 分场景修复:云端API需核对密钥/限流规则,本地部署需验证服务状态与硬件资源; 兜底方案:重启程序、更新版本或更换服务端点,结合日志精准定位。修复后不影响OpenClaw数据完整性

奶爸的编程之路,也就一周冷个三天 2058

优秀的技术文档推荐.......

从微服务视角理解Kubernetes,并快速在K8S上落地微服务 Docker集群日志收集之EFK实践 windows 10下ELK环境快速搭建实践 快速搭建ELK日志分析系统 Zookeeper入门看这篇就够了 Zookeeper到底是干嘛的 nginx全面解析【负载均衡、反向代理、高可用、宕机容错】 kafka 使用 Nginx 搭建静态资源 web 服务器...

小猪快跑 524

python全栈入门到实战【基础篇 03】入门实操:第一个Python程序 + PyCharm使用 + 输入输出全解析

本文是一篇Python入门教程,主要介绍PyCharm编辑器的安装配置和基础使用,以及Python输入输出语法的实操练习。文章分为四个部分:1)PyCharm的下载安装与基础配置;2)第一个Python程序"Hello World"的编写与运行;3)Python输入输出函数print()和input()的详细讲解;4)个人信息录入系统的实战案例。教程包含大量截图和动图演示,适合Python新手跟随操作,快速掌握编辑器使用和基础语法。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 4020

elk收集k8s微服务日志_微服务日志elk,2024年最新Linux运维学习的三个终极问题及学习路线规划

stdout{ #该项为测试模式,将收集的日志内容输出到logstash的日志中。hosts => “elasticsearch:9200” #这里的索引名称使用日志中包含的变量自动命名。grok { #这里使用grok将java日志分割为json格式。(img-KsmXuO8O-1713130770147)]取:vip1024b (备注运维)**

2401_83947398的博客 548

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

日志收集-elk

04-4-日志收集 1. 日志收集方式 Kubernetes的业务Pod日志有两种输出方式:一种是直接打到标准输出或者标准错误,第二种是将日志写到特定目录下的文件种。针对这两种不同场景,提供了不同的容器日志收集思路。 1.1. Kubernetes日志收集思路 1.1.1. 使用节点代理收集日志 在各个Node节点上以Deamonset方式部署log-agent-pod,将宿主机上的日志目录挂载...

包泽旭 1484

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ELK:收集k8s容器日志最佳实践

简介 关于日志收集这个主题,这已经是第三篇了,为什么一再研究这个课题,因为这个课题实在太重要,而当今优秀的开源解决方案还不是很明朗; 就docker微服务化而言,研发有需求标准输出,也有需求文件输出,每次登录到服务器上去查看日志又多有不妥;现有的解决方案ELK,每次收集新应用日志都要更改配置文件重新适配日志路径足以让我们崩溃; 对于k8s,没有日志系统推行工作就无法进行,总不能让开发小伙伴登录...

weixin_30951231的博客 1519

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Java 微服务日志分析与异常自愈全流程实战解析

摘要: 微服务架构中,日志分散、异常多样化导致运维挑战。通过整合ELK、Prometheus等工具实现日志集中分析与异常检测,结合Kubernetes和Python脚本完成自动重启、扩容等自愈操作,并集成CI/CD提升效率。实践表明,该方案使异常修复率提升90%,宕机恢复时间缩短40%,高并发延迟降低20%,显著增强系统稳定性与可用性。核心经验包括集中化日志追踪、闭环自愈管理及自动化回归测试,为微服务高可用提供关键技术保障。

2501_94187056的博客 649

【 Kubernetes的Kiali、prometheus、grafana和ELK系统】

Kiali、Prometheus、Grafana和ELK系统都是Kubernetes的监控和日志数据分析工具。它们可以帮助用户监控Kubernetes集群的性能参数和应用程序的运行状态,并提供了可视化和警报功能。Kiali是一个开源的Kubernetes微服务网格监控工具,它可以帮助用户实时查看和分析微服务的连接和业务流程,以及服务之间的网络拓扑结构。它还提供了HTTP请求和TCP连接的追踪功能,以便用户快速定位和解决问题。

我是Java程序员廖志伟,感谢朋友们的支持! 1424

Kubernetes 与 Python 微服务部署实践

Kubernetes 和 Python 微服务的结合为企业提供了灵活且可扩展的解决方案。通过容器化和自动化部署,我们可以快速响应市场需求变化,提高开发效率。希望本文能为你提供有价值的参考。```

2501_90727091的博客 363
上一篇: k8s集群部署elk
下一篇: ingress使用
Apex   Predator
博客等级 码龄6年 9371粉丝 289原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值