使用elk+redis搭建nginx日志分析平台

简介:

elk+redis 搭建nginx日志分析平台

logstash,elasticsearch,kibana 怎么进行nginx的日志分析呢?首先,架构方面,nginx是有日志文件的,它的每个请求的状态等都有日志文件进行记录。其次,需要有个队列,redis的list结构正好可以作为队列使用。然后分析使用elasticsearch就可以进行分析和查询了。

我们需要的是一个分布式的,日志收集和分析系统。logstash有agent和indexer两个角色。对于agent角色,放在单独的web机器上面,然后这个agent不断地读取nginx的日志文件,每当它读到新的日志信息以后,就将日志传送到网络上的一台redis队列上。对于队列上的这些未处理的日志,有不同的几台logstash indexer进行接收和分析。分析之后存储到elasticsearch进行搜索分析。再由统一的kibana进行日志web界面的展示。

下面我计划在一台机器上实现这些角色。

准备工作

  • 安装了redis,开启在6379端口
  • 安装了elasticsearch, 开启在9200端口
  • 安装了kibana, 开启了监控web
  • logstash安装在/usr/local/logstash
  • nginx开启了日志,目录为:/usr/share/nginx/logs/test.access.log

设置nginx日志格式

在nginx.conf 中设置日志格式:logstash

log_format logstash '$http_host $server_addr $remote_addr [$time_local] "$request" '
                    '$request_body $status $body_bytes_sent "$http_referer" "$http_user_agent" '
                    '$request_time $upstream_response_time';

在vhost/test.conf中设置access日志:

access_log  /usr/share/nginx/logs/test.access.log  logstash;

开启logstash agent

注:这里也可以不用logstash,直接使用rsyslog

创建logstash agent 配置文件

vim /usr/local/logstash/etc/logstash_agent.conf

代码如下:

input {
        file {
                type => "nginx_access"
                path => ["/usr/share/nginx/logs/test.access.log"]
        }
}
output {
        redis {
                host => "localhost"
                data_type => "list"
                key => "logstash:redis"
        }
}

启动logstash agent

/usr/local/logstash/bin/logstash -f /usr/local/logstash/etc/logstash_agent.conf

这个时候,它就会把test.access.log中的数据传送到redis中,相当于tail -f。

开启logstash indexer

创建 logstash indexer 配置文件

vim /usr/local/logstash/etc/logstash_indexer.conf

代码如下:

input {
        redis {
                host => "localhost"
                data_type => "list"
                key => "logstash:redis"
                type => "redis-input"
        }
}
filter {
    grok {
        match => [
            "message", "%{WORD:http_host} %{URIHOST:api_domain} %{IP:inner_ip} %{IP:lvs_ip} \[%{HTTPDATE:timestamp}\] \"%{WORD:http_verb} %{URIPATH:baseurl}(?:\?%{NOTSPACE:request}|) HTTP/%{NUMBER:http_version}\" (?:-|%{NOTSPACE:request}) %{NUMBER:http_status_code} (?:%{NUMBER:bytes_read}|-) %{QS:referrer} %{QS:agent} %{NUMBER:time_duration:float} (?:%{NUMBER:time_backend_response:float}|-)"
        ]
    }
    kv {
        prefix => "request."
        field_split => "&"
        source => "request"
    }
    urldecode {
        all_fields => true
    }
    date {
        type => "log-date"
        match => ["timestamp" , "dd/MMM/YYYY:HH:mm:ss Z"]
    }
}
output {
        elasticsearch {
                embedded => false
                protocol => "http"
                host => "localhost"
                port => "9200"
                index => "access-%{+YYYY.MM.dd}"
        }
}

这份配置是将nginx_access结构化以后塞入elasticsearch中。

对这个配置进行下说明:

  • grok中的match正好匹配和不论是GET,还是POST的请求。
  • kv是将request中的A=B&C=D的key,value扩展开来,并且利用es的无schema的特性,保证了如果你增加了一个参数,可以立即生效
  • urldecode是为了保证参数中有中文的话进行urldecode
  • date是为了让es中保存的文档的时间为日志的时间,否则是插入es的时间

好了,现在的结构就完成了,你可以访问一次test.dev之后就在kibana的控制台看到这个访问的日志了。而且还是结构化好的了,非常方便查找。

使用kibana进行查看

依次开启es,logstash,kibana之后,可以使用es的head插件确认下es中有access-xx.xx.xx索引的数据,然后打开kibana的页面,第一次进入的时候会让你选择mapping,索引名字填写access-*,则kibana自动会创建mapping

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
目录
相关文章
|
数据可视化 关系型数据库 MySQL
ELK实现nginx、mysql、http的日志可视化实验
通过本文的步骤,你可以成功配置ELK(Elasticsearch, Logstash, Kibana)来实现nginx、mysql和http日志的可视化。通过Kibana,你可以直观地查看和分析日志数据,从而更好地监控和管理系统。希望这些步骤能帮助你在实际项目中有效地利用ELK来处理日志数据。
1058 90
|
应用服务中间件 网络安全 nginx
ELK系列二、Logstash读取Nginx日志写入ES中
ELK系列二、Logstash读取Nginx日志写入ES中
2070 1
ELK系列二、Logstash读取Nginx日志写入ES中
|
存储 应用服务中间件 nginx
部署ELK+filebeat收集nginx日志
部署ELK+filebeat收集nginx日志
903 0
部署ELK+filebeat收集nginx日志
|
消息中间件 JSON 负载均衡
ELK7.x日志系统搭建 2. Nginx、Cluster等日志收集
ELK7.x日志系统搭建 2. Nginx、Cluster等日志收集
238 0
|
消息中间件 监控 NoSQL
ELK搭建(十三):搭建Nginx资源访问率、丢包率、读写率等运行性能监控平台
Nginx是一款轻量级、高性能的流量分发和反向代理的web服务。随着市场业务量的增加,普通的web容器,如tomcat的并发量已经远不能满足我们的业务量,同时随着分布式架构的普及,我们需要一款反向代理服务的支持,于是Nginx应运而生。 Nginx已经在大多数业务中普遍使用,因此针对Nginx的性能监控十分必要,这样我们才能实时掌握服务器请求情况和运行效率 所以今天,我们的目标就是搭建一个Nginx运行性能监控平台
700 0
ELK搭建(十三):搭建Nginx资源访问率、丢包率、读写率等运行性能监控平台
|
消息中间件 数据采集 监控
ELK搭建(十二):搭建Nginx访问、错误日志监控平台
Nginx是一款轻量级、高性能的流量分发和反向代理的web服务。随着市场业务量的增加,普通的web容器,如tomcat的并发量已经远不能满足我们的业务量,同时随着分布式架构的普及,我们需要一款反向代理服务的支持,于是Nginx应运而生。 Nginx已经在大多数业务中普遍使用,因此针对Nginx的流量监控,错误日志监控极其必要,这样才能让我们能够及时了解系统运行情况。 那么今天,我们就来看看如何搭建Nginx访问记录、错误日志监控平台
957 0
ELK搭建(十二):搭建Nginx访问、错误日志监控平台
|
消息中间件 JSON 负载均衡
ELK7.x日志系统搭建 2. Nginx、Cluster等日志收集
ELK7.x日志系统搭建 2. Nginx、Cluster等日志收集
363 0
|
监控 数据可视化 Java
ELK+FileBeat日志分析系统(正式环境nginx日志)
ELK+FileBeat日志分析系统(正式环境nginx日志)
ELK+FileBeat日志分析系统(正式环境nginx日志)
|
Web App开发 监控 应用服务中间件