基于ELK的日志集中化分析系统搭建
构建统一日志管理平台的必要性
在分布式架构中,各服务节点独立运行,日志分散存储于不同主机。传统通过命令行工具如grep、awk逐个检索日志的方式,在数据量庞大时效率极低,难以实现快速定位问题。为提升运维效率,需建立集中式日志处理体系,具备日志采集、传输、存储、分析与告警能力。
ELK技术栈核心组件解析
- Elasticsearch:分布式搜索引擎,支持全文检索、实时数据分析和高可用集群部署,提供RESTful API接口。
- Logstash:数据处理管道,负责从多源收集日志,进行过滤、解析(如使用grok正则)、转换后输出至Elasticsearch。
- Kibana:可视化前端,用于展示索引数据、创建仪表盘、执行日志搜索及设置告警规则。
- Filebeat:轻量级日志采集代理,资源占用少,适用于部署在应用服务器上,将日志转发给Logstash或直接发送到Elasticsearch。
实验环境与部署架构
采用两台CentOS 7虚拟机构建单节点ELK集群:
- 服务端:192.168.80.130(部署Elasticsearch + Logstash + Kibana)
- 客户端:192.168.80.132(部署Nginx + Filebeat)
基础配置准备
# 配置阿里云yum源
wget http://mirrors.aliyun.com/repo/Centos-7.repo
wget http://mirrors.aliyun.com/repo/epel-7.repo
# 禁用SELinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
# 开放防火墙端口
firewall-cmd --zone=public --add-port=9200/tcp --permanent
firewall-cmd --zone=public --add-port=5601/tcp --permanent
firewall-cmd --zone=public --add-port=5044/tcp --permanent
firewall-cmd --reload
安装与配置核心组件
Elasticsearch 部署
# 创建专用用户并授权
useradd elasticsearch
chown -R elasticsearch:elasticsearch /usr/local/elasticsearch-6.2.3/
# 切换用户启动服务
su - elasticsearch -c "/usr/local/elasticsearch-6.2.3/bin/elasticsearch -d"
# 验证服务状态
curl localhost:9200
Logstash 日志解析配置
通过自定义grok模式解析Nginx访问日志:
# 编辑grok模式文件
vim /usr/local/logstash-6.2.3/vendor/bundle/jruby/2.3.0/gems/logstash-patterns-core-4.1.2/patterns/grok-patterns
# 添加以下内容
NGINXACCESS %{IP:client_ip} \- \- \[%{HTTPDATE:timestamp}\] "%{WORD:method} %{URIPATH:request} HTTP/%{NUMBER:http_version}" %{NUMBER:status_code} %{NUMBER:response_bytes} %{QS:referer} %{QS:user_agent} %{QS:x_forwarded_for}
创建Logstash主配置文件:
input {
beats {
port => 5044
}
}
filter {
grok {
match => { "message" => "%{NGINXACCESS}" }
}
geoip {
source => "client_ip"
}
}
output {
elasticsearch {
hosts => ["127.0.0.1:9200"]
}
}
Kibana 可视化配置
vim /usr/local/kibana-6.2.3-linux-x86_64/config/kibana.yml
# 修改配置项
server.host: "192.168.80.130"
elasticsearch.hosts: ["http://192.168.80.130:9200"]
# 启动Kibana
nohup /usr/local/kibana-6.2.3-linux-x86_64/bin/kibana > nohup.out 2>&1
客户端Filebeat配置
vim /usr/local/filebeat-6.2.3-linux-x86_64/filebeat.yml
# 启用日志采集
enabled: true
# 指定Nginx日志路径
paths:
- /var/log/nginx/*.log
# 输出目标改为Logstash
output.logstash:
hosts: ["192.168.80.130:5044"]
# 启动Filebeat
nohup /usr/local/filebeat-6.2.3-linux-x86_64/filebeat -e -c filebeat.yml > nohup.out 2>&1
验证与数据可视化
- 在客户端浏览器多次访问
https://192.168.80.132生成测试日志。 - 打开
https://192.168.80.130:5601进入Kibana界面。 - 进入Discover模块,输入索引模式
logstash-*,选择时间字段创建索引模板。 - 即可查看解析后的结构化日志,包括访问IP、请求方法、响应状态码等信息。
