目录
引言
- 日志分析是运维工程师解决系统故障,发现问题的主要手段。
- 日志主要包括系统日志、应用程序日志和安全日志,系统运维和开发人员可以通过日志了解服务器软硬件信息检查配过程中的错误及错误发生的原因。
- 经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误
- 通常,日志被分散的储存在不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志,既繁琐又效率低下。为此,我们可以使用集中化的日志管理,例如:开源的 syslog,将所有服务器上的日志收集汇总
- 集中化管理日志后,日志的统计和检承又成为一件比较麻烦的事情,一般我们使用 grep、awk 和 wc 等 Linux 命令能实现检索和统计,但是对于更高要求的查询、排序和统计等,再加上庞大的机器数量,使用这样的方法依然难免有点力不从心
- 开源实时日志分析 ELK 平台能够完美的解决我们上述的问题,ELK 由 ElasticSearch、Logstash 和 Kiabana 这三个开源工具组成
一、ELK 日志分析系统简介
1. 日志服务器
- 提高安全性:仅是基于日志来恢复和定位故障,是很困难的
- 集中存放日志,即集中化管理
- 缺陷:对日志的分析困难,因为集中化管理,所以信息量更加巨大
2. ELK 是什么
日志简化分析的管理工具,由Elasticsearch(ES)、Logstash、Kibana三个开源工具组成
- ES(nosql非关数据库):存储功能和索引
- Logstash(收集日志):到应用服务器上拿取 log,并进行格式转换后输出到 es 中
① 通过 input 功能来收集/采集 log
② filter 过滤器:格式化数据
③ output 输出:日志输出到es数据库内 - Kibana(展示工具):将es内的数据在浏览器展示出来,通过UI界面展示(可以根据自己的需求对日志进行处理,方便查阅读取)
3. Logstash 四种工具
- Packetbeat ( 搜集网络流量数据)
- Topbeat (搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据)
- Filebeat (搜集文件数据),相较于 Logstash 是轻量级工具
- Winlogbeat (搜集Windows事件日志数据)
4. 日志处理步骤
- ① Logstash 收集 AppServer 产生的 Log,并将log进行集中化管理
- ② 将日志格式化(Logstash) 并存放到 ElasticSearch 集群中
- ③ 对格式化后的数据进行索引|和存储( Elasticsearch)
- ④ Kibana 则从 Es 集群中查询数据生成图表,再返回给 browsers
二、Elasticsearch 的基础核心概念
1. 概述
- 提供了一个分布式多用户能力的全文搜索(索引)引擎,开源,使用 Java 开发
- 分布式即数据不会放在一个地方
- 正是 ES 这些优秀的机制,所以会被百度等龙头企业所选择
2. 关系型数据库与 Elasticsearch 对应的关系
mysql | Elasticsearch |
---|---|
database数据库 | index索引 |
table表 | type类型 |
row行 | document文档 |
column列 | 属性 |
3. 核心概念
-
① 接近实时(NRT)
elasticsearch是一个接近实时的搜索平台,这意味着,从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟(通常是1秒) -
② 集群(cluster)
集群有一个唯一性标示的名字,默认是 elasticsearch;
集群就是由一个或多个节点组织在一起,它们共同持有整个的数据,并一起提供索引和搜索功能;
其中一个节点为主节点,这个主节点是可以通过选举产生的,并提供跨节点的联合索引和搜索的功能;
集群名字很重要,每个节点是基于集群名字加入到其集群中的 -
③ 节点(node)
节点就是一台单一的服务器,是集群的一部分,存储数据并参与集群的索引和搜索功能;
像集群一样,节点也是通过名字来标识,默认是在节点启动时随机分配的字符名,可以自己定义;
名字在集群中用于识别服务器对应的节点 -
④ 索引(index)
一个索引就是一个拥有几分相似特征的文档的集合;
一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对对应于这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字 -
⑤ 类型(type)
在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区;通常,会为具有一组共同字段的文档定义一个类型 -
⑥ 文档( document )
文档以JSON ( Javascript object Notation)格式来表示,而JSON是一个到处存在的互联网数据交互格式。
虽然一个文档在物理上位于一个索引中,实际上一个文档必须在一个索引内被索引和分配一个类型。 -
⑦ 分片shards
即es作为搜索引擎快的原因:
在实际情况下,索引存储的数据可能超过单个节点的硬件限制。如一个10亿文档需1TB空间可能不适合存储在单个节点的磁盘上,或者从单个节点搜索请求太慢了。为了解决这个问题,elasticsearch提供将索引分成多个分片的功能。当在创建索引时,可以定义想要分片的数量。每一个分片就是一个全功能的独立的索引,可以位于集群中任何节点上。
分片的好处:
水平分割扩展,增大存储量
分布式并行跨分片操作,提高性能和吞吐量
- ⑧ 副本replicas
为了防止网络问题等其它问题造成数据丢失,需要有一个故障切换机制,为此,elasticsearch让我们将索引分片复制一份或多份,称之为分片副本或副本。
副本也有两个最主要原因:
高可用性,以应对分片或者节点故障,需要在不同的节点上
提高性能, 增大吞吐量,搜索可以并行在所有副本上执行
- 总之,每个索引可以被分成多个分片。一个索引也可以被复制0次( 意思是没有复制)或多次。一旦复制了,每个索引就有了主分片(作为复制源的原来的分片)和复制分片(主分片的拷贝)之别。分片和副本的数量可以在索引创建的时候指定。在索引创建之后,你可以在任何时候动态地改变副本的数量,但是你事后不能改变分片的数量。
三、Logstash 介绍
- Logstash 由 JRuby 语言编写,基于消息(message-based) 的简单架构,并运行在 Java 虚拟机(JVM)上。LogStash可配置单一的代理端(agent) 与其它开源软件结合,以实现不同的功能。
- Logstash 的理念很简单,它只做3件事情:Collect:数据输入、Enrich:数据加工,1如过滤,改等、Transport:数据输出( 被其他模块进行调用)
1. logStash 的主要组件
- ① Shipper(日志收集者):负责监控本地日志文件的变化,及时把日志文件的最新内容收集起来。通常,远程代理端(agent)只需要运行这个组件即可;
- ② Indexer(日志存储者):负责接收日志并写入到本地文件。
- ③ Broker(日志Hub):负责连接多个Shipper和多个Indexer
- ④ Search and Storage(搜索和存储器):允许对事件进行搜索和存储;
- ⑥ Web Interface(web界面端):基于Web的展示界面
2. LogStash 主机分类
- ① 代理主机(agent host) :作为事件的传递者(shipper),将各种日志数据发送至中心主机;只需运行Logstash代理( agent)
- ② 程序中心主机(central host) :可运行包括中间转发器(Broker) 、索引器(Indexer) 、搜索和存储器( Search and
Storage )、web界面端(web Interface)在内的各个组件,以实现对日志数据的接收、处理和存储
四、Kibana 介绍
1. 简介
- Kibana 是一个针对 Elasticsearch 的开源分析及可视化平台,用来搜索、查看交互存储在 Elasticsearch 索引中的数据。
- 使用 Kibana,可以通过各种图表进行高级数据分析及展示。它操作简单,基于浏览器的用户界面可以快速创建仪表板( dashboard)实时显示Elasticsearch查询动态。
- 设置 Kibana 非常简单。无需编写代码,几分钟内就可以完成 Kibana 安装并启动 Elasticsearch 索引监测。
2. 主要功能
- Elasticsearch 无缝之集成:
Kibana架构为 Elasticsearch 定制, 可以将任何结构化和非结构化数据加入Elasticsearch索引;Kibana 还充分利用了 Elasticsearch 强大的搜索和分析功能。 - 整合你的数据:
Kibana 能够更好地处理海量数据,并据此创建柱形图、折线图、散点图、直方图、饼图和地图。 - 复杂数据分析:
Kibana 提升了 Elasticsearch 分析能力,能够更加智能地分析数据,执行数学转换并且根据要求对数据切割分块。 - 让更多团队成员受益:
强大的数据库可视化接口让各业务岗位都能够从数据集合受益。 - 接口灵活,分享更容易:
使用 Kibana 可以更加方便地创建、保存、分享数据,并将可视化数据快速交流。 - 配置简单:
Kibana 的配置和启用非常简单,用户体验非常友好。Kibana自带Web服务器,可以快速启动运行。 - 可视化多数据源:
Kibana 可以非常方便地把来自 Logstash、 ES-Hadoop、 Beats 或第三方技术的数据整合到Elasticsearch,支持的第三方技术包括Apache Flume、 Fluentd等。 - 简单数据导出:
Kibana 可以方便地导出感兴趣的数据,与其它数据集合并融合后快速建模分析,发现新结果。