ELK收集elasticsearch集群实时日志经测试!!!

帮助文档:https://www.cnblogs.com/wangzhuxing/p/9678578.html
官方帮助文档:
https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-configuration.html
https://www.elastic.co/guide/en/beats/filebeat/current/logstash-output.html
帮助文档:
https://www.lagou.com/lgeduarticle/8898.html
https://www.cnblogs.com/wangzhuxing/p/9678578.html#_label4
postman基本操作es:
https://xkcoding.com/2018/01/12/elasticsearch_note.html

为什么要用filebeat?
logstash是跑jvm的资源消耗的大些,启动一个logstash会消耗很大的内存。
filebeat是一个轻量的日志收集器,所以适用于部署在手机日志的服务器上。
但logstash对已采集的数据的清洗,过滤都比filbeat强。大多数都将filebeat部署在服务器上收集日志,然后写入到logstash集群上,logstash对日志进行一系列的处理之后,再写入到es上,然后kibana展示出来。
也可以将所有节点的日志通过filebeat传递给kafka消息队列,然后使用logstash读取消息队列内容,根据配置文件过滤,最后将过滤的文件输出到es上由kibana展示出来。

filebeat介绍
  Filebeat由两个主要组成部分组成:prospector和 harvesters。这些组件一起工作来读取文件并将事件数据发送到您指定的output。
什么是harvesters?
  harvesters负责读取单个文件的内容。harvesters逐行读取每个文件,并将内容发送到output中。每个文件都将启动一个harvesters。harvesters负责文件的打开和关闭,这意味着harvesters运行时,文件会保持打开状态。如果在收集过程中,即使删除了这个文件或者是对文件进行重命名,Filebeat依然会继续对这个文件进行读取,这时候将会一直占用着文件所对应的磁盘空间,直到Harvester关闭。默认情况下,Filebeat会一直保持文件的开启状态,直到超过配置的close_inactive参数,Filebeat才会把Harvester关闭。
关闭Harvesters会带来的影响:
  file Handler将会被关闭,如果在Harvester关闭之前,读取的文件已经被删除或者重命名,这时候会释放之前被占用的磁盘资源。
  当时间到达配置的scan_frequency参数,将会重新启动为文件内容的收集。
  如果在Havester关闭以后,移动或者删除了文件,Havester再次启动时,将会无法收集文件数据。
  当需要关闭Harvester的时候,可以通过close_*配置项来控制。
什么是Prospector?
  Prospector负责管理Harvsters,并且找到所有需要进行读取的数据源。如果input type配置的是log类型,Prospector将会去配置度路径下查找所有能匹配上的文件,然后为每一个文件创建一个Harvster。每个Prospector都运行在自己的Go routine里。
  Filebeat目前支持两种Prospector类型:log和stdin。每个Prospector类型可以在配置文件定义多个。log Prospector将会检查每一个文件是否需要启动Harvster,启动的Harvster是否还在运行,或者是该文件是否被忽略(可以通过配置 ignore_order,进行文件忽略)。如果是在Filebeat运行过程中新创建的文件,只要在Harvster关闭后,文件大小发生了变化,新文件才会被Prospector选择到。

filebeat工作原理
  Filebeat可以保持每个文件的状态,并且频繁地把文件状态从注册表里更新到磁盘。这里所说的文件状态是用来记录上一次Harvster读取文件时读取到的位置,以保证能把全部的日志数据都读取出来,然后发送给output。如果在某一时刻,作为output的ElasticSearch或者Logstash变成了不可用,Filebeat将会把最后的文件读取位置保存下来,直到output重新可用的时候,快速地恢复文件数据的读取。在Filebaet运行过程中,每个Prospector的状态信息都会保存在内存里。如果Filebeat出行了重启,完成重启之后,会从注册表文件里恢复重启之前的状态信息,让FIlebeat继续从之前已知的位置开始进行数据读取。
Prospector会为每一个找到的文件保持状态信息。因为文件可以进行重命名或者是更改路径,所以文件名和路径不足以用来识别文件。对于Filebeat来说,都是通过实现存储的唯一标识符来判断文件是否之前已经被采集过。
  如果在你的使用场景中,每天会产生大量的新文件,你将会发现Filebeat的注册表文件会变得非常大。这个时候,你可以参考(the section called “Registry file is too large?edit),来解决这个问题。
在这里插入图片描述
es集群地址:
192.168.2.16
192.168.2.3
192.168.2.21
ELK地址:
192.168.2.15

在所有es服务器上安装filebeat,多的话建议使用ansible/shell/saltstack
PS:host主机名+IP映射
1.安装filebeat:

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.0.1-linux-x86_64.tar.gz
tar zxf filebeat-6.0.1-linux-x86_64.tar.gz
cd /usr/local/filebeat-6.0.1-linux-x86_64/

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.0.1-linux-x86_64.tar.gz
tar zxf filebeat-6.0.1-linux-x86_64.tar.gz
cd /usr/local/filebeat-6.0.1-linux-x86_64/

1.2配置filbeat配置文件:

vim /usr/local/filebeat-6.0.1-linux-x86_64/filebeat.yml 
修改如下内容:
#=========================== Filebeat prospectors =============================

filebeat.prospectors:
- type: log		//日志读取源
  enabled: true		//开启日志收集
  paths:
    - /data/es_logs/*.log	//访问日志
  multiline.pattern: ^\[
  multiline.negate: true
  multiline.match: after
PS:可以定义多个.
#============================= Filebeat modules ===============================

filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
#==================== Elasticsearch template setting ==========================
setup.template.settings:
  index.number_of_shards: 3

PS:注释es的配置
#-------------------------- Elasticsearch output ------------------------------
#output.elasticsearch:
  # Array of hosts to connect to.
  #hosts: ["localhost:9200"]

  # Optional protocol and basic auth credentials.
  #protocol: "https"
  #username: "elastic"
  #password: "changeme"
#============================== Kibana =====================================
setup.kibana:
  host: "wzb.harbor.com:5601"	//kibana地址

PS:配置filebeat配置文件输出到logstash中,并且分发给其他es主机。
#----------------------------- Logstash output --------------------------------
output.logstash:
  # The Logstash hosts
  hosts: ["wzb.harbor.com:5044"]	//注意如果收集多台服务日志需将端口替换
    enabled: true
#================================ Logging =====================================
logging.level: debug

2.配置logstash
PS:这里我进行的是简单配置

vim /usr/local/logstash/config/beat_sa_output.conf
输入以下内容:
**# 使用 beats 作为输入**
input {
    
    
       beats {
    
    
               port => 5044     #定义监听端口
               host => "192.168.2.15"
               ssl => false
               codec => "json"
       }
}
#输出到elasticsearch中。
output {
    
            #定义日志输出
     stdout {
    
    
        codec => dots
     }
     elasticsearch {
    
    
        hosts => ["192.168.2.15:9200"]
        index => "es-master-%{+YYYY.MM.dd}"
     }
}
vim /usr/local/logstash/config/beat_es1_output.conf
输入以下内容:
**# 使用 beats 作为输入**
input {
    
    
    beats {
    
    
        port => 6044    #定义监听端口
        host => "192.168.2.15"
        ssl => false
        codec => "json"
    }
}
#输出到elasticsearch中。
output {
    
            #定义日志输出
     stdout {
    
    
        codec => dots
     }
     elasticsearch {
    
    
        hosts => "0.0.0.0:9200"
        index => "k8s-node1-%{+YYYY.MM.dd}"
     }
}
vim /usr/local/logstash/config/beat_es2_output.conf
输入以下内容:
**# 使用 beats 作为输入**
input {
    
    
    beats {
    
    
        port => 7044    #定义监听端口
        host => "192.168.2.15"
        ssl => false
        codec => "json"
    }
}
#输出到elasticsearch中。
output {
    
            #定义日志输出
     stdout {
    
    
        codec => dots
     }
     elasticsearch {
    
    
        hosts => "0.0.0.0:9200"
        index => "k8s-node2-%{+YYYY.MM.dd}"
     }
}

分别启动logstash和filebeat
这里我直接DEBUG.

logstash:
/usr/local/logstash/config
../bin/logstash  --verbose --debug
filebeat:
/usr/local/filebeat-6.0.1-linux-x86_64/filebeat -e -c /usr/local/filebeat-6.0.1-linux-x86_64/filebeat.yml -d "publish" -v 

通过在kibana添加es索引信息就可以看到,当然可以进行自定义模板筛选。

猜你喜欢

转载自blog.csdn.net/ZhanBiaoChina/article/details/105430744