EFK日志系统搭建

什么是EFK

这里引用一下 ELK 架构之 Elasticsearch 和 Kibana 安装配置 一文对ELK的介绍,详细内容在文中都有介绍,我主要将其从实体机安装转向在Docker-compose服务编排,EFK与ELK大同小异.

ELK 是三个开源软件的缩写,分别为:Elasticsearch、Logstash 以及 Kibana,它们都是开源软件。不过现在还新增了一个 Beats,它是一个轻量级的日志收集处理工具(Agent),Beats 占用资源少,适合于在各个服务器上搜集日志后传输给 Logstash,官方也推荐此工具,目前由于原本的 ELK Stack 成员中加入了 Beats 工具所以已改名为 Elastic Stack。

ElasticSearch搭建

ElasticSearch的安装需要替换配置文件的以下几个点

network.host: 0.0.0.0 #所有地址都能够访问  
http.port: 9200 #端口  
http.cors.enabled: true 
 http.cors.allow-origin: "*"

问题解决

在配置ElasticSearch时容易出现以下几点错误, 在此讲解以下如何解决:

  1. 见图1-[ElasticSearch问题]
    原因:这是在因为系统不支持SecComp,而ES5.2.0默认bootstrap.system_call_filter为true进行检测,所以导致检测失败,失败后直接导致ES不能启动。
    解决:在elasticsearch.yml中配置bootstrap.system_call_filter为false,注意要在Memory下面:
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
  1. 见图1-[ElasticSearch问题]第二个红框
    出现此问题只需要修改了 宿主机 系统的max_map_count参数即可.
vim /etc/sysctl.conf
vm.max_map_count=655360
sysctl -p

ElasticSearch问题
图1-[ElasticSearch问题]

Logstash搭建

Logstash的安装需要替换配置文件的以下几点

server.port: 5601 
server.host: "0.0.0.0" 
elasticsearch.url: "http://elasticsearch:9200"

Kibana搭建

配置一个filebeat的服务接收端

input {
 beats {
   port => 10515
  }
}
output {
    elasticsearch {
      hosts => ["127.0.0.1:9200"]
      # 注释不能被解析,线上删除.此处做讲解
      # %{[fields][logtype]} 对应filebeat配置文件, 只需在此配置, 写入ElasticSearch的索引就可以主动创建和filebeat相关的索引
      index => "%{[fields][logtype]}-%{+YYYY.MM.dd}"
    }
}

filebeat搭建

filebeat作为 日志探测器 需要配置一个日志探测配置文件, 可以是log4j的网络传输, 也可以是系统的某个目录.配置文件下图讲解的非常细致
filebeat.conf

还需要做如下修改:
注释掉默认开启的 ElasticSearch
注释掉es配置

开启默认未开启的 logstash, 指定logstash地址, 指定主机名而非localhost
开启logstash配置

容器编排

version: '2'

services: 
  elasticsearch:  
    image: docker.elastic.co/elasticsearch/elasticsearch:6.6.0
    volumes: 
      - ./es/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - ./es/data:/usr/share/elasticsearch/data
      - ./es/logs:/path/to/logs
    ports: 
      - '9200:9200'
      - '9300:9300'
    environment:
      - "bootstrap.memory_lock=true"
      - "ES_JAVA_OPTS=-Xmx1g -Xms1g"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    networks:
      - efk
  logstash:
    image: docker.elastic.co/logstash/logstash:6.6.0
    volumes:
      - ./logstash/logstash.yml:/usr/share/logstash/config/logstash.yml
      - ./logstash/logstash-sample.conf:/usr/share/logstash/config/logstash-sample.conf
      - ./logstash/pipeline:/usr/share/logstash/pipeline
      - ./logstash/pattern:/usr/share/logstash/pattern
    ports:
      - "5044:5044"
      - "10515:10515"
    environment:
      - "LS_JAVA_OPTS=-Xmx1g -Xms1g"
    command: logstash -f /usr/share/logstash/config/logstash-sample.conf
    networks:
      - efk
    depends_on:
      - elasticsearch
  kibana:
    image: docker.elastic.co/kibana/kibana:6.6.0
    volumes:
      - ./kibana/kibana.yml:/usr/share/kibana/config/kibana.yml
    ports:
      - "5601:5601"
    networks:
      - efk
    depends_on:
      - elasticsearch

networks:
  efk:
    driver: bridge