ELK 日志采集与解析实战
ELK 日志采集与解析实战
在上一篇中,我们完成了 ELK 集群的部署与优化。\ 本篇将介绍日志采集、解析及常用字段增强的实战方法,让你可以快速上手生产环境日志管理。
一、日志采集前的规划
1. 采集目标
系统日志:/var/log/messages、/var/log/syslog
Web 日志:Nginx/Apache 日志
应用日志:Java、Python、Go 应用日志
2. 采集节点规划
数据节点无需安装采集工具
每台需要采集日志的服务器安装 Filebeat
可使用 Ansible 批量部署配置文件
3. 字段规划
timestamp:日志时间
host:日志来源主机
service:应用服务名
level:日志级别(INFO/ERROR/WARN)
message:日志内容
二、Filebeat 部署与配置
1. 安装 Filebeat
CentOS / RHEL
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch yum install https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.8.2-x86_64.rpm
Ubuntu / Debian
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.8.2-amd64.deb dpkg -i filebeat-8.8.2-amd64.deb
2. 配置 Filebeat
编辑 /etc/filebeat/filebeat.yml:
filebeat.inputs: - type: logpaths:- /var/log/messages- /var/log/syslogfields:service: systemfields_under_root: trueignore_older: 72h - type: logpaths:- /var/log/nginx/access.log- /var/log/nginx/error.logfields:service: nginxfields_under_root: true output.logstash:hosts: ["10.0.0.1:5044"]
3. 启动 Filebeat
sudo systemctl enable filebeat sudo systemctl start filebeat sudo systemctl status filebeat
三、Logstash 配置与解析
1. Logstash 管道设计
示例 pipeline 配置:/etc/logstash/conf.d/logs.conf
input {beats {port => 5044} } filter {if [service] == "nginx" {grok {match => { "message" => "%{IP:client_ip} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:status}" }}date {match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]target => "@timestamp"}} else if [service] == "system" {grok {match => { "message" => "%{SYSLOGTIMESTAMP:syslog_time} %{HOSTNAME:host} %{WORD:process}: %{GREEDYDATA:msg}" }}date {match => [ "syslog_time", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]target => "@timestamp"}} } output {elasticsearch {hosts => ["http://10.0.0.1:9200"]index => "%{service}-%{+YYYY.MM.dd}"}stdout { codec => rubydebug } }
2. 常用字段增强
geoip:解析客户端 IP 地理信息
filter {if [client_ip] {geoip {source => "client_ip"target => "geo"database => "/etc/logstash/GeoLite2-City.mmdb"}} }
用户自定义标签
mutate {add_field => { "env" => "production" } }
四、索引管理与优化
1. 索引模板
PUT _template/nginx_template {"index_patterns": ["nginx-*"],"settings": {"number_of_shards": 3,"number_of_replicas": 1},"mappings": {"properties": {"@timestamp": { "type": "date" },"client_ip": { "type": "ip" },"request": { "type": "text" },"status": { "type": "integer" }}} }
2. ILM(索引生命周期管理)
热数据:7 天 SSD
冷数据:30 天 HDD
归档数据:长期存储或删除
五、监控与排查
1. 检查 Filebeat 状态
filebeat test output filebeat test config
2. 检查 Logstash 管道
sudo systemctl status logstash journalctl -u logstash -f
3. Elasticsearch 索引检查
curl http://10.0.0.1:9200/_cat/indices?v curl http://10.0.0.1:9200/_cluster/health?pretty
六、实战经验
1. 日志量大时
使用持久化队列防止 Filebeat 高峰丢日志
调整 Logstash pipeline.workers、pipeline.batch.size
2. 多类型日志
每种服务单独 pipeline 或使用 tags 区分
使用 grok + mutate 做统一字段增强
3. 安全与权限
Elasticsearch 用户权限控制
TLS 加密 Filebeat → Logstash → ES
七、总结
Filebeat + Logstash + Elasticsearch 可高效采集和解析日志
grok 配置灵活,可针对不同日志自定义解析
结合索引模板和 ILM,可实现高效存储和查询
下一篇将深入 Kibana 可视化与告警实战,构建完整日志平台