ELK(R) 实现分布式 Nginx 日志
Posted Lemo_wd
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ELK(R) 实现分布式 Nginx 日志相关的知识,希望对你有一定的参考价值。
ELKR 概述
ELK(R) = Elasticsearch + Logstash + Kibana (+ Redis) 是一套完整的工业级日志分析工具。
Elasticsearch 是整个日志分析系统的核心,它负责对日志数据进行分析、索引等重要工作;
Logstash 则主要用于对日志数据进行初步的过滤和筛选。例如,Logstash 可以将拥有日志数据的从节点(Slave Node)服务器内的日志数据发送到 Elasticsearch 的主服务器。
Kibana 则是为了让 Elasticsearch 更好的与用户进行交互而设计的一个 Web 前端工具,具备强大的数据可视化功能。
Redis 本身并不属于 ELK 技术栈里的一份子,而是作为一个插件存在于 ELK 技术栈中。Redis 提供了一个很好的缓冲区,它能够很好的帮助我们在主节点上屏蔽掉多个从节点之间不同日志文件的差异,负责管理日志端(从节点)的人可以专注于向 Redis 里生产数据,而负责数据分析聚合端的人则可以专注于从 Redis 内消费数据,达到分层目的。
基础实践
简化架构图
logstash 基础配置
/etc/logstash/conf.d/logstash-shipper.conf
input { stdin {} file { path => "/etc/nginx/logs/access.log" start_position => "beginning" codec => multiline { negate => true pattern => ‘^d‘ what => ‘previous‘ } } } output { stdout { codec => rubydebug } elasticsearch { hosts => ["localhost:9200"] index => "logstash-%{+YYYY.MM.dd}" } }
检测文件语法并报告错误
logstash -f conf.d/logstash-shipper.conf --path.settings=/etc/logstash --config.test_and_exit
kibana 简单使用
Step 1 创建一个索引在 Index pattern 中填写 logstash-*
,然后点击 Next step:
Step 2 配置一个索引模式,这里可以直接使用默认索引模式 @timestamp
Step 3 可以看到 kibana 默认为我们创建了 16 个字段(fields)
Step 4 点击左侧边栏的 Discover ,进入到 Kibana 的全局搜索界面,刷新下日志查看统计数据
使用 redis 部署分布式 ELK 环境
Redis 本身并不属于 ELK 技术栈里的一份子,而是作为一个插件存在于 ELK 技术栈中。Redis 提供了一个很好的缓冲区,它能够很好地帮助我们在主节点上屏蔽掉多个从节点之间不同日志文件的差异,从而使用 Redis 对数据的产生和使用进行了分层。
由于环境不好实现集群效果,我们可以通过开启多个 Logstash 进程来模拟 Slave Node。
配置 logstash
模拟 Master Node 的 Logstash 配置,进程角色为 Indexer
从 redis 中读取数据
/etc/logstash/conf.d/logstash-indexer.conf
input { redis { host => "localhost" data_type => "list" key => "logstash" } } output { stdout { codec => rubydebug } elasticsearch { hosts => ["localhost:9200"] index => "logstash-%{+YYYY.MM.dd}" } }
模拟 Slave Node 的 Logstash 配置,进程角色为 Shipper
设置 output 为 Redis,将日志数据输出到 redis
/etc/logstash/conf.d/logstash-shipper.conf
进行测试
执行 shipper
logstash -f conf.d/logstash-shipper.conf --path.settings=/etc/logstash --config.test_and_exit
执行 indexer
logstash -f conf.d/logstash-indexer.conf --path.settings=/etc/logstash --path.data=/tmp --config.test_and_exit
在同一台主机上启动多个 logstash 进程需要将它们的数据目录分开,这里通过
--path.data
选项给第二个进程分配了一个单独的目录。
在 Shipper 中输入数据,然后可以在 Indexer 中看到对应的输出。
以上是关于ELK(R) 实现分布式 Nginx 日志的主要内容,如果未能解决你的问题,请参考以下文章