Haproxy中的log的设置原理解析

在理解Haproxy的Log设置原理之前,先来了解下Linux中的系统日志服务。系统日志服务和其他服务一样(如web服务nginx、httpd),也有启动、停止、配置等,运行原理这里不详细介绍了。

下面以centos7为例:

配置

配置文件:/etc/rsyslog.conf
配置目录:/etc/rsyslog.d/
也是在rsyslog.conf中include下rsyslog.d下的所有文件

启动、重启、停止命令

systemctl start rsyslog
systemctl stop rsyslog
systemctl restart rsyslog

命令logger的使用:

logger [options] [messages]

options:

-d, --udp  使用数据报(UDP)而不是使用默认的流连接(TCP)
-i, --id 逐行记录每一次logger的进程ID
-f, --file file_name 记录特定的文件
-h, --help 显示帮助文本并退出
-n, --server 写入指定的远程syslog服务器,使用UDP代替内装式syslog的例程
-P, --port port_num 使用指定的UDP端口。默认的端口号是514
-p, --priority priority_level 
指定输入消息的优先级,优先级可以是数字或者指定为 "facility.level" 的格式。
比如:"-p local3.info " local3 这个设备的消息级别为info。默认级别是 "user.notice"
-s, --stderr 输出标准错误到系统日志。
-t, --tag tag 指定标记记录
-u, --socket socket 写入指定的socket,而不是到内置系统日志例程。
-V, --version 现实版本信息并退出

在-p的选项中,提到 facility.level (设备.级别) ,这个是rsyslog中比较重要的概念的,在配置文件中,也可以看到如下的这些代码:

*.info;mail.none;authpriv.none;cron.none                /var/log/messages
authpriv.*                                              /var/log/secure
mail.*                                                  -/var/log/maillog
cron.*                                                  /var/log/cron
*.emerg                                                 :omusrmsg:*
uucp,news.crit                                          /var/log/spooler
local7.*                                                /var/log/boot.log

代码中每一行的前半部分,表示设备(多个设备用,分隔,也支持*写法,用来匹配多个设备),后半部分表示日志输出的路径。这里的设备,可以理解为消息的标签 或消息的类别。

facility – 设备:

auth:             用户授权
authpriv:         授权和安全
cron:             计划任务
daemon:           系统守护进程
kern:             与内核有关的信息
lpr                与打印服务有关的信息
mail               与电子邮件有关的信息
news               来自新闻服务器的信息
syslog             由syslog生成的信息
user               用户的程序生成的信息,默认
uucp               由uucp生成的信息
local0~7           用来定义本地策略

level – 等级

alert          需要立即采取动作
crit           临界状态
debug          调试
emerg          系统不可用
err            错误状态
error          错误状态
info           正常消息
notice         正常但是要注意

Tips 1:等级自下而上,如果设置notice将获得所有级别的消息,如果设置error,将获得err到alert级别的消息。

Tips 2:从这一行设置中  *.info;mail.none;authpriv.none;cron.none   /var/log/messages得知,所有*.info的消息都会写入到/var/log/message。

了解以上这些之后,我们写个测试的例子:

在配置中增加:

# vim /etc/rsyslog.conf
local0.*   /var/log/haproxy/haproxy.log
# 表示将local0的所有消息写入到文件 /var/log/haproxy/haproxy.log

# systemctl restart rsyslog   #重启rsyslog服务

或者在rsyslog.d/下新增配置文件

#vim /etc/rsyslog.d/haproxy.conf
$ModLoad imudp
$UDPServerRun 514 
local0.*   /var/log/haproxy/haproxy.log
&-

Tips 1:在上面的代码行中有个特殊的符号:&- ,这个到底是做什么用的呢?从上面的规则中,我们了解到日志在写入文件的同时、也会写入message,但作为haproxy来说,仅有一份日志已经足够,如果写入两份,造成系统性能下降,同时占用大量的硬盘空间。

模拟发送日志:

# logger -i -t "haproxy" -p local0.notice "test,test,test"

查看日志内容:

# tail -f /var/log/haproxy/haproxy.log 
Feb 15 05:30:35 localhost haproxy[4640]: test,test,tes

有了以上的知识,下面再来看haproxy的日志设置,就非常容易了。

Haproxy中的log的设置原理解析》上有2条评论

  1. Pingback引用通告: Haproxy中的Log的相关配置详解 | 精彩每一天

  2. Pingback引用通告: php-fpm的配置详解 | 精彩每一天

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>