操作記錄

關於部落格
  • 13495

    累積人氣

  • 0

    今日人氣

    0

    訂閱人氣

Syslog-ng安裝設定

syslog-ng快速安裝

1.關閉syslog
  /etc/init.d/syslog stop
  chkconfig --level 2345 syslog off

2.安裝 eventlog-0.2.5-6
  ftp://ftp.pbone.net/mirror/centos.karan.org/el5/extras/testing/i386/RPMS/eventlog-0.2.5-6.el5.kb.i386.rpm
  # rpm -ivh eventlog-0.2.5-6.el5.kb.i386.rpm

3.安裝 syslog-ng-2.1.3-2
  ftp://ftp.pbone.net/mirror/ftp.silfreed.net/repo/rhel/5/i386/silfreednet/RPMS/syslog-ng-2.1.3-2.el5.i386.rpm
  # rpm -ivh syslog-ng-2.1.3-2.el5.i386.rpm

4.在server端的/etc/syslog-ng/syslog-ng.conf 輸入以下指令

  source s_remote { udp(ip(0.0.0.0) port(514)); };

  將收到的所有log依host分資料夾,再依該log的facility code分別儲存,
  #並設定owner, group, permission, directory permission

  destination hosts { file("/var/log/hosts/$HOST/$FACILITY" owner(root) group(root) perm(0600) dir_perm(0700) create_dirs(yes)); };
  log { source(s_remote); destination(hosts); };

5.開啟syslog-ng
  chkconfig --level 2345 syslog-ng on
  /etc/init.d/syslog-ng start


Syslog-ng安裝

OS:CentOS 5.3

1.安裝 eventlog-0.2.5-6
  ftp://ftp.pbone.net/mirror/centos.karan.org/el5/extras/testing/i386/RPMS/eventlog-0.2.5-6.el5.kb.i386.rpm
  # rpm -ivh eventlog-0.2.5-6.el5.kb.i386.rpm

2.安裝 syslog-ng-2.1.3-2
  ftp://ftp.pbone.net/mirror/ftp.silfreed.net/repo/rhel/5/i386/silfreednet/RPMS/syslog-ng-2.1.3-2.el5.i386.rpm
  # rpm -ivh syslog-ng-2.1.3-2.el5.i386.rpm


server端: 192.168.11.2
client端: 192.168.11.1

client端將log檔記入本機/var/log/inotify.log同時發送一份給server,
當server收到client的log檔後,存到var/log/inotify.1.log

syslog-ng的設定檔:
/etc/syslog-ng/syslog-ng.conf

********************
server端的設定:
建立一個source,IP必須設定成server的IP,port為514,最大連接數10
#for network listening
source s_tcp { tcp(ip(192.168.11.2) port(514) max-connections(10)); };

    --如果要使用UDP,則設成source s_udp { udp(ip(192.168.11.2) port(514) max-connections(10)); };

建立一個目的端
destination d_inotify_1 { file("/var/log/inotify/inotify.1.log");};
建立一個過濾器
filter f_inotify_1 { facility(local2) and (host("host1") or host("host1.supersun.biz") or host("192.168.11.1")); };
寫到log
log { source(s_tcp); filter(f_inotify_1);destination(d_inotify_1); };


    --如果要顯示IP,設定 keep_hostname (no);
    --如果要使用hostname,設定keep_hostname (yes);

********************
client端的設定:
建立兩個目的端,一個syslog主機,一個本機log檔。
destination d_remote { tcp("192.168.11.2" port(514)); };
destination d_inotify { file("/var/log/inotify.log"); };

建立一個過濾器,過濾local2的log檔
filter f_inotify    { facility(local2); };

將local2的log檔寫到本機和syslog主機
log { source(s_sys); filter(f_inotify); destination(d_inotify); };
log { source(s_sys); filter(f_inotify); destination(d_remote); };

這個地方是使用TCP來傳送log檔,所以要更改/etc/services

syslog          514/tcp
將tcp的514 port改為syslog

啟動syslog-ng
service syslog-ng restart

設定syslog-ng開機啟動,並關閉syslog
chkconfig syslog-ng on
chkconfig syslog off

在client端執行以下命令測試一下:
logger "this is a test"

source <sourcename> { sourcedriver params; sourcedriver params; ... };

含義:
引用
<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)); #如果取消註釋,則可以從udp的514端口獲取消息
};


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(*)是無效的。

destination <destname> { destdriver params; destdriver params;  ...  ;};

含義:
引用
<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)); };

※配合使用udp或tcp即可實現集中的日誌服務器。注意,udp函數的寫法上和消息源驅動器中的定義不同。


log  { source S1; source S2; ... filter F1; filter F2; ... destination
      D1; destination D2; ... };


把消息源、過濾器、消息目的組合起來就形成一條完整的指令。日誌路徑中的成員是順序執行的。
凡是來源於指定的消息源,匹配所有指定的過濾器,並送到指定的地址。
※同樣的,每條日誌消息都會經過所有的消息路徑,並不是匹配後就不再往下執行的,請留意。

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);
};

可依照變數來分類存檔
HOST : log消息的來源主機名稱。如果log消息穿過多個主機,並且chain_hostname()功能已經打開,就使用第一個主機名。
FACILITY : log消息來自的日誌設備
PRIOPRITY/LEVEL : log消息的優先級
PROGRAM : 發送log消息的程序
YEAR : 發送log消息的年份,這個變數既可以指定日誌消息送出的時間,
       也可以指定log消息收到的時間。這由use_time_recvd()選項控制
MONTH : 發送log消息的月份
DAY : 發送log消息的日子
HOUR : 時
MIN : 分
SEC : 秒

source s_remote { udp(ip(0.0.0.0) port(514)); };

將收到的所有log依host分資料夾,再依該log的facility code分別儲存,
#並設定owner, group, permission, directory permission

destination hosts { file("/var/log/HOSTS/$HOST/$FACILITY" owner(root) group(root) perm(0600) dir_perm(0700) create_dirs(yes)); };
log { source(s_remote); destination(hosts); };

ip(xxx.xxx.xxx.xxx): 定義綁定的IP地址
port(n):定義綁定的端口
max-connections(n) : 定義最大連接數

※TCP基於連接方式傳輸,不會造成日誌丟失,而UDP則不同。但因為傳統的syslog基於UDP的514端口,所以,UDP方式也經常會使用到。
另外,514也是rshell的默認端口,請注意衝突。
舉例:
引用
destination d_mail { file("/var/log/maillog" sync(10)); };

這裡定義的sync(10)會覆蓋全局配置,表示若寫入的日誌數量達到10,才寫入maillog文件。

Refence:
http://www.suse.url.tw/sles10/lesson9.htm#15
http://linux.vbird.org/linux_basic/0570syslog.php




相簿設定
標籤設定
相簿狀態