Syslog-ng

簡介

先簡單介紹一下syslog-ng

看到syslog-ng不由的會想到syslog侧馅。其實syslog-ng就是syslog的升級版制市,當然允粤,功能也比syslog強大。比如:高性能问芬、支持多平臺悦析、高可靠的傳輸、眾多的用戶群體此衅、強大的日志過濾强戴、排序。

安裝syslog-ng

系統(tǒng)環(huán)境:CentOS7

我們yum安裝挡鞍,首先添加包含syslog-ng的最新非官方版本的repo骑歹。將repo文件下載到/etc/yum.repos.d/,以便安裝和啟用syslog-ng:

cd /etc/yum.repos.d/

wget https://copr.fedorainfracloud.org/coprs/czanik/syslog-ng321/repo/epel-7/czanik-syslog-ng321-epel-7.repo

yum install syslog-ng

yum install syslog-ng-http

systemctl enable syslog-ng

systemctl start syslog-ng


雖然并非嚴格要求墨微,但如果您同時刪除rsyslog道媚,則可以避免一些混淆:

yum erase rsyslog


安裝啟動好以后,最終要的部分來了翘县,那就是配置最域。

用yum安裝的配置文件路徑為/etc/syslog-ng/syslog-ng.conf。

整個配置文件大致分為全局配置炼蹦、消息源、過濾器狸剃、消息目的地和日志路徑幾部分掐隐。

全局配置:

options{opt1;opt2;...};

chain_hostnames(yes|no)# 是否打開主機名鏈功能,打開后可在多網(wǎng)絡段轉發(fā)日志時有效

long_hostnames(yes|no)# 是chain_hostnames的別名,已不建議使用

keep_hostname(yes|no)# 是否保留日志消息中保存的主機名稱

use_dns(yes|no)# 是否打開DNS查詢功能虑省,

use_fqdn(yes|no)# 是否使用完整的域名

check_hostname(yes|no)# 是否檢查主機名有沒有包含不合法的字符

bad_hostname(regexp)# 可通過正規(guī)表達式指定某主機的信息不被接受

dns_cache(yes|no)# 是否打開DNS緩存功能

dns_cache_expire(n)# DNS緩存功能打開時匿刮,一個成功緩存的過期時間

dns_cache_expire_failed(n)# DNS緩存功能打開時,一個失敗緩存的過期時間

dns_cache_size(n)# DNS緩存保留的主機名數(shù)量

create_dirs(yes|no)# 當指定的目標目錄不存在時探颈,是否創(chuàng)建該目錄

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忙時,其進入垃圾信息收集狀態(tài)的時間一旦分派的對象達到這個數(shù)字怀大,syslog-ng就啟動垃圾信息收集狀態(tài)纱兑。默認值是:3000。

gc_idle_threshold(n)# 當syslog-ng空閑時化借,其進入垃圾信息收集狀態(tài)的時間一旦被分派的對象到達這個數(shù)字潜慎,syslog-ng就會啟動垃圾信息收集狀態(tài),默認值是:100

log_fifo_size(n)# 輸出隊列的行數(shù)

log_msg_size(n)# 消息日志的最大值(bytes)

mark(n)# 多少時間(秒)寫入兩行MARK信息供參考蓖康,目前沒有實現(xiàn)

stats(n)# 多少時間(秒)寫入兩行STATUS信息,默認值是:600

sync(n)# 緩存多少行的信息再寫入文件中铐炫,0為不緩存,局部參數(shù)可以覆蓋該值蒜焊。

time_reap(n)# 在沒有消息前倒信,到達多少秒,即關閉該文件的連接

time_reopen(n)# 對于死連接山涡,到達多少秒堤结,會重新連接

use_time_recvd(yes|no)# 宏產(chǎn)生的時間是使用接受到的時間,還是日志中記錄的時間鸭丛;建議使用R_的宏代替接收時間竞穷,S_的宏代替日志記錄的時間,而不要依靠該值定義鳞溉。


消息源:

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

internal()# syslog-ng內部產(chǎn)生的消息

file()# 從指定的文件讀取日志信息

pipe()# 從指定的管道瘾带,讀取日志信息

fifo()# 從指定的FIFO設備,讀取日志信息

program()# 打開指定的應用程序熟菲,從它的標準輸出讀取消息

sun-stream(), sun-streams()# 在solaris系統(tǒng)中看政,打開一個(多個)指定的STREAM設備,從其中讀取日志消息

tcp(), tcp6()# 在指定的TCP端口接收日志消息

udp(), udp6()# 在指定的UDP端口接收日志消息

unix-dgram()# 打開指定的SOCK_DGRAM模式的unix套接字抄罕,接收日志消息

unix-stream()# 打開指定的SOCK_STREAM模式的unix套接字允蚣,接收日志消息


過濾器:

filter<filtername>{expression;};

facility()# 根據(jù)facility(設備)選擇日志消息

filter()# 調用另一條過濾規(guī)則

host()# 日志消息的主機名是否和一個正則表達式匹配

level()or priority()# 根據(jù)level(優(yōu)先級)選擇日志消息消息目的地:

match()# 對日志消息的內容進行正則匹配


消息目的地:

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

file()# 把日志消息寫入指定的文件

pipe()# 把日志消息發(fā)送到指定的管道

fifo()# 把日志消息發(fā)送到指定的FIFO設備

program()# 啟動指定的程序,并把日志消息發(fā)送到該進程的標準輸入

sql()# 把日志消息寫入數(shù)據(jù)庫呆贿,適用于3.x版本及更高版本的syslog-ng

tcp()and tcp6()# 把日志消息發(fā)送到指定的TCP端口

udp()and udp6()# 把日志消息發(fā)送到指定的UDP端口

unix-dgram()# 把日志消息寫入指定的SOCK_DGRAM模式的unix套接字

unix-stream()# 把日志消息寫入指定的SOCK_STREAM模式的unix套接字

usertty()# 把日志消息發(fā)送到已經(jīng)登陸的指定用戶終端窗口


消息路徑:

log{sourceS1;sourceS2;...filter F1;filter F2;... destination D1;destination D2;...};


單機配置:

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

};

source s_sys {

????file ("/proc/kmsg"log_prefix("kernel:"));

????unix-stream ("/dev/log");

????internal();

????# udp(ip(0.0.0.0) port(514));

};

destination d_cons {file("/dev/console"); };

destination d_mesg {file("/var/log/messages"); };

destination d_auth { file("/var/log/secure");};

destination d_mail {file("/var/log/maillog"sync(10)); };

destination d_spol {file("/var/log/spooler"); };

destination d_boot {file("/var/log/boot.log"); };

destination d_cron {file("/var/log/cron"); };

destination d_kern { file("/var/log/kern");};

destination d_mlal {usertty("*"); };

filter f_kernel????{ facility(kern); };

filter f_default???{

????level(info..emerg) and

????not (facility(mail)

????or facility(authpriv)

????or facility(cron));

};

filter f_auth??????{ facility(authpriv); };

filter f_mail??????{ facility(mail); };

filter f_emergency?{ level(emerg); };

filter f_news??????{

????facility(uucp) or

????(facility(news)

????andlevel(crit..emerg));

};

filter f_boot?? {facility(local7); };

filter f_cron?? {facility(cron); };

#log { source(s_sys);filter(f_kernel);destination(d_cons); };

log { source(s_sys);filter(f_kernel); destination(d_kern);};

log { source(s_sys);filter(f_default); destination(d_mesg);};

log { source(s_sys);filter(f_auth); destination(d_auth); };

log { source(s_sys);filter(f_mail); destination(d_mail); };

log { source(s_sys);filter(f_emergency); destination(d_mlal);};

log { source(s_sys);filter(f_news); destination(d_spol); };

log { source(s_sys);filter(f_boot); destination(d_boot); };

log { source(s_sys);filter(f_cron); destination(d_cron); };


日志入庫:

創(chuàng)建需要的庫

CREATE DATABASE syslog;

USE syslog;

CREATE TABLE logs (

????host varchar(32) default NULL,

????facility varchar(10) defaultNULL,

????priority varchar(10) defaultNULL,

????level varchar(10) default NULL,

????tag varchar(10) default NULL,

????date date default NULL,

????time time default NULL,

????program varchar(15) default NULL,

????msg text,

????seq int(10) unsigned NOT NULLauto_increment,

????PRIMARY KEY (seq),

????KEY host (host),

????KEY seq (seq),

????KEY program (program),

????KEY time (time),

????KEY date (date),

????KEY priority (priority),

????KEY facility (facility)

) TYPE=MyISAM;

mkfifo /tmp/mysql.pipe

source s_sys {

????file ("/proc/kmsg"log_prefix("kernel: "));

????unix-stream ("/dev/log");

????internal();

????udp(ip(0.0.0.0) port(514));

};

destination d_mysql {

????program("/usr/bin/mysql-uroot syslog < /tmp/mysql.pipe");

????pipe("/tmp/mysql.pipe"

????template("INSERT INTO logs(host, facility, priority, level, tag, date,

????time, program, msg) VALUES ('$HOST', '$FACILITY', '$PRIORITY', ????'$LEVEL','$TAG',

????'$YEAR-$MONTH-$DAY','$HOUR:$MIN:$SEC', '$PROGRAM', '$MSG' );\n") ????template-escape(yes));

};

log { source(s_sys);destination(d_mysql); };


實例:

#全局的選項參數(shù)嚷兔,定義在配置文件的開頭位置:

options {

? ?sync (0); #緩存多少行的信息再寫入文件中森渐,0為不緩存,局部參數(shù)可以覆蓋該值冒晰。

? ?time_reopen (10); #對于死連接同衣,到達多少秒,會重新連接

? ?log_fifo_size (1000); #輸出隊列的行數(shù)

? ?use_dns (no); #是否打開DNS查詢功能壶运,應使用防火墻保護使用syslog-ng的節(jié)點安全耐齐,并確認所有主機都是可以通過dns解釋的,否則請關閉該選項蒋情。

? ?use_fqdn (no); #是否使用完整的域名

? ?create_dirs (yes); #當指定的目標目錄不存在時埠况,是否創(chuàng)建該目錄

? ?keep_hostname (yes); #是否保留日志消息中保存的主機名稱,否時恕出,總是使用來源主機來作重寫日志的主機名

? ??gc_busy_threshold(3000)?:#當syslog-ng忙時询枚,其進入垃圾信息收集狀態(tài)的時間。一旦分派的對象達到這個數(shù)字浙巫,syslog-ng就啟動垃圾信息收集狀態(tài)金蜀。默認值是:3000。

????gc_idle_threshold(100)?:#當syslog-ng空閑時的畴,其進入垃圾信息收集狀態(tài)的時間渊抄。一旦被分派的對象到達這個數(shù)字,syslog-ng就會啟動垃圾信息收集狀態(tài)丧裁,默認值是:100

};?

?#消息源SOURCES?

source s_sys {#消息來源

????file ("/proc/kmsg" log_prefix("kernel: "));????#從指定的文件讀取日志信息

????unix-stream ("/dev/log");????#打開指定的SOCK_STREAM模式的unix套接字护桦,接收日志消息

????internal();????#syslog-ng內部產(chǎn)生的消息

????# udp(ip(0.0.0.0) port(514));?

???#?如果取消注釋,則可以從udp的514端口獲取消息

? ? #寫上服務的端口即可獲取此服務的信息

};

#從file中讀取日志煎娇,過濾error的信息

filter error_filter {#消息過濾

? ??host("192.16.1.91") and match("error");

? ? #可以匹配關鍵子進行過濾二庵,也可對日志消息的內容進行正則匹配

}

#目的地DESTINATIONS

destination d_mesg? {#消息目的地,把日志信息寫入指定的文件

? ???file("/var/log/messages")

}

#消息路徑LOG STATEMENTS

log ?{

????source s_sys;

????filter error_filter;

????destination d_mesg?;

};


把消息源缓呛、過濾器催享、消息目的組合起來就形成一條完整的指令。日志路徑中的成員是順序執(zhí)行的哟绊。凡是來源于指定的消息源因妙,匹配所有指定的過濾器,并送到指定的地址票髓。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末攀涵,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子洽沟,更是在濱河造成了極大的恐慌以故,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件裆操,死亡現(xiàn)場離奇詭異怒详,居然都是意外死亡鳄乏,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門棘利,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人朽缴,你說我怎么就攤上這事善玫。” “怎么了密强?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵茅郎,是天一觀的道長。 經(jīng)常有香客問我或渤,道長系冗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任薪鹦,我火速辦了婚禮掌敬,結果婚禮上,老公的妹妹穿的比我還像新娘池磁。我一直安慰自己奔害,他們只是感情好,可當我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布地熄。 她就那樣靜靜地躺著华临,像睡著了一般。 火紅的嫁衣襯著肌膚如雪端考。 梳的紋絲不亂的頭發(fā)上雅潭,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天,我揣著相機與錄音却特,去河邊找鬼扶供。 笑死,一個胖子當著我的面吹牛核偿,可吹牛的內容都是我干的诚欠。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼漾岳,長吁一口氣:“原來是場噩夢啊……” “哼轰绵!你這毒婦竟也來了?” 一聲冷哼從身側響起尼荆,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤左腔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后捅儒,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體液样,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡振亮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了鞭莽。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坊秸。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖澎怒,靈堂內的尸體忽然破棺而出褒搔,到底是詐尸還是另有隱情,我是刑警寧澤喷面,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布星瘾,位于F島的核電站,受9級特大地震影響惧辈,放射性物質發(fā)生泄漏琳状。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一盒齿、第九天 我趴在偏房一處隱蔽的房頂上張望念逞。 院中可真熱鬧,春花似錦边翁、人聲如沸肮柜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽审洞。三九已至,卻和暖如春待讳,著一層夾襖步出監(jiān)牢的瞬間芒澜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工创淡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留痴晦,地道東北人。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓琳彩,卻偏偏與公主長得像誊酌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子露乏,可洞房花燭夜當晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內容