Rsyslog 实现Nginx日志统一收集功能

一、rsyslog 介绍

ryslog 是一个快速处理收集系统日志的程序,提供了高性能、安全功能和模块化设计。rsyslog 是syslog 的升级版,它将多种来源输入输出转换结果到目的地,据官网介绍,现在可以处理100万条信息。

二、Rsyslog应用

Rsyslog服务端配置

下面有一些参数没有做中文解释,是因为我也不是太了解,没办法做出解释,测试不出具体效果

需要自己去看看文档来解决了。

配置文件/etc/rsyslog.conf

$ModLoad imuxsock                                # provides support for local system logging (e.g. via logger command)

$ModLoad imklog                                  # provides kernel logging support (previously done by rklogd)

$ModLoad immark                                   # provides --MARK-- message capability

$ModLoad imudp                                    #打开ucp连接,通过ucp传日志

$UDPServerRun 514                                #UDP端口514

#$ModLoad imtcp                                  #打开tcp连接,通过tcp传日志

$InputTCPServerRun 10514                 #TCP端口10514

#$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

$IncludeConfig /etc/rsyslog.d/*.conf                                   #可以应用的配置文件

$WorkDirectory /data/weblogs                                           #默认的存储路径

$MainMsgQueueType LinkedList

$MainMsgQueueHighWatermark 10000

$MainMsgQueueLowWatermark 1000

$MainMsgQueueMaxDiskSpace 20g                                           #占用磁盘总空间大小

$MainMsgQueueMaxFileSize 200m                                           #单个文件的最大大小

$MainMsgQueueSaveOnShutdown on

$MainMsgQueueDiscardSeverity 8

$template logfile,"/data/weblogs/nginx/log_bak/%syslogtag:F,91:1%.log"  #定义日志名称

$template logFormat, "%msg:2:$%\n"                                      #定义日志内容格式

$ActionFileDefaultTemplate logFormat                                    #定义默认的日志内容格式,需要先定义,在再这里应用

local7.*         -?logfile

Rsyslog  服务端配置相关参数解释:

$template logfile,"/data/weblogs/nginx/log_bak/%syslogtag:F,91:1%.log"

分析:

%syslogtag%   这个是一个固定的格式,是rsyslog服务器端的日志名称

例如nginx向rsyslog服务端传递的应该是这样的日志名称格式:learn1.game.access

但是我们需要在rsyslog服务端,显示为learn1.game.access.log这样的格式

在这个过程中就涉及到了正则和US-ASCII编码的匹配问题

当前参数为:$template logfile,"/data/weblogs/nginx/log_bak/%syslogtag%"

日志格式为:learn1.game.access[1534]

匹配参数:F是指定分隔符,%syslogtag:F,91:1%,91是US-ASCII编码中"["符号的值,然后取1,也就是说取值[1534]前面的值,得出的格式是learn1.game.access,在最后加上.log后缀,完整格式为%syslogtag:F,91:1%.log,日志格式为learn1.game.access.log

$template logFormat, "%msg:2:$%\n"

%msg%获取到的是nginx日志内容,但是它的显示方式是连续且没有分隔的

1)只获取%msg%内容

红色框里的内容是一条完整的日志,其他的日志再后面顺序追加了,阅读感极差

2)只获取%msg%\n内容

这样的格式明显已经容易阅读了,而且整齐规范,看红框部分是由空格存在的,为了做到进一步的整齐和后期日志的可阅读性,需要向左对齐

3)完美的日志格式,%msg:2:$%\n

已经很好的配置好了日志格式,对后期日志的刷选也方便了

上述配置,是用到了正则表达式的相关知识。

上面的两条配置涉及的只是比较多,在匹配这一块,涉及到了正则表达式,US-ASCII编码。

关于其他内容访问一下url学习,没办法做出明确的总结

学习链接:https://wiki.tankywoo.com/tool/rsyslog.html#_2

http://www.cnblogs.com/tobeseeker/archive/2013/03/10/2953250.html

http://www.cnblogs.com/hanyifeng/p/5463338.html

官网文档:http://www.rsyslog.com/doc/v8-stable/configuration/modules/idx_input.html

http://www.rsyslog.com/doc/v8-stable/configuration/property_replacer.html

Nginx配置

黄色部分为新添加的配置参数

server

{

listen       80;

server_name  learn1.proxy.com;

index index.php  index.html index.htm;

root  /data/www/learn1.proxy.com;

error_log  /data/weblogs/learn1_error.log  crit;

access_log  /data/wwwlogs/learn1.log  access;

access_log   syslog:local7:info:192.168.110.47::learn1.game.access access;

location ~ \.php$ {

fastcgi_pass   127.0.0.1:9000;

fastcgi_index  index.php;

fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

include        fastcgi.conf;

}

}

原文地址:https://www.cnblogs.com/bazingafraser/p/8505083.html

时间: 2024-08-05 21:58:52

Rsyslog 实现Nginx日志统一收集功能的相关文章

rsyslog转发nginx日志(rsyslog发送到logstashh)

收集系统其它服务日志,在客户端上操作,以nginx 服务的日志为例 先修改配置文件 /etc/rsyslog.conf,内容如下: #grep -v "^$" /etc/rsyslog.conf | grep -v "^#" $ModLoad imuxsock # provides support for local system logging (e.g. via logger command) $ModLoad immark  # provides --MARK

K8S使用filebeat统一收集应用日志

今年3月份在公司的内部k8s培训会上,开发同事对应用整合进pod提出了几个问题,主要围绕在java应用的日志统一收集.集中存放和java jvm内存监控数据收集相关的点上,本文将介绍使用filebeat实现pod日志的统一收集,集中存放使用集群外的elasticsearch,后续可以加上kibana及模板文件实现更友好的数据展示. 一.准备和测试tomcat基础镜像该镜像主要是配置jdk环境变量和tomcat软件包部署,如果有特殊的需求,例如安装其他软件包.配置tomcat https等也可以在

ELK整合Filebeat监控nginx日志

ELK 日志分析 1. 为什么用到 ELK 一般我们需要进行日志分析场景:直接在日志文件中 grep. awk 就可以获得自己想要的信息.但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档.文本搜索太慢怎么办.如何多维度查询.需要集中化的日志管理,所有服务器上的日志收集汇总.常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问. 一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位

LAMP基于rsyslog+loganalyzer实现日志集中管理及分析

前言 作为一名运维工程师,查看分析系统日志是每天必做的功课,但每次查看日志都得一台服务器一台服务器的看,几台服务器还可以这么对付,但如果管理成百上千台线上服务器,这种方法就捉襟见肘了.于是我们就需要用到日志服务器了,但是如何能让它更直观的显示呢?loganalyzer是一个不错的选择,本文将讲解如何使用rsyslog+loganalyze实现日志统一管理及分析. 简介 LogAnalyzer是一款syslog日志和其他网络事件数据的Web前端,它提供了对日志的简单浏览.搜索.基本分析和一些图表报

Nginx日志统计方案全过程

本文主要记录下给予python的nginx日志统计过程,主要原因是最近系统经常遭到未知程序的疯狂爬数据,虽然做了防爬机制,但是还是必须要找出是哪些IP访问次数比较多.想到的办法就是通过分析ngxin日志,从而找出这些IP排行即可.具体方案的操作步骤包括: ngxin日志每日切割功能: 设置ngxin的日志格式: 编写python代码在每日切割之前统计下access.log中的IP访问次数并将统计结果录入MongoDB: 编写web查询MongoDB进行统计. 一.nginx日志每日切割功能 该功

rsyslog收集nginx日志配置

rsyslog日志收集配置 rsyslog服务器收集各服务器的日志,并汇总,再由logstash处理 请查看上一篇文章 http://bbotte.blog.51cto.com/6205307/1613571 客户端/发送端  web服务器 # yum install rsyslog -y # vim /etc/rsyslog.conf *.* @192.168.10.1:514 # vim /etc/bashrc                              #收集其他服务器的操作

logstash通过rsyslog对nginx的日志收集和分析

logstash通过rsyslog对nginx的日志收集和分析 http://bbotte.blog.51cto.com/6205307/1613571 logstash&elasticsearch&kibana的安装和配置 http://bbotte.blog.51cto.com/6205307/1614453  这一篇文章里面是以nginx打补丁的方式实现rsyslog把nginx的日志同步到logstash做分析,不过线上环境种种不一样,下面是把nginx的日志直接通过rsyslog

CentOS6.8下使用rsyslog+ldap部署日志服务器来实现日志收集

在我们的运维工作中,常常会对系统上的日志进行收集,手动管理少量的几台服务器的日志收集没有太大难度,但是企业当中批量的管理成千上万台服务器的时候,这时候想一台台的收集日志未免太浪费时间了,这时候我们需要一个批量管理日志的系统来解决这一难题,今天我给大家带来的使用 1.syslog介绍 日志服务在Centos5上位syslog,随着系统版本的升级之后,日志服务改为rsyslog,rsyslog是syslog的升级版,提供了许多高级的特性.syslog由klogd和syslogd组成,klogd记录的

nginx日志切割并使用flume-ng收集日志

nginx的日志文件没有rotate功能.如果你不处理,日志文件将变得越来越大,还好我们可以写一个nginx日志切割脚本来自动切割日志文件.第一步就是重命名日志文件,不用担心重命名后nginx找不到日志文件而丢失日志.在你未重新打开原名字的日志文件前,nginx还是会向你重命名的文件写日志,linux是靠文件描述符而不是文件名定位文件.第二步向nginx主进程发送USR1信号.nginx主进程接到信号后会从配置文件中读取日志文件名称,重新打开日志文件(以配置文件中的日志名称命名),并以工作进程的