ELK学习笔记(三)——使用Filebeat8.15.0收集日志

news/2024/9/17 7:11:02/ 标签: elk, 学习, 笔记

使用Filebeat收集日志

前面教程已经把ElasticSearch和Kibana部署完毕,接着我们就要使用filebeat去收集我们的java服务日志,这里首先介绍一下ELK和EFK的区别。

一、ELK和EFK的区别

在收集和处理日志时,使用 ELK(Elasticsearch, Logstash, Kibana)和 EFK(Elasticsearch, Filebeat, Kibana)堆栈都有其独特的优势和应用场景。两者之间的主要区别在于日志收集和传输组件的选择:Logstash vs. Filebeat。下面是两者的比较和使用 Filebeat 的一些优势:

ELK(Elasticsearch, Logstash, Kibana)的优势

  1. 强大的数据处理能力
    • Logstash 拥有丰富的数据处理和过滤插件,能够处理复杂的数据转换和增强,例如解析复杂的日志格式、添加字段、重命名字段、地理定位等。
    • Logstash 支持高级的数据管道操作,如聚合、拆分、条件过滤等。
  2. 支持更多的数据源
    • Logstash 可以从各种数据源收集数据,不仅仅是日志文件,还包括数据库、消息队列、HTTP 端点等。
    • 对于需要集成来自多个不同数据源的数据环境,Logstash 提供了更灵活的选择。
  3. 灵活的插件系统
    • Logstash 提供了一个插件系统,可以轻松地添加输入、过滤和输出插件,以适应不同的应用场景。

EFK(Elasticsearch, Filebeat, Kibana)的优势

  1. 轻量级和高效
    • Filebeat 是一个轻量级的日志收集器,专门设计用于收集和转发日志。它消耗的资源比 Logstash 少,因此在性能和效率上更优,尤其适合在资源受限的环境中使用(例如 Kubernetes 环境中的容器)。
    • Filebeat 更容易配置和部署,不需要像 Logstash 那样处理复杂的配置文件和插件管理。
  2. 简单易用
    • Filebeat 的配置文件相对简单,易于维护和管理。对于基本的日志收集场景,配置成本较低。
    • Filebeat 有内置的模块(例如 systemnginxapache 等),这些模块已经预先配置好收集和解析某些常见服务的日志,减少了手动配置的工作量。
  3. 更适合 Kubernetes 环境
    • Filebeat 与 Kubernetes 原生集成得很好,支持自动发现容器日志,可以轻松将每个容器的日志收集并发送到 Elasticsearch。它能自动添加 Kubernetes 元数据(例如 pod 名称、命名空间、标签等),方便在 Kibana 中进行基于 Kubernetes 元数据的日志搜索和分析。
    • 在 Kubernetes 环境中,直接部署 Filebeat 作为 DaemonSet 可以高效收集集群中所有节点的日志。
  4. 可靠的数据传输
    • Filebeat 有内置的背压机制和可靠的传输协议(如使用 ACK 确认机制的 Elasticsearch 输出),确保日志在传输过程中不会丢失。

什么时候选择 EFK(Filebeat)

  • 资源受限的环境:如 Kubernetes 集群或需要在多台机器上部署日志采集器的环境。
  • 主要是日志收集,而不需要复杂的日志处理:如果你只需要将日志采集并发送到 Elasticsearch。
  • 希望减少复杂性和管理开销:Filebeat 更容易部署和维护。

什么时候选择 ELK(Logstash)

  • 需要复杂的日志处理和增强:如正则表达式解析、数据过滤、条件处理、多步骤处理等。
  • 日志源种类繁多:不仅是日志文件,还有其他数据源,如数据库、消息队列等。
  • 系统资源不是主要问题:在高性能服务器或数据中心环境中部署。

总之,Filebeat 在轻量、简洁、高效的场景下表现更好,而 Logstash 在需要复杂日志处理的场景下更为适用。根据你的需求选择适合的工具可以显著提高日志收集系统的效率和性能。

前面,我们已经在k8s环境中部署好了ElasticSearch和Kibana。并且我们只是简单的收集一下后端服务产生的打印日志,所以这里我选择使用filebeat去收集日志。

二、部署Filebeat服务

2.1、创建目录
mkdir -p /home/ec2-user/k8s/elk/filebeat
cd /home/ec2-user/k8s/elk/filebeat
2.2、下载filebeat-8.15.0压缩文件
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.15.0-linux-x86_64.tar.gz
2.3、解压
tar -zxvf filebeat-8.15.0-linux-x86_64.tar.gz
#重命名
mv filebeat-8.15.0-linux-x86_64 filebeat-8.15.0

在这里插入图片描述

2.4、配置filebeat.yml
vim filebeat.yml
# ============================== Filebeat inputs ===============================filebeat.inputs:- type: log# Unique ID among all inputs, an ID is required.id: new-erp-filestream-id# Change to true to enable this input configuration.enabled: trueencoding: utf-8paths:# 配置要收集日志的目录- /home/ec2-user/k8s/nfs/data/share/renpho-erp-dev-gateway-logs-data-erp-gateway-dev-*/gateway-logs/*.log- /home/ec2-user/k8s/nfs/data/share/renpho-erp-dev-smc-log-data-erp-smc-dev-*/smc-logs/*.log- /home/ec2-user/k8s/nfs/data/share/renpho-erp-dev-uac-log-data-erp-uac-dev-*/uac-logs/*.log#匹配日志规则:日志文件中以如下规则开头的则为一行multiline.pattern: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}'multiline.negate: truemultiline.match: after#排除以.gz结尾的压缩包文件prospector.scanner.exclude_files: ['.gz$']fields:tag: erp-log#type: erp-logdata-pipeline source: common# ============================== Filebeat modules ==============================filebeat.config.modules:# Glob pattern for configuration loadingpath: ${path.config}/modules.d/*.yml# Set to true to enable config reloadingreload.enabled: false# ======================= Elasticsearch template setting =======================setup.template.settings:index.number_of_shards: 1
setup.template.name: "erp-log"
setup.template.pattern: "erp-log-*"# =================================== Kibana ===================================
setup.kibana:host: "https://192.168.6.220:30091"#可以到kibana控制台,创建一个账号username: "kibanaerp"password: "replace your password"# ================================== Outputs ===================================output.elasticsearch:# Array of hosts to connect to.hosts: ["https://192.168.6.220:30092"]protocol: "https"ssl.verification_mode: "none"# ssl.certificate_authorities: ["/home/ec2-user/k8s/elk/kibana/certs/elasticsearch-ca.pem"]# Authentication credentials - either API key or username/password.#api_key: "id:api_key"username: "elastic"password: "replace your password"#数据流index: "erp-log-%{+yyyy.MM.dd}"#索引indices:- index: "erp-logindex-%{+yyyy.MM.dd}"pipelines:#定义一个管道,用于解析自定义日志格式,稍后会在下面kibana中用到- pipeline: erp-logdata-pipelinelogging.level: debugprocessors:# 将自带的一些字段可以去除# - add_host_metadata:#     when.not.contains.tags: forwarded# - add_cloud_metadata: ~# - add_docker_metadata: ~# - add_kubernetes_metadata: ~# 在这里可以设置要去除的字段- drop_fields:# when: 可以设置去除的条件#   conditionfields: ["log","host","input","agent","ecs"]ignore_missing: false
2.5、Kibana后台创建管道pipeline

使用管理员账号elastic,登录到Kibana后台,

在这里插入图片描述

进到采集管道页面

在这里插入图片描述

创建新管道

在这里插入图片描述

按顺序依次点击下图按钮
在这里插入图片描述

添加处理器,并保存。

在这里插入图片描述

上图中第9步的值为

%{TIMESTAMP_ISO8601:log_date} %{DATA:springAppName} [%{DATA:tlog_trace_id}] %{LOGLEVEL:level} [%{DATA:thread_name}] [%{DATA:x_b3_span_id}] %{DATA:class} - %{GREEDYDATA:content}

我的项目中logback.xml中配置的的日志输出格式如下图所示,

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false"><include resource="org/springframework/boot/logging/logback/defaults.xml" /><include resource="org/springframework/boot/logging/logback/console-appender.xml" /><conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" /><!-- 配合apollo app.id, 因为log日志启动先于 apollo的启动,所以用这样的方式进行命名区别 --><springProperty name="springAppName" scope="context" source="spring.application.name" /><!-- 日志存放路径 --><property name="logPath" value="/home/erp/logs/${springAppName}"/><!-- 日志输出格式 --><property name="LogPatternConsole" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %clr(${springAppName}) %clr(${PID:- }){magenta} %clr(-%5p [%X{tlogTraceId:-},%X{X-B3-SpanId:-}]) %clr(-){faint} %clr([%t]){faint} %clr(%logger){cyan} %clr(:){faint} %msg%n" /><property name="LogPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} ${springAppName} [%X{tlogTraceId:-}] %level{5} [%thread] [%X{X-B3-SpanId:-}] %logger{20} - %msg%n"/><property name="logfile" value="${LOG_FILE:-${logPath}/info.log}" /><property name="errorLogfile" value="${LOG_FILE:-${logPath}/error.log}" /><logger name="org.apache.catalina.startup.DigesterFactory" level="ERROR" /><logger name="org.apache.sshd.common.util.SecurityUtils" level="WARN" /><logger name="org.apache.tomcat.util.net.NioSelectorPool" level="WARN" /><logger name="org.crsh.plugin" level="WARN" /><logger name="org.crsh.ssh" level="WARN" /><logger name="com.trace.ssm" level="INFO" /><!-- 系统模块日志级别控制  --><logger name="com.renpho" level="info"/><!-- Spring日志级别控制  --><logger name="org.springframework" level="warn"/><appender name="Console" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>${LogPatternConsole}</pattern><charset>utf8</charset></encoder></appender><appender name="InfoLogFile" class="ch.qos.logback.core.rolling.RollingFileAppender"><encoder><pattern>${LogPattern}</pattern><charset>utf8</charset></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 过滤的级别 --><level>INFO</level><!-- 匹配时的操作:接收(记录) --><onMatch>ACCEPT</onMatch><!-- 不匹配时的操作:拒绝(不记录) --><onMismatch>DENY</onMismatch></filter><file>${logfile}</file><!-- 循环政策:基于时间创建日志文件 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${logPath}/info.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern><!-- 日志最大的历史 30天 --><maxHistory>30</maxHistory><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><!-- maxFileSize:这是当前活动日志文件的大小,自动分割日志,默认值是10MB,测试时可改成1KB看效果 --><maxFileSize>50MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy></appender><!-- error的日志 --><appender name="ErrorLogFile" class="ch.qos.logback.core.rolling.RollingFileAppender"><encoder><pattern>${LogPattern}</pattern><charset>utf8</charset></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 过滤的级别 --><level>ERROR</level><!-- 匹配时的操作:接收(记录) --><onMatch>ACCEPT</onMatch><!-- 不匹配时的操作:拒绝(不记录) --><onMismatch>DENY</onMismatch></filter><file>${errorLogfile}</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${logPath}/error.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern><maxHistory>30</maxHistory><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>50MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy></appender><appender name="AsyncRollingLogFile" class="ch.qos.logback.classic.AsyncAppender"><!-- 异步日志 https://blog.csdn.net/u011943534/article/details/119427147 --><discardingThreshold>0</discardingThreshold><queueSize>12345</queueSize><appender-ref ref="InfoLogFile" /></appender><appender name="AsyncErrorLogFile" class="ch.qos.logback.classic.AsyncAppender"><!-- 本文设置为0说明永远不会丢弃日志level --><discardingThreshold>0</discardingThreshold><queueSize>12345</queueSize><appender-ref ref="ErrorLogFile" /></appender><root level="INFO"><appender-ref ref="Console" /><appender-ref ref="AsyncRollingLogFile" /><appender-ref ref="AsyncErrorLogFile" /></root><jmxConfigurator />
</configuration>

三、启动Filebeat

cd /home/ec2-user/k8s/elk/filebeat-8.15.0
#启动filebeat
sudo nohup ./filebeat -e -c filebeat.yml > /dev/null 2>&1 &

四、查看索引

在这里插入图片描述

至此,filebeat部署成功!


http://www.ppmy.cn/news/1522676.html

相关文章

8. GIS数据分析师岗位职责、技术要求和常见面试题

本系列文章目录&#xff1a; 1. GIS开发工程师岗位职责、技术要求和常见面试题 2. GIS数据工程师岗位职责、技术要求和常见面试题 3. GIS后端工程师岗位职责、技术要求和常见面试题 4. GIS前端工程师岗位职责、技术要求和常见面试题 5. GIS工程师岗位职责、技术要求和常见面试…

tabBar设置底部菜单选项以及iconfont图标

tabBartabBar属性:设置底部 tab 的表现 ​ ​ ​ ​ 首先在pages.json页面写一个tabBar对象,里面放入list对象数组,里面至少要有2个、最多5个 tab, 如果只有一个tab的话,H5(浏览器)依然可以显示底部有一个导航栏,如果没有,需要重启后才有,小程序则报错,只有2个以上才可以…

C# 窗口页面布局

1.Groupbox 单机鼠标右键&#xff0c;置于底层 2.Label 在右方属性中修改名称 3.ComboBox 点击属性中的集合&#xff0c;可以添加选择项 4.CheckBox 在属性中修改名称 5.RichTextBox 富文本 在属性中修改名称与区域 6.StatusStrip 状态栏 将AutoSize改成false就可以修改…

基于Java的宿舍报修管理系统的设计与实现(论文+源码)_kaic

基于Java的宿舍报修管理系统的设计与实现(论文源码)_kaic 摘  要 随着教育改革‎‏的不断‎‏深入&#xff0c;‎‏学校宿‎‏舍的管‎‏理体系‎‏也在不‎‏断地完‎‏善&#xff0c;校园后勤服务是学校管理的重要工作&#xff0c;学校提供优秀的后勤服务&#xff0c;能提…

C语言代码练习(第十七天)

今日练习&#xff1a; 45、输出100-1000之间所有的“水仙花数”&#xff0c;所为的水仙花数是一个三位数&#xff0c;其各位数字立方和等于该数本身。例如153是一个水仙花数。因为1*1*15*5*53*3*3 46、一个数如果恰好等于它的因子之和&#xff0c;这个数就称为"完数"…

AI视频百万播放,用这个免费的AI工具,3步教你制作爆款治愈系视频!(附完整教程)

大家好&#xff0c;我是程序员X小鹿&#xff0c;前互联网大厂程序员&#xff0c;自由职业2年&#xff0c;也一名 AIGC 爱好者&#xff0c;持续分享更多前沿的「AI 工具」和「AI副业玩法」&#xff0c;欢迎一起交流~ 今天一位粉丝发了一个视频链接&#xff0c;问这类治愈系风景的…

centos基本命令

当前登录用户&#xff08;root&#xff09; 用户组 其它用户 rwxr-xr-x cd 后加/目录名/子目录 切换到目录 cd .. 切换到父目录 CentOS Windows $>ls 查看某个目录有哪文件和目录 cmd>dir …

机器学习:多种算法处理填充后的数据

在机器学习中&#xff0c;填充数据&#xff08;即处理缺失值&#xff09;后&#xff0c;选择合适的算法并优化模型以提高召回率是一个常见的任务。召回率是指模型正确识别的正例占所有实际正例的比例。 代码思路&#xff1a; 数据预处理&#xff1a; 导入填充后的数据 …

Python | Leetcode Python题解之第386题字典序排数

题目&#xff1a; 题解&#xff1a; class Solution:def lexicalOrder(self, n: int) -> List[int]:ans [0] * nnum 1for i in range(n):ans[i] numif num * 10 < n:num * 10else:while num % 10 9 or num 1 > n:num // 10num 1return ans

太速科技-1路万兆光纤SFP+和1路千兆网络 FMC子卡模块

1路万兆光纤SFP和1路千兆网络 FMC子卡模块 一、概述 该板卡是基于kc705和ml605的fmc 10g万兆光纤扩展板设计&#xff0c;提供了1路万兆光纤SFP和1路千兆网络接口。可搭配我公司开发的FPGA载卡使用。载卡可参考&#xff1a;ID204 SFP&#xff08;10 Gigabit Small…

1-10 图像增强对比度 opencv树莓派4B 入门系列笔记

目录 一、提前准备 二、代码详解 enhanced_image cv2.convertScaleAbs(image, alpha1.5, beta0) 三、运行现象 四、完整工程贴出 一、提前准备 1、树莓派4B 及 64位系统 2、提前安装opencv库 以及 numpy库 3、保存一张图片 二、代码详解 import cv2 # 增强图像的对比度 …

【Arm Cortex-X925】 -【第五章】-电源管理

5. 电源管理 Cortex-X925 核心提供了控制动态和静态功耗的机制。 动态功耗管理包括以下特性: 层次时钟门控每核心的动态电压和频率调整 (DVFS)静态功耗管理包括以下特性: 关机模式动态保持,一种低功耗模式,能够保留寄存器和 RAM 状态5.1 电压和功率域 DynamIQ™ Shared …

代码随想录Day 32|leetcode题目:501.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯

提示&#xff1a;DDU&#xff0c;供自己复习使用。欢迎大家前来讨论~ 文章目录 动态规划理论基础一、理论基础1.1 什么是动态规划1.2 动态规划的解题步骤1.3 动态规划应该如何debug 二、题目题目一&#xff1a; 509. 斐波那契数解题思路&#xff1a;动态规划递归解法 题目二&a…

【OpenWrt(3)】内网搭建iperf3测速服务器

下载的iperf3 网站&#xff1a;https://iperf.fr/iperf-download.php Window地址&#xff1a;https://github.com/ar51an/iperf3-win-builds 安卓&#xff1a;https://gitee.com/hiyanyx/magic-i-perf 文章目录 下载的iperf3Windows 服务器启动安卓客户端启动参考 Windows 服务…

363_C++_配合360_负责读取和处理录像数据RecordReader类

其中的变量们: 读取器未启用 (!m_bEnReader) 已经有一个读取操作正在进行 (m_bPending) 读取器还未启动 (!m_bStarted) lastRealBytes:计算这帧数据实际需要的总字节数(包括未处理的部分和对齐的填充字节) mLastOffset:表示上次处理数据时的偏移位置 lastRemain 计算出…

电路基础笔记 --- 第一章

关于电路吸收及发出功率的判断&#xff1a; 其实关于这个问题根据实际电流和电压更好判断&#xff0c;我们根据参考电压及参考电流再结合各自数值画出对于元件来说的实际电流方向和电位高低&#xff0c;在实际电流方向通过元件时如果电位变高则代表元件在产生功率&#xff0c;…

【Linux】进程控制(一)

1. 进程创建 &#xff08;一&#xff09;认识fork函数 从已存在进程中创建一个新进程&#xff08;新进程为子进程&#xff0c;而原进程为父进程&#xff09; 进程调用fork&#xff0c;当控制转移到内核中的fork代码后&#xff0c;内核做&#xff1a; 分配新的内存块和内核数…

如何恢复回收站中已删除/清空的文件

回收站清空后如何恢复已删除的文件&#xff1f;是否可以恢复永久删除的文件&#xff1f;或者最糟糕的是&#xff0c;如果文件直接被删除怎么办&#xff1f;本文将向您展示清空回收站后恢复已删除数据的最佳方法。 回收站清空后如何恢复已删除的文件&#xff1f; “回收站清空后…

将AI与情境定位结合以确保品牌安全

你可能会看到一些广告&#xff0c;感觉它们跟你在线阅读或观看的内容有奇怪的关联。这就是上下文广告在起作用。这种基于广告的解决方案在不断变化的数字环境中逐步发展&#xff0c;已经成为每个广告主的必备工具。不过&#xff0c;这种广告不只是把广告和上下文进行匹配这么简…

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一&#xff1a;循环解法二&#xff1a;递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出…