什么是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-[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-[ElasticSearch问题]第二个红框
出现此问题只需要修改了 宿主机 系统的max_map_count参数即可.
vim /etc/sysctl.conf
vm.max_map_count=655360
sysctl -p
图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的网络传输, 也可以是系统的某个目录.配置文件下图讲解的非常细致
还需要做如下修改:
注释掉默认开启的 ElasticSearch
开启默认未开启的 logstash, 指定logstash地址, 指定主机名而非localhost
容器编排
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