1 ElasticStack

Wu Jun 2019-12-25 15:59:04
09 DevOps > 8 ELK

ElasticStack 最初的核心是 ELK (Elasticsearch, Logstash, Kibana) ,后又新增了一个FileBeat。

ELK架构

日志分析平台流程

  1. 把分散在各个机器的日志汇总到一个地方(Shipper, Broker, Indexer)
  2. 把这些日志用某种方式保存并索引起来(Search & Storage)
  3. 需要的时候直接在汇总的日志中查询(Web Interface)

环境搭建

ELK依赖JDK

ELK下载:https://www.elastic.co/downloads/

安装 Elasticsearch

  1. 官网下载解压。
  2. 安装Head插件,可以通过localhost:9200/_plugin/head查看集群状态
./bin/plugin install mobz/elasticsearch-head
  1. 编辑配置文件elasticsearch.yml
cluster.name=es_cluster
node.name=node0
path.data=/tmp/elasticsearch/data
path.logs=/tmp/elasticsearch/logs
network.host=centos2
network.port=9200
  1. 运行 bin/elasticsearch (Windows 上运行 bin\elasticsearch.bat)启动
  2. 验证运行成功:REST 访问访问 http://localhost:9200/

安装 Logstash

  1. 官网下载解压。
  2. 添加logstash.conf,指定Input和Output及插件,以log4j输入和ElasticSearch输出为例:
input { 
  log4j {

    mode => "server"

    host => "localhost"

    port => 4567

  }
}
filter {
  #Only matched data are send to output.
}
output {
    elasticsearch { 
        action => "index"
        hosts => ["localhost:9200"] 
        index  => "applog"
    }
}
  1. 运行 bin/logstash -f logstash.conf (Windows 上运行bin/logstash.bat -f logstash.conf)

安装 Kibana

  1. 官网下载解压。
  2. 修改 config/kibana.yml 配置文件,设置 elasticsearch.url 指向 Elasticsearch 实例。
server.port: 5601
server.host: “localhost”
elasticsearch.url: http://localhost:9200
kibana.index: “.kibana”
  1. 运行 bin/kibana (Windows 上运行 bin\kibana.bat)启动
  2. 在浏览器上访问 http://localhost:5601

安装 Filebeat

  1. 官网下载解压。
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.1.1-x86_64.rpm
sudo rpm -vi filebeat-5.1.1-x86_64.rpm
  1. 配置filebeat.yml input
filebeat.prospectors:
- input_type: log
  paths:
    - /apps/logs/*/info.log
  1. 配置filebeat.yml output
output.logstash:
  hosts: ["127.0.0.1:5044"]
  1. 启动filebeat
sudo /etc/init.d/filebeat start

工作原理

Filebeat工作原理

Filebeat由两个主要组件组成:prospectors 和 harvesters。这两个组件协同工作将文件变动发送到指定的输出中。

Filebeat如何记录文件状态:

将文件状态记录在文件中(默认在/var/lib/filebeat/registry)。此状态可以记住Harvester收集文件的偏移量。若连接不上输出设备,如ES等,filebeat会记录发送前的最后一行,并再可以连接的时候继续发送。Filebeat在运行的时候,Prospector状态会被记录在内存中。Filebeat重启的时候,利用registry记录的状态来进行重建,用来还原到重启之前的状态。每个Prospector会为每个找到的文件记录一个状态,对于每个文件,Filebeat存储唯一标识符以检测文件是否先前被收集。

Filebeat如何保证事件至少被输出一次:

Filebeat之所以能保证事件至少被传递到配置的输出一次,没有数据丢失,是因为filebeat将每个事件的传递状态保存在文件中。在未得到输出方确认时,filebeat会尝试一直发送,直到得到回应。若filebeat在传输过程中被关闭,则不会再关闭之前确认所有时事件。任何在filebeat关闭之前为确认的时间,都会在filebeat重启之后重新发送。这可确保至少发送一次,但有可能会重复。可通过设置shutdown_timeout 参数来设置关闭之前的等待事件回应的时间(默认禁用)。

Logstash工作原理

Logstash事件处理有三个阶段:inputs → filters → outputs。是一个接收,处理,转发日志的工具。

Input:输入数据到logstash。

一些常用的输入为:

Filters:数据中间处理,对数据进行操作。

一些常用的过滤器为:

Outputs:outputs是logstash处理管道的最末端组件。一个event可以在处理过程中经过多重输出,但是一旦所有的outputs都执行结束,这个event也就完成生命周期。

一些常见的outputs为:

Codecs:codecs 是基于数据流的过滤器,它可以作为input,output的一部分配置。Codecs可以帮助你轻松的分割发送过来已经被序列化的数据。

一些常见的codecs: