2.4 日志处理和分析
海量日志处理有两个流派,
- Schema on Read:读时分析,如 Splunk,特性是日志解析更灵活,海量时速度可能是分钟级。
- Schema on Write:写时分析,如 ELK,特性是速度快~秒级。
备注:Splunk 和 ELK 的比较 见下方
2.4.1 Splunk
Splunk 是机器数据的引擎。使用 Splunk 可收集、索引和利用所有应用程序、服务器和设备生成的快速移动型计算机数据 。 使用 Splunking 处理计算机数据,可让您在几分钟内解决问题和调查安全事件。监视您的端对端基础结构,避免服务性能降低或中断。以较低成本满足合规性要求。关联并分析跨越 多个系统的复杂事件。获取新层次的运营可见性以及 IT 和业务智能。
Splunk 于 2012 年在 Nasdaq 上市,是第一家上市的大数据公司。
Splunk 是一个托管的日志文件管理工具,它的主要功能包括:
- 日志聚合功能
- 搜索功能
- 提取意义
- 对结果进行分组,联合,拆分和格式化
- 可视化功能
- 电子邮件提醒功能
Name | Splunk |
---|---|
Description | Analytics Platform for Big Data |
Primary database model | Search engine |
DB-Engines Ranking Trend Chart | Score 65.67 Rank #13 Overall #2 Search engines |
Website | www.splunk.com |
Technical documentation | docs.splunk.com/Documentation/Splunk |
Developer | Splunk Inc. |
Initial release | 2003 |
License | commercial |
Cloud-based | no |
Server operating systems | Linux OS X Solaris Windows |
Data scheme | yes |
Typing | yes |
XML support | yes |
Secondary indexes | yes |
SQL | no |
APIs and other access methods | HTTP REST |
Supported programming languages | C# Java JavaScript PHP Python Ruby |
Server-side scripts | yes |
Triggers | yes |
Partitioning methods | Sharding |
Replication methods | Master-master replication |
MapReduce | yes |
Consistency concepts | Eventual Consistency |
Foreign keys | no |
Transaction concepts | no |
Concurrency | yes |
Durability | yes |
In-memory capabilities | no |
User concepts | Access 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 方便的对日志查询,并根据数据生成报表(详细过程和配置在此省略)。
图 13 ELK 架构一
说明:ELK 架构一优点是搭建简单,易于上手。缺点是 Logstash 耗资源较大,运行占用 CPU 和内存高。另外没有消息队列缓存,存在数据丢失隐患。建议供学习者和小规模集群使用。
第二种架构(图 2)引入了消息队列机制,位于各个节点上的 Logstash Agent 先将数据/日志传递给 Kafka(或者 Redis),并将队列中消息或数据间接传递给 Logstash,Logstash 过滤、分析后将数据传 递给 Elasticsearch 存储。最后由 Kibana 将日志和数据呈现给用户。因为引入了 Kafka(或者 Redis),所以即使远端 Logstash server 因故障停止运行,数据将会先被存储下来,从而避免数据丢失。
图 14 ELK 架构二
说明:这种架构适合于较大集群的解决方案,但由于 Logstash 中心节点和 Elasticsearch 的负荷会比较重,可将他们配置为集群模式, 以分担负荷,这种架构的优点在于引入了消息队列机制,均衡了网络传输,从而降低了网络闭塞尤其是丢失数据的可能性,但依然存在 Logstash 占用系统资 源过多的问题。
第三种架构(下图)引入了 Logstash-forwarder。首先,Logstash-forwarder 将日志数据搜集并统一发送给主节点上 的 Logstash,Logstash 分析、过滤日志数据后发送至 Elasticsearch 存储,并由 Kibana 最终将数据呈现给用户。
图 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。同时用户可根据需要进行二次开发。
图 16 ELK 架构四
说明:这种架构原理基于第三种架构,但是更灵活,扩展性更强。同时可配置 Logstash 和 Elasticsearch 集群用于支持大集群系统的运维日志数据监控和查询。
2.4.2.2 Elasitcsearch
Elasticsearch 是一个开源的搜索和数据分析引擎,基于 Apache Lucene 构建,旨在提供分布式、高可用、高性能的全文搜索功能。以下是一些关键特性和组件的详细介绍:
主要特性
实时搜索 :
- Elasticsearch 支持近实时搜索,用户可以在数据索引后几乎立即查询到最新数据。
分布式架构 :
- 内置分片和复制机制,可以在多台服务器上水平扩展,确保高可用性和负载均衡。
RESTful API :
- 提供强大的 RESTful API,用户可以通过简单的 HTTP 请求执行搜索和管理操作。
全文搜索 :
- 支持复杂的查询,包括布尔查询、范围查询、模糊查询等,适用于多种搜索场景。
聚合功能 :
- 可以对数据进行实时分析和统计,支持各种聚合类型,如计数、平均、最大值和最小值等。
文档导向 :
- 使用 JSON 格式存储数据,用户可以灵活地索引和查询半结构化数据。
组件介绍
节点(Node) :
Elasticsearch 集群中的单个实例,负责存储和处理数据。集群(Cluster) :
由多个节点组成的集合,共同工作以存储和搜索数据。索引(Index) :
数据的集合,类似于数据库中的表,支持多种数据类型。文档(Document) :
索引中的基本信息单位,使用 JSON 格式表示。分片(Shard) :
索引的子集,每个索引可以分成多个分片,以提高性能和可扩展性。
使用场景
- 日志和事件数据分析
- 网站搜索功能
- 数据监控和分析
- 商业智能和数据可视化
社区与文档
Elasticsearch 拥有活跃的开发者社区,提供丰富的文档和教程,用户可以在官网找到详细的安装、配置和使用指导。
如果你有特定的应用场景或问题,欢迎进一步探讨!
2.4.2.3 Logstash
实现模式 :PIPE-FILTER 模式,多线程的线程池(INPUT 和 FILTER 缺省各 20 个)。
表格 6 logstash 的主要组件
input | filters | output | |
---|---|---|---|
简介 | 输入数据到 logstash | 数据中间处理,对数据进行操作。 | 输出数据。 |
数据源 | stdin、file、syslog、 redis、beats | grok/mutate/drop/clone/geoip /json/date/split | stdout、elasticsearch、email、file、nagios、 |
备注:编解码包括:json、多行事件、网络流。
Logstash 工作原理
Logstash 事件处理有三个阶段:inputs → filters → outputs。是一个接收,处理,转发日志的工具。支持系统日志,webserver 日志,错误日志,应用日志,总之包括所有可以抛出来的日志类型。
图 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
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 3 | kibana 4 | |
---|---|---|
简介 | 源自于 elasticsearch dashborad。纯静态文件。围绕看板的单面应用。 | 仿 splunk 界面。功能拆分成搜索页、可视化和仪表盘等。 |
实现语言 | jruby | |
最新版本 kibana-6.3.0-windows-x86_64 |
2.4.2.5 ELK 入门实例:Hello World
到官网下载并解压 Elasticsearch、logstash、Kibana
1)Elasticsearch 安装配置
安装步骤
- Download and unzip Elasticsearch
- Run bin/elasticsearch (or bin\elasticsearch.bat on Windows)
- Run curl http://localhost:9200/ or Invoke-RestMethod http://localhost:9200 with PowerShell
- Dive into the getting started guide and video .
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
查看模板、插件
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)供用户扩展开发,以满足其不同需求。
图 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
本章参考
Flume NG:Flume 发展史上的第一次革命 https://www.ibm.com/developerworks/cn/data/library/bd-1404flumerevolution/index.html
工作流调度系统介绍 https://blog.csdn.net/tototuzuoquan/article/details/73239950
Hadoop - 任务调度系统比较 https://www.cnblogs.com/smartloli/p/4964741.html
ELK 多种架构及优劣 https://blog.csdn.net/wenlixing110/article/details/56277603
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论