将分布式中多台节点的日志信息集中到一个节点上

转载:http://my.oschina.net/duxuefeng/blog/317570

1,准备
master:10.1.5.241
slave01:10.1.5.242

在服务器端和客户端分别安装rsyslog
[root@master ~]# yum -y rsyslog
[root@master ~]# rsyslogd -version
rsyslogd 5.8.10, compiled with:
    FEATURE_REGEXP:                Yes
    FEATURE_LARGEFILE:            No
    GSSAPI Kerberos 5 support:        Yes
    FEATURE_DEBUG (debug build, slow code):    No
    32bit Atomic operations supported:    Yes
    64bit Atomic operations supported:    Yes
    Runtime Instrumentation (slow code):    No

See http://www.rsyslog.com for more information.

2,配置

配置文件如下:
[root@master ~]# egrep -v ‘^#|^$‘ /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
$ModLoad imtcp                                        打开tcp连接,通过tcp传日志
$InputTCPServerRun 10514                 
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/*.conf
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
authpriv.*                                              /var/log/secure
mail.*                                                  -/var/log/maillog
cron.*                                                  /var/log/cron
*.emerg                                                 *
uucp,news.crit                                          /var/log/spooler
local7.*                                                /var/log/boot.log

例子1,
简单配置:将所有系统log都放入服务器端下的/var/log/all.log下。
配置:
服务器:
/etc/rsyslog.conf文件最后添加
*.*                                    /var/log/all.log
[root@master ~]# /etc/init.d/rsyslog restart

客户端:
/etc/rsyslog.conf文件最后添加
*.*                                    @@10.1.5.241:10514    通过tcp传
[[email protected] ~]# /etc/init.d/rsyslog restart

测试:
tail -f /var/log/all.log

例子2,
自定义测试,
配置:
服务器:
/etc/rsyslog.conf文件最后添加
:fromhost,isequal, “slave01″ /var/log/all.log            #过滤来自lave01的日志,放入/var/log/all.log
:fromhost,isequal, “slave01″ ~

[[email protected] ~]# /etc/init.d/rsyslog restart

客户端:
*.*                    @10.1.5.241:514                     #通过udp传

[[email protected] ~]# /etc/init.d/rsyslog restart

测试:
[[email protected] ~]# logger "hello world"           
[[email protected] ~]# tail -f /var/log/all.log

例子3,
自定义测试,
配置:
服务器:
/etc/rsyslog.conf文件最后添加
local5.*        /var/log/all.log            #过滤local5级别的日志,放入/var/log/all.log
local5.*        ~

[[email protected] ~]# /etc/init.d/rsyslog restart

客户端:
local5.*                    @10.1.5.241:514                     #通过udp传

[[email protected] ~]# /etc/init.d/rsyslog restart

测试:
[[email protected] ~]# logger -p local5.info  "hello world"          # 这里必须指定local5级别
[[email protected] ~]# tail -f /var/log/all.log

例子4,
自定义测试,
配置:
服务器:
/etc/rsyslog.conf文件最后添加
$template logfile,    "/var/log/logfile_%$year%%$month%%$day%.log"
:msg,contains,        "muyushan"            ?logfile

[[email protected] ~]# /etc/init.d/rsyslog restart

客户端:
:msg,contains,        "muyushan"                @@10.1.5.241:10514                     #通过tdp传

[[email protected] ~]# /etc/init.d/rsyslog restart

测试:
[[email protected] ~]# logger -t muyushan  "hello world"          # 在日志正文每行记录加上“muyushan”标签
[[email protected] ~]# tail -f /var/log/all.log

例子5,
apache日志管理
配置:
服务器:
mkdir /data/apache/logs
chown apache:apache /data/apache/logs

/etc/rsyslog.conf文件最后添加

$template access_log, "%msg:2:$%\n"
$template error_log, "%msg%\n"

# web1-access-log
$template access_log_file_web1, "/data/apache/logs/%$NOW%/access-log/web1-access_log"
# web1-error-log
$template error_log_file_web1, "/data/apache/logs/%$NOW%/error-log/web1-error_log"

# web1-access-log
if $syslogfacility-text == ‘local6‘ and $syslogtag == ‘http-access:‘ and $fromhost-ip == ‘10.1.5.241‘ then -?access_log_file_web1;access_log

# web1-error-log
if $syslogfacility-text == ‘local6‘ and $syslogtag == ‘http-error:‘ and $fromhost-ip == ‘10.1.5.241‘ then -?error_log_file_web1;error_log

[[email protected] ~]# /etc/init.d/rsyslog restart

客户端:
vim /etc/http/conf/httpd.conf
 找到以下选项并将此选项标注#
CustomLog logs/access_log combined
ErrorLog logs/error_log
分别在此2个选项下添加如下内容
CustomLog "|/usr/bin/logger -p local6.info -t http-access" combined
ErrorLog "| /usr/bin/logger -p local6.info -t http-error"

/etc/rsyslog.conf文件最后添加
local5.*        /var/log/all.log            #过滤local5级别的日志,放入/var/log/all.log
local5.*        ~

[[email protected] ~]# /etc/init.d/rsyslog restart

测试:
[[email protected] ~]# tail -f /data/apache/logs/%$NOW%/access-log/web1-access_log
[[email protected] ~]# tail -f /data/apache/logs/%$NOW%/error-log/web1-error_log

附录:

  • 日志设备(可以理解为日志类型)
日志设备/类型 说明
auth –pam产生的日志
authpriv –ssh,ftp等登录信息的验证信息
cron –时间任务相关
kern –内核
lpr –打印
mail –邮件
mark(syslog) –rsyslog服务内部的信息,时间标识
news –新闻组
user –用户程序产生的相关信息
uucp –unix to unix copy, unix主机之间相关的通讯
local 1~7 –自定义的日志设备
  • 日志级别

从上到下,级别从低到高,记录的信息越来越少 详细的可以查看手册: man 3 syslog

级别 说明 级别值
debug –有调式信息的,日志信息最多 7
info –一般信息的日志,最常用  
notice –最具有重要性的普通条件的信息  
warning –警告级别 4
err –错误级别,阻止某个功能或者模块不能正常工作的信息  
crit –严重级别,阻止整个系统或者整个软件不能正常工作的信息  
alert –需要立刻修改的信息  
emerg –内核崩溃等严重信息  
none –什么都不记录  
  • 连接符号
连接符号 说明
.xxx 表示大于等于xxx级别的信息
.=xxx 表示等于xxx级别的信息
.!xxx 表示在xxx之外的等级的信息

示例:

 :msg,contains,"error"        # 选择包含 error 的日志
 :hostname,isequal, "host1"   # 选择主机名为 host1 的日志
 :msg,!regex,"fatal .* error" # 选择不匹配指定正则表达式的日志

logger的使用

logger 是一个shell 命令接口,可以通过该接口使用Syslog的系统日志模块,还可以从命令行直接向系统日志文件写入一行信息。

logger -it error  -p local5.info "hello world"

-i 在每行都记录进程ID

-t 日志中的每一行都加一个error标签

-p 指定自定义的日志设备,和配置文件的local5.*对应,配置文件里没有.info。

说明,如果是自己写的程序,在生成日志的代码中需要用logger命令转到系统的日志接口。

时间: 2024-08-26 15:03:24

将分布式中多台节点的日志信息集中到一个节点上的相关文章

winform中使用TextBox滚动显示日志信息

代码如下: private void ShowInfo(string msg) { this.BeginInvoke((Action)(() => { textBox1.AppendText(string.Format("{0} {1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), msg)); textBox1.AppendText(Environment.NewLine); textBox1.ScrollT

log4j(三)——如何控制不同级别的日志信息的输出?

一:测试环境与log4j(一)--为什么要使用log4j?一样,这里不再重述 二:老规矩,先来个栗子,然后再聊聊感受 import org.apache.log4j.*; public class UseLog4j { //日志记录器 private static Logger LOGGER = LogManager.getLogger(UseLog4j.class); //程序入口--主函数 public static void main(String[]args){ //设置日志信息的格式化

(转)log4j(三)——如何控制不同级别的日志信息的输出?

一:测试环境与log4j(一)——为什么要使用log4j?一样,这里不再重述 1 老规矩,先来个栗子,然后再聊聊感受 package test.log4j.test3; import org.apache.log4j.*; //by godtrue public class UseLog4j { //日志记录器 private static Logger LOGGER = LogManager.getLogger(UseLog4j.class); //程序入口——主函数 public stati

配置log4j日志信息

一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使用这三个组件可以轻松地记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置. 1.Loggers Loggers组件在此系统中被分为五个级别:DEBUG.INFO.WARN.ERROR和FATAL.这五个级别是有顺序的,DEBUG < INFO < WARN < ERROR <

双链表删除一个节点

写了一个删除双链表节点的程序,在这里记录一下,直接上代码,代码中的主要步骤都有注释. 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include <assert.h> 5 typedef struct NODE{ 6 struct NODE *prior; 7 struct NODE *next; 8 int value; 9 }Node; 10 void print

剑指offer(57)二叉树的下一个节点

题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 题目分析 这题一定要画图,因为只有画图我们才能分清楚下一个节点有哪些情况 1.如果一个节点有右子树,那么它的下一个节点就是它的右子树中的最左子节点.也就是说,从右子节点出发一直沿着指向左子节点的指针,我们就能找到下一个节点. 2.如果没有右子树,又可以分为两种情况 如果节点是它父节点的左子节点,那么它的下一个节点就是它的父节点. 如果一个节点既没有右子

面试题8:二叉树的下一个节点

一.题目 给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点?树中的结点除了有两个分别指向左右子结点的指针以外,还有一个指向父结点的指针. 二.思路 分析题目之后,我们发现,待处理节点只存在三种状态,我们分别处理即可: 待处理节点有右子树.那么它的下一个节点为其右子树的最左子节点,如上图节点3的下一个节点为8: 待处理节点无右子树,且是父节点的左节点.那么它的下一个节点为其父节点,如上图节点5的下一个节点为3: 待处理节点无右子树,且是父节点的右节点.我们可以沿着它的父节点向上遍历

剑指Offer——二叉树的下一个节点

1.题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 2.代码实现 /* public class TreeLinkNode { int val; TreeLinkNode left = null; TreeLinkNode right = null; TreeLinkNode next = null; 指向父节点 TreeLinkNode(int val) { this.val = val; } }

LeetCode OJ:Populating Next Right Pointers in Each Node II(指出每一个节点的下一个右侧节点II)

Follow up for problem "Populating Next Right Pointers in Each Node". What if the given tree could be any binary tree? Would your previous solution still work? Note: You may only use constant extra space. For example,Given the following binary tr