通過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”方式導向日志到其他腳本中處理!!






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM