graylog可以通过两种方式采集nginx日志,一种是通过Graylog Collector Sidecar进行采集(主动方式),另外是通过修改nginx配置文件的方式进行收集(被动方式)。

这次说一下修改nginx配置文件(被动方式)。

被动方式的好处就是nginx将定义好的日志字段以json格式直接发送到graylog的自定义端口中,graylog通过json解析直接将字段提取出来。

优势在于不用配置复杂的正则进行日志字段的解析,极大减少graylog对于cpu的资源占用。如果使用正则解析日志字段的话,你每次新增字段,相应的正则解析就要进行修改,非常不灵活。

当然这种方式也有缺点,一是需要nginx 1.12.1以上版本,二是nginx配置发送到graylog的ip是固定的,如果graylog群集的这个节点挂了的话是无法转移到其他节点上的,三是nginx直接将日志发送到graylog后,本地不会打印日志输出了。

本文以graylog 2.5.2为例,向大家介绍一下如何以被动方式采集nginx日志。

1、前往graylog marketplace 下载 content pack文件并导入到graylog。
(1)content pack文件下载链接:nginx content pack
(2)菜单中选择 System / Content Packs -> Content packs -> Import content pack 选择文件并上传

(3)菜单中选择Select content packs -> Web Servers -> nginx 并点击 Apply content 按钮

(4)选择导航条 Streams 查看,关于nginx的相关stream 已经自动创建完成

(5)选择导航条 System / Inputs -> input 可以看到,nginx相关的input端口已经建立完成

2、修改nginx相关配置,假设graylog日志服务器的ip地址为192.168.251.3
(1)修改nginx log_format 相关配置

log_format graylog2_json escape=json '{ "timestamp": "$time_iso8601", '
'"remote_addr": "$remote_addr", '
'"remote_user": "$remote_user", '
'"body_bytes_sent": $body_bytes_sent, '
'"request_time": $request_time, '
'"status": $status, '
'"request": "$request", '
'"request_method": "$request_method", '
'"host": "$host",'
'"source": "192.168.251.3",'
'"upstream_cache_status": "$upstream_cache_status",'
'"upstream_addr": "$upstream_addr",'
'"http_x_forwarded_for": "$http_x_forwarded_for",'
'"http_referrer": "$http_referer", '
'"http_user_agent": "$http_user_agent" }';
access_log syslog:server=192.168.251.3:12301 graylog2_json;
error_log syslog:server=192.168.251.3:12302;

(2)带ssl的nginx配置

log_format json_combined escape=json '{ "timestamp": "$time_iso8601", '
'"remote_addr": "$remote_addr", '
'"remote_user": "$remote_user", '
'"request_url": "$request_uri", '
'"req_status": "$status", '
'"response_size_B": "$bytes_sent", '
'"req_protocol": "$server_protocol",'
'"req_method": "$request_method",'
'"req_srvname": "$server_name",'
'"req_time": "$request_time",'
'"connection-id": "$request_id",'
'"ssl_prot_version": "$ssl_protocol",'
'"ssl_cipher": "$ssl_cipher",'
'"ssl_conn_reused": "$ssl_session_reused",'
'"ssl_session_id": "$ssl_session_id",'
'"http_referrer": "$http_referer", '
'"http_user_agent": "$http_user_agent", '
'"http_x_referer": "$http_x_referer" }';

access_log syslog:server=192.168.251.3:12301,facility=local0,tag=nginx,severity=info graylog2_json;
error_log syslog:server=192.168.251.3:12302,facility=local0,tag=nginx,severity=error warn;

(3)修改完毕后,执行nginx -t 查看配置是否无误,最后执行nginx -s reload 加载配置。

选择导航条 Streams -> nginx 就能看到相关nginx日志已经收集并将各个字段解析完成了。

最新文章

  1. Javascript初学篇章_7(DOM)
  2. Ubuntu安装Python2.7,nodejs
  3. linux_shell_5_shell特性_正则_1
  4. ios下移除原生样式
  5. 触发器创建及Navicat中使用
  6. 微信消息接收 验证URL有效性 C#代码示例
  7. 轻松大幅度降低 Meteor App 的首屏加载时间
  8. [转] 请别再拿“String s = new String("xyz");创建了多少个String实例”来面试了吧
  9. javascript 继承、命名空间实现分享
  10. NodeJS下载文件实例
  11. myeclipse2014鼠标单击后光标位置背景底色为白色太难看,行号显示
  12. ISP PIPLINE (十) HDR
  13. ES6 promise学习
  14. 单元测试系列之八:Sonar 数据库表关系整理一(续)
  15. Idea书签管理器的使用
  16. PredicateBuilder类(linq多条件组合查询)
  17. 〖Linux〗干掉Kubuntu烦人的软件升级提示“Update notification daemon”,Your should update ..
  18. 在ubuntu下安装opencv
  19. RSA算法工具
  20. 虚拟机复制操作CentOS6导致eth0转为eth0以至于网络服务启动失败的解决方案

热门文章

  1. Java IO: OutputStream
  2. ionic2踩坑之文本域自适应高度(自定义指令,适用angular2)
  3. js-dom运动我有废话要说
  4. 《JavaScript算法》二分查找的思路与代码实现
  5. Angular系列一:Angular程序架构
  6. idea maven 项目可以运行但依赖包一直是红色
  7. zookeeper基本知识和zk作用体现
  8. JavaScript提供了哪几种“异步模式”?
  9. 聊聊 Airtest 自动化工具
  10. 什么是AWVS