EFK日志分析系统部署
什么是EFK?
相比ELK日志系统,EFK实际就是把Logstash组件替换成了Filebeat组件,相比ELK架构EFK会更加地轻量级别。★准备工作★
这里我直接用docker部署进行示范
docker镜像版本
Elasticsearch镜像版本:elasticsearch:7.17.16
Kibana镜像版本:kibana:7.17.16
Filebeat安装包
Filebeat安装包:filebeat-7.17.16-linux-x86_64.tar.gz
Filebeat下载地址:https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.17.16-linux-x86_64.tar.gz
部署EFK日志分析系统
使用docker部署es和kibana
1.先创建一个专属网络
docker network create -d bridge efk
2.编写docker-compose.yaml文件:
version: '3.8'
services:
es:
image: elasticsearch:7.17.16
container_name: elasticsearch
restart: unless-stopped
privileged: true
environment:
- discovery.type=single-node
- ELASTIC_USERNAME=elastic
- ELASTIC_PASSWORD=elastic123456
- network.host=0.0.0.0
- bootstrap.memory_lock=true
- ES_JAVA_OPTS=-Xms512m -Xmx512m
- TZ=Asia/Shanghai
ulimits:
memlock:
soft: -1
hard: -1
ports:
- "9200:9200"
- "9300:9300"
volumes:
- ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
- ./data:/usr/share/elasticsearch/data
kibana:
image: kibana:7.17.16
container_name: kibana
ports:
- 5601:5601
environment:
- ELASTICSEARCH_HOSTS=http://es:9200
- ELASTICSEARCH_USERNAME=elastic
- ELASTICSEARCH_PASSWORD=elastic123456
- I18N_LOCALE=zh-CN
networks:
default:
name: efk
external: true
3.启动服务
docker compose up -d
注意:一定要记得授权es的data目录为1000的uid和gid,因为es默认是用其他用户启动,映射进去则会权限不够!!!
chown -R 1000.1000 data
部署filebeat推送日志
1.下载filebeat安装包
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.17.16-linux-x86_64.tar.gz
2.解压目录到安装目录
tar zxf filebeat-7.17.16-linux-x86_64.tar.gz
mv filebeat-7.17.16-linux-x86_64 /usr/local/filebeat
3.编写filebeat配置文件
我安装的nginx日志在/usr/local/nginx/logs目录下,根据自己的日志位置进行配置,不同的需求和喜好可以进行不同的配置体现
vim /usr/local/filebeat/filebeat.yml
-----------------------------
filebeat.inputs:
- type: log
enabled: true
paths:
- /usr/local/nginx/logs/access.log
fields:
app: nginx
type: access
multiline.pattern: '^#\['
multiline.negate: true
multiline.match: after
- type: log
enabled: true
paths:
- /usr/local/nginx/logs/error.log
fields:
app: nginx
type: error
multiline.pattern: '^#\['
multiline.negate: true
multiline.match: after
output.elasticsearch:
hosts: ["localhost:9200"]
protocol: "http"
username: "elastic"
password: "elastic123456"
index: "%{[fields.app]}-%{[fields.type]}-%{[agent.version]}-%{+yyyy.MM.dd}"
setup.ilm.enabled: false
setup.template.name: "nginx"
setup.template.pattern: "nginx-*"
setup.template.overwrite: false
processors:
- add_host_metadata:
when.not.contains.tags: forwarded
我这边定义了两种日志,一个是nginx的access日志和error日志,分别推送到不同的索引上去。
4.可以通过命令进行调试,将配置的日志推送到es上。
cd /usr/local/filebeat
./filebeat
在默认的情况下命令会自动加载名字为"filebeat.yml"的配置文件,如果自己配置的配置文件名不是这个则需要用以下命令进行运行。
/usr/local/filebeat/filebeat -e -c /usr/local/filebeat/filebeat-test.yml
我们可以到kibana的开发工具上进行查询索引是否创建,命令如下:
GET /_cat/indices/nginx-*?h=index,health,docs.count,store.size&format=json
# 使用curl命令
curl -s -X GET "http://127.0.0.1:9200/_cat/indices/nginx-*?h=index,health,docs.count,store.size&format=json"
如下图所示:

5.配置filebeat的服务加入到systemctl进行管理
cat > /usr/lib/systemd/system/filebeat.service << EOF
[Unit]
Description=Filebeat sends log files to Logstash or directly to Elasticsearch.
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/usr/local/filebeat/filebeat -c /usr/local/filebeat/filebeat.yml
Restart=always
[Install]
WantedBy=multi-user.target
EOF
重新加载systemctl服务并启动服务
systemctl daemon-reload
systemctl start filebeat --now
测试阶段
我们可以在kibana上创建对应的索引模式进行查看日志。
可以通过两个索引分别查看access日志,如下图所示:

查看error日志,如下图所示:
