elk收集k8s微服务日志
一、前言
使用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-confignamespace: elkdata: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-serviceconfig: #配置收集的pod日志路径,这里配置日志路径时要使用变量的方式定义日志路径,至于为什么使用这些变量,可以自行去看一下该日志目录下的路径名称- type: container #配置为container模式symlinks: true #使用了软链接的话需要加上该配置paths:- /var/log/containers/${data.kubernetes.pod.name}_${data.kubernetes.namespace}_${data.kubernetes.container.name}-*.logmultiline.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: nodejsconfig:- type: containersymlinks: truepaths:- /var/log/containers/${data.kubernetes.pod.name}_${data.kubernetes.namespace}_${data.kubernetes.container.name}-*.logprocessors: #配置filebeat识别收集的日志格式为json,这里前端的日志已经配置为了json格式,所以在filebeat收集的时候需要将日志识别为json格式的日志,不配置的话收集出来的是一整串日志,和普通日志一样- decode_json_fields:fields: ["message"]target: ""overwrite_keys: trueadd_error_key: trueoutput.logstash: #将收集的日志输出到logstashhosts: ['logstash.elk:5044']
logstash配置
vi logstash-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: logstash-configmapnamespace: elklabels: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-confignamespace: 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

相关文章:
elk收集k8s微服务日志
一、前言 使用filebeat自动发现收集k8s的pod日志,这里分别收集前端的nginx日志,还有后端的服务java日志,所有格式都是用json格式,建议还是需要让开发人员去输出java的日志为json,logstash分割java日志为json格式&#…...
vue3中如何实现多个侦听器(watch)
<body> <div id"app"><input type"button" value"更改名字" click"change"> </div> <script src"vue.js"></script> <script>new Vue({el: #app,data: {food: {id: 1,name: 冰激…...
【深度学习基础知识】IOU、GIOU、DIOU、CIOU
这里简单记录下IOU及其衍生公式。 为了拉通IOU及其衍生版的公式对比,以及方便记忆,这里用一个统一的图示来表示出所有的参数 【A】目标框的区域【B】预测框的区域【C】A与B的交集【ÿ…...
【自用笔记】单词
cognitive 认知formulation 阐述方式nonlinear 非线性nonconvex 非凸,无最优解cumulative return 累计回报propagation 传播optimization 优化objective 目标标准差(standard deviation)正态分布(Normal distribution)…...
Linux之shell条件判断
华子目录 if语句单分支案例 双分支案例 多分支 case多条件判断格式执行过程示例 if语句 单分支 # 语法1: if <条件表达式> then指令 fi#语法2: if <条件表达式>;then指令 fi案例 编写脚本choice1.sh,利用单分支结构实现输入2个整数&#…...
“postinstall“: “patch-package“ 修补安装包补丁
在 package.json 文件里,postinstall 是一个钩子脚本,它在每次运行 npm install 命令后自动执行。当你在该字段中指定 "patch-package" 时,意思是在 npm install 安装所有依赖包之后,自动运行 patch-package 命令。 pa…...
PHP+MySQL开发组合:多端多商户DIY商城源码系统 带完整的搭建教程以及安装代码包
近年来,电商行业的迅猛发展,越来越多的商户开始寻求搭建自己的在线商城。然而,传统的商城系统往往功能单一,无法满足商户个性化、多样化的需求。同时,搭建一个功能完善的商城系统需要专业的技术团队和大量的时间成本&a…...
Node.js常用命令
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它使得开发者可以使用 JavaScript 来编写服务端的应用。Node.js 提供了大量的命令行工具,以下是一些最常用的 Node.js 命令: 1. node 运行 JavaScript 文件:node [fil…...
LeetCode 2. 两数相加
目录 题目题目描述示例 1:示例 2:示例 3:提示:原题链接 题解解题思路代码实现(C) 题目 题目描述 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的…...
抖去推无人直播+矩阵托管+AI文案撰写一体化工具如何开发搭建
一、 开发和搭建抖去推无人直播矩阵托管AI文案撰写一体化工具需要以下步骤: 确定功能需求:确定抖去推无人直播、矩阵托管和AI文案撰写的具体功能需求,如直播推流、直播管理、托管服务、AI文案生成等。 技术选型:选择适合开发该工…...
【鸿蒙HarmonyOS开发笔记】常用组件介绍篇 —— 弹窗组件
简介 弹窗是移动应用中常见的一种用户界面元素,常用于显示一些重要的信息、提示用户进行操作或收集用户输入。ArkTS提供了多种内置的弹窗供开发者使用,除此之外还支持自定义弹窗,来满足各种不同的需求。 下面是所有涉及到的弹窗组件官方文档…...
【嵌入式学习】Qtday03.21
一、思维导图 二、练习 自由发挥登录窗口的应用场景,实现一个登录窗口界面。(不要使用课堂上的图片和代码,自己发挥,有利于后面项目的完成) 要求: 1. 需要使用Ui界面文件进行界面设计 2. ui界面上的组件…...
【C语言】C语言运算符优先级详解
文章目录 📝前言🌉运算符优先级简述 🌠逻辑与和逻辑或🌉赋值和逗号运算符 🌠位运算🌉条件表达式🌉位运算与算术运算结合🌉混合使用条件表达式和赋值运算符🌉 逗号运算符的…...
第十节HarmonyOS 常用容器组件3-GridRow
1、描述 栅格容器组件,仅可以和栅格子组件(GridCol)在栅格布局场景中使用。 2、子组件 可以包含GridCol子组件。 3、接口 GridRow(options:{columns: number | GridRowColumnOption, gutter?: Length | GutterOption, Breakpoints?: B…...
SCXI-1193是National Instruments公司生产的吗?
NI SCXI-1193是一款高密度、32通道RF多路复用器开关模块。 NI SCXI-1193 是一款由 National Instruments(NI)公司生产的屏蔽式电缆。这款电缆通常用于连接数据采集设备和传感器或执行器,以实现信号传输和数据采集。SCXI-1193 电缆具有高度灵活…...
使用clion开发tftlcd屏,移植驱动时遇到的问题记录
问题现象 屏幕只有一半屏在刷新 问题出现的情况(在CLION开发时遇到过) 总结...
工程信号的去噪和(分类、回归和时序)预测
🚀【信号去噪及预测论文代码指导】🚀 还为小论文没有思路烦恼么?本人专注于最前沿的信号处理与预测技术——基于信号模态分解的去噪算法和深度学习的信号(回归、时序和分类)预测算法,致力于为您提供最精确、…...
【VUE】前端阿里云OSS断点续传,分片上传
什么是OSS: 数据以对象(Object)的形式存储在OSS的存储空间(Bucket )中。如果要使用OSS存储数据,您需要先创建Bucket,并指定Bucket的地域、访问权限、存储类型等属性。创建Bucket后,您…...
春招面试高频题目总结
面试问题 redis 可以用于进程间通信吗? Why?How? ---> 延展一下 有哪些进程间通信技术, 优劣如何? 有大量的插入sql语句,一条条的插入性能很差,如何通过事务进行优化? 保证线程安全的策略有哪些&…...
基于SSM+Jsp+Mysql的KTV点歌系统
基于SSMJspMysql的KTV点歌系统 基于SSMJspMysql的KTV点歌系统的设计与实现 开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)
Name:3ddown Serial:FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名:Axure 序列号:8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...
【实施指南】Android客户端HTTPS双向认证实施指南
🔐 一、所需准备材料 证书文件(6类核心文件) 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...
