通過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.pswp.cn/news/385025.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/385025.shtml
英文地址,請注明出處:http://en.pswp.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;我們給出一個簡單示例…