ELK的一点认识
为什么需要ELK:
一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。
简介:
ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。
Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,近实时(1s)文件存储、检索、分析,零配置,集群自动发现,自动分片索引,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
Elastic Search
数据大致可以分为结构化数据和非结构化数据,结构化数据由于相互间具有一定的联系和固定的结构,对其进行查找时容易利用其结构编写算法加速其搜索速度。但是对于非结构化数据,只能采取顺序扫描的方法进行搜索,这种搜索方式耗时太久。因此自然的想到将非结构化的数据转换为结构化的数据,即将抽象的联系具体化,称之为索引。
Elastic Search采取Lucene全文搜索引擎架构,将数据通过Tokenize分词器划分为不同的字符串并过滤掉出现频率较高的停词(stop word),例如is a an等等。这些字符串将会以一定的形式重新组织起来,以字符串、频率、文档链表的结构建立起字符串到文档数据的映射,称之为反向索引。这里的文档链表称之为倒排表。
(英文中存在同一词的多种形式,在分词器处理的过程中可以分为三大步骤,分别是:1)去除标点符号与停词 2)将不同的词元去除其形式归为一般形式的词 3) 将词与索引组件结合,形成词字典 4)按词的字母进行排序,合并相同的词,形成文档倒排链表)
某单词的倒排索引项主要包含如下信息:
1.文档id用于获取原始信息
2.单词频率(TF,Term Frequency),记录该单词在该文档中出现的次数,用于后续相关性算分
3.位置(Posting),记录单词在文档中的分词位置(多个),用于做词语搜索(Phrase Query)
4.偏移(Offset),记录单词在文档的开始和结束位置,用于高亮显示
基本概念
索引(Index)
ES将数据存储于一个或多个索引中,索引是具有类似特性的文档的集合。类比传统的关系型数据库领域来说,索引相当于SQL中的一个数据库,或者一个数据存储方案(schema)。索引由其名称(必须为全小写字符)进行标识,并通过引用此名称完成文档的创建、搜索、更新及删除操作。一个ES集群中可以按需创建任意数目的索引。
类型(Type)
类型是索引内部的逻辑分区(category/partition),然而其意义完全取决于用户需求。因此,一个索引内部可定义一个或多个类型(type)。一般来说,类型就是为那些拥有相同的域的文档做的预定义。例如,在索引中,可以定义一个用于存储用户数据的类型,一个存储日志数据的类型,以及一个存储评论数据的类型。类比传统的关系型数据库领域来说,类型相当于“表”。
文档(Document)
文档是索引和搜索的原子单位,它是包含了一个或多个域(Field)的容器,基于JSON格式进行表示。文档由一个或多个域组成,每个域拥有一个名字及一个或多个值,有多个值的域通常称为“多值域”。每个文档可以存储不同的域集,但同一类型下的文档至应该有某种程度上的相似之处。
Elastic Search 是分布式搜索引擎系统,实现了近乎实时的数据存储、检索、分析功能。运作过程可以分为三部分:1.数据的录入与更新(索引的建立与更新) 2. 数据的查找与分析 3.集群的增减容
一、数据的录入与更新
(1)分片存储与副本机制
首先,ES是一个分布式的系统,一个索引在被创建时需要定义切片数目,不同分片(segment)存储在不同的datanode中,而每一个datanode都是一个完整的lucene搜索引擎。一堆文件将会通过负载均衡算法被相对均匀的分布到不同的分片中。数据会在分片中自动产生索引,也就是自动分片索引。ES默认一个索引有5个主分片,在创建索引时完成创建且不可更改,而副本分片的数量会随时变化。集群数量健康的状态下时,主分片必须与副本分片存储在不同的datanode上,降低数据丢失的风险。
(2)存储过程:
任意节点接收到了客户端请求,成为协调结点,根据hash算法得到路由值再对分片数取模,得到数据应该存储的分片位置,然后将请求转发到该主分片,主分片获得请求后写入数据,并且同步更新数据到副本分片。
这里需要注意的时,上面完成的操作并未落实到磁盘上。ES每一秒完成一次刷新操作,这个时间内录入的数据会被写入到文件缓存区中,而操作将会被记录到transactionLog文件中。这时新写入的数据可以被搜索到,但是未写入到磁盘。transactionLog文件每5秒将被写入到磁盘中一次,同时每30分种或者transactionLog文件过大的时候,文件缓冲区中的文件将被写入到磁盘。
二、数据的查找
1.任意节点接收到了客户端请求,成为协调结点。
2.协调结点将请求转发给所有的分片(节点)(包括p和r)
3.每个分片都进行搜索,并向协调结点返回自己的搜索结果(文档ID)
4.协调结点对返回的结果进行合并排序分页等操作
5.协调结点根据索引从分片中拉取真正的数据,最终返回给客户端
完成倒排索引得文档ID,再由正排索引由文档ID取得完整文档数据
三、集群的增减容(主节点丢失、协调结点) 待补充
(1)节点
主节点:处理与集群操作相关的内容,如创建或删除索引,跟踪集群节点状态,决定分片在结点上的分布。一般与数据结点分离。
数据节点:存储索引数据的节点,一个完整的lucene引擎,主要对文档进行增删该查操作
协调节点:只处理路由请求,处理搜索,广播索引等操作。
LogStash
LogStash主要用于从非结构化数据中提取关键数据并结构化,其工作步骤可以分为,读入=>解码=>过滤分析=>再编码=>输出。因此Logstash与之相对应的拥有三个模块:input、filter、output,每个模块又有众多可拔插的组件支持,每个模块可以同时支持多个插件。由此实现了功能的多样和复杂性。
elastic.co 官网提供了众多插件的API
一、数据的输入
1)**从文件读入**
file{
path=>"/root/logstash/mylog"
start_position=>"beginning"
sincedb_path=>"/dev/null"
codec=”json”
}
2)**从Sql数据库**
jdbc {
type => "logs_20171206"
jdbc_connection_string => "jdbc:mysql://192.168.9.80:3306/kgc_behivour_log"
jdbc_user => "root"
jdbc_password => "123456"
jdbc_driver_library => "/root/workspace/downloads/jdbc_mysql_5.1.44-dependencies.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "1000"
statement => "select * from logs_20171206"
schedule => "* * * * *"
}
二、数据过滤分析
grok {
patterns_dir => ["./patterns"]
match => {
"message" => "%{USERUID}"
}
}
grok {
patterns_dir => ["./patterns"]
match => {
"message" => "%{EQUIPMENT}"
}
}
grok {
match => {
"message" => "%{TIMESTAMP_ISO8601:time}\t%{DATA:request}\t%{WORD:method}\t%{NUMBER:status}\t%{IP:uip}\t(?:-|%{IP:sip})\t(?:-|%{URI:prepend})\t(?:-|(?[^\r]+))"
}
}
三、数据的输出
1)elasticsearch
elasticsearch {
hosts => ["192.168.9.80:9200"]
index => "behivour-logs"
document_type => "logs_20171206"
document_id => "%{id}"
}
2)Stdout
stdout{
codec=”rubydebug”
}
Kibana
创建index pattern
Management>Index Patterns>Create Index Pattern
数据可视化Visualize
ELK的一点认识的更多相关文章
- elk 日志处理的一点思路
zjtest7-frontend:/usr/local/logstash-2.3.4/bin# ./logstash -f ../config/logstash_agent.conf zjtest7- ...
- ELK+Kafka集群日志分析系统
ELK+Kafka集群分析系统部署 因为是自己本地写好的word文档复制进来的.格式有些出入还望体谅.如有错误请回复.谢谢! 一. 系统介绍 2 二. 版本说明 3 三. 服务部署 3 1) JDK部 ...
- elk平台搭建
很多时候我们需要对日志做一个集中式的处理,但是通常情况下这些日志都分布到n台机器上面,导致一个结果就是效率比较低,而ELK平台可以帮助我们解决这么一件事情: ELK下载:https://www.ela ...
- 【转】ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台
[转自]https://my.oschina.net/itblog/blog/547250 摘要: 前段时间研究的Log4j+Kafka中,有人建议把Kafka收集到的日志存放于ES(ElasticS ...
- elk收集分析nginx access日志
elk收集分析nginx access日志 首先elk的搭建按照这篇文章使用elk+redis搭建nginx日志分析平台说的,使用redis的push和pop做队列,然后有个logstash_inde ...
- ELK日志解决方案安装配置与使用
官方网站:https://www.elastic.co/products/elasticsearch logstash,elasticsearch,kibana作用如下: logstash:分布在每一 ...
- ELK日志分析系统搭建(转)
摘要: 前段时间研究的Log4j+Kafka中,有人建议把Kafka收集到的日志存放于ES(ElasticSearch,一款基于Apache Lucene的开源分布式搜索引擎)中便于查找和分析,在研究 ...
- centos6 搭建ELK
mark一下时间:2016年2月19日10:17:09 记录使用 Logstash: Logstash服务的组件,用于处理传入的日志. Elasticsearch: 存储所有日志 Kibana 4: ...
- ELK入门级介绍--打造实时日志查询系统
这几天一直在研究ElasticSearch,在网上看到一篇好的文章和大家分享. ELK平台介绍 在搜索ELK资料的时候,发现这篇文章比较好,于是摘抄一小段: 以下内容来自:http://baidu.b ...
随机推荐
- Git基本概念,流程,分支,标签及常用命令
Git基本概念,流程,分支,标签及常用命令 Git一张图 Git基本概念 仓库(Repository) 分支(Branch) Git工作流程 Git分支管理(branch) 列出分支 删除分支 分支合 ...
- telnet | ping
ping通常是用来检查网络是否通畅或者网络连接速度的命令. ping www.baidu.com 而telnet是用来探测指定ip是否开放指定端口的. telnet xxx 443 查看443开放没 ...
- vmware安装linux系统,自动建立没选项
虚拟机安装CentOS自己跳过分区,直接就到最后的软件包安装了 建完系统后不用power on,建完后在edit一下系统参数,应该会看见两个cd, 有一个是vmware自己加的,把那个删除后在开机就可 ...
- VScode 连接虚拟机
VScode 连接虚拟机 在VScode上面使用SSH连接虚拟机,编写代码以及运行都将会方便许多 打开VScode,安装Remote-SSH插件 配置SSH连接信息 点击左侧第四个图标,然后单击设置按 ...
- Codeforces Round #655 (Div. 2) A. Omkar and Completion
题目链接:https://codeforces.com/contest/1372/problem/A 题意 构造一个大小为 $n$ 的数组 $a$,要求满足 $1 \le a_i \le n$,且不存 ...
- 【hdu 3579】Hello Kiki(数论--拓展欧几里德 求解同余方程组)
题意:Kiki 有 X 个硬币,已知 N 组这样的信息:X%x=Ai , X/x=Mi (x未知).问满足这些条件的最小的硬币数,也就是最小的正整数 X. 解法:转化一下题意就是 拓展欧几里德求解同余 ...
- hdu5534 Partial Tree
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total Submissi ...
- Codeforces Global Round 7 D2. Prefix-Suffix Palindrome (Hard version)(Manacher算法+输出回文字符串)
This is the hard version of the problem. The difference is the constraint on the sum of lengths of s ...
- 流程的python PDF高清版
免费下载链接:https://pan.baidu.com/s/1qcPjLlFXhVXosIGBKHVVXQ 提取码:qfiz
- 【史上最全】Hadoop 核心 - HDFS 分布式文件系统详解(上万字建议收藏)
1. HDFS概述 Hadoop 分布式系统框架中,首要的基础功能就是文件系统,在 Hadoop 中使用 FileSystem 这个抽象类来表示我们的文件系统,这个抽象类下面有很多子实现类,究竟使用哪 ...