一:前言

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. TerraGate软件安装后,服务无法启动的解决方法

    前些天有朋友问,TerraGate安装后,服务无法启动,而且启动按钮也是不可用的状态,不知道是为什么,如下图: 打开TerraGate的安装目录,发现里面缺少一些文件,如下图: *解决办法: 重新安装 ...

  2. tcp为什么是三次握手

    刷知乎看到的,很可爱啊哈哈哈就顺手黏贴过来了 作者:大闲人柴毛毛链接:https://www.zhihu.com/question/24853633/answer/254224088来源:知乎著作权归 ...

  3. C#中,使用显式类型转换(int)和Math.Round方法,将浮点数转换为整数的区别

    主要区别就是,显式类型转换(int)是将浮点数的整数部分截取出来,然后转换为整数,所以相当于是向下取整.而Math.Round方法是对浮点数进行四舍五入后,转换为整数. 新建一个.NET Core控制 ...

  4. (转)Xpath语法格式整理

    原文 经常在工作中会使用到XPath的相关知识,但每次总会在一些关键的地方不记得或不太清楚,所以免不了每次总要查一些零碎的知识,感觉即很烦又浪费时间,所以对XPath归纳及总结一下. 在这篇文章中你将 ...

  5. sklearn学习笔记之简单线性回归

    简单线性回归 线性回归是数据挖掘中的基础算法之一,从某种意义上来说,在学习函数的时候已经开始接触线性回归了,只不过那时候并没有涉及到误差项.线性回归的思想其实就是解一组方程,得到回归函数,不过在出现误 ...

  6. BZOJ 3561 DZY Loves Math VI

    BZOJ 3561 DZY Loves Math VI 求\(\sum_{i=1}^{n}\sum_{j=1}^{m}\text{lcm}(i,j)^{\gcd(i,j)}\),钦定\(n\leq m ...

  7. Sql_索引分析

    「索引就像书的目录, 通过书的目录就准确的定位到了书籍具体的内容」,这句话描述的非常正确, 但就像脱了裤子放屁,说了跟没说一样,通过目录查找书的内容自然是要比一页一页的翻书找来的快,同样使用的索引的人 ...

  8. Linux df du 命令

    df 命令 检查磁盘空间占用情况(并不能查看某个目录占用的磁盘大小). 命令格式:df [option] -h 以容易理解的格式(给人看的格式)输出文件系统分区使用情况,例如 10kB.10MB.10 ...

  9. Linux mount 命令进阶

    笔者在<Linux mount 命令>一文中介绍了 mount 命令的基本用法,本文我们接着介绍 mount 命令的一些高级用法,比如 bind mounts(绑定挂载)和 shared ...

  10. 【M2】软件工程终期总结报告——阅读作业

    PhylabWeb——阅读作业 问题回顾 提问博客地址:http://www.cnblogs.com/kibbon/p/4831104.html 尚待解决的问题: Alpha/Beta,ZBB/RC阶 ...