syslog的使用


1. syslog的配置

1.1. syslog簡介

syslog.conf是syslogd進程的配置文件,將在程序啟動時讀取,默認位置是/etc/syslog.conf.這個配置文件中的空白行和以"#"開頭的行將被忽略."facility.level"部分也被稱為選擇符(seletor). seletor和action之間使用一個或多個空白分隔.它指定了一系列日志記錄規則.規則的格式如下:

seletor(facility.level) action

選擇符(seletor)(選擇符由 facility 和 level 兩部分組成,之間用一個句點(.)連接)

完善的日志分析系統應該能夠通過多種協議(包括syslog等)進行日志采集並對日志分析,因此日志分析系統首先需要實現對多種日志協議的解析。其次,需要對收集到的海量日志信息進行分析,再利用數據挖掘技術,發現隱藏再日志里面的安全問題。

Syslog再UNIX系統中應用非常廣泛,它是一種標准協議,負責記錄系統事件的一個后台程序,記錄內容包括核心、系統程序的運行情況及所發生的事件。Syslog協議使用UDP作為傳輸協議,通過514端口通信,Syslog使用syslogd后台進程,syslogd啟動時讀取配置文件/etc/syslog.conf,它將網絡設備的日志發送到安裝了syslog軟件系統的日志服務器,Syslog日志服務器自動接收日志數據並寫到指定的日志文件中。

1.1.1. linux中日志的類型

(1)info:基本的信息

(2)notice:比info更需注意的信息

(3)warning:警告,提示管理員,但是不會影響系統的進程

(4)error:錯誤,一些比較重要的錯誤信息。例如、某些服務無法啟動

(5)crit:比error要嚴重的一些錯誤

(6)alert:出現這個錯誤,管理員就要注意啦!有可能就會影響到系統

(7)panic:出現這個錯誤,系統就死機啦!什么也做不了了

1.1.2.  facility

可以理解為日志的來源或設備,目前常用的facility有以下幾種:

  auth          #認證相關的
  authpriv        #權限,授權相關的
  cron          #任務計划相關的
  daemon         #守護進程相關
  kern          #內核相關的
  lpr           #打印相關的
  mail          #郵件相關的
  mark          #標記相關的
  news          #新聞相關的
  security        #安全相關的,與auth類似
  syslog         #syslog自己的
  user          #用戶相關的
  uucp          #unix to unix cp相關的
  local0 到 local7   #用戶自定義使用
  *            #表示所有的facility

1.1.3. action(動作)

日志記錄的位置

  系統上的絕對路徑 #普通文件,如:/var/log/xxx
  |            #管道,通過管道送給其它命令處理
  終端           #終端,如:/dev/console
  @HOST          #遠程主機,如:@10.0.0.1
  用戶           #系統用戶,如:root
  *            #登錄到系統上的所有用戶,一般為emerg級別的日志是這樣定義的

1.1.4. 日志定義格式舉例

 mail.info  /var/log/mail.log  #表示將mail相關的,級別為info及info以上級別的信息記錄到/var/log/mail.log文件中
  auth.=info  @10.0.0.1      #表示將auth有關的,級別為info的信息記錄到10.0.0.1主機上去
                      #前提是10.0.0.1要能夠接受其它主機發來的日志信息
  user.!error             #與user.error相反
  *.info                #表示記錄所有的日志信息的info級別
  mail.*                #表示記錄mail相關的所有級別的信息
  *.*                  #記錄所有的日志信息的所有級別
  cron.info;mail.info         #多個日志來源用";"隔開
  cron,mail.info            #與cron.info;mail.info意義相同
  mail.*;mail.!=info         #表示記錄mail相關的除了info級別之外的所有級別的信息

1.1.5. 重啟rsyslog服務

systemctl restart rsyslog

1.2. syslog服務器

1.3. logrotate:系統中進行日志滾動(切割)的工具

https://zhuanlan.zhihu.com/p/90507023

1.4. rsyslog的配置文件

/etc/rsyslog.d/50-default.conf

# Default rules for rsyslog.
#
# For more information see rsyslog.conf(5) and /etc/rsyslog.conf

#
# First some standard log files. Log by facility.
#
auth,authpriv.* /var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog
#cron.* /var/log/cron.log
#daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
#lpr.* -/var/log/lpr.log
mail.* -/var/log/mail.log
#user.* -/var/log/user.log

1.5. 舉例說明

1.5.1. 添加配置文件

# cat /etc/rsyslog.d/30-user.conf
local0.* /var/log/logger.log

1.5.2. 重啟rsyslog

Systemctl restart rsyslog

2. syslog在shell腳本中的應用

#!/bin/bash
echo "***********************************************"
echo "**** -i,記錄進程id"
logger -i "this is a test --i"
logger "this is a test --"
<<!
Jul 12 09:14:32 10-23-97-171 ubuntu[68209]: this is a test --i
Jul 12 09:14:32 10-23-97-171 ubuntu: this is a test --
!

echo -e "\n\n"
echo "***********************************************"
echo "**** -s,輸出標准錯誤,並且將信息打印到系統日志中"
logger -i -s "abc"
echo -e "\n\n"
echo "***********************************************"
echo "**** -t,指定標記記錄,在message日志中可以看到是屬於哪個模塊記錄的日志,-t后面為模塊名稱,加引號或不加都可以。如果不指定-t,都是已root為記錄。"
logger -i -t xuxin -s "this is a test"
logger -i -t "xuxin" -s "this is a test"
logger -i -s "this a test"
<<!
Jul 12 09:15:41 10-23-97-171 xuxin[68263]: this is a test
Jul 12 09:15:41 10-23-97-171 xuxin[68264]: this is a test
Jul 12 09:15:41 10-23-97-171 ubuntu[68265]: this a test
!
echo -e "\n\n"
echo "***********************************************"
echo "**** -p,指定輸入消息日志級別,優先級可以是數字或者指定為 facility.level的格式。比如:-p local3.info local3 這個設備的消息級別為 info。默認級別是 user.notice"
logger -it xuxin -p local0.info "this a test"

3. syslog在C/C++中的應用

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <syslog.h>

int work(long loop_count)
{
while(loop_count-- > 0) {
syslog(LOG_INFO, "loglog");
}
return 0;
}


int test(long process_count, long loop_count)
{
long i;
pid_t pid;

for (i = 0; i < process_count; i++) {
pid = fork();
if (pid < 0) {
printf("fork fail\n");
} else if(pid == 0) {
work(loop_count);
return 0;
}
}

for (i = 0; i < process_count; i++) {
pid = wait(NULL);
}

return 0;
}


int main(int argc, char** argv)
{

if (argc != 3) {
fprintf(stderr, "test nprocess nloop");
exit(1);
}

openlog(NULL, LOG_NDELAY|LOG_NOWAIT|LOG_PID, LOG_LOCAL0);

test(atol(argv[1]), atol(argv[2]));


return 0;
}


免責聲明!

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



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