返回介绍

2.4 日志处理和分析

发布于 2024-09-24 22:59:00 字数 15280 浏览 0 评论 0 收藏 0

海量日志处理有两个流派,

  • Schema on Read:读时分析,如 Splunk,特性是日志解析更灵活,海量时速度可能是分钟级。
  • Schema on Write:写时分析,如 ELK,特性是速度快~秒级。

备注:Splunk 和 ELK 的比较 见下方

2.4.1 Splunk

Splunk 是机器数据的引擎。使用 Splunk 可收集、索引和利用所有应用程序、服务器和设备生成的快速移动型计算机数据 。 使用 Splunking 处理计算机数据,可让您在几分钟内解决问题和调查安全事件。监视您的端对端基础结构,避免服务性能降低或中断。以较低成本满足合规性要求。关联并分析跨越 多个系统的复杂事件。获取新层次的运营可见性以及 IT 和业务智能。

Splunk 于 2012 年在 Nasdaq 上市,是第一家上市的大数据公司。

Splunk 是一个托管的日志文件管理工具,它的主要功能包括:

  • 日志聚合功能
  • 搜索功能
  • 提取意义
  • 对结果进行分组,联合,拆分和格式化
  • 可视化功能
  • 电子邮件提醒功能
NameSplunk
DescriptionAnalytics Platform for Big Data
Primary database modelSearch engine
DB-Engines Ranking Trend ChartScore 65.67 Rank #13 Overall #2 Search engines
Websitewww.splunk.com
Technical documentationdocs.splunk.com/­Documentation/­Splunk
DeveloperSplunk Inc.
Initial release2003
Licensecommercial
Cloud-basedno
Server operating systemsLinux OS X Solaris Windows
Data schemeyes
Typingyes
XML supportyes
Secondary indexesyes
SQLno
APIs and other access methodsHTTP REST
Supported programming languagesC# Java JavaScript PHP Python Ruby
Server-side scriptsyes
Triggersyes
Partitioning methodsSharding
Replication methodsMaster-master replication
MapReduceyes
Consistency conceptsEventual Consistency
Foreign keysno
Transaction conceptsno
Concurrencyyes
Durabilityyes
In-memory capabilitiesno
User conceptsAccess rights for users and roles

2.4.2 ELK

ELK = Elasitcsearch + Logstash + Kibana

ELK 是 ELK 是 Elasticsearch、Logstash、Kibana 的简称,它们都是 Elastc 公司的开源软件,目前开源界最流行的实时数据分析解决方案,成为实时日志处理领域开源界的第一选择。

  • Elasticsearch 是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful 风格接口,多数据源,自动搜索负载等。
  • Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为 c/s 架构,client 端安装在需要收集日志的主机上,server 端负责将收到的各节点日志进行过滤、修改等操作在一并发往 elasticsearch 上去。
  • Kibana 也是一个开源和免费的工具,Kibana 可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。

Filebeat 隶属于 Beats。它是一个轻量级的日志收集处理工具(Agent),Filebeat 占用资源少,适合于在各个服务器上搜集日志后传输给 Logstash,官方也推荐此工具。目前 Beats 包含四种工具:

  • Packetbeat(搜集网络流量数据)
  • Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据)
  • Filebeat(搜集文件数据)
  • Winlogbeat(搜集 Windows 事件日志数据)

2.4.2.1 ELK 架构

ELK 这三者是核心套件,但并非全部。后文的四种基本架构中将逐一介绍应用到的其它套件。

第一种 ELK 架构,这是最简单的一种 ELK 架构方式。此架构首先由 Logstash 分布于各个节点上搜集相关日志、数据,并经过分析、过滤后发送给 远端服务器上的 Elasticsearch 进行存储。Elasticsearch 将数据以分片的形式压缩存储并提供多种 API 供用户查询,操作。用户亦可 以更直观的通过配置 Kibana Web Portal 方便的对日志查询,并根据数据生成报表(详细过程和配置在此省略)。

image-20191204221338458

图 13 ELK 架构一

说明:ELK 架构一优点是搭建简单,易于上手。缺点是 Logstash 耗资源较大,运行占用 CPU 和内存高。另外没有消息队列缓存,存在数据丢失隐患。建议供学习者和小规模集群使用。

第二种架构(图 2)引入了消息队列机制,位于各个节点上的 Logstash Agent 先将数据/日志传递给 Kafka(或者 Redis),并将队列中消息或数据间接传递给 Logstash,Logstash 过滤、分析后将数据传 递给 Elasticsearch 存储。最后由 Kibana 将日志和数据呈现给用户。因为引入了 Kafka(或者 Redis),所以即使远端 Logstash server 因故障停止运行,数据将会先被存储下来,从而避免数据丢失。

image-20191204221451803

图 14 ELK 架构二

说明:这种架构适合于较大集群的解决方案,但由于 Logstash 中心节点和 Elasticsearch 的负荷会比较重,可将他们配置为集群模式, 以分担负荷,这种架构的优点在于引入了消息队列机制,均衡了网络传输,从而降低了网络闭塞尤其是丢失数据的可能性,但依然存在 Logstash 占用系统资 源过多的问题。

第三种架构(下图)引入了 Logstash-forwarder。首先,Logstash-forwarder 将日志数据搜集并统一发送给主节点上 的 Logstash,Logstash 分析、过滤日志数据后发送至 Elasticsearch 存储,并由 Kibana 最终将数据呈现给用户。

image-20191204221508063

图 15 ELK 架构三

说明:这种架构解决了 Logstash 在各计算机点上占用系统资源较高的问题。经测试得出,相比 Logstash,Logstash- forwarder 所占用系统 CPU 和 MEM 几乎可以忽略不计。另外,Logstash-forwarder 和 Logstash 间的通信是通过 SSL 加密 传输,起到了安全保障。如果是较大集群,用户亦可以如结构三那样配置 logstash 集群和 Elasticsearch 集群,引入 High Available 机制,提高数据传输和存储安全。更主要的配置多个 Elasticsearch 服务,有助于搜索和数据存储效率。但在此种架构下发现 Logstash-forwarder 和 Logstash 间通信必须由 SSL 加密传输,这样便有了一定的限制性。

第四种架构(下图),将 Logstash-forwarder 替换为 Beats。经测试,Beats 满负荷状态所耗系统资源和 Logstash- forwarder 相当,但其扩展性和灵活性有很大提高。Beats platform 目前包含有 Packagebeat、Topbeat 和 Filebeat 三个产品,均为 Apache 2.0 License。同时用户可根据需要进行二次开发。

image-20191204221525613

图 16 ELK 架构四

说明:这种架构原理基于第三种架构,但是更灵活,扩展性更强。同时可配置 Logstash 和 Elasticsearch 集群用于支持大集群系统的运维日志数据监控和查询。

2.4.2.2 Elasitcsearch

Elasticsearch 是一个开源的搜索和数据分析引擎,基于 Apache Lucene 构建,旨在提供分布式、高可用、高性能的全文搜索功能。以下是一些关键特性和组件的详细介绍:

主要特性

  1. 实时搜索

    • Elasticsearch 支持近实时搜索,用户可以在数据索引后几乎立即查询到最新数据。
  2. 分布式架构

    • 内置分片和复制机制,可以在多台服务器上水平扩展,确保高可用性和负载均衡。
  3. RESTful API

    • 提供强大的 RESTful API,用户可以通过简单的 HTTP 请求执行搜索和管理操作。
  4. 全文搜索

    • 支持复杂的查询,包括布尔查询、范围查询、模糊查询等,适用于多种搜索场景。
  5. 聚合功能

    • 可以对数据进行实时分析和统计,支持各种聚合类型,如计数、平均、最大值和最小值等。
  6. 文档导向

    • 使用 JSON 格式存储数据,用户可以灵活地索引和查询半结构化数据。

组件介绍

  • 节点(Node)
    Elasticsearch 集群中的单个实例,负责存储和处理数据。

  • 集群(Cluster)
    由多个节点组成的集合,共同工作以存储和搜索数据。

  • 索引(Index)
    数据的集合,类似于数据库中的表,支持多种数据类型。

  • 文档(Document)
    索引中的基本信息单位,使用 JSON 格式表示。

  • 分片(Shard)
    索引的子集,每个索引可以分成多个分片,以提高性能和可扩展性。

使用场景

  • 日志和事件数据分析
  • 网站搜索功能
  • 数据监控和分析
  • 商业智能和数据可视化

社区与文档

Elasticsearch 拥有活跃的开发者社区,提供丰富的文档和教程,用户可以在官网找到详细的安装、配置和使用指导。

如果你有特定的应用场景或问题,欢迎进一步探讨!

2.4.2.3 Logstash

实现模式 :PIPE-FILTER 模式,多线程的线程池(INPUT 和 FILTER 缺省各 20 个)。

表格 6 logstash 的主要组件

 inputfiltersoutput
简介输入数据到 logstash数据中间处理,对数据进行操作。输出数据。
数据源stdin、file、syslog、 redis、beatsgrok/mutate/drop/clone/geoip /json/date/splitstdout、elasticsearch、email、file、nagios、

备注:编解码包括:json、多行事件、网络流。

Logstash 工作原理

Logstash 事件处理有三个阶段:inputs → filters → outputs。是一个接收,处理,转发日志的工具。支持系统日志,webserver 日志,错误日志,应用日志,总之包括所有可以抛出来的日志类型。

image-20191204221551027

图 17 Logstash 事件处理流程

说明:

Input :输入数据到 logstash。常用输入有 file、syslog、redis、beats 等等。

Filters :数据中间处理,对数据进行操作。常用的过滤有:grok/mutate/drop/clone/geoip

Outputs :outputs 是 logstash 处理管道的最末端组件。一个 event 可以在处理过程中经过多重输出,但是一旦所有的 outputs 都执行结束,这个 event 也就完成生命周期。一些常见的 outputs 为:

  • elasticsearch:可以高效的保存数据,并且能够方便和简单的进行查询。
  • file:将 event 数据保存到文件中。
  • graphite:将 event 数据发送到图形化组件中,一个很流行的开源存储图形化展示的组件。

Codecs :codecs 是基于数据流的过滤器,它可以作为 input,output 的一部分配置。Codecs 可以帮助你轻松的分割发送过来已经被序列化的数据。一些常见的 codecs:

  • json:使用 json 格式对数据进行编码/解码。
  • multiline:将汇多个事件中数据汇总为一个单一的行。比如:java 异常信息和堆栈信息。

示例 1:从终端获取输入,并输出到终端

./bin/logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}'
hello world
{
  "@timestamp" => 2018-06-23T07:57:40.252Z,
   "@version" => "1",
    "host" => "Lenovo-PC",
    "message" => "hello world"
}

示例 2:输入是 MySQL,输出是 ES

https://www.elastic.co/guide/en/logstash/5.3/plugins-inputs-jdbc.html#plugins-inputs-jdbc-jdbc_driver_library

input {
 jdbc {
  jdbc_driver_library => "mysql-connector-java-5.1.36-bin.jar"
  jdbc_driver_class => "com.mysql.jdbc.Driver"
  jdbc_connection_string => "jdbc:mysql://localhost:3306/mydb"
  jdbc_user => "mysql"
  parameters => { "favorite_artist" => "Beethoven" }
  schedule => "* * * * *"
  statement => "SELECT * from songs where artist = :favorite_artist"
 }
}

2.4.2.4 Kibana

 kibana 3kibana 4
简介源自于 elasticsearch dashborad。纯静态文件。围绕看板的单面应用。仿 splunk 界面。功能拆分成搜索页、可视化和仪表盘等。
实现语言 jruby
  最新版本 kibana-6.3.0-windows-x86_64

2.4.2.5 ELK 入门实例:Hello World

到官网下载并解压 Elasticsearch、logstash、Kibana

1)Elasticsearch 安装配置

安装步骤

2)logstash 安装配置

示例 :从终端获取输入,并输出到 elasticserch

# logstash_es.conf
input {
  stdin { }
}
output {
  stdout {
    codec => rubydebug{}
    }
  elasticsearch {
    # embedded => true
    hosts => "localhost:9200"
    index => "test-1" # 索引名称
    document_type => "form" # type 名称
    document_id => "%{id}" #id 必须是待查询的数据表的序列字段
  }
}
$ ./bin/logstash -f logstash_es.conf

3)Kibana 安装配置

  • Download and unzip Kibana
  • Open config/kibana.yml in an editor,Set elasticsearch.url to point at your Elasticsearch instance
  • Run bin/kibana (or bin\kibana.bat on Windows)
  • Point your browser at http://localhost:5601

4)检测 ELK 效果

交互方式: REST

http://localhost:9200/

查看模板、插件

curl -XGET "http://localhost:9200/_template"

http://localhost:9200/_template

http://localhost:9200/_plugin/head/

查看 ES 搜索结果

$ curl http://localhost:9200/_search?q=hello
 % Total  % Received % Xferd Average Speed  Time  Time   Time Current
                 Dload Upload  Total  Spent  Left Speed
100  137 100  137  0   0  100   0 0:00:01 0:00:01 --:--:--  101{"took":1349,"timed_out":false,"_shards":{"total":5,"successful":5,"skipped":0,"failed":0},"hits":{"total":0,"max_score":null,"hits":[]}}

2.4.2.6 ELK 实例:大数据运维

在海量日志系统的运维中,以下几个方面是必不可少的:

  • 分布式日志数据集中式查询和管理
  • 系统监控,包含系统硬件和应用各个组件的监控
  • 故障排查
  • 安全信息和事件管理
  • 报表功能

ELK 组件各个功能模块如图 5 所示,它运行于分布式系统之上,通过搜集、过滤、传输、储存,对海量系统和组件日志进行集中管理和准实时搜索、分析, 使用搜索、监控、事件消息和报表等简单易用的功能,帮助运维人员进行线上业务的准实时监控、业务异常时及时定位原因、排除故障、程序研发时跟踪分析 Bug、业务趋势分析、安全与合规审计,深度挖掘日志的大数据价值。同时 Elasticsearch 提供多种 API(REST JAVA PYTHON 等 API)供用户扩展开发,以满足其不同需求。

image-20191204222202290

图 18 ELK 在运维系统组件中应用图示

汇总 ELK 组件在大数据运维系统中,主要可解决的问题如下:

  • 日志查询,问题排查,上线检查
  • 服务器监控,应用监控,错误报警,Bug 管理
  • 性能分析,用户行为分析,安全漏洞分析,时间管理

综上,ELK 组件在大数据运维中的应用是一套必不可少的且方便、易用的开源解决方案。

2.4.2.7 注意事项

安装常见问题

a、elasticsearch 和 kibana 版本要对应,否则服务起不来。

b、如果浏览器中访问 http://localhost:9200/ 没有返回预期的结果,就需要修改 Elasticsearch 的配置,使其支持外网访问。首先,按 Ctrl +C 停止 Elasticsearch,然后,打开 Elasticsearch 的配置文件 vimconfig/elasticsearch.yml,找到 network.host 这一行。

1)修改 max file descriptors

$ sudo vi /etc/security/limits.conf
# 增加两行,将打开文件数从缺省的 4096 改为 65536
*   soft  nofile      65536
*   hard  nofile      65536

2)修改 max virtual memory areas vm.max_map_count [65530]

$ sudo sysctl -w vm.max_map_count=655360

3)修改 JVM 内存

# 从 64KB 改为 1GB
# 老版本修改 config/jvm.options
-Xms512m
-Xmx512m

# 修改 bin/elasticsearch.in.sh
ES_MIN_MEM=1g
ES_MAX_MEM=1g

本章参考

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文