通过syslog接收远程日志

通过syslog接收远程日志
通过syslog接收远程主机的日志,需要做一些环境配置。
客户机A通过syslog将日志信息发送到服务主机B(或称日志采集服务器)。以下说明配置过程
(我的实验环境是,客户机A:Solaris 10,服务主机B:redhat linux企业服务器版):  www.2cto.com  
客户机A配置:
vi /etc/syslog.conf
*.info;*.!emerg;mail.none;authpriv.none;cron.none /var/log/messages
。。。。。。
# 自定义syslog消息处理方式,这里是发送到远程主机
syslog.info                                     @10.10.65.143
其中,10.10.65.143就是服务主机B的ip地址。  www.2cto.com  
重启syslog:
# svcadm restart system-log
或者
# /etc/init.d/syslog restart
服务器B配置:
首先确定远程发来的消息是哪一级的,比如Panabit发过来的都是emerg级消息,某些路由器用的是notice级。实在不行就先用info然后过滤(具体办法见后文)。
vi /etc/sysconfig/syslog
SYSLOGD_OPTIONS="-r -x -m 0"
-r: 打开接受外来日志消息的功能,其监控514 UDP端口;
-x: 关闭自动解析对方日志服务器的FQDN信息,这能避免DNS不完整所带来的麻烦;
vi /etc/syslog.conf
# 把emerg等级的消息从messages中除开,免得重复记录:
*.info;*.!emerg;mail.none;authpriv.none;cron.none /var/log/messages          # *.!emerg 表示不记录emerg级的消息
#*.emerg    *                   # 注释掉原来的emerg,不将emerg级消息显示到控制台
# 接收远程主机发来的syslog日志信息,输出到/var/log/mylog
syslog.info                                             /var/log/mylog
然后重启syslog:service syslog restart
这样就把远程日志写入/var/log/mylog并且不影响本机syslog工作了。
客户机A上的发送syslog日志小程序:
#include <stdio.h>
#include <syslog.h>
int main(int argc, char* argv[])
{
//openlog(argv[0], LOG_CONS | LOG_PID, LOG_USER);
int count = 0;
while(count<5){
syslog(LOG_SYSLOG | LOG_INFO, "%d:, syslog info test", count);
count++;
}
//closelog();
return 0;
}
客户机A上该程序运行后,在服务器B的/var/log/mylog中查看
[root@localhost socket]# tail -f /var/log/mylog
Jul  1 13:40:35 localhost syslogd 1.4.1: restart (remote reception).
Jul  1 14:12:14 10.10.65.244 a.out[653]: [ID 852416 syslog.info] 0:, syslog info test
Jul  1 14:12:14 10.10.65.244 a.out[653]: [ID 852416 syslog.info] 1:, syslog info test
Jul  1 14:12:14 10.10.65.244 a.out[653]: [ID 852416 syslog.info] 2:, syslog info test
Jul  1 14:12:14 10.10.65.244 a.out[653]: [ID 852416 syslog.info] 3:, syslog info test
Jul  1 14:12:14 10.10.65.244 a.out[653]: [ID 852416 syslog.info] 4:, syslog info test
可见,日志信息已经接收过来了。
【附录】:关于/etc/syslog.conf写法,这里有个详细说明:
/etc/syslog.conf 根据如下的格式定义规则:
facility.level action
设备.优先级 动作
1、facility 定义日志消息的范围,其可使用的key有:
auth -由 pam_pwdb 报告的认证活动。
authpriv -包括特权信息如用户名在内的认证活动
cron -与 cron 和 at 有关的计划任务信息。
daemon -与 inetd 守护进程有关的后台进程信息。
kern -内核信息,首先通过 klogd 传递。
lpr -与打印服务有关的信息。
mail -与电子邮件有关的信息
mark - syslog内部功能用于生成时间戳
news -来自新闻服务器的信息
syslog -由 syslog 生成的信息
user -由用户程序生成的信息
uucp -由 uucp 生成的信息
local0-local7 -与自定义程序使用
* 通配符代表除了 mark 以外的所有功能
除mark为内部使用外,还有security为一个旧的key定义,等同于auth,已经不再建议使用。
2、level级别定义消息的紧急程度。按严重程度由高到低顺序排列为:
emerg -该系统不可用,等同panic
alert -需要立即被修改的条件
crit -阻止某些工具或子系统功能实现的错误条件
err -阻止工具或某些子系统部分功能实现的错误条件,等同error
warning -预警信息,等同warn
notice -具有重要性的普通条件
info -提供信息的消息
debug -不包含函数条件或问题的其他信息
none -没有重要级,通常用于排错
* 所有级别,除了none
其中,panic、error、warn均为旧的标识符,不再建议使用。
在定义level级别的时候,需要注意两点:
1)优先级是由应用程序在编程的时候已经决定的,除非修改源码再编译,否则不能改变消息的优先级;
2)低的优先级包含高优先级,例如,为某个应用程序定义info的日志导向,则涵盖notice、warning、err、crit、alert、emerg等消息。(除非使用=号定义)
3、selector选择条件
通过小数点符号“.”把facility和level连接在一起则成为selector(选择条件)。
可以使用分号“;”同时定义多个选择条件。也支持三个修饰符:
* - 所有日志信息
= - 等于,即仅包含本优先级的日志信息
! - 不等于,本优先级日志信息除外
4、action动作 由前面选择条件定义的日志信息,可执行下面的动作:
file-指定日志文件的绝对路径
terminal 或 print -发送到串行或并行设备标志符,例如/dev/ttyS2
@host -远程的日志服务器
username -发送信息本机的指定用户信息窗口中,但该用户必须已经登陆到系统中
named pipe -发送到预先使用 mkfifo 命令来创建的 FIFO 文件的绝对路径
※注意,不能通过“|/var/xxx.sh”方式导向日志到其他脚本中处理!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/385025.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux syslog服务器配置,自动发日志到另一台日志服务器

1.客户端:168.1.20.66修改/etc/syslog.conf 添加syslog.info 168.1.80.302.日志服务器:168.1.80.30修改/etc/sysconf/syslog 修改SYSLOGD_OPTIONS为 "-r -x -m 0" #-r表示允许接收外来的消息&#xff0c;-x表示不解析DNS, #-m 0表示时间戳标记间隔,如果指定只接…

Make文件(一)

基本规则&#xff1a; 目标&#xff1a;依赖 &#xff08;tab&#xff09;规则 目标&#xff1a;需要生成的目标文件 依赖&#xff1a;生成该目标所需的一些文件 规则&#xff1a;由依赖文件生成目标文件的手段 tab&#xff1a;每条规则前必须以tab开头&#xff0c;使用空格不行…

移植驱动完毕后加载时的version magic报错原因以及解决办法

History:2012-02-17Author:yingru移植rt3070的AP驱动到装有fedora14的PC机上时&#xff0c;模块编译完毕后&#xff0c;加载时提示invalid module format。PC机环境介绍&#xff1a;内核版本&#xff1a;2.6.35.6-45.fc14.i686命令行输入dmesg查看最后的日志&#xff0c;发现如…

/proc 虚拟文件系统(实例)

Linux下有一个神奇的目录/proc&#xff0c;经常会运行 cat /proc/cpuinfo 命令查看cpu信息&#xff0c;/proc下的确有cpuinfo文件&#xff0c;但是这个文件不是物理存在的&#xff0c;是软件虚拟出来的&#xff0c;与普通文件不同&#xff0c;该文件是动态的。通过/proc可以实现…

内核模块中对文件的读写

平时网络部分的东西碰的多些&#xff0c;这块一开始还真不知道怎么写&#xff0c;因为肯定和在用户空间下是不同的。google过后&#xff0c;得到以下答案。一般可以用两种方法&#xff1a;第一种是用系统调用。第二种方法是filp->open()等函数。下面分别来说下这两种方法。1…

Makefile文件试错

1成功&#xff1a; src $(wildcard ./*cpp) obj $(patsubst %.cpp,%.o ,$(src))target test$(target) : $(obj)g $(obj) -o $(target) -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient %.o: %.cppg -c $< -o $ -I/usr/include/mysql -L/usr/lib/mysql/ -lmysql…

内核定时器timer_list使用

Linux内核中提供了timer使用的API&#xff0c;做一个简单的记要。 1. 包含的头文件&#xff1a;linux/timer.h 2. 数据类型&#xff1a;struct timer_list; 包含的主要成员&#xff1a; a. data:传递到超时处理函数的参数&#xff0c;主要在多个定时器同时使用时&#xff0c;区…

内存四区

1.代码区&#xff1a; 代码区Code&#xff0c;程序被操作系统加载到内存的时候&#xff0c;所有的可执行代码都加载到代码区&#xff0c;也叫代码段&#xff0c;这块内存是不可以在运行期间修改的。 2. 静态区 所有的全局变量以及程序中的静态变量都存储在静态区。 #include<…

最高效的进(线)程间通信机制--eventfd

我们常用的进程&#xff08;线程&#xff09;间通信机制有管道&#xff0c;信号&#xff0c;消息队列&#xff0c;信号量&#xff0c;共享内存&#xff0c;socket等等&#xff0c;其中主要作为进程&#xff08;线程&#xff09;间通知/等待的有管道pipe和socketpair。线程还有特…

malloc,calloc,realloc

与堆操作相关的两个函数 malloc #include<stdio.h> #include<stdlib.h> #include<string.h>int main() {char *p malloc(10); //内存随机&#xff0c;未做处理int i;for(i 0; i < 10: i){printf(“%d “,p[i]);} free(p);return 0; } 运行结果&…

Linux内核同步机制之completion

内核编程中常见的一种模式是&#xff0c;在当前线程之外初始化某个活动&#xff0c;然后等待该活动的结束。这个活动可能是&#xff0c;创建一个新的内核线程或者新的用户空间进程、对一个已有进程的某个请求&#xff0c;或者某种类型的硬件动作&#xff0c;等等。在这种情况下…

可变参数函数(一)

一个函数可以接受不定数的参数个数&#xff0c;这就是可变参数函数&#xff0c;比较常见的比如printf(),scanf()&#xff1b; printf(const char* format,…); printf(“%d”,i); printf(“%s”,s); printf(“the number is %d,stirng is :%s”,i,s); 变量参数函数的简单实现&a…

Linux内核线程kernel thread详解--Linux进程的管理与调度

内核线程为什么需要内核线程Linux内核可以看作一个服务进程(管理软硬件资源&#xff0c;响应用户进程的种种合理以及不合理的请求)。 内核需要多个执行流并行&#xff0c;为了防止可能的阻塞&#xff0c;支持多线程是必要的。 内核线程就是内核的分身&#xff0c;一个分身可以处…

可变参数函数(二)

函数样例&#xff1a; #include<stdio.h> #include<stdlib.h> #include<stdarg.h>double add(int n,...) {int i 0;double sum 0;va_list argptr;va_start(argptr,n);for(i 0 ; i < n; i){double d va_arg(argptr,double);printf("%d argument …

Linux 内核网络协议栈 ------sk_buff 结构体 以及 完全解释 (2.6.16)

在2.6.24之后这个结构体有了较大的变化&#xff0c;此处先说一说2.6.16版本的sk_buff&#xff0c;以及解释一些问题。一、先直观的看一下这个结构体~~~~~~~~~~~~~~~~~~~~~~在下面解释每个字段的意义~~~~~~~~~~~[cpp] view plaincopyprint?struct sk_buff { /* These…

可变参数输出(三)

Linux C关于输出函数的定义&#xff1a; int printf(const char *format,…); int vprintf(const char * format,va_list ap); int vfprintf(FILE *stream,cosnt char *format,va_list ap); int vsprintf(char *str,const char *format,va_list ap); int vsnprintf(char *str,s…

最常用的设计模式---适配器模式(C++实现)

适配器模式属于结构型的设计模式&#xff0c;它是结构型设计模式之首&#xff08;用的最多的结构型设计模式&#xff09;。 适配器设计模式也并不复杂&#xff0c;适配器它是主要作用是将一个类的接口转换成客户希望的另外一个接口这样使得原本由于接口不兼容而不能一起工作的那…

Linux 简单打印日志(二)

#include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> //#include<windows.h> #include <unistd.h> // linux下头文件#define FILE_MAX_SIZE (1024*1024)void get_local_time(char* buffer){time_t rawtime;struct …

程序随笔——C++实现的一个线程池

1.线程池简介 我们知道在线程池是一种多线程处理形式&#xff0c;处理过程中我们将相应的任务提交给线程池&#xff0c;线程池会分配对应的工作线程执行任务或存放在任务队列中&#xff0c;等待执行。 面向对象编程中&#xff0c;创建和销毁对象是需要消耗一定时间的&#xff0…

线程池原理及创建并C++实现

本文给出了一个通用的线程池框架&#xff0c;该框架将与线程执行相关的任务进行了高层次的抽象&#xff0c;使之与具体的执行任务无关。另外该线程池具有动态伸缩性&#xff0c;它能根据执行任务的轻重自动调整线程池中线程的数量。文章的最后&#xff0c;我们给出一个简单示例…