EFK速通

ELK 是 Elasticsearch + Logstash + Kibana 的缩写,现在主流搭配是 Elasticsearch + Filebeat + Kibana(EFK),Filebeat 更轻量、资源占用更低。

一、3个组件干什么?

  • Elasticsearch(ES):核心数据库+搜索引擎,存日志、快速查日志,端口 9200。
  • Filebeat:轻量日志采集器,装在服务器上读日志文件、发给 ES,端口 5044。
  • Kibana:可视化面板,网页看日志、做图表、搜数据,端口 5601。

极简流程
Filebeat 采集日志 → Elasticsearch 存储 → Kibana 查看/分析

二、环境准备(Linux/CentOS 7)

1. 基础要求

  • 系统:CentOS 7 / Ubuntu(新手推荐 CentOS 7)
  • 内存:至少 2GB(ES 很吃内存)
  • Java:Elasticsearch 8.x 自带 JDK,不用额外装 Java

2. 关闭防火墙/开放端口

1
2
3
4
5
6
7
8
9
# 临时关闭防火墙
systemctl stop firewalld
# 禁止开机自启
systemctl disable firewalld
# 或开放端口(推荐)
firewall-cmd --add-port=9200/tcp --permanent
firewall-cmd --add-port=5601/tcp --permanent
firewall-cmd --add-port=5044/tcp --permanent
firewall-cmd --reload

3. 创建专用用户(ES 禁止 root 启动)

1
2
3
4
useradd elk
passwd elk
# 给权限
chown -R elk:elk /opt/

三、Docker 一键部署

用 Docker Compose 1 分钟起整套 EFK,免复杂配置、免踩坑

1. 安装 Docker & Docker Compose

1
2
3
4
5
6
7
8
# 安装 Docker
curl -fsSL https://get.docker.com | bash
systemctl start docker
systemctl enable docker

# 安装 Docker Compose
curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

2. 编写 docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
version: '3'
services:
elasticsearch:
image: elasticsearch:8.11.3
container_name: es
environment:
- discovery.type=single-node
- xpack.security.enabled=false # 测试环境关闭密码
- "ES_JAVA_OPTS=-Xms512m -Xmx512m" # 内存限制
ports:
- "9200:9200"
- "9300:9300"
volumes:
- es-data:/usr/share/elasticsearch/data
networks:
- elk-net

kibana:
image: kibana:8.11.3
container_name: kibana
ports:
- "5601:5601"
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
depends_on:
- elasticsearch
networks:
- elk-net

filebeat:
image: elastic/filebeat:8.11.3
container_name: filebeat
volumes:
- ./filebeat.yml:/usr/share/filebeat/filebeat.yml
- /var/log:/var/log:ro # 挂载宿主机日志
depends_on:
- elasticsearch
networks:
- elk-net

volumes:
es-data:

networks:
elk-net:

3. 编写 Filebeat 配置(filebeat.yml)

1
2
3
4
5
6
7
8
9
10
11
12
13
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/messages # 系统日志
- /var/log/secure # 安全日志
- /var/log/*.log # 所有日志

output.elasticsearch:
hosts: ["http://es:9200"]

setup.kibana:
host: "kibana:5601"

4. 启动 ELK

1
2
3
4
5
6
7
8
# 后台启动
docker-compose up -d

# 查看状态
docker-compose ps

# 查看日志(排错)
docker-compose logs -f

四、手动安装(理解原理)

1. 安装 Elasticsearch

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 下载 8.11.3
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.11.3-linux-x86_64.tar.gz
tar -zxvf elasticsearch-8.11.3-linux-x86_64.tar.gz
mv elasticsearch-8.11.3 /opt/elasticsearch
chown -R elk:elk /opt/elasticsearch

# 修改配置 /opt/elasticsearch/config/elasticsearch.yml
cluster.name: elk-cluster
node.name: node-1
network.host: 0.0.0.0
http.port: 9200
discovery.type: single-node
xpack.security.enabled: false

# 启动(切换 elk 用户)
su - elk
/opt/elasticsearch/bin/elasticsearch -d # 后台启动

# 测试
curl http://localhost:9200

2. 安装 Kibana

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
wget https://artifacts.elastic.co/downloads/kibana/kibana-8.11.3-linux-x86_64.tar.gz
tar -zxvf kibana-8.11.3-linux-x86_64.tar.gz
mv kibana-8.11.3 /opt/kibana
chown -R elk:elk /opt/kibana

# 修改配置 /opt/kibana/config/kibana.yml
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]

# 启动
su - elk
/opt/kibana/bin/kibana -d

# 访问:http://服务器IP:5601

3. 安装 Filebeat

1
2
3
4
5
6
7
8
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.11.3-linux-x86_64.tar.gz
tar -zxvf filebeat-8.11.3-linux-x86_64.tar.gz
mv filebeat-8.11.3 /opt/filebeat

# 配置 /opt/filebeat/filebeat.yml(同 Docker 版)

# 启动
/opt/filebeat/filebeat -e -c /opt/filebeat/filebeat.yml

五、Kibana 使用(3步看日志)

  1. 打开 Kibanahttp://IP:5601
  2. 创建索引模式
    • 左侧菜单 → Stack Management → Index Patterns → Create index pattern
    • 索引模式输入:filebeat-* → 下一步
    • 时间字段选:@timestamp → 创建索引模式
  3. 查看日志
    • 左侧菜单 → Discover
    • 选择 filebeat-*,即可看到所有采集的日志

六、常用操作

1. 查日志(关键词搜索)

  • 在 Discover 搜索框直接输:errortimeout404
  • 时间范围:右上角选「最近15分钟/1小时/今天」

2. 重启组件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Docker 重启
docker-compose restart elasticsearch
docker-compose restart kibana
docker-compose restart filebeat

# 手动重启
su - elk
# 重启 ES
ps -ef | grep elasticsearch
kill -9 进程号
/opt/elasticsearch/bin/elasticsearch -d

# 重启 Kibana
ps -ef | grep kibana
kill -9 进程号
/opt/kibana/bin/kibana -d

3. 常见问题

  • ES 启动失败:内存不够(至少 2GB)、权限不对(必须用 elk 用户)
  • Kibana 连不上 ES:ES 没启动、地址写错、防火墙没关
  • Filebeat 没数据:日志路径不对、没权限读日志、ES 地址错

七、速通总结(新手必记)

  1. EFK 架构:Filebeat(采)→ Elasticsearch(存)→ Kibana(看)
  2. Docker 最快:1 个 yaml 文件,一键启动
  3. 核心端口:9200(ES)、5601(Kibana)、5044(Filebeat)
  4. Kibana 关键:创建 filebeat-* 索引模式,Discover 看日志