suse日誌服務器配置

syslog-ng的主配置文件存放在:/etc/syslog-ng/syslog-ng.conf
1
、架構

syslog-ng的配置基於下面的架構:

LOG STATEMENTSSOURCES  FILTERS DESTINATIONS
消息路徑『消息源-過濾器-目的站』
也就是說,通過定義多個消息源,把匹配上若干個過濾器的消息導向到指定的目的地,從而組成一個消息路徑。

2
、消息源SOURCES
定義格式爲:
source <sourcename> { sourcedriverparams; sourcedriverparams; ... };
含義:
<sourcename>
:一個消息源的標識
sourcedriver
:消息源驅動器,可以支持若干參數,並使用分號隔離多個消息源驅動器
   消息源驅動器有:
       file (filename) :從指定的文件讀取日誌信息
       unix-dgram  (filename) 
:打開指定的SOCK_DGRAM模式的unix套接字,接收日誌消息
       unix-stream (filename) 
:打開指定的SOCK_STREAM模式的unix套接字,接收日誌消息
       udp ( (ip),(port) ) 
:在指定的UDP端口接收日誌消息
       tcp ( (ip),(port) ) 
:在指定的TCP端口接收日誌消息
       sun-streams (filename) 
:在solaris系統中,打開一個(多個)指定的STREAM設備,從其中讀取日誌消息
       internal() 
 syslog-ng內部產生的消息
       pipe(filename),fifo(filename) 
:從指定的管道或者FIFO設備,讀取日誌信息
例如:
source s_sys {
   file ("/proc/kmsg" log_prefix("kernel: "));
   unix-stream ("/dev/log");
   internal();
   # udp(ip(0.0.0.0) port(514)); #
如果取消註釋,則可以從udp514端口獲取消息
};
linux使用/dev/log作爲SOCK_STREAM unix的套接字,BSD使用/var/run/log
參數需要使用括號括住。


3
、過濾器 FILTERS
定義格式爲:
filter <filtername> { expression; };
含義:
<filtername>
:一個過濾器標識
expression
:表達式
表達式支持:邏輯操作符and(和)、or(或)、not(非);
            函數:可使用正規表達式描述內容
    過濾函數有:
    facility(,):根據facility(設備)選擇日誌消息,使用逗號分割多個facility
    level(,)
:根據level(優先級)選擇日誌消息,使用逗號分割多個level,或使用“..”表示一個範圍
    program(regexp)
:日誌消息的程序名是否匹配一個正則表達式
    host(regexp)
:日誌消息的主機名是否和一個正則表達式匹配
    match(regexp)
:對日誌消息的內容進行正則匹配
    filter()
:調用另一條過濾規則並判斷它的值
例如:
filter f_filter2   { level(info..emerg) and
                    not facility(mail,authpriv,cron); };
這裏的level定義info,相當於syslog.=info,並不包括更低的等級;
若需要包括更低的等級,請使用“..”表示一個等級範圍;
另外,filter(DEFAULT),用於捕獲所有沒有匹配上的日誌消息。filter(*)是無效的。


4
、目的地DESTINATIONS
定義格式爲:
destination <destname> { destdriverparams; destdriverparams;  ...  ;};
含義:
<destname>
:一個目的地的標識
destdriver
:目的地驅動器
目的地驅動器有:
      file (filename) :把日誌消息寫入指定的文件
      unix-dgram  (filename) 
:把日誌消息寫入指定的SOCK_DGRAM模式的unix套接字
      unix-stream (filename) 
:把日誌消息寫入指定的SOCK_STREAM模式的unix套接字
      udp  (ip),(port) 
:把日誌消息發送到指定的UDP端口
      tcp (ip),(port) 
:把日誌消息發送到指定的TCP端口
      usertty(username) 
:把日誌消息發送到已經登陸的指定用戶終端窗口
      pipe(filename),fifo(filename) 
:把日誌消息發送到指定的管道或者FIFO設備
      program(parm) 
:啓動指定的程序,並把日誌消息發送到該進程的標準輸入
舉例:
destination d_mesg { file("/var/log/messages"); };
destination d_syslog { udp ("192.168.228.225" port(514)); };
配合使用udptcp即可實現集中的日誌服務器。注意,udp函數的寫法上和消息源驅動器中的定義不同。

5
、消息路徑LOG STATEMENTS
定義格式爲:
log  { source S1; source S2; ... filter F1; filter F2; ... destination
      D1; destination D2; ... };
把消息源、過濾器、消息目的組合起來就形成一條完整的指令。日誌路徑中的成員是順序執行的。凡是來源於指定的消息源,匹配所有指定的過濾器,並送到指定的地址。
同樣的,每條日誌消息都會經過所有的消息路徑,並不是匹配後就不再往下執行的,請留意。

三、選項參數

除了上述的消息路徑定義外,syslog-ng還可以設定一些選項參數以優化其操作。
全局的選項參數,定義在配置文件的開頭位置:
六、參考資料
man syslog-ng.conf
man 8 syslog-ng


options { opt1; opt2; ... };

選項有:
      chain_hostnames(yes|no) 
:是否打開主機名鏈功能,打開後可在多網絡段轉發日誌時有效
      long_hostnames(yes|no) 
:是chain_hostnames的別名,已不建議使用
      keep_hostname(yes|no) 
:是否保留日誌消息中保存的主機名稱,否時,總是使用來源主機來作重寫日誌的主機名
      use_dns(yes|no) 
:是否打開DNS查詢功能,應使用防火牆保護使用syslog-ng的節點安全,並確認所有主機都是可以通過dns解釋的,否則請關閉該選項。
      use_fqdn(yes|no) 
:是否使用完整的域名
      check_hostname(yes|no) 
:是否檢查主機名有沒有包含不合法的字符
      bad_hostname(regexp) 
:可通過正規表達式指定某主機的信息不被接受
      dns_cache(yes|no) 
:是否打開DNS緩存功能
      dns_cache_expire(n) 
DNS緩存功能打開時,一個成功緩存的過期時間
      dns_cache_expire_failed(n) 
DNS緩存功能打開時,一個失敗緩存的過期時間
      dns_cache_size(n) 
DNS緩存保留的主機名數量
      create_dirs(yes|no) 
:當指定的目標目錄不存在時,是否創建該目錄
      dir_owner(uid) 
:目錄的UID
      dir_group(gid) 
:目錄的GID
      dir_perm(perm) 
:目錄的權限,使用八進制方式標註,例如0644
      owner(uid) 
:文件的UID
      group(gid) 
:文件的GID
      perm(perm) 
:文件的權限,同樣,使用八進制方式標註
      gc_busy_threshold(n) :當syslog-ng忙時,其進入垃圾信息收集狀態的時間。一旦分派的對象達到這個數字,syslog-ng就啓動垃圾信息收集狀態。默認值是:3000
      gc_idle_threshold(n) 
:當syslog-ng空閒時,其進入垃圾信息收集狀態的時間。一旦被分派的對象到達這個數字,syslog-ng就會啓動垃圾信息收集狀態,默認值是:100
      log_fifo_size(n) 
:輸出隊列的行數
      log_msg_size(n) 
:消息日誌的最大值(bytes
      mark(n) 
:多少時間(秒)寫入兩行MARK信息供參考,目前沒有實現
      stats(n) 
:多少時間(秒)寫入兩行STATUS信息供,默認值是:600
      sync(n) 
:緩存多少行的信息再寫入文件中,0爲不緩存,局部參數可以覆蓋該值。
      time_reap(n) 
:在沒有消息前,到達多少秒,即關閉該文件的連接
      time_reopen(n) 
:對於死連接,到達多少秒,會重新連接
      use_time_recvd(yes|no) 
:宏產生的時間是使用接受到的時間,還是日誌中記錄的時間;建議使用R_的宏代替接收時間,S_的宏代替日誌記錄的時間,而不要依靠該值定義。
例如:
options {
   sync (0);
   time_reopen (10);
   log_fifo_size (1000);
   long_hostnames (off);
   use_dns (no);
   use_fqdn (no);
   create_dirs (no);
   keep_hostname (yes);
};


四、部分函數的參數
syslog-ng
除了有全局選項參數外,不同的函數還可以定義其參數,其中包括:
   1
、擴展 file的宏
HOST 
日誌消息的源發主機名。如果日誌消息穿過幾個主機,並且chain_hostname()功能已經打開,就使用第一個主機名。
FACILITY 
:日誌消息來自的日誌設備
PRIOPRITY/LEVEL 
:日誌消息的優先級
PROGRAM 
:發送日誌消息的程序
YEAR 
:發送日誌消息的年份,這個宏既可以指定日誌消息送出的時間,也可以指定日誌消息收到的時間。這由use_time_recvd()選項控制
MONTH 
:發送日誌消息的月份
DAY 
:發送日誌消息的日子
HOUR 
:小時
MIN 
:分鐘
SEC 
:秒
       2
 file的參數
例如:log_file_size()、sync()、owner()、perm()等,請參考上面的全局設定
       3
tcpupd的參數
ip
xxx.xxx.xxx.xxx):定義綁定的IP地址
port
n):定義綁定的端口
max-connections
n):定義最大連接數
TCP基於連接方式傳輸,不會造成日誌丟失,而UDP則不同。但因爲傳統的syslog基於UDP514端口,所以,UDP方式也經常會使用到。
另外,514也是rshell的默認端口,請注意衝突。

舉例:
destination d_mail { file("/var/log/maillog" sync(10)); };
這裏定義的sync(10)會覆蓋全局配置,表示若寫入的日誌數量達到10,才寫入maillog文件。

五、關於垃圾收集狀態
當滿足一定的條件,syslog-ng即會進入垃圾收集狀態,而暫時不再接受日誌信息。這時,會造成非連接的傳輸協議的日誌丟失(例如UDP)。通過設置下面兩個選項可以控制:
      gc_idle_threshold(n) 

意思是,一旦被分派的對象到達這個數字,並且當 syslog-ng空閒時(100微秒內沒有日誌消息到達)。此時,syslog-ng就會啓動垃圾信息收集狀態。
已分配的對象可通過-v命令行參數指定其的最小值。而syslog-ng這個值應該比較小,但比已分配的對象要大即可。
例如,  空閒狀態,syslog-ng會顯示:
Nov 13 16:35:35 syslogng syslog-ng[4510]: STATS: dropped 0
Nov 13 16:45:35 syslogng syslog-ng[4510]: STATS: dropped 0
       當忙時:

gc_busy_threshold(n) :當syslog-ng忙時,一旦分派的對象達到這個數字,syslog-ng就進入垃圾信息收集狀態的時間。該值應該比較高,以保證正常情況下不會打斷日誌消息的收取。

=========================================================================================================================================================

    syslog的配置文件
[root@localhost ~]# vim /etc/syslog.conf
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.*                                                 /dev/console
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
#把除郵件、新聞組、授權信息、計劃任務等外的所有通知性消息都寫入messages文件中
# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure
# Log all the mail messages in one place.
mail.*                                                  -/var/log/maillog
##把郵件、新聞組中僅通知性消息寫入info文件,其他信息不寫入,“-”表示支持異步寫入,在有大量日誌需要寫入的時候,日誌能夠先緩存在內存中後寫入到磁盤上。
# Log cron stuff
cron.*                                                  /var/log/cron
#把計劃任務的日誌信息都寫入到/var/log/cron
# Everybody gets emergency messages
*.emerg                                                 *
#通常應廣播到當前所有用戶;
# Save news errors of level crit and higher in a special file.
uucp,news.crit                                          /var/log/spooler
# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log
 
從它配置文件中可以看出日誌文件設置的格式如下
facility.level action
facility定義日誌消息的範圍,常見的facility有kern,authpriv,mail,cron,uucp ,local0-local7 (與自定義程序使用) 和通配*
                                  
level日誌級別:
emerg:emerg 緊急,處於Panic狀態。通常應廣播到所有用戶;
alert:告警,當前狀態必須立即進行糾正。例如,系統數據庫崩潰;
crit:關鍵狀態的警告。例如,硬件故障;
err:阻止工具或某些子系統部分功能實現的錯誤條件,等同error
warning :預警信息,等同warn
notice:具有重要性的普通條件
info:提供信息的消息
debug:不包含函數條件或問題的其他信息
none:沒有重要級,通常用於排錯
action:定義日誌存放的位置
上面就是linux日誌的內容,有時候爲了安全,需要把日誌放到日誌服務器上,下面就設置個簡單日誌服務器.
我使用192.168.1.99做日誌服務器,配置如下:
默認情況下linux主機只接受本機的產生的日誌,所以要開啓99這個主機接受我的另一臺機器產生的日誌
[root@localhost ~]# # vim /etc/sysconfig/syslog
SYSLOGD_OPTIONS="-r -m 0" #修改成這樣
[root@localhost ~]# service syslog restart
[root@localhost ~]# echo  > /var/log/messages  ##清空99主機上日誌記錄
[root@localhost ~]# cat !$
cat /var/log/messages
[root@localhost ~]#
然後我在開一臺機器192.168.1.188讓其產生的日誌都傳到192.168.1.99上,配置如下:
[root@localhost ~]# vim /etc/syslog.conf
*.info;mail.none;authpriv.none;cron.none                @192.168.1.99 ##也可以是域名,但需要dns解析到。
[root@localhost ~]#  echo  > /var/log/messages
[root@localhost ~]# cat !$
cat /var/log/messages
[root@localhost ~]#
[root@localhost ~]#  service syslog restart
Shutting down kernel logger:                               [  OK  ]
Shutting down system logger:                               [  OK  ]
Starting system logger:                                    [  OK  ]
Starting kernel logger:                                    [  OK  ]
此時在99主機上查看日誌記錄:
[root@localhost ~]# cat /var/log/messages
Apr 12 12:18:31 192.168.1.188 syslogd 1.4.1: restart.
Apr 12 12:18:31 192.168.1.188 kernel: klogd 1.4.1, log source = /proc/kmsg started.
記錄已經到99主機上了,這樣一個最簡單沒有經過優化日誌服務器已經建成
日誌服務器不但能夠記錄服務和系統產生的日誌,也可以記錄很多網絡設備產生的日誌。
只需要在日誌服務器上定義
[root@localhost ~]# vim /etc/syslog.conf
local7.info                                             /var/log/route.log
[root@localhost ~]#  service syslog restart
同時在路由器全局模式下設置
 #logging on
 #logging 192.168.1.99
 #logging trap info                                                                        
 #logging facility local7
但是很多時候我們需要考慮日誌服務器的安全
1,不能讓所有的主機都能向日志服務器發送日誌
2,不能能夠讓所有的用戶都能夠連接到日誌服務器
3,日誌的備份等一系列問題
對於前兩條我們可以通過iptables來實現
# iptables -A INPUT -s 192.168.1.188 -p tcp --dport 22 -j ACCEPT
# iptables -A OUTPUT  -s 192.168.1.99 -d 192.168.1.188  -p tcp --dport 22 -j ACCEPT
# iptables -A INPUT -s 192.168.1.188 -d 192.168.1.99 -p udp --dport 514 -j ACCEPT
#iptables -P INPUT DROP
ps:設置後只有188主機的日誌弄夠同步到日誌服務器上,也只要188主機弄夠遠程連接到日誌服務器。
linux使用logrotate來對日誌管理,通常包括日誌備份,刪除,這一過程通常用cron程序來執行
logrotate是個很好用日誌管理工具,他的配置文件有兩部分組成:/etc/logrotate.conf 和:/etc/logrotate.d下所有的文件
[root@localhost logrotate.d]# vim  /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# uncomment this if you want your log files compressed
#compress
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own wtmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    minsize 1M
    create 0664 root utmp
    rotate 1
}
/var/log/btmp {
    missingok
    monthly
    minsize 1M
    create 0600 root utmp
    rotate 1
}
# system-specific logs may be also be configured here.
這是centos默認的配置,可以看出他的語法和簡單,只要明白關鍵字是什麼意識就知道怎樣使用
compress 通過gzip 壓縮轉儲以後的日誌
nocompress 不壓縮以後的日誌
rotate count 指定日誌文件刪除之前轉儲的次數,0 指沒有備份,4指保留4個備份
create mode owner group 轉儲文件,使用指定的文權限,屬主和屬組創建新的日誌文件
nocreate 不建立新的日誌文件
daily 指定轉儲週期爲每天
weekly 指定轉儲週期爲每週
monthly 指定轉儲週期爲每月
copytruncate 用於還在打開中的日誌文件,把當前日誌備份並截斷
nocopytruncate 備份日誌文件但是不截斷
prerotate/endscript在轉儲以前需要執行的命令需要放到這兩關鍵字中間,這兩關鍵字必須單獨成行
postrotate/endscript 在轉儲以後需要執行的命令需要放到這兩關鍵字中間,這兩關鍵字必須單獨成行
missingok:如果日誌文件丟失,進入到下一個不發出錯誤消息
sharedscripts 一個腳本可以運行日誌文件條目多次匹配多個文件
include就是包括/etc/logrotate.d下的配置文件,同時/etc/logrotate.d下的配置文件設置屬性的高於/etc/logrotate.conf 設置的,所有當兩者有衝突的時候,優先使用/etc/logrotate.d下的配置文件下的設置,我們自己定義(無論是網絡設備還服務)的日誌管理都可以按照下面格式來定義。
[root@localhost logrotate.d]# cat syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
        /bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}
[root@localhost logrotate.d]# cat httpd
/var/log/httpd/*log {
    missingok
    notifempty
    sharedscripts
    postrotate
        /sbin/service httpd reload > /dev/null 2>/dev/null || true
    endscript
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章