一:前言

ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。

Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。

Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。

Filebeat隶属于Beats。目前Beats包含四种工具:

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

二:elasticSearch

2.1:主要特点

  1、特点:全文检索,结构化检索,数据统计、分析,接近实时处理,分布式搜索(可部署数百台服务器),处理PB级别的数据搜索纠错,自动完成
  2、使用场景:日志搜索,数据聚合,数据监控,报表统计分析
  3、国内外使用者:维基百科,Stack Overflow,GitHub

2.2:ES6.1新特性讲解

  1、6.1.x版本基于Lucene 7.1.0,更快,性能进一步提升,对应的序列化组件,升级到Jackson 2.8

  2、自适应副本选择
     在Elasticsearch中,对同一分片的一系列搜索请求将以循环方式转发到主要和每个副本。如果一个节点启动了长时间的垃圾收集,这可能会出现问题 - 搜索请求仍将被转发到缓慢的节点,并且会影响搜索延迟。

    在6.1中,我们添加了一个称为自适应副本选择的实验性功能。每个节点跟踪并比较搜索请求到其他节点的时间,并使用这些信息来调整向特定节点发送请求的频率。在我们的基准测试中,这样可以大大提高搜索吞吐量,降低99%的延迟。
这个选项在默认情况下是禁用的

  3、推荐使用5.0版本推出的Java REST/HTTP客户端,依赖少,比Transport使用更方便,在基准测试中,性能并不输于Transport客户端,

在5.0到6.0版本中,每次有对应的API更新, 文档中也说明,推荐使用这种方式进行开发使用,所有可用节点间的负载均衡
在节点故障和特定响应代码的情况下进行故障转移,失败的连接处罚(失败的节点是否重试取决于失败的连续次数;失败的失败次数越多,客户端在再次尝试同一节点之前等待的时间越长)

2.3:安装ES

  1.linux下使用wget下载jdk8:

进到目录/usr/local/software
#wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie"
#"http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz" #vim /etc/profile
加入
export JAVA_HOME=/usr/local/software/jdk8
export JAVA_BIN=/usr/local/software/jdk8
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH

使用wget 下载elasticsearch安装包

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.2.tar.gz

解压

tar -zxvf elasticsearch-6.2.2.tar.gz

2.4:配置ES出现相关问题处理

1、问题一

Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c5330000, 986513408, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 986513408 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /usr/local/software/temp/elasticsearch-6.2.2/hs_err_pid1912.log

解决:内存不够,动态增加内存

2、问题二

[root@iZwz95j86y235aroi85ht0Z bin]# ./elasticsearch
[2018-02-22T20:14:04,870][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:125) ~[elasticsearch-6.2.2.jar:6.2.2]
at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:112) ~[elasticsearch-6.2.2.jar:6.2.2]
at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-6.2.2.jar:6.2.2]
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[elasticsearch-cli-6.2.2.jar:6.2.2]

解决:用非root用户
添加用户:useradd -m 用户名 然后设置密码 passwd 用户名

3、问题三

./elasticsearch
Exception in thread "main" java.nio.file.AccessDeniedException: /usr/local/software/temp/elasticsearch-6.2.2/config/jvm.options

解决:权限不够 chmod 777 -R 当前es目录

常见配置问题资料:https://www.jianshu.com/p/c5d6ec0f35e0

2.5:ES目录和配置文件介绍

简介:介绍ES目录结构,配置文件基本说明
  bin: 启动文件
  log: 日志文件,包括运行日志,慢查询日志
  config: 核心配置文件
  lib: 依赖包
  plugins :插件

2.6:ES核心配置文件讲解,性能优化配置

简介:讲解核心配置文件,JVM参数配置,性能优化
  健康状态检查:http://localhost:9200/_cluster/health
  jvm.options 虚拟机参数配置文件,配置heap内存一样

  elasticsearch.yml 主配置文件
  cluster.name 集群名称,同一个网段自动加入
  node.name 节点名称
  http.port http端口

注意事项
本地启动多个节点,复制es安装包的时候,需要删除里面data目录里面的资料,不然无法加入集群

2.7:ES基础概念讲解

简介:es的index索引,document文档对象,副本,多节点集群等基础知识

1、通俗的解释:
  在Elasticsearch中,文档归属于一种类型(type),而这些类型存在于索引(index)中, 索引名称必须是小写
  Relational DB -> Database -> Table -> Row -> Column
  Elasticsearch -> Indice -> Type -> Document -> Field

2、分片shards:
  数据量特大,没有足够大的硬盘空间来一次性存储,且一次性搜索那么多的数据,响应跟不上es提供把数据进行分片存储,这样方便进行拓展和提高吞吐

3、副本replicas:
  分片的拷贝,当主分片不可用的时候,副本就充当主分片进行使用

4、Elasticsearch中的每个索引分配5个主分片和1个副本
  如果你的集群中至少有两个节点,你的索引将会有5个主分片和另外5个复制分片(1个完全拷贝),这样每个索引总共就有10个分片。

2.8:search搜索语句

简介:讲解URL中的_search搜索语句的基本使用,美化响应结果, 索引的基础操作

集群健康检查

http://localhost:9200/_cat/health?v
http://localhost:9200/_cluster/health(推荐)

状态说明

green:正常
yellow: 集群正常 数据正常,部分副本不正常
red: 集群部分正常,数据可能丢失,需要紧急修复

查询节点列表

http://localhost:9200/_cat/nodes?v

查看所有索引

http://localhost:9200/_cat/indices?v

目前 集群中没有任何索引

补充:
curl
-X 指定http的请求方法 有HEAD GET POST PUT DELETE
-d 指定要传输的数据
-H 指定http请求头信息

新增索引

curl -XPUT 'localhost:9201/blog_test?pretty'
curl -XPUT 'localhost:9201/blog?pretty'

  

删除索引

curl -XDELETE 'localhost:9200/blog_test?pretty'

新增一条记录,并指定为article类型,ID为1

curl -XPUT -H "Content-Type: application/json" 'localhost:9201/yaohong/article/2?pretty' -d '
{
"title": "myblog",
"content":"1234567"
}'

  

curl -XPUT -H "Content-Type: application/json" 'localhost:9201/yaohong/article/3?pretty' -d '
{
"title": "test",
"content":"testsfsdfdsfdsf",
"PV":23
}'

ID查询记录

curl -XGET 'localhost:9200/yaohong/article/1'
curl -XGET 'localhost:9200/yaohong/article/1?pretty'(美化推荐)

搜索

curl -XGET 'http://localhost:9201/yaohong/article/_search?q=title:小A'

  

2.9:search搜索语句

简介:讲解结构化查询语句DSL的使用,bool,filter查询等

新增数据集

curl -XPUT -H "Content-Type: application/json" 'localhost:9201/yaohong/article/7?pretty' -d '
{
"title": "elk搭建日志采集系统",
"content":"elk elasticsearch logstash kibana",
"PV":18
}'

什么是query DSL

1、Domain Specific Language 领域特定语言
2、Elasticsearch提供了完整的查询DSL,基于JSON定义查询
3、用于构造复杂的查询语句

curl查询(空格处理不当,会出问题)

curl -XPOST -H "Content-Type: application/json" 'http://localhost:9201/blog/article/_search' -d '{
"query" : {
"term" : { "title" : "elk" }
}
}'

建议使用postman工具

post方式提交,增加http头信息
body里面选row格式,粘贴对应的dsl即可

bool查询

{
"query": {
"bool": {
"must": [
{ "match": { "title": "elk" } }
],
"must_not": [
{ "match": { "title": "小D" } }
]
}
}
}

filter查询
参考地址:https://www.elastic.co/guide/en/elasticsearch/reference/5.0/query-dsl-filtered-query.html

{
"query": {
"bool": {
"filter": {
"range": {
"PV": {
"gt": 15
}
}
},
"must": {
"match": {
"title": "ELK"
}
}
}
}
}

总结:(官网参考 https://www.elastic.co/guide/en/elasticsearch/reference/current/query-filter-context.html)

1、大部分filter的速度快于query的速度
2、filter不会计算相关度得分,且结果会有缓存,效率高
3、全文搜索、评分排序,使用query
4、是非过滤,精确匹配,使用filter

三:Logstash

3.1:Logstash基本介绍和使用场景

简介:讲解什么是logstash,里面的基本工作流程input,filter,output等说明

  什么是logstash (文档地址 https://www.elastic.co/guide/en/logstash/current/index.html)
  开源的日志收集引擎,具备实时传输的能力
  读取不同的数据源,并进行过滤,开发者自定义规范输出到目的地
  日志来源多(如系统日志,应用日志,服务器日志等)

流程讲解
  logstash通过管道pipeline进行传输,必选的两个组件是输入input和输出output,还有个可选过滤器filter
  logstash将数据流中等每一条数据称之为一个event,即读取每一行数据的行为叫做事件
  #输入
  input {
  ...
  }

  # 过滤器
  filter {
  ...
  }

  # 输出
  output {
  ...
  }

3.2:Logstash插件介绍

简单的配置 test.conf

input {
# 从文件读取日志信息
file {
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
} filter { } output {
#标准输出
elasticsearch {
hosts => ["localhost:9200"]
index => "logstash-test-%{type}-%{host}"
}
}

input插件:https://www.elastic.co/guide/en/logstash/current/input-plugins.html
  file,http,kafka,rabbitmq等

filter插件:https://www.elastic.co/guide/en/logstash/current/filter-plugins.html
  grok(号称将非标准化的日志数据转换成标准化并且可搜索数据最好的方式,常用于处理Niginx,sysLog等日志)
  drop(跳过某些日志,不进入output)
  geoip(获取地理信息)

output插件:https://www.elastic.co/guide/en/logstash/current/output-plugins.html
  elasticSearch,cvs,email,file等

3.2安装LogStash6.1.2

下载安装包

wget https://artifacts.elastic.co/downloads/logstash/logstash-6.2.2.tar.gz

解压:tar -zxvf logstash-6.2.2.tar.gz

快速启动(需要java8 jre,目前不支持java9)

./bin/logstash -e 'input {stdin {}} output {stdout {}}'

目录文件说明

  https://www.elastic.co/guide/en/logstash/6.2/dir-layout.html

配置讲解
  https://www.elastic.co/guide/en/logstash/6.2/logstash-settings-file.html

  logstash.yml 修改 pipeline.workers,根据CPU核数增加1到2即可
  jvm.options 修改 xms和xmx为相同,一般是系统内存三份之二

日志收集-Elk6的更多相关文章

  1. ELK 6安装配置 nginx日志收集 kabana汉化

    #ELK 6安装配置 nginx日志收集 kabana汉化 #环境 centos 7.4 ,ELK 6 ,单节点 #服务端 Logstash 收集,过滤 Elasticsearch 存储,索引日志 K ...

  2. 日志管理系统ELK6.2.3

    https://www.jianshu.com/p/88f2cbedcc2a 写在前面 刚毕业工作的时候,处理日志喜欢自己写脚本抓取数据分析日志,然后在zabbix上展示出来.但是开发要看日志的时候, ...

  3. LiveCD DSET日志收集

      DELL的LiveCD是一张PE光盘,最新版本7.1是基于CentOS 6.2系统的. 工具下载地址: http://downloads.dell.com/FOLDER01960516M/1/SL ...

  4. ExceptionLess异常日志收集框架-1

    哈哈,中秋和代码更配哦,不知不觉一年过半了,祝园友们中秋快乐 前一阵子在博客园看到了一篇博文 http://www.cnblogs.com/savorboard/p/exceptionless.htm ...

  5. Scribe日志收集工具

    Scribe日志收集工具 概述 Scribe是facebook开源的日志收集系统,在facebook内部已经得到大量的应用.它能够从各种日志源上收集日志,存储到一个中央存储系统(可以是NFS,分布式文 ...

  6. 【转】flume+kafka+zookeeper 日志收集平台的搭建

    from:https://my.oschina.net/jastme/blog/600573 flume+kafka+zookeeper 日志收集平台的搭建 收藏 jastme 发表于 10个月前 阅 ...

  7. 【转】Flume日志收集

    from:http://www.cnblogs.com/oubo/archive/2012/05/25/2517751.html Flume日志收集   一.Flume介绍 Flume是一个分布式.可 ...

  8. ELK+kafka构建日志收集系统

    ELK+kafka构建日志收集系统   原文  http://lx.wxqrcode.com/index.php/post/101.html   背景: 最近线上上了ELK,但是只用了一台Redis在 ...

  9. Flume -- 开源分布式日志收集系统

    Flume是Cloudera提供的一个高可用的.高可靠的开源分布式海量日志收集系统,日志数据可以经过Flume流向需要存储终端目的地.这里的日志是一个统称,泛指文件.操作记录等许多数据. 一.Flum ...

随机推荐

  1. C. Report

    题意:给出n个无序的数以及m个操作,每个操作由两个数组成,第一个数是操作的方式,第二个数 i 是操作的范围,若第一个数是1,则给 1-i 个数按升序排序,若第二个数是2,则给 1-i 个数按降序排列. ...

  2. linux中断源码分析 - 概述(一)

    本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 关于中断和异常 一般在书中都会把中断和异常一起说明,因为它们具有相同的特点,同时也有不同的地方.在CPU里,中断 ...

  3. java算法----排序----(4)快速排序

    package log; public class Test4 { /** * java算法---快速排序 * * @param args */ public static void main(Str ...

  4. python 知识

    def action_cancel_sale_order(self,cr,uid,ids,context=None): self.message_post(cr, uid, ids, body=u&q ...

  5. zjoi2018 day1游记

    咕咕咕 upd:看见有人贴上zhihu的问题,那个我早就看到了... 谴责一番题主 @gzy_cjoier 阅读量马上700没想到吧 既然这么火我挂个广告吧 永别,OI 听说有人催更??

  6. HDU-6440-费马小定理

    亏我前几天还学数论呢...没有深入研究费马小定理这个东西...做事情一定要静下心来啊... 题目要求满足(m+n)^p=m^p+n^p,要你定义一个封闭的新的加法和乘法运算 我们知道费马小定理中有两种 ...

  7. CF 910 C. Minimum Sum

    链接 [http://codeforces.com/group/1EzrFFyOc0/contest/910/problem/C] 题意 给你n个字符串,每个字符串的字符是a~j,每个字符都可以是0~ ...

  8. easyUI中numberbox的校验

    例:两个numberbox(A,B),其中两个都为必填项,要求在文本框显示红色,来显示其是必填项,其中只有当A填完之后,在能允许B进行填写,否则给出提示框,并清空其中的数据 <!DOCTYPE ...

  9. Linux内核 实践二

    实践二 内核模块编译 20135307 张嘉琪 一.实验原理 Linux模块是一些可以作为独立程序来编译的函数和数据类型的集合.之所以提供模块机制,是因为Linux本身是一个单内核.单内核由于所有内容 ...

  10. 结对项目https://github.com/bxoing1994/test/blob/master/源代码

    所选项目名称:文本替换      结对人:曲承玉 github地址 :https://github.com/bxoing1994/test/blob/master/源代码 结对人github地址:ht ...