日志分析详解 - 文章中心
日志分析详解
2024-12-18

日志分析详解

  • 日志分析是运维工程师解决系统故障,发现问题的主要手段
  • 日志主要包括系统日志、应用程序日志和安全日志
  • 系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因
  • 经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误
  • 分析日志时刻监控系统运行的状态
  • 分析日志来定位程序的bug
  • 分析日志监控网站的访问流量
  • 分析日志可以知道哪些sql语句需要优化
  • 日志易:国内一款监控、审计、权限管理,收费软件

  • splunk:按流量收费,国外软件,主要三个部件组成(Indexer、Search Head、Forwarder

    • Indexder提供数据的存储,索引,类似于elasticsearch的作用
    • Search Head负责搜索,客户接入,从功能上看,一部分是kibana的UI是运行,在Search Head上的,提供所有的客户端可视化功能,还有一部分,是提供分布式的搜索功能,具有Elasticsearch部分功能
    • Forwarder负责数据接入,类似Logstash或者filebeat
  • ELK:海量日志分析平台(Elasticsearch、logstash、kibana,开源且在国内被广泛应用

动作功能收集能够采集多种来源的日志数据传输能够稳定的把日志传数据传输到中央系统存储安全的存储日志数据分析可以支持UI分析警告能够提供错误报告
维度举例代理层Nginx、HAproxy…web层Nginx、httpd、tomcat、Java…数据库层MySQL、Redis、Elasticsearch、openGauss…系统层message、secure
  • ELK是一个开源的数据分析平台,由三个开源项目Elasticsearch、Logstash和Kibana组成,因此被称为ELK

  • ELK主要用于处理和分析大量的日志数据,支持实时搜索、数据可视化和分析

    • Elasticsearch是一个分布式搜索引擎和分析引擎,能够实现实时搜索和分析大规模的数据集
    • Logstash是一个数据收集、处理和转换工具,能够从不同来源收集、处理和传输数据
    • Kibana是一个数据可视化工具,能够通过仪表盘、图形和地图等方式展示数据
    • ELK 三个组件相互配合,能够构建一个强大的、可扩展的日志分析平台,支持数据的快速检索、可视化和分析。
  • 初级版ELK

  • 终极版ELK
  • 高级版ELK
  • 不修改源日志的格式:而是通过logstash的grok方式进行过滤清洗,将原始无规则的日志转换为规则的日志
    • 优点:不用修改原始日志输出格式,直接通过logstash的grok方式进行过滤分析,好处是对线上业务系统无任何影响
    • 缺点:logstash的grok方式在高压力情况下会成为性能瓶颈如果要分析的日志量超大时,日志过滤分析可能阻塞正常的日志输出;因此,在使用logstash时,能不用grok尽量不使用grok过滤功能。
  • 修改源日志输出格式:按照需要的日志格式输出规则日志,logstash只负责日志的收集和传输,不对日志做任何的过滤清洗。
    • 优点:因为已经定义好了需要的日志输出格式, logstash只负责日志的收集和传输,这样就大大减轻了logstash的负担,可以更高效的收集和传输日志。
    • 缺点:需要事先定义好日志的输出格式,这可能有一定工作量,但目前常见的web服务器例如httpd、Nginx等都支持自定义日志输出格式。
  • Elasticsearch 官网:https://www.elastic.co/cn/elasticsearch

    • Elasticsearch是一个基于Lucene库的分布式搜索引擎和数据分析引擎,能够实现实时搜索和分析大规模的数据集,支持文本、数字、地理位置等多种类型的数据检索和分析。Elasticsearch是一个开源的、高度可扩展的平台,能够处理海量的数据,并支持分布式的数据存储和处理。Elasticsearch的主要特点包括

    • 分布式搜索引擎:Elasticsearch能够对海量的数据进行快速的搜索和查询,并支持实时搜索。

    • 分布式数据存储:Elasticsearch能够将数据分散存储在多个节点上,以提高数据的可用性和可靠性。

    • 多数据类型支持:Elasticsearch支持多种数据类型,包括文本、数字、日期、地理位置等。

    • 实时数据分析:Elasticsearch能够对数据进行实时的聚合、过滤和分析,并支持数据可视化。

    • 可扩展性:Elasticsearch能够扩展到数百个节点,处理PB级别的数据。

    • 开源:Elasticsearch是一个开源的软件,源代码可以公开获取和修改。 Elasticsearch广泛应用于企业搜索、日志分析、安全分析和商业智能等领域。它提供了丰富的API和工具,包括RESTful API、Java API和Python API等,方便开发人员集成和使用。

  • Logstash 文档地址:https://www.elastic.co/guide/en/logstash/current/getting-started-with-logstash.html

  • Logstash 是一个开源的数据收集、处理和转换工具,能够从不同来源收集、处理和传输数据。,主要用于处理和分析大量的日志数据,支持多种数据源和格式,包括文本文件、数据库、日志文件、消息队列等。Logstash能够实现以下功能

    • 数据收集:Logstash能够从不同的数据源收集数据,并支持多种数据格式,包括JSON、CSV、XML等。

    • 数据处理:Logstash能够对收集到的数据进行处理和转换,例如过滤、分析、标准化等。

    • 数据传输:Logstash能够将处理后的数据传输到目标位置,例如Elasticsearch、Kafka、Redis等。

    • 插件扩展:Logstash提供了丰富的插件,方便用户扩展和定制功能。

    • 实时数据处理:Logstash能够实现实时数据处理,支持流式数据处理。 Logstash是一个高度可扩展的工具,能够处理大量的数据,并支持分布式部署。它能够与Elasticsearch、Kibana、Beats等工具集成,构建一个强大的、可扩展的数据分析平台。Logstash提供了丰富的文档和社区支持,方便用户学习和使用。

  • Logstash工作原理

如上图,Logstash的数据处理过程主要包括:Inputs, Filters, Outputs 三部分, 另外在Inputs和Outputs中可以使用Codecs对数据格式进行处理。这四个部分均以插件形式存在,用户通过定义pipeline配置文件,设置需要使用的input,filter,output, codec插件,以实现特定的数据采集,数据处理,数据输出等功能

(1)Inputs:用于从数据源获取数据,常见的插件如file, syslog, redis, beats 等

(2)Filters:用于处理数据如格式转换,数据派生等,常见的插件如grok, mutate, drop, clone, geoip等

(3)Outputs:用于数据输出,常见的插件如elastcisearch,file, graphite, statsd等

(4)Codecs:Codecs不是一个单独的流程,而是在输入和输出等插件中用于数据转换的模块,用于对数据进行编码处理,常见的插件如json,multiline

  • Logstash核心概念
    • Pipeline:包含了input—filter-output三个阶段的处理流程、插件生命周期管理、队列管理
    • Logstash Event:数据在内部流转时的具体表现形式
      • 数据在input 阶段被转换为Event,在 output被转化成目标格式数据
      • Event 其实是一个Java Object,在配置文件中,对Event 的属性进行增删改查
    • Codec (Code / Decode):将原始数据decode成Event,将Event encode成目标数据
  • Kibana 文档地址:https://www.elastic.co/guide/cn/kibana/current/install.html

  • Kibana是一个数据可视化工具,能够通过仪表盘、图形和地图等方式展示数据。主要用于展示和分析从Elasticsearch中获取的数据。Kibana能够实现以下功能

    • 数据可视化:Kibana能够通过仪表盘、图形和地图等方式展示数据,支持多种数据类型和格式。

    • 数据查询:Kibana能够实现对Elasticsearch中存储的数据进行查询和搜索。

    • 仪表盘管理:Kibana能够创建、管理和共享仪表盘,方便用户展示和分享数据。

    • 可视化插件:Kibana提供了丰富的可视化插件,方便用户扩展和定制功能。

    • 数据分析:Kibana能够实现对数据进行聚合、过滤和分析,支持实时数据处理。 Kibana的主要优点包括易用性、可扩展性和丰富的功能。它能够与Elasticsearch、Logstash、Beats等工具集成,构建一个强大的、可扩展的数据分析平台。Kibana提供了丰富的文档和社区支持,方便用户学习和使用。

  • 环境准备

    • 使用模板机克隆elk并配置如下参数
主机IP地址网关DNS配额elk192.168.8.111/24192.168.8.254192.168.8.2541CPU2G内存
 
 

开启路由转发,docker是通过虚拟交换机来进行通讯的,需要开启路由转发的功能

 

将2024-AI大模型Java全链路工程师环境资料/第四模块/docker文件夹上传至虚拟机elk的/root

 
 
  • 使用华为云的镜像加速器,每个人的都不一样
 
  • 将2024-AI大模型Java全链路工程师环境资料/第四模块/elk镜像中的所有内容上传至虚拟机elk的/root
  • 导入镜像
 
 
 
 
 
 

浏览器访问地址:http://192.168.8.111:9200/

  • 说明:ElasticSearch-head是 ES的可视化界面,是为了方便后面调试时看日志有没成功输入到 ES 用的,非必须安装的项目,也可跳过此步。

运行容器

 

页面无数据问题

  • 如果打开页面之后节点、索引等显示完全,但是数据浏览中无数据显示,那么我们还需要改一个配置文件,这是因为 ES 6 之后增加了请求头严格校验的原因(我们装的是 7.12.1 版本
 

测试

浏览器访问地址:http://192.168.8.111:9100/

 
 
 

浏览器访问地址:http://192.168.8.111:9100/

测试

  • 开始使用 Kibana 前,需要告诉 Kibana 您想要探索的 Elasticsearch 索引。第一次访问 Kibana 时,会提示您定义一个 index pattern(索引模式) 匹配一个或多个索引。这就是初次使用 Kibana 时所有需要配置的。任何时候都可以在 Management 页面增加索引模式。

  • 默认情况下,Kibana 会连接运行在 localhost 上的 Elasticsearch 实例。如果需要连接不同的 Elasticsearch实例,可以修改 kibana.yml 配置文件中的 Elasticsearch URL 配置项并重启 Kibana。如果在生产环境节点上使用 Kibana

  • 设置您想通过 Kibana 访问的 Elasticsearch 索引

  • 浏览器中指定端口号5601来访问 Kibana UI 页面。例如, localhost:5601 或者 http://YOURDOMAIN.com:5601

  • 指定一个索引模式来匹配一个或多个 Elasticsearch 索引名称。默认情况下,Kibana 会认为数据是通过 Logstash 解析送进 Elasticsearch 的。这种情况可以使用默认的 logstash-* 作为索引模式。星号 (*) 匹配0或多个索引名称中的字符。如果 Elasticsearch 索引遵循其他命名约定,请输入一个恰当的模式。该模式也可以直接用单个索引的名称。

  • 如果您想做一些基于时间序列的数据比较,可以选择索引中包含时间戳的字段。Kibana 会读取索引映射,列出包含时间戳的所有字段。如果索引中没有基于时间序列的数据,则禁用 Index contains time-based events 选项。

  • 点击 Create 增加索引模式。默认情况下,第一个模式被自动配置为默认的。当索引模式不止一个时,可以通过点击 Management > Index Patterns 索引模式题目上的星星图标来指定默认的索引模式。

全部设置完毕!Kibana 连接了 Elasticsearch 的数据。展示了一个匹配到的索引的字段只读列表。

浏览器访问地址:http://192.168.8.111:5601/

  • 拉取镜像并拷贝配置
 
  • 修改相应配置文件

  • 修改 logstash/config 下的 logstash.yml 文件,主要修改 es 的地址(可通过 docker inspect es查看地址

 

修改 logstash/pipeline 下的 logstash.conf 文件

 

启动容器并挂载

 
 

项目地址:https://gitee.com/shuobolinux/shuoboelk.git

注意:该项目已经搭建好,只需要把对应 resource下的 log/logback-spring.xml文件中的 标签中 logstash 的地址换成对应自己的即可

这个比较简单,主要就是几个配置文件

pom文件如下

 

创建一个TestController,每次调用接口,都会打印日志

 

在 resource 下创建 log/logback-springxml 文件,这里我们主要填写 ip:端口,关于标签则看个人使用情况修改。

 

最后修改 application.yml 文件

 
 
 
 
 
 
 
 
 

再次回到Discover页面

测试:调用接口 http://localhost:8080/index

再次查看 Kibana ,已经显示了在代码中打印的日志

  I   II   III   IV