ELK日志分析系统

ELK 企业级日志分析系统

文章目录


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.comwww.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)创建系统日志索引模式
  1. 点击左侧菜单栏「Management」→「Index Patterns」→「Create index pattern」
  2. 输入索引模式:system-*(匹配所有系统日志索引)
  3. 点击「Next step」
  4. 选择时间过滤字段:@timestamp(日志的时间字段)
  5. 点击「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索引模式

  1. 访问Kibana:http://192.168.10.13:5601
  2. 「Management」→「Index Patterns」→「Create index pattern」
  3. 输入索引模式:filebeat-*
  4. 选择时间字段@timestamp,点击「Create index pattern」
  5. 「Discover」中选择filebeat-*索引模式,即可查看Filebeat收集的日志。

七、部署关键注意事项

  1. 版本一致性:ES、Logstash、Kibana、Filebeat必须使用兼容版本(本文统一6.6.1,避免跨版本兼容性问题)。
  2. 权限问题:所有组件的数据目录、日志文件需授权给对应运行用户(ES→elasticsearch,Logstash→logstash)。
  3. 端口开放:确保各组件端口未被防火墙拦截(9200、9100、5601、5044等)。
  4. 资源配置:ES是内存密集型应用,建议节点内存≥4G,生产环境需调整JVM参数(/etc/elasticsearch/jvm.options)。
  5. 索引管理:日志索引按日期拆分(如system-YYYY.MM.dd),避免单索引过大影响性能,可配置ES索引生命周期策略自动删除旧索引。

总结

通过本次ELK及FileBeat+ELK的部署,我们成功构建了一个从日志收集、过滤传输、存储检索到可视化分析的全链路企业级日志平台。它不仅实现了多源日志的统一集中管理,更关键的是提供了实时监控、快速故障定位与业务洞察的能力。未来可在此基础上,通过引入消息队列提升可靠性,或利用机器学习实现智能异常检测,让日志数据真正驱动运维智能化与业务决策优化。

相关推荐
云和数据.ChenGuang10 小时前
ELK 是一套**开源的日志收集、存储、分析与可视化的技术栈
服务器·数据库·elk·开源·运维技术·数据库运维工程师
管理大亨2 天前
ELK + Redis Docker 企业级部署落地方案
大数据·运维·elk·elasticsearch·docker·jenkins
木童6622 天前
ELK+Filebeat 集群详细部署文档(V7.8.1 版本
elk
叫致寒吧2 天前
ELK简述
elk
2501_939909052 天前
ELK 企业级日志分析系统
elk
m0_488777652 天前
ELK 企业级日志分析系统
elk·filebeat·企业级日志分析系统
lin张3 天前
ELK企业级日志分析系统全方位详解
elk
nhdh3 天前
ELK(elasticsearch-7.6.2,kibana-7-6-2,Logstash-7.6.2)单节点部署
大数据·elk·elasticsearch
伞啊伞3 天前
部署安装ELK+filebeat 7.8.1版本
elk