GVKun编程网logo

Linux日志系统Syslog(linux日志系统设计代码)

19

关于Linux日志系统Syslog和linux日志系统设计代码的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于004-linux下配置rsyslog日志收集服务器案例rsyslog+log

关于Linux日志系统Sysloglinux日志系统设计代码的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于004-linux下配置rsyslog日志收集服务器案例 rsyslog+loganalyzer日志服务器,无法添加报表模板解决、CentOS集中式日志记录,syslogd,rsyslog,syslog-ng,logstash发送者?、ELK日志系统之使用Rsyslog快速方便的收集Nginx日志、Linux Nginx日志——Nginx日志配置 access_log & error_log & rewrite_log &日志轮转等相关知识的信息别忘了在本站进行查找喔。

本文目录一览:

Linux日志系统Syslog(linux日志系统设计代码)

Linux日志系统Syslog(linux日志系统设计代码)

日志系统(Linux系统上常用的日志系统)

  操作系统运行过程当中会产生许多信息,这些信息既是我们观察系统运行过程当中正常的一种途径(手段、凭借),同时它也为我们提供了当发生故障时定位问题所在的必要信息。

  事实上,任何操作系统都提供了日志系统,用于记录各子系统产生的各种信息。

 

  日志系统定义一个日志信息要基于三种方式定义:

  1、信息的详细程度:系统产生的信息不可能全部进行记录,因此记录信息的过程会有信息的详细程度。根据记录日志信息的详细程度不同,可将日志信息分级,称为日志级别(用于定义不同的日志信息的)。一般来讲,不同的日志系统支持的级别不同。在Linux系统上,日志级别通常有固定的几种。

  2、子系统:facility(设施)

  3、动作:在系统运行过程当中产生的信息该如何处理呢?是记录在文件中?还是发送至其它主机让其它主机记录?或者使用管道送给其他命令,让其它命令处理呢?

  通常定义日志信息时,需要指明记录哪一个子系统、记录哪一个级别及此级别以上的信息以及信息的存储位置等。

 

  鉴于操作系统上的程序自身都可以产生日志信息并将其记录到指定位置,但这些日志信息中定义的日志格式不尽相同。故Linux系统上统一创建了一个程序,负责统一记录各程序产生的日志信息。这就是syslog。

 

Linux上的日志系统:

  1、syslog

  2、syslog-ng(ng(next generation,下一代),分为开源版和商业版)  

  在RedHat 5上使用的是syslog,而在RedHat 6上使用的是syslog-ng。syslog-ng作为syslog的升级版,其功能比syslog要大的多的多。事实上,在RedHat系列的系统上,syslog-ng和syslog使用的配置文件的格式比较接近,虽然事实上syslog-ng和syslog差别比较大。

 

syslog服务:

  专门用来提供记录日志功能的。可以把每一个程序理解为子系统。

  syslog有两个进程:

    syslogd(sys:系统):专门负责记录非内核的其它设施产生的日志;

    klogd(k:内核):专门负责记录内核产生的日志;

    klogd所记录的日志的详细程度个syslogd有着巨大不同,所以它们所产生的日志格式相差太大,因为它们两个各自独立为一个日志系统。

 

  系统启动过程中,BIOS将控制权交给kernel(内核实现初始化了,屏幕上会产生许多信息) -->  这些屏幕上的信息显示在物理终端上(物理终端对应的设备为/dev/console,而后来所看到的信息如给用户login登录时看到的信息为虚拟终端,ssh远程登录叫伪终端) --> 这些信息在RedHat系列的系统上会被记录到/var/log/dmesg(可使用cat /var/log/dmesg查看,或者使用dmesg命令查看(dmesg专门用来打开/var/log/dmesg文件并显示),这些信息都是启动init程序之前产生的信息) --> 系统控制权由内核转交给/sbin/init之后 --> 产生的信息由syslog记录(上面kernel产生的信息由klogd记录并放置于文件中)

 

syslogd记录的信息存放位置:

  /var/log/messages:系统标准错误日志信息(大多数产生的错误信息都在其中)、非内核产生的引导信息(如系统初始化信息)、各子系统产生的信息。所以此文件是记录信息最多的,而且运行程序日积月累之后可能会变得越来越大的一个文件。当然,它会被多次进行滚动,以免一个文件变得过大。

  /var/log/maillogs:邮件系统产生的信息;

  /var/log/secure:与安全相关的信息;(权限要求严格(600权限),任何一个用户在登录时产生的登录信息,如账号密码输入是否有误、尝试登录过几次都在其中有记录)

  

日志滚动:

  日志需要滚动,日志滚动的过程也叫日志切割

  比如第一个日志文件叫messages,过了两天这个文件变得非常大了,打开文件查看是非常消耗内存的,而且不便管理。所以每隔一段时间,将文件重命名(如:将messages重命名为messages.1),再重新创建一个文件叫messages。以此类推,下一次messages.1重命名为messages.2,message重命名为messages.1,再新建一个messages...

  日志滚动可以按文件大小、也可以按时间(如:每周一次)或两个标准同时进行滚动。

  logrotate:系统中进行日志滚动(切割)的工具

 

对于syslog,其对应的服务也叫syslog。

 

syslog日志系统的配置文件:/etc/syslog.conf(每一行用来指定每一个子系统产生的哪个级别的日志记录到什么位置上去)格式如下:

  配置文件定义格式为:  facility.priority    action

  action前若加-表示异步写入

  如:

分享图片

  facility:可以理解为日志的来源或设备,目前常用的facility有以下几种:

  auth          #认证相关的
  authpriv        #权限,授权相关的
  cron          #任务计划相关的
  daemon         #守护进程相关
  kern          #内核相关的
  lpr           #打印相关的
  mail          #邮件相关的
  mark          #标记相关的
  news          #新闻相关的
  security        #安全相关的,与auth类似
  syslog         #syslog自己的
  user          #用户相关的
  uucp          #unix to unix cp相关的
  local0 到 local7   #用户自定义使用
  *            #表示所有的facility

  priority:(log level)日志的级别,一般有以下几种级别(从低到高)(级别越低,记录的信息越详细)

  debug        #程序或系统的调试信息
  info         #一般信息
  notice        #不影响正常功能,需要注意的消息
  warning/warn    #可能影响系统功能,需要提醒用户的重要事件
  err/error      #错误信息
  crit         #比较严重的
  alert        #必须马上处理的
  emerg/panic    #会导致系统不可用的
  *          #表示所有的日志级别
  none         #根*相反,表示啥也没有

  action(动作):日志记录的位置

  系统上的绝对路径        #普通文件,如:/@H_867_301@var/log/xxx
  |            #管道,通过管道送给其它命令处理
  终端           #终端,如:/dev/console
  @HOST          #远程主机,如:@10.0.0.1
  用户           #系统用户,如:root
  *            #登录到系统上的所有用户,一般为emerg级别的日志是这样定义的

  日志定义格式举例:

  mail.info  /var/log/mail.log  #表示将mail相关的,级别为info及info以上级别的信息记录到/var/log/mail.log文件中
  auth.=info  @10.0.0.1      #表示将auth有关的,级别为info的信息记录到10.0.0.1主机上去
                      #前提是10.0.0.1要能够接受其它主机发来的日志信息
  user.!error             #与user.error相反
  *.info                #表示记录所有的日志信息的info级别
  mail.*                #表示记录mail相关的所有级别的信息
  *.*                  #记录所有的日志信息的所有级别
  cron.info;mail.info         #多个日志来源用";"隔开
  cron,mail.info            #与cron.info;mail.info意义相同
  mail.*;mail.!=info         #表示记录mail相关的除了info级别之外的所有级别的信息

 

分享图片

分享图片

  修改/etc/syslog.conf不会立即生效,但会永久有效,若需要立即生效需要重启syslog服务:

  service syslog restart

  但若有其它进程网syslog发信息,则可能无法生效:

  service syslog reload  #让程序不用重启就能使配置文件生效

 

使用远程日志:

  在/etc/syslconfig/syslog中加入-r选项并重启服务可实现将本机作为日志服务器使用(可接受其它主机的日志信息),如下图:

分享图片

分享图片

004-linux下配置rsyslog日志收集服务器案例 rsyslog+loganalyzer日志服务器,无法添加报表模板解决

004-linux下配置rsyslog日志收集服务器案例 rsyslog+loganalyzer日志服务器,无法添加报表模板解决

centos6系统 client1:192.168.1.33

centos7系统 client2:192.168.1.44

centos7系统 master:192.168.1.55

配置服务端master端

第一:启用UDP/TCP进行传输

vim /etc/rsyslog.conf

# Provides UDP syslog reception		#若启用UDP进行传输,则取消下面两行的注释
$ModLoad imudp
$UDPServerRun 514

# Provides TCP syslog reception		#若启用TCP进行传输,则取消下面两行的注释
#$ModLoad imtcp
#$InputTcpserverRun 514

第二:重启rsyslog服务

systemctl restart rsyslog

配置客户端client端

第一:区分UDP/TCP传输

vim /etc/rsyslog.conf

*.* @192.168.31.55:514     #服务端若启用TCP传输则使用@@,若是UDP则使用@

第二:重启rsyslog服务

systemctl restart rsyslog

/etc/init.d/rsyslog restart

测试服务是否能够将client端的系统日志传回master端

第一:在服务端不间断输出系统日志文件

tailf /var/log/messages

第二:在客户端使用logger生成测试日志信息(并查看服务器端输出,判断是否通过网络将日志收集到了)

logger "this is ce shi xing xi"

本文地址:https://www.linuxprobe.com/linux-configu-rsyslog.html

 

 

 

 

 

loganalyzer搭建成功后,各方面功能都算正常但是发现不能创建报表模板,提示报错

MysqL错误:‘字段列表‘中的未知列‘Source1‘ MysqL错误号:1054 

分享图片

解决方案:

分享图片

分享图片

CentOS集中式日志记录,syslogd,rsyslog,syslog-ng,logstash发送者?

CentOS集中式日志记录,syslogd,rsyslog,syslog-ng,logstash发送者?

我正在试图找出设置存储和查询服务器日志的中心位置的最佳方法. syslog,Apache,MySQL等

我发现了一些不同的选择,但我不确定什么是最好的.我正在寻找易于安装并在许多虚拟机上保持更新的东西.我可以将其添加到VM模板中,但我也希望它易于安装以降低VM的复杂性.

我到目前为止找到的选项是:

> syslogd
> syslog-ng
> rsyslog
> syslogd / syslog-ng / rsyslog到logstash / ElasticSearch
> logstash代理在每个日志“client”中发送到Redis / logstash / ElasticSearch

以及上述的各种排列.

从“客户”日志角度来看,最有弹性和最轻松的是什么?
我想避免日志“客户端”挂起的情况,因为他们无法将日志发送到日志记录服务器.
此外,我仍然希望保持本地日志记录以及logrotate提供的旋转/保留.

有任何想法/建议或原因支持或反对上述任何一项?
或完全不同结构的建议?

我认为此时最可靠的选择(排除了软件解决方案)是纯syslog-ng

ELK日志系统之使用Rsyslog快速方便的收集Nginx日志

ELK日志系统之使用Rsyslog快速方便的收集Nginx日志

常规的日志收集方案中Client端都需要额外安装一个Agent来收集日志,例如logstash、filebeat等,额外的程序也就意味着环境的复杂,资源的占用,有没有一种方式是不需要额外安装程序就能实现日志收集呢?Rsyslog就是你要找的答案!

Rsyslog

Rsyslog是高速的日志收集处理服务,它具有高性能、安全可靠和模块化设计的特点,能够接收来自各种来源的日志输入(例如:file,tcp,udp,uxsock等),并通过处理后将结果输出的不同的目的地(例如:mysql,mongodb,elasticsearch,kafka等),每秒处理日志量能够超过百万条。

Rsyslog作为syslog的增强升级版本已经在各linux发行版默认安装了,无需额外安装。

收集Nginx日志

ELK通过Rsyslog收集日志流程图如下:

  1. 处理流程为:Nginx --syslog--> Rsyslog --omkafka--> Kafka --> Logstash --> Elasticsearch --> Kibana
  2. Nginx产生日志通过syslog系统服务传给Rsyslog服务端,Rsyslog接收到日志后通过omkafka模块将日志写入Kafka,Logstash读取Kafka队列然后写入Elasticsearch,用户通过Kibana检索Elasticsearch里存储的日志
  3. Rsyslog服务系统自带无需安装,所以整个流程中客户端不需要额外安装应用
  4. 服务端虽然Rsyslog也已安装,但默认没有omkafka模块,如果需要Rsyslog写入Kafka需要先安装这个模块
  5. omkafka模块在rsyslog v8.7.0之后的版本才支持,所以需要先通过rsyslogd -v命令查看rsyslog版本,如果版本较低则需要升级

Rsyslog升级

1.添加rsyslog源的key

# apt-key adv --recv-keys --keyserver keys.gnupg.net AEF0CF8E

2.添加rsyslog源地址

echo "deb http://debian.adiscon.com/v8-stable wheezy/" >> /etc/apt/sources.list
echo "deb-src http://debian.adiscon.com/v8-stable wheezy/" >> /etc/apt/sources.list

3.升级rsyslog服务

# apt-get update && apt-get -y install rsyslog

添加omkafka模块

1.安装编译工具,下边autoreconf需要用到,不然无法生成configure文件

# apt-get -y install pkg-config autoconf automake libtool unzip

2.omkafka需要安装一堆的依赖包

# apt-get -y install libdbi-dev libmysqlclient-dev postgresql-client libpq-dev  libnet-dev   librdkafka-dev   libgrok-dev libgrok1 libgrok-dev libpcre3-dev libtokyocabinet-dev libglib2.0-dev  libmongo-client-dev  libhiredis-dev
# apt-get -y install libestr-dev libfastjson-dev uuid-dev liblogging-stdlog-dev libgcrypt-dev
# apt-get -y install flex bison librdkafka1 librdkafka-dev librdkafka1-dbg

3.编译安装omkafka模块

# mkdir tmp && cd tmp

# git init
# git pull git@github.com:VertiPub/omkafka.git

# autoreconf -fvi
# ./configure --sbindir=/usr/sbin --libdir=/usr/lib --enable-omkafka && make && make install && cd ..

Rsyslog收集nginx日志

Client端Nginx配置
log_format  jsonlog ''{''
    ''"host": "$host",''
    ''"server_addr": "$server_addr",''
    ''"http_x_forwarded_for":"$http_x_forwarded_for",''
    ''"remote_addr":"$remote_addr",''
    ''"time_local":"$time_local",''
    ''"request_method":"$request_method",''
    ''"request_uri":"$request_uri",''
    ''"status":$status,''
    ''"body_bytes_sent":$body_bytes_sent,''
    ''"http_referer":"$http_referer",''
    ''"http_user_agent":"$http_user_agent",''
    ''"upstream_addr":"$upstream_addr",''
    ''"upstream_status":"$upstream_status",''
    ''"upstream_response_time":"$upstream_response_time",''
    ''"request_time":$request_time''
''}'';


access_log syslog:server=rsyslog.domain.com,facility=local7,tag=nginx_access_log,severity=info jsonlog;

1.Nginx在v1.10之后的版本才支持syslog的方式处理日志,请确保你的Nginx版本高于1.10

2.为了降低logstash的处理压力,同时也为了降低整个配置的复杂度,我们nginx的日志直接采用json格式

3.抛弃文本文件记录nginx日志,改用syslog直接将日志传输到远端的rsyslog服务器,以便我们后续的处理;这样做的另一个非常重要的好处是我们再也无需考虑nginx日志的分割和定期删除问题(一般我们为了方便管理通常会采用logrotate服务来对日志进行按天拆分和定期删除,以免磁盘被占满)

4.access_log直接输出到syslog服务,各参数解释如下:

  • syslog:指明日志用syslog服务接收
  • server:接收syslog发送日志的Rsyslog服务端地址,默认使用udp协议,端口是514
  • facility:指定记录日志消息的类型,例如认证类型auth、计划任务cron、程序自定义的local0-7等,没有什么特别的含义,不必深究,默认的值是local7
  • tag:给日志添加一个tag,主要是为了方便我们在服务端区分是哪个服务或者client传来的日志,例如我们这里给了tag:nginx_access_log,如果有多个服务同时都写日志给rsyslog,且配置了不通的tag,在rsyslog服务端就可以根据这个tag找出哪些是nginx的日志
  • severity:定义日志的级别,例如debug,info,notice等,默认是error
Server端Rsyslog配置
# cat /etc/rsyslog.d/rsyslog_nginx_kafka_cluster.conf 
module(load="imudp")
input(type="imudp" port="514")

# nginx access log ==> rsyslog server(local) ==> kafka
module(load="omkafka")

template(name="nginxLog" type="string" string="%msg%")

if $inputname == "imudp" then {
    if ($programname == "nginx_access_log") then
        action(type="omkafka"
            template="nginxLog"
            broker=["10.82.9.202:9092","10.82.9.203:9092","10.82.9.204:9092"]
            topic="rsyslog_nginx"
            partitions.auto="on"
            confParam=[
                "socket.keepalive.enable=true"
            ]
        )
}

:rawmsg, contains, "nginx_access_log" ~

1.在rsyslog.d目录下添加一个专门处理nginx日志的配置文件

2.rsyslog配置文件重要配置解释如下:

  • module:加载模块,这里我们需要加载imudp模块来接收nginx服务器syslog发过来的日志数据,也需要加载omkafka模块来将日志写入到kafka
  • input:开启udp协议,端口514,也可以同时开启tcp协议,两者可以共存
  • template:定义一个模板,名字叫nginxLog,模板里可以定义日志的格式,因为我们传的已经是json了,不需要再匹配格式,所以这里不额外定义,注意模板名字要唯一
  • action:在匹配到inputname为imudp且programname为nginx_access_log(就是我们上边nginx配置里边的tag)之后的处理方式,这里的配置为匹配到的日志通过omkafka模块写入kafka集群,还有一些关于omkafka更详细的配置参考上边给出的omkafka模块官方文档
  • :rawmsg, contains:最后这一行的意思是忽略包含nginx_access_log的日志,没有这一行的话rsyslog服务默认会把所有日志都记录到message里边一份,我们已经把日志输出到kafka了,本地就没必要再记录了

3.omkafka模块检查kafka里边topic是否存在,如果不存在则创建,无需手动创建kafka的topic

Server端logstash配置
input {
    kafka {
        bootstrap_servers => "10.82.9.202:9092,10.82.9.203:9092,10.82.9.204:9092"
        topics => ["rsyslog_nginx"]
    }
}

filter {
    mutate {
        gsub => ["message", "\\x", "\\\x"]
    }

    json {
        source => "message"
    }

    date {
        match => ["time_local","dd/MMM/yyyy:HH:mm:ss Z"]
        target => "@timestamp"
    }

}

output {
    elasticsearch {
        hosts => ["10.82.9.205", "10.82.9.206", "10.82.9.207"]
        index => "rsyslog-nginx-%{+YYYY.MM.dd}"
    }
}

重要配置参数解释如下:

  • input:配置kafka的集群地址和topic名字
  • filter:一些过滤策略,因为传入kafka的时候是json格式,所以不需要额外处理,唯一需要注意的是如果日志中有中文,例如url中有中文内容时需要替换\\x,不然json格式会报错
  • output:配置ES服务器集群的地址和index,index自动按天分割
联调测试

配置完成后分别重启rsyslog服务和nginx服务,访问nginx产生日志

1.查看kafka是否有正常生成topic

# bin/kafka-topics.sh --list --zookeeper 127.0.0.1:2181
__consumer_offsets
rsyslog_nginx

2.查看topic是否能正常接收日志

# bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic rsyslog_nginx
{"host": "domain.com","server_addr": "172.17.0.2","http_x_forwarded_for":"58.52.198.68","remote_addr":"10.120.89.84","time_local":"28/Aug/2018:14:26:00 +0800","request_method":"GET","request_uri":"/","status":200,"body_bytes_sent":1461,"http_referer":"-","http_user_agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36","upstream_addr":"-","upstream_status":"-","upstream_response_time":"-","request_time":0.000}

3.kibana添加index,查看Elasticsearch中是否有数据,如果前两步都正常,kibana搜不到index或index没有数据,多半是index名字写错了之类的基础问题,仔细检查

kibana查询展示

  • 打开Kibana添加rsyslog-nginx-*的Index,并选择timestamp,创建Index Pattern

  • 进入Discover页面,可以很直观的看到各个时间点请求量的变化,根据左侧Field实现简单过滤,例如我们想查看所有访问状态为404的uri,可以点击request_uri和status后边的add,这两项的内容将出现在右侧,然后点击status下边404状态码后边的加号,则只查看状态为404的请求,点击上方auto-refresh可以设置页面自动刷新时间

  • 通过各种条件的组合查询可以实现各种各样的需求,例如每秒请求、带宽占用、异常比例、慢响应、TOP IP、TOP URL等等各种情况,并且可以通过Visualize很方便的将这些信息绘制图标,生成Dashboard保存

写在最后

  1. Nginx的access log绝对是网站的一个宝藏,通过日志量的变化可以知道网站的流量情况,通过对status状态的分析可以知道我们提供服务的可靠性,通过对特定活动url的追踪可以实时了解活动的火爆程度,通过对某些条件的组合查询也能为网站运营提供建议和帮助,从而使我们的网站更友好更易用
  2. Rsyslog服务的单点问题可以通过部署多个Rsyslog服务过三层负载来保证高可用,不过以我们的经验来说rsyslog服务还是很稳定的,跑了一年多,每分钟日志处理量在20w左右,没有出现过宕机情况,不想这么复杂的话可以写个check rsyslog服务状态的脚本跑后台,挂了自动拉起来
  3. 整个过程中我们使用了UDP协议,第一是因为Nginx日志的syslog模式默认支持的就是UDP协议,翻了官网没找到支持TCP的方式,我想这也是考虑到UDP协议的性能要比TCP好的多,第二也考虑到如果使用TCP遇到网络不稳定的情况下可能会不停的重试或等待,影响到Nginx的稳定。对于因为内容过长超过以太网数据帧长度的问题暂时没有遇到

长按关注公众号查看更多原创文章

如果你觉得文章对你有帮助,请转发分享给更多的人。如果你觉得读的不尽兴,推荐阅读以下文章:

  • ELK构建MySQL慢日志收集平台详解
  • 中小团队基于Docker的devops实践

Linux Nginx日志——Nginx日志配置 access_log & error_log & rewrite_log &日志轮转

Linux Nginx日志——Nginx日志配置 access_log & error_log & rewrite_log &日志轮转

1、Nginx 日志介绍

Nginx 每个级别的配置都可以有独立的访问日志, 所需日志模块 ngx_http_log_module 的支持,日志格式通过 log_format 命令来定义,日志对于统计和排错是有利的。

Nginx 日志相关的配置包括 access_log、rewrite_log、error_log

# 设置访问日志access_log path 样式;

2、作用域

access_log 指令作用域可应用 到http,server,location(在这其他域外使用该指令Nginx 会报错)

access_log /var/logs/Nginx-access.log combined;#指定日志的写入路径为/var/logs/Nginx-access.log,日志格式使用默认的 combined

3、log_format 指令

Nginx 预定义了名为 combined 日志格式,如果未指定日志格式默认使用该格式:

log_format combined '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent"';

如使用其他格式,可以通过 log_format 指令来自定义。
语法

log_format name [escape=default|json] string ...;

name 格式名称,在 access_log 指令中引用
escape 设置变量中的字符编码方式是 json 还是 default,默认是 default
string 要定义的日志格式内容,该参数可以有多个,参数中可以使用 Nginx 变量

log_format 指令中常用的一些变量:

在这里插入图片描述

4.自定义日志格式的使用:

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';access_log /var/logs/Nginx-access.log main;server {
    ........}

使用 log_format 指令定义了一个 main 的格式,并在 access_log 指令中引用了它。

假如客户端有发起请求:http://vc.com/ 看一下日志记录:

10.0.105.207 - - [01/Jul/2019:10:44:36 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36" "-"

最终的日志记录中                            r                    e                    m                    o                    t                             e                         u                            s                    e                    r                    、                         remote_user、              remoteuser、http_referer、$http_x_forwarded_for 都对应了一个-,这是因为这几个变量为空。

5、error_log 指令
错误日志在 Nginx 中是通过 error_log 指令实现的,该指令记录服务器和请求处理过程中的错误信息

语法
配置错误日志文件的路径和日志级别。

error_log file [level];Default:
error_log logs/error.log warn;

file 参数指定日志的写入位置。
level 参数指定日志的级别: debug, info, notice, warn, error, crit, alert,emerg (从低到高)只有日志的错误级别等于或高于指定级别才会写入错误日志中

基本用法

error_log /var/logs/Nginx/Nginx-error.log;

*配置段:http, mail, stream, server, location 作用域。

6、rewrite_log 指令
由 ngx_http_rewrite_module 模块提供的。用来记录重写日志的。对于调试重写规则建议开启,启用时将在 error log 中记录重写日志。

基本语法:

  rewrite_log on | off;

默认值:

rewrite_log off;

*配置段: http, server, location, if 作用域。

7、Nginx 日志配置总结

Nginx 中通过 access_log 和 error_log 指令配置访问日志和错误日志,通过 log_format 可以自定义日志格式。

8、Nginx 的日志轮转

 [root@192 ~]# rpm -ql Nginx |grep log
  /etc/logrotate.d/Nginx
  /var/log/Nginx  [root@192 ~]# vim /etc/logrotate.d/Nginx
  /var/log/Nginx/*.log {           #指定需要轮转处理的日志文件
  
          daily     #日志文件轮转周期,可用值为: daily/weekly/yearly
          missingok               # 忽略错误信息
          rotate 7             # 轮转次数,即最多存储 7 个归档日志
          minsize 5M           #限制条件,大于 5M 的日志文件才进行分割,否则不操作
          dateext             # 以当前日期作为命名格式
          compress         # 轮循结束后,已归档日志使用 gzip 进行压缩
          delaycompress    # 与 compress 共用,最近的一次归档不要压缩
          notifempty         # 日志文件为空,轮循不会继续执行
          create 640 Nginx Nginx     #新日志文件的权限
          sharedscripts     #有多个日志需要轮询时,只执行一次脚本
          postrotate    # 将日志文件转储后执行的命令。以 endscript 结尾,命令需要单独成行
                  if [ -f /var/run/Nginx.pid ]; then    #判断 Nginx 的 PID。# 默认 logrotate 会以 root 身份运行
                          kill -USR1 cat /var/run/Nginx.pid                  fi
          endscript  }

  [root@192 Nginx]# /usr/sbin/logrotate -f /etc/logrotate.conf
  #创建计划任务:
  [root@192 Nginx]# crontab -e
   59 23 * * * /usr/sbin/logrotate -f /etc/logrotate.conf

               

关于Linux日志系统Sysloglinux日志系统设计代码的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于004-linux下配置rsyslog日志收集服务器案例 rsyslog+loganalyzer日志服务器,无法添加报表模板解决、CentOS集中式日志记录,syslogd,rsyslog,syslog-ng,logstash发送者?、ELK日志系统之使用Rsyslog快速方便的收集Nginx日志、Linux Nginx日志——Nginx日志配置 access_log & error_log & rewrite_log &日志轮转等相关知识的信息别忘了在本站进行查找喔。

本文标签: