ELK 企业级日志分析系统
文章目录
- [ELK 企业级日志分析系统](#ELK 企业级日志分析系统)
- ELK及Filebeat+ELK部署步骤详细解析
-
- 一、部署环境说明
-
- [1. 基础ELK部署节点配置](#1. 基础ELK部署节点配置)
- [2. Filebeat+ELK扩展部署节点配置](#2. Filebeat+ELK扩展部署节点配置)
- 软件版本说明
- 二、基础环境准备(所有节点通用)
- 三、Elasticsearch(ES)集群部署(Node1、Node2节点操作)
-
- [1. 安装ES软件](#1. 安装ES软件)
- [2. 修改ES主配置文件(关键步骤)](#2. 修改ES主配置文件(关键步骤))
- [3. 创建数据目录并授权](#3. 创建数据目录并授权)
- [4. 启动ES并验证](#4. 启动ES并验证)
- [5. 安装Elasticsearch-head插件(可视化管理集群)](#5. 安装Elasticsearch-head插件(可视化管理集群))
- 四、Logstash部署(Apache节点操作)
-
- [1. 前置准备](#1. 前置准备)
- [2. 安装Logstash](#2. 安装Logstash)
- [3. 测试Logstash(验证安装正确性)](#3. 测试Logstash(验证安装正确性))
- [4. 配置Logstash收集日志(核心配置)](#4. 配置Logstash收集日志(核心配置))
- [5. 重启Logstash并验证](#5. 重启Logstash并验证)
- 五、Kibana部署(Node1节点操作)
-
- [1. 安装Kibana](#1. 安装Kibana)
- [2. 修改Kibana主配置文件](#2. 修改Kibana主配置文件)
- [3. 启动Kibana并验证](#3. 启动Kibana并验证)
- [4. 创建索引模式(关键步骤,关联ES索引)](#4. 创建索引模式(关键步骤,关联ES索引))
- 六、Filebeat+ELK扩展部署(新增Filebeat节点)
-
- [1. Filebeat节点部署(192.168.10.16)](#1. Filebeat节点部署(192.168.10.16))
- [2. Logstash节点配置(接收Filebeat数据)](#2. Logstash节点配置(接收Filebeat数据))
- [3. 重启Logstash并验证](#3. 重启Logstash并验证)
- [4. Kibana添加Filebeat索引模式](#4. Kibana添加Filebeat索引模式)
- 七、部署关键注意事项
- 总结
ELK及Filebeat+ELK部署步骤详细解析
一、部署环境说明
1. 基础ELK部署节点配置
| 节点名称 | 配置 | IP地址 | 部署服务 |
|---|---|---|---|
| Node1节点 | 2C/4G | 192.168.10.13 | Elasticsearch(集群)、Kibana |
| Node2节点 | 2C/4G | 192.168.10.14 | Elasticsearch(集群) |
| Apache节点 | 未指定 | 192.168.10.15 | Apache、Logstash |
2. Filebeat+ELK扩展部署节点配置
在基础ELK基础上新增Filebeat节点:
| 节点名称 | 配置 | IP地址 | 部署服务 |
|---|---|---|---|
| Filebeat节点 | 未指定 | 192.168.10.16 | Filebeat |
软件版本说明
所有组件统一使用6.6.1版本(需确保版本一致性,避免兼容性问题),官方下载地址:Elastic中文官网
二、基础环境准备(所有节点通用)
1. 关闭防火墙与SELinux增强功能
bash
# 关闭防火墙(永久关闭需加--now --permanent,此处临时关闭用于部署)
systemctl stop firewalld
# 关闭SELinux增强功能(临时生效,永久生效需修改/etc/selinux/config文件)
setenforce 0
作用:避免防火墙拦截组件间通信端口(如ES的9200、Kibana的5601、Logstash的5044等)
2. 配置主机名与域名解析
(1)设置主机名
- Node1节点:
hostnamectl set-hostname node1 - Node2节点:
hostnamectl set-hostname node2 - Apache节点:
hostnamectl set-hostname apache - Filebeat节点:
hostnamectl set-hostname filebeat
(2)配置域名解析
所有节点执行以下命令,编辑hosts文件:
bash
vim /etc/hosts
添加以下内容(实现主机名与IP的映射,方便集群通信):
192.168.10.13 node1
192.168.10.14 node2
192.168.10.15 apache
192.168.10.16 filebeat
3. 安装Java环境
所有节点需安装Java(ES、Logstash依赖JVM运行):
bash
# yum安装OpenJDK(推荐,无需手动配置环境变量)
yum -y install java-1.8.0-openjdk-devel
# 验证安装结果(需显示版本为1.8.x)
java -version
验证标准:输出类似以下内容即正常:
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
三、Elasticsearch(ES)集群部署(Node1、Node2节点操作)
ES是核心存储与搜索引擎,需部署双节点集群保证高可用。
1. 安装ES软件
(1)上传并安装rpm包
bash
# 上传elasticsearch-6.6.1.rpm到/opt目录,执行安装
cd /opt
rpm -ivh elasticsearch-6.6.1.rpm
(2)加载系统服务并设置开机自启
bash
systemctl daemon-reload
systemctl enable elasticsearch.service
2. 修改ES主配置文件(关键步骤)
(1)备份原始配置文件
bash
cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
(2)编辑配置文件
bash
vim /etc/elasticsearch/elasticsearch.yml
关键配置项(取消注释并修改,Node1与Node2仅node.name不同):
yaml
# 1. 集群名称(所有节点必须一致)
cluster.name: my-elk-cluster
# 2. 节点名称(Node1设为node1,Node2设为node2)
node.name: node1
# 3. 数据存放路径(需手动创建)
path.data: /data/elk_data
# 4. 日志存放路径
path.logs: /var/log/elasticsearch/
# 5. 启动时不锁定内存(避免内存不足报错)
bootstrap.memory_lock: false
# 6. 监听地址(0.0.0.0允许所有地址访问)
network.host: 0.0.0.0
# 7. 默认监听端口
http.port: 9200
# 8. 集群发现(单播模式,指定集群节点)
discovery.zen.ping.unicast.hosts: ["node1", "node2"]
3. 创建数据目录并授权
bash
# 创建数据目录
mkdir -p /data/elk_data
# 授权ES用户(ES默认以elasticsearch用户运行)
chown elasticsearch:elasticsearch /data/elk_data/
4. 启动ES并验证
(1)启动服务
bash
systemctl start elasticsearch.service
# 查看启动状态(确保active)
systemctl status elasticsearch.service
(2)端口验证
bash
netstat -antp | grep 9200
预期结果:显示9200端口被java进程占用(ES运行)
(3)浏览器验证
- 访问Node1节点:
http://192.168.10.13:9200 - 访问Node2节点:
http://192.168.10.14:9200
预期结果 :返回JSON格式的节点信息,包含cluster_name: my-elk-cluster
(4)集群健康状态验证
访问:http://192.168.10.13:9200/_cluster/health?pretty
- green(绿色):健康状态(数据和副本均正常)
- yellow(黄色):数据完整但副本异常(单节点时可能出现)
- red(红色):数据不完整(部署失败)
5. 安装Elasticsearch-head插件(可视化管理集群)
ES-head用于可视化管理集群,需依赖NodeJS和PhantomJS。
(1)安装NodeJS(编译安装)
bash
# 上传node-v8.2.1.tar.gz到/opt目录
cd /opt
# 安装编译依赖
yum install gcc gcc-c++ make -y
# 解压
tar zxvf node-v8.2.1.tar.gz
# 编译安装
cd node-v8.2.1/
./configure
make && make install
# 验证node安装(显示版本即正常)
node -v
npm -v
(2)安装PhantomJS(前端框架)
bash
# 上传phantomjs-2.1.1-linux-x86_64.tar.bz2到/opt目录
cd /opt
# 解压到指定目录
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/
# 复制执行文件到系统路径
cp /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin/
# 验证
phantomjs -v
(3)安装ES-head
bash
# 上传elasticsearch-head.tar.gz到/opt目录
cd /opt
# 解压到指定目录
tar zxvf elasticsearch-head.tar.gz -C /usr/local/src/
# 进入目录并安装依赖
cd /usr/local/src/elasticsearch-head/
npm install
(4)修改ES配置允许跨域(否则head无法连接ES)
bash
vim /etc/elasticsearch/elasticsearch.yml
# 末尾添加以下内容
http.cors.enabled: true # 开启跨域访问
http.cors.allow-origin: "*" # 允许所有域名访问
重启ES:systemctl restart elasticsearch.service
(5)启动ES-head
bash
# 进入head目录(必须在此目录启动,否则读取配置失败)
cd /usr/local/src/elasticsearch-head/
# 后台启动
npm run start &
(6)验证ES-head
- 访问:
http://192.168.10.13:9100 - 输入ES集群地址(如
http://192.168.10.13:9200),点击"连接" - 预期结果:集群健康值为绿色,显示2个节点(node1、node2)
(7)测试创建索引(可选)
执行命令创建测试索引:
bash
curl -X PUT 'localhost:9200/index-demo/test/1?pretty' -H 'Content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
在ES-head的"数据浏览"中可查看该索引及数据。
四、Logstash部署(Apache节点操作)
Logstash负责数据收集、过滤、转换,部署在Apache服务器上收集日志。
1. 前置准备
(1)安装Apache服务(用于生成访问日志和错误日志)
bash
yum -y install httpd
systemctl start httpd
systemctl enable httpd
(2)确认Java环境(已在基础环境准备中安装)
bash
java -version
2. 安装Logstash
bash
# 上传logstash-6.6.1.rpm到/opt目录
cd /opt
rpm -ivh logstash-6.6.1.rpm
# 设置开机自启并启动
systemctl enable logstash.service
systemctl start logstash.service
# 创建软链接(方便命令行调用)
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
3. 测试Logstash(验证安装正确性)
Logstash支持通过命令行测试输入输出,常用3种测试方式:
(1)标准输入→标准输出(管道模式)
bash
logstash -e 'input { stdin{} } output { stdout{} }'
- 输入任意内容(如
www.baidu.com),按回车 - 预期结果:输出带时间戳的格式化数据
(2)标准输入→rubydebug格式化输出(详细格式)
bash
logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
- 输入
www.baidu.com - 预期结果:输出JSON格式的详细数据(含@timestamp、host、message等字段)
(3)标准输入→输出到Elasticsearch
bash
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.10.13:9200"] } }'
- 输入
www.baidu.com、www.sina.com.cn等内容 - 验证:访问ES-head(
http://192.168.10.13:9100),可看到新增的索引(默认以logstash-日期命名)
4. 配置Logstash收集日志(核心配置)
Logstash配置文件由input(输入)、filter(过滤,可选)、output(输出)三部分组成,需创建配置文件收集系统日志和Apache日志。
(1)收集系统日志(/var/log/messages)
bash
# 给日志文件添加读权限(Logstash需要读取)
chmod +r /var/log/messages
# 创建配置文件
vim /etc/logstash/conf.d/system.conf
配置内容:
yaml
input {
file {
path => "/var/log/messages" # 监控的日志文件路径
type => "system" # 自定义日志类型标识
start_position => "beginning" # 从日志开头开始收集
}
}
output {
elasticsearch {
hosts => ["192.168.10.13:9200"] # ES集群地址
index => "system-%{+YYYY.MM.dd}" # 输出到ES的索引名(按日期拆分)
}
}
(2)收集Apache日志(访问日志+错误日志)
bash
vim /etc/logstash/conf.d/apache_log.conf
配置内容:
yaml
input {
# 收集Apache访问日志
file {
path => "/etc/httpd/logs/access_log"
type => "access"
start_position => "beginning"
}
# 收集Apache错误日志
file {
path => "/etc/httpd/logs/error_log"
type => "error"
start_position => "beginning"
}
}
output {
# 访问日志输出到单独索引
if [type] == "access" {
elasticsearch {
hosts => ["192.168.10.13:9200"]
index => "apache_access-%{+YYYY.MM.dd}"
}
}
# 错误日志输出到单独索引
if [type] == "error" {
elasticsearch {
hosts => ["192.168.10.13:9200"]
index => "apache_error-%{+YYYY.MM.dd}"
}
}
}
5. 重启Logstash并验证
bash
# 重启服务使配置生效
systemctl restart logstash.service
# 验证索引创建:访问ES-head,可看到system-日期、apache_access-日期、apache_error-日期索引
五、Kibana部署(Node1节点操作)
Kibana是ES的可视化工具,用于日志分析、图表展示、报警监控。
1. 安装Kibana
bash
# 上传kibana-6.6.1-x86_64.rpm到/opt目录
cd /opt
rpm -ivh kibana-6.6.1-x86_64.rpm
2. 修改Kibana主配置文件
bash
vim /etc/kibana/kibana.yml
关键配置项(取消注释并修改):
yaml
# 1. Kibana监听端口(默认5601)
server.port: 5601
# 2. 监听地址(0.0.0.0允许所有地址访问)
server.host: "0.0.0.0"
# 3. 连接ES集群的地址
elasticsearch.hosts: ["http://192.168.10.13:9200"]
# 4. 在ES中创建的Kibana索引(用于存储Kibana配置)
kibana.index: ".kibana"
3. 启动Kibana并验证
(1)启动服务
bash
systemctl enable kibana.service
systemctl start kibana.service
# 端口验证(5601端口被占用)
netstat -antp | grep 5601
(2)浏览器访问Kibana
- 访问:
http://192.168.10.13:5601 - 首次登录需创建索引模式(Index Pattern),步骤如下:
4. 创建索引模式(关键步骤,关联ES索引)
(1)创建系统日志索引模式
- 点击左侧菜单栏「Management」→「Index Patterns」→「Create index pattern」
- 输入索引模式:
system-*(匹配所有系统日志索引) - 点击「Next step」
- 选择时间过滤字段:
@timestamp(日志的时间字段) - 点击「Create index pattern」
(2)创建Apache日志索引模式
重复上述步骤,分别创建:
- Apache访问日志:索引模式
apache_access-* - Apache错误日志:索引模式
apache_error-*
(3)查看日志数据
点击左侧菜单栏「Discover」,在顶部下拉框选择对应的索引模式(如apache_access-*),即可查看格式化的日志数据,支持按字段筛选、搜索、时间范围过滤。
六、Filebeat+ELK扩展部署(新增Filebeat节点)
Filebeat是轻量级日志收集工具,解决Logstash重量级、资源消耗高的问题,部署在需要收集日志的终端节点。
1. Filebeat节点部署(192.168.10.16)
(1)安装Filebeat(两种方式任选)
方式1:二进制安装
bash
# 上传filebeat-6.2.4-linux-x86_64.tar.gz到/opt目录
cd /opt
tar zxvf filebeat-6.2.4-linux-x86_64.tar.gz
mv filebeat-6.2.4-linux-x86_64/ /usr/local/filebeat
方式2:rpm安装
bash
# 上传filebeat-6.6.1-x86_64.rpm到/opt目录
rpm -ivh filebeat-6.6.1-x86_64.rpm
(2)修改Filebeat配置文件
若为二进制安装(/usr/local/filebeat/filebeat.yml)
bash
vim /usr/local/filebeat/filebeat.yml
配置内容:
yaml
# 日志收集配置
filebeat.prospectors:
- type: log # 收集类型为日志文件
enabled: true
paths:
- /var/log/messages # 监控的日志文件(可添加多个)
- /var/log/*.log
fields: # 自定义字段(用于ES索引区分)
service_name: filebeat
log_type: log
service_id: 192.168.10.16
# 禁用ES输出(改为输出到Logstash)
#--------------Elasticsearch output-------------------
# 此处所有配置注释掉
# 启用Logstash输出
----------------Logstash output---------------------
output.logstash:
hosts: ["192.168.10.15:5044"] # Logstash节点IP和端口(5044为beats默认端口)
若为rpm安装(/etc/filebeat/filebeat.yml)
配置内容与上述一致,仅文件路径不同。
(3)启动Filebeat
bash
# 二进制安装启动方式
cd /usr/local/filebeat/
./filebeat -e -c filebeat.yml &
# rpm安装启动方式
systemctl enable filebeat.service
systemctl start filebeat.service
2. Logstash节点配置(接收Filebeat数据)
在Apache节点(192.168.10.15)新建Logstash配置文件,接收Filebeat的输入:
bash
vim /etc/logstash/conf.d/logstash.conf
配置内容:
yaml
input {
beats {
port => "5044" # 监听5044端口,接收Filebeat数据
}
}
output {
# 输出到ES集群
elasticsearch {
hosts => ["192.168.10.13:9200"]
index => "%{[fields][service_name]}-%{+YYYY.MM.dd}" # 按Filebeat自定义字段命名索引
}
# 同时输出到控制台(调试用)
stdout {
codec => rubydebug
}
}
3. 重启Logstash并验证
bash
# 重启Logstash
systemctl restart logstash.service
# 验证:访问ES-head,可看到filebeat-日期索引
4. Kibana添加Filebeat索引模式
- 访问Kibana:
http://192.168.10.13:5601 - 「Management」→「Index Patterns」→「Create index pattern」
- 输入索引模式:
filebeat-* - 选择时间字段
@timestamp,点击「Create index pattern」 - 「Discover」中选择
filebeat-*索引模式,即可查看Filebeat收集的日志。
七、部署关键注意事项
- 版本一致性:ES、Logstash、Kibana、Filebeat必须使用兼容版本(本文统一6.6.1,避免跨版本兼容性问题)。
- 权限问题:所有组件的数据目录、日志文件需授权给对应运行用户(ES→elasticsearch,Logstash→logstash)。
- 端口开放:确保各组件端口未被防火墙拦截(9200、9100、5601、5044等)。
- 资源配置:ES是内存密集型应用,建议节点内存≥4G,生产环境需调整JVM参数(/etc/elasticsearch/jvm.options)。
- 索引管理:日志索引按日期拆分(如system-YYYY.MM.dd),避免单索引过大影响性能,可配置ES索引生命周期策略自动删除旧索引。
总结
通过本次ELK及FileBeat+ELK的部署,我们成功构建了一个从日志收集、过滤传输、存储检索到可视化分析的全链路企业级日志平台。它不仅实现了多源日志的统一集中管理,更关键的是提供了实时监控、快速故障定位与业务洞察的能力。未来可在此基础上,通过引入消息队列提升可靠性,或利用机器学习实现智能异常检测,让日志数据真正驱动运维智能化与业务决策优化。