16

nginx日志syslog同步

 3 years ago
source link: http://zdb.im/archives/191.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

第一个日志文件叫messages。所以每隔一段时间,将文件重命名(如:将messages重命名为messages.1),再重新创建一个文件叫messages。
以此类推,下一次messages.1重命名为messages.2,message重命名为messages.1,再新建一个messages...

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记录并放置于文件中)

syslog 配置文件 /etc/syslog.conf

每一行用来指定 每一个facility子系统 产生的哪个priority级别的日志 记录到什么action位置上去

配置文件定义格式为:  facility.priority    action action前若加减少-表示异步写入

例如:

user.info  /var/log/db2/user_messages.log
mail.crit  /dev/console
*.debug /var/log/all_messages.log
auth.warning @host123.torolab.ibm.com

#
# Logging for INN news system.
#
news.crit           /var/log/news/news.crit
news.err            /var/log/news/news.err
news.notice         -/var/log/news/news.notice

syslogd记录的信息存放位置:

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

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

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

 service syslog restart
 service syslog reload




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(动作):日志记录的位置

  系统上的绝对路径        #普通文件,如:/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/syslconfig/syslog中加入SYSLOGD_OPTIONS="-r -c 5" 即-r选项并重启服务可实现将本机作为日志服务器使用(可接受其它主机的日志信息)
syslog传送日志的端口是UDP的514端口防火墙在默认的情况下是阻止所有的;关闭 service iptables stop和chkconfig iptables off

日志生产者
vi /etc/syslog.conf
*.* @10.0.0.1

格式: 日志的类型.日志的级别 日志存放的位置 
*表示所有的日志类型.所有的日志的级别的日志都将存放在10.0.0.1这台日志服务器上

service syslog restart

验证

cat /var/log/secure
Jun 8 00:58:05 10.0.0.2 useradd[15463]: new group: name=redhat, GID=500
Jun 8 00:58:05 10.0.0.2 useradd[15463]: new user: name=redhat, UID=500, GID=500, home=/home/redhat, shell=/bin/bash

nginx配置

# syslog表示使用syslog协议
# server=10.26.2.65 指明远程服务器地址,也可以指定本地
# facility=local7  设施,指明设备管道使用local7
# tag=nginx 标签表示在日志文件中显示时候的标题
# severity=info 表示日志级别
access_log syslog:server=10.26.2.65,facility=local7,tag=nginx,severity=info;

/etc/syslog.conf

自定义日志内容

log_format common "$remote_addr,$http_ip,$http_mac,$time_local,$status,$request_length,$bytes_sent,$body_bytes_sent,$http_user_agent,$http_referer,$request_method,$request_time,$request_uri,$server_protocol,$request_body,$http_token";
 
log_format main "$remote_addr,$http_ip,$http_mac,$time_local,$status,$request_length,$bytes_sent,$body_bytes_sent,$http_user_agent,$http_referer,$request_method,$request_time,$request_uri,$server_protocol,$request_body,$http_token";
     
access_log  logs/access.log  common;
 
access_log syslog:server=192.168.1.100:9999,facility=local7,tag=nginx,severity=info main;

map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
 }

扩展: PHP使用syslog日志

$facilities = array(
    LOG_AUTH,
    LOG_AUTHPRIV,
    LOG_CRON,
    LOG_DAEMON,
    LOG_KERN,
    LOG_LOCAL0, // 0-7
    LOG_LPR,
    LOG_MAIL,
    LOG_NEWS,
    LOG_SYSLOG,
    LOG_USER,
    LOG_UUCP,
);

openlog('test',NULL,LOG_LOCAL4); // https://www.php.net/manual/zh/function.openlog.php
syslog(LOG_WARNING,'msg'); // https://www.php.net/manual/zh/function.syslog.php
closelog();

openlog ( string $ident , int $option , int $facility ) : bool
syslog ( int $priority , string $message ) : bool
closelog ( void ) : bool 关闭用于通信的描述符并写入系统日志。closelog()是可选的。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK