歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Unix知識 >> 關於Unix

Solaris學習筆記:關於Solaris的syslog機制

syslog機制負責發送、記錄系統內核及工具所產生的信息,由syslog()調用、syslogd守護進程和配置文件/etc/syslog.conf組成。當系統內核及工具產生信息時,通過調用syslog(),把信息送往syslogd,syslogd再根據/etc/syslog.conf中的配置要求,將這些信息分別作
  syslog機制負責發送、記錄系統內核及工具所產生的信息,由syslog()調用、syslogd守護進程和配置文件/etc/syslog.conf組成。當系統內核及工具產生信息時,通過調用syslog(),把信息送往syslogd,syslogd再根據/etc/syslog.conf中的配置要求,將這些信息分別作如下處理:
  1.記錄到系統日志中;
  2.輸出到系統控制台上;
  3.轉發給指定的用戶;
  4.通過網絡轉發給其它主機上的syslogd。
  通過syslog.conf的配置,我們可以靈活地對信息的發送和保存進行控制。
  
  syslogd進程在系統啟動時由/etc/rc2.d/S74syslog啟動。如果需要手工啟動或停止syslogd,可以使用命令:
  # /etc/init.d/syslog start | stop
  
  /etc/syslog.conf文件中的一項配置記錄由“選項”(selector)和“動作”(action)兩個部分組成,兩者間用tab制表符進行分隔。而“選項”又由一個或多個形如“類型.級別”格式的保留字段組合而成,各保留字段間用分號分隔。
  
  保留字段中的“類型”代表信息產生的源頭,可以是:
  kern 由kernel產生的信息;
  user 由用戶進程產生的信息。對那些由程序或不在此列出的工具產生的信息,其缺省類型都是“user”;
  mail 郵件系統產生的信息;
  daemon 系統守護進程的信息,如in.ftpd、te.netd;
  auth 由login, su, getty等進行身份認證時產生的信息;
  syslog 由syslogd自己內部產生的信息;
  lpr 行打印spooling系統的信息;
  news USENET 網絡新聞系統的信息;
  uucp UUCP系統信息;
  cron cron和at工具信息;
  local0-7 保留為local使用;
  mark syslogd內部產生的時間戳信息;
  * 除mark之外的所有其它類型(此符號不可用以代表所有級別)。
  
  保留字段中的“級別”代表信息的重要性,可以是:
  emerg 緊急,處於Panic狀態。通常應廣播到所有用戶;
  alert 告警,當前狀態必須立即進行糾正。例如,系統數據庫崩潰;
  crit 關鍵狀態的警告。例如,硬件故障;
  err 其它錯誤;
  warning 警告;
  notice 注意;非錯誤狀態的報告,但應特別處理;
  info 通報信息;
  debug 調試程序時的信息;
  none 通常調試程序時用,指示帶有none級別的類型產生的信息無需送出。如*.debug;mail.none表示調試時除郵件信息外其它信息都送出。
  
  “動作”域指示信息發送的目的地。可以是:
  /filename 日志文件。由絕對路徑指出的文件名,此文件必須事先建立;
  @host 遠程主機;
  user1, user2 指定用戶。如果指定用戶已登錄,那麼他們將收到信息;
  * 所有用戶。所有已登錄的用戶都將收到信息。
  
  我們來看看/etc/syslog.conf文件中的實例:
  ……
  *.err;kern.debug;daemon.notice;mail.crit /var/adm/messages
  ……
  
  這行中的“action”就是我們常關心的那個/var/adm/messages文件,輸出到它的信息源頭“selector”是:
  *.err - 所有的一般錯誤信息;
  kern.debug - 核心產生的調試信息;
  daemon.notice - 守護進程的注意信息;
  mail.crit - 郵件系統的關鍵警告信息
  
  於是我們對/var/adm/messages中的東東怎麼來的大致清楚一點了。再看下面(不理會那個注釋符號“#”):
  ……
  # if a non-loghost machine chooses to have authentication messages
  # sent to the loghost machine, un-comment out the following line:
  #auth.notice ifdef(‘LOGHOST’, /var/log/authlog, @loghost)
  ……
  
  這裡涉及Solaris下的loghost和m4宏解釋器。loghost好理解,就是在局域網內多台SUN機器中指定一台作為loghost,大家的syslogd有水就都往它上面灌。具體誰是loghost在/etc/hosts中定義:
  ……
  192.168.1.11 host1 loghost
  192.168.1.22 host2
  ……
  
  m4負責解釋ifdef,它的事跡這裡就不去深究了(要考SA的兄弟姐妹們可要去看啊,有題的),反正上面那個ifdef的意思就是:如果本機是loghost,那麼信息送到/var/log/authlog中,否則送到@後的主機上。
  
  下面作為一個示例,看看如何使用syslog機制來對telnet登錄進行記錄。
  Telnet和ftp等許多網絡服務是通過inetd來提供的。因此先檢查一下inetd使用了什麼類型和級別的syslog調用:
  
  # man inetd
  ……
  -t Instructs inetd to trace the incoming
  connections for all of its TCP services. It does this by
  logging the client’s IP address and TCP port number,
  along with the name of the service, using the syslog(3)
  facility. UDP services can not be traced. When tracing is
  enabled, inetd uses the syslog facility code ``daemon’’
  and ``notice’’ priority level.
  ……
  
  就是說,啟動帶-t選項的inetd,它才會調用syslog來記錄TCP服務的細節,類型是daemon,級別是notice。於是先修改inetd的啟動腳本/etc/init.d/inetsvc,找到inetd那行,改為:
  /usr/sbin/inetd -s -t &
  
  前面看到,daemon.notice已經包括在syslog.conf中,action是/var/adm/messages。如果action不想變,那麼就不用做修改了。
  
  重啟一下syslogd:
  # /etc/init.d/syslog stop
  # /etc/init.d/syslog start
  
  重啟一下inetd:
  # /etc/init.d/inetsvc stop
  # /etc/init.d/inetsvc start
  
  試驗一下結果。開一個窗口監視有沒有新的message來:
  # tail -f /var/adm/messages
  
  從另一台機器上telnet或ftp上來。上面的監視窗口中應該有輸出(^C 終止監視):
  ……
  Jun 18 12:08:42 host1 inetd[755]: [ID 317013 daemon.notice] ftp[759] from 192.168.1.88 1082
  Jun 18 12:09:13 host1 inetd[755]: [ID 317013 daemon.notice] telnet[760] from 192.168.1.88 1083
  Jun 18 12:11:22 host1 inetd[755]: [ID 317013 daemon.notice] ftp[771] from 192.168.1.88 1084
  
  對軟件開發者來說,可以參考關於syslog()的有關資料,將你的軟件中的信息進行適當的syslog()調用,以輸出到所希望的地方.

Copyright © Linux教程網 All Rights Reserved