文章目录
- ELK企业日志分析系统
-
- [一、ELK 核心组件速览](#一、ELK 核心组件速览)
- 二、部署环境规划
-
- [1. 服务器配置(CentOS 7.9)](#1. 服务器配置(CentOS 7.9))
- [2. 前置依赖](#2. 前置依赖)
- 三、分步部署指南
-
- [第一步:部署 Elasticsearch 集群(node1 + node2)](#第一步:部署 Elasticsearch 集群(node1 + node2))
-
- [1. 基础配置(两节点通用)](#1. 基础配置(两节点通用))
- [2. 集群验证](#2. 集群验证)
- [3. 安装 head 插件(可视化管理集群,node1 执行)](#3. 安装 head 插件(可视化管理集群,node1 执行))
- [第二步:部署 Logstash(apache 节点)](#第二步:部署 Logstash(apache 节点))
-
- [1. 安装配置 Logstash](#1. 安装配置 Logstash)
- [2. 测试 Logstash 连通性](#2. 测试 Logstash 连通性)
- [第三步:部署 Kibana(node1 节点)](#第三步:部署 Kibana(node1 节点))
- 四、核心功能验证
ELK企业日志分析系统
在运维工作中,日志是排查故障、监控系统的核心依据,但分散在多台服务器上的日志管理起来十分繁琐。ELK 作为开源日志分析解决方案,通过 Elasticsearch(存储检索)、Logstash(日志采集处理)、Kibana(可视化分析)的组合,实现了日志的集中化、自动化分析,广泛应用于系统监控、安全审计、业务分析等场景。本文精简核心步骤,带你快速搭建 ELK 集群,适合运维新手收藏实操~
一、ELK 核心组件速览
| 组件 | 核心角色 | 核心功能 |
|---|---|---|
| Elasticsearch(ES) | 数据存储与检索引擎 | 分布式存储海量日志、毫秒级检索、索引分片与高可用 |
| Logstash | 日志采集与处理管道 | 从多源收集日志、过滤格式化(如解析 IP、时间戳)、输出到 ES |
| Kibana | 数据可视化平台 | 日志查询、图表展示、自定义仪表盘、集群管理 |
核心工作流程
日志源(服务器/应用) → Logstash(采集 + 过滤)→ Elasticsearch(存储 + 索引)→ Kibana(可视化查询)
二、部署环境规划
1. 服务器配置(CentOS 7.9)
| 主机名 | IP 地址 | 角色 | 核心软件 | 关键端口 |
|---|---|---|---|---|
| node1 | 192.168.108.41 | ES 主节点 + Kibana | Elasticsearch 5.5.0、Kibana 5.5.1 | 9200(ES)、5601(Kibana) |
| node2 | 192.168.108.42 | ES 从节点 | Elasticsearch 5.5.0 | 9200(ES) |
| apache | 192.168.108.43 | 日志源 + Logstash | Apache、Logstash 5.5.1 | 80(Apache)、9600(Logstash) |
2. 前置依赖
- 所有节点需安装 JDK 1.8(ES/Logstash 依赖)
- 关闭防火墙 / 开放相关端口,关闭 SELinux
三、分步部署指南
第一步:部署 Elasticsearch 集群(node1 + node2)
1. 基础配置(两节点通用)
bash
# 1. 配置域名解析(/etc/hosts)
echo -e "192.168.108.41 node1\n192.168.108.42 node2" >> /etc/hosts
# 2. 安装 ES RPM 包
cd /opt
rpm -ivh elasticsearch-5.5.0.rpm
# 3. 配置 ES 核心文件(/etc/elasticsearch/elasticsearch.yml)
cat > /etc/elasticsearch/elasticsearch.yml << EOF
cluster.name: my-elk-cluster # 集群名称(两节点一致)
node.name: $(hostname) # 节点名称(node1/node2 分别对应)
path.data: /data/elk_data # 数据存储路径
path.logs: /var/log/elasticsearch/ # 日志路径
network.host: 0.0.0.0 # 允许所有地址访问
http.port: 9200 # 监听端口
discovery.zen.ping.unicast.hosts: ["node1", "node2"] # 集群发现
http.cors.enabled: true # 允许跨域(用于 head 插件)
http.cors.allow-origin: "*"
EOF
# 4. 创建数据目录并授权
mkdir -p /data/elk_data
chown elasticsearch:elasticsearch /data/elk_data/
# 5. 启动 ES 并设置开机自启
systemctl daemon-reload
systemctl enable elasticsearch --now
2. 集群验证
bash
# 访问节点状态(任意节点执行)
curl http://192.168.108.41:9200
# 集群健康检查(green 为正常)
curl http://192.168.108.41:9200/_cluster/health?pretty
3. 安装 head 插件(可视化管理集群,node1 执行)
bash
# 1. 安装 Node.js 依赖
yum install gcc gcc-c++ make -y
tar xzvf node-v8.2.1.tar.gz -C /opt
cd /opt/node-v8.2.1 && ./configure && make -j4 && make install
# 2. 安装 phantomjs
tar xjvf 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
# 3. 安装 head 插件
tar xzvf elasticsearch-head.tar.gz -C /usr/local/src
cd /usr/local/src/elasticsearch-head && npm install
npm run start & # 后台启动,端口 9100
访问 http://192.168.108.41:9100,输入 ES 地址即可管理集群。
第二步:部署 Logstash(apache 节点)
1. 安装配置 Logstash
bash
# 1. 安装 Apache(日志源)
yum install httpd -y && systemctl start httpd && systemctl enable httpd
# 2. 安装 Logstash
cd /opt && rpm -ivh logstash-5.5.1.rpm
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/ # 软连接
# 3. 配置系统日志采集(/etc/logstash/conf.d/system.conf)
cat > /etc/logstash/conf.d/system.conf << EOF
input {
file {
path => "/var/log/messages" # 采集系统日志
type => "system"
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => ["192.168.108.41:9200"] # 输出到 ES 集群
index => "system-%{+YYYY.MM.dd}" # 索引按日期命名
}
}
EOF
# 4. 配置 Apache 日志采集(/etc/logstash/conf.d/apache_log.conf)
cat > /etc/logstash/conf.d/apache_log.conf << EOF
input {
file {
path => "/etc/httpd/logs/access_log" # Apache 访问日志
type => "access"
start_position => "beginning"
}
file {
path => "/etc/httpd/logs/error_log" # Apache 错误日志
type => "error"
start_position => "beginning"
}
}
output {
if [type] == "access" {
elasticsearch { hosts => ["192.168.108.41:9200"]; index => "apache_access-%{+YYYY.MM.dd}" }
}
if [type] == "error" {
elasticsearch { hosts => ["192.168.108.41:9200"]; index => "apache_error-%{+YYYY.MM.dd}" }
}
}
EOF
# 5. 启动 Logstash
systemctl start logstash && systemctl enable logstash
2. 测试 Logstash 连通性
bash
# 标准输入输出测试(输入内容后按 Ctrl+C 退出)
logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
第三步:部署 Kibana(node1 节点)
bash
# 1. 安装 Kibana
cd /usr/local/src && rpm -ivh kibana-5.5.1-x86_64.rpm
# 2. 核心配置(/etc/kibana/kibana.yml)
cat > /etc/kibana/kibana.yml << EOF
server.port: 5601 # 监听端口
server.host: "0.0.0.0" # 允许所有地址访问
elasticsearch.url: "http://192.168.108.41:9200" # 连接 ES
kibana.index: ".kibana" # Kibana 索引名
EOF
# 3. 启动 Kibana
systemctl start kibana && systemctl enable kibana
四、核心功能验证
- 日志采集验证 :访问
http://192.168.108.43(Apache 主页),生成访问日志,在 Kibana 中查看apache_access-*索引数据。 - 集群高可用验证:关闭 node2 节点的 ES 服务,查看 Kibana 中数据是否正常访问(依赖 ES 副本机制)。
- 可视化测试:在 Kibana 「Visualize」中创建柱状图,统计不同 IP 的访问次数。