日志管理是现代云计算服务中不可或缺的一部分,企业在日志管理中面临的痛点主要包括以下几个方面:
-
数据量巨大:随着企业信息系统的不断扩大和复杂化,应用程序、服务器、网络设备等生成的日志数据量急剧增加。处理和存储这些海量数据成为了一个挑战。
-
日志格式多样化:不同系统和应用程序产生的日志格式各异,标准化和统一处理这些日志数据需要耗费大量时间和资源。
-
实时分析需求:企业需要实时分析日志数据以快速响应潜在的问题和安全威胁,但是实时处理大量数据并从中提取有价值的信息是一个非常复杂的任务。
-
专业技能缺乏:高效的日志管理需要专业的知识和技能。许多企业缺乏足够的专业人员来配置和维护日志管理系统。
-
集成问题:企业环境中通常存在多个日志源,需要将这些日志源与日志管理系统集成,这可能会遇到兼容性和配置复杂性的问题。
-
告警疲劳:日志系统可能会生成大量的警告和通知,如果没有有效的告警管理和去重策略,会导致工作人员出现告警疲劳,从而忽视真正重要的警告。
观测云可以帮助组织捕捉、存储、分析和可视化在真实环境中产生的日志数据。并且拥有日志分析字段切割能力以及整合各类日志到统一平台哪敢并且可以配合告警进行使用,大大提高了运维管理效率。这篇文章就将描述通过接入业务日志文件到观测云平台,使用pipeline日志切割服务,并最终生成可视化描述日志数据的图表。
其中业务日志多种多样,这里采集网站应用日志来做演示
前提:环境准备
单机部署一套若依环境,若依的日志输出路径:/usr/local/df-demo/logs/ruoyi-system/*
-
首先访问https://auth.guance.com/businessRegister注册观测云账号,并熟悉工作空间
-
安装datakit,参照工作空间给出的命令
安装后可以使用datakit monitor来查看采集器状态
1、日志采集
只需要进入Datakit安装目录下的conf.d/log目录,将logging.conf.sample复制命名为logging.conf并进行参数配置
其中logfiles
是一个数组,包含了需要收集日志的文件列表或模式,比如 *.log
匹配所有以 .log
结尾的文件
source
用于定义日志源的名称,这里定义为 “ry-dd-system”
sockets
注释掉的部分表明可以配置 TCP 或 UDP 协议的 socket 来收集日志,但当前没有启用
在logfile中配置采集的日志路径即可,如图采集了业务应用日志/usr/local/df-demo/logs目录下的所有文件。
配置完成之后重启datakit即可生效
datakit service -R
然后在若依演示环境中进行一些用户行为
在观测云平台上就可以看到数据啦
2、Pipeline的配置和使用
“pipeline” 功能通常指的是一系列的数据处理步骤,用于收集、转换、分析和存储日志数据
pipeline主要有两种方式,一种是在本地配置文件中写以.p为结尾的pipeline脚本文件,另一种是在控制台进行配置和测试,所有 Pipeline 脚本文件,统一存放在 Datakit 安装路径下的 Pipeline 目录下
针对上述的日志就可以使用如下piepeline脚本进行字段切割以达到格式化,提取信息
从日志中提取一条举例
2024-03-17 18:09:52.006 [http-nio-9201-exec-6] INFO c.r.s.c.SysRoleController - [list,48] - ry-system-dd 5836515317243066716 1266833113726762991 - 查询角色列表开始
针对该日志就可以使用一下的grok语言进行解析
grok(_, "%{TIMESTAMP_ISO8601:time} %{NOTSPACE:thread_name} %{LOGLEVEL:status}%{SPACE}%{NOTSPACE:class_name} - \\[%{NOTSPACE:method_name},%{NUMBER:line}\\] - %{DATA:service_name} %{DATA:trace_id} %{DATA:span_id} - %{GREEDYDATA:msg}")
default_time(time,"Asia/Shanghai")
其中
%{TIMESTAMP_ISO8601:time}
:匹配 ISO8601 格式的时间戳,并将其保存在自定义字段time
中。%{NOTSPACE:thread_name}
:匹配不包含空白字符的字符串,并将其保存在thread_name
字段中。%{LOGLEVEL:status}
:匹配一个日志级别(如INFO
,ERROR
,DEBUG
等),并将其保存在status
字段中。%{SPACE}
:匹配空白字符。%{NOTSPACE:class_name}
:匹配不包含空白字符的字符串,并将其保存在class_name
字段中。-
:匹配字面上的破折号字符。\\[%{NOTSPACE:method_name},%{NUMBER:line}\\]
:匹配方括号内的字符串,其中包含一个方法名和一个数字(通常是代码的行号),并将它们分别保存在method_name
和line
字段中。-
:再次匹配字面上的破折号字符。%{DATA:service_name}
:匹配任意文本数据,并将其保存在service_name
字段中。%{DATA:trace_id}
:匹配任意文本数据,并将其保存在trace_id
字段中。%{DATA:span_id}
:匹配任意文本数据,并将其保存在span_id
字段中。-
:再次匹配字面上的破折号字符。%{GREEDYDATA:msg}
:匹配任意长度的文本,直到日志条目的末尾,并将其保存在msg
字段中Ω
测试通过结果如下:
成功解析的效果就是在日志中看到这类日志点开扩展属性就可以看到解析的相应字段了
注意:grok格式需要和日志完全匹配才可以被识别解析。这样就可以将一些字段提取出来,比如该日志中的method_name、service_name等,其中比较重要的是时间和status(%{LOGLEVEL:status})的解析
,根据解析出来的内容可以配置相应字段的告警、聚类分析、制作可视化图表分析、批量处理日志,去除不必要的数据等等。
小结
用观测云接入日志非常简单易操作,也有很多好处,可以实现日志集中管理,不用再东拉西扯“对齐颗粒度”进而简化日志管理,省去很多不必要的麻烦。而且piepeline对于日志数据和事件流方面的处理也很出色,实现数据预处理的自动化,配置非常灵活,并且就我个人而言piepeline工具的管理界面非常简洁直观,这是一个很强大、灵活并且用户友好的数据处理工具。