elk+redis 搭建nginx日志分析平台
2023-09-27 14:26:36 时间
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.conf 中设置日志格式:logstash
ELK搭建(十):搭建redis运行指标监控平台 Redis作为基于内存的非关系型数据库,常常被应用于热点数据缓存,它很大程度上为我们关系性数据库提供了性能补充。保证redis的高可用,对应整个应用程序的运行至关重要,一个直观的监控redis运行情况的数据看板可以为我们实时了解redis运行情况提供极大的便利。
【.NET Core项目实战-统一认证平台】第五章 网关篇-自定义缓存Redis 原文:【.NET Core项目实战-统一认证平台】第五章 网关篇-自定义缓存Redis 【.NET Core项目实战-统一认证平台】开篇及目录索引 上篇文章我们介绍了2种网关配置信息更新的方法和扩展Mysql存储,本篇我们将介绍如何使用Redis来实现网关的所有缓存功能,用到的文档及源码将会在GitHub上开源,每篇的源代码我将用分支的方式管理,本篇使用的分支为course3。
在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
ELK搭建(十):搭建redis运行指标监控平台 Redis作为基于内存的非关系型数据库,常常被应用于热点数据缓存,它很大程度上为我们关系性数据库提供了性能补充。保证redis的高可用,对应整个应用程序的运行至关重要,一个直观的监控redis运行情况的数据看板可以为我们实时了解redis运行情况提供极大的便利。
【.NET Core项目实战-统一认证平台】第五章 网关篇-自定义缓存Redis 原文:【.NET Core项目实战-统一认证平台】第五章 网关篇-自定义缓存Redis 【.NET Core项目实战-统一认证平台】开篇及目录索引 上篇文章我们介绍了2种网关配置信息更新的方法和扩展Mysql存储,本篇我们将介绍如何使用Redis来实现网关的所有缓存功能,用到的文档及源码将会在GitHub上开源,每篇的源代码我将用分支的方式管理,本篇使用的分支为course3。
相关文章
- redis 优点及 异常之缓存雪崩, 缓存穿透,击穿,预热,降级
- SpringBoot2.0 基础案例(08):集成Redis数据库,实现缓存管理
- Redis开发与运维. 3.7 发布订阅
- 如何保证Redis中存的都是热点数据?
- 最快的内存数据库横空出世,比 Redis 快 25 倍,Star 数飙升
- 关于elk中filebeat定义好日志输出,但是redis里面却没有输出内容的问题
- Golang 实现 Redis(6): 实现 pipeline 模式的 redis 客户端
- 浅析SpringBoot缓存原理探究、SpringCache常用注解介绍及如何集成Redis
- docker搭建redis
- Redis的数据过期清除策略 与 内存淘汰策略
- Redis 跳跃表的原理和实现
- C# redis 分布式session存储
- Redis哨兵日志说明