cacti下syslog插件安裝&&syslog-ng統一管理日誌

實驗目標

syslog-ng過濾日誌並轉存到日誌服務器上

通過cactisyslog插件將日誌web顯示

實驗環境

Gentoo 3.8.13系統

預安裝LAMP ssh

需要軟件

syslog-ng## gentoo系統自帶

其他需求

Gentoo的安裝

Cacti的安裝

LAMP環境安裝

參考blog相關文章

http://chengchow.blog.51cto.com/all/1642666

服務器需求

至少2臺服務器,下面測試我用了4臺,相關信息如下:

IP地址

主機名稱

主機編號

192.168.254.123

syslog

1

192.168.254.81

namenode

2

192.168.254.84

datanode

3

192.168.254.85

tasktracker(datanode2)

4

192.168.254.1

**-***-**(my windows)

5

參考文檔

Syslog-ng安裝配置

http://wenku.baidu.com/view/6a502e7d168884868762d648.html

cactisyslog插件安裝

http://wenku.baidu.com/link?url=FPq9ViSuPqIpKx5BKG79gmDTx8_7l-qN9urGr1XO9K5myzGr1-LWfbwwJn_077DLjNWXrzipI6cwJyB-7-9-edymeamnZqRRPkyHLYYqify

實驗步驟

 syslog服務器配置

Syslog-ng的安裝

在主機1

如果沒有安裝syslog-ng

Shell>USE=”sql” emerge syslog-ng

Shell>/etc/init.d/syslog-ng start

Shell>rc-update add syslog-ng default

Shell>emerge event-log 

配置 syslog-ng.conf文件

Shell> cat /etc/syslog-ng/syslog-ng.conf

@version: 3.2
#
# configuration file for syslog-ng, customized for remote logging
#
options {
use_fqdn(yes);
chain_hostnames(off);
keep_hostname(off);
flush_lines(0);
# The default action of syslog-ng 1.6.0 is to log a STATS line
# to the file every 10 minutes.  That's pretty ugly after a while.
# Change it to every 12 hours so you get a nice daily update of
# how many messages syslog-ng missed (0).
stats_freq(43200);
create_dirs(yes);
};
source src {
unix-stream("/dev/log" max-connections(256));
internal();
file("/proc/kmsg");
};
destination messages { file("/var/log/messages"); };
destination console_all { file("/dev/tty12"); };
source s_internal { internal(); };
destination d_syslognglog { file("/var/log/syslog-ng.log"); };
log { source(s_internal); destination(d_syslognglog); };
source s_sys { file ("/proc/kmsg" program_override("kernel: ")); unix-stream ("/dev/log"); internal(); };
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"); };
destination d_spol { file("/var/log/spooler"); };
destination d_boot { file("/var/log/boot.log"); };
destination d_cron { file("/var/log/cron"); };
destination d_rsync { file("/var/log/rsync"); };
destination d_mlal { usertty("*"); };
filter f_filter1     { facility(kern); };
filter f_filter2     { level(info) and
not (facility(mail)
or facility(authpriv) or facility(cron)); };
filter f_filter3     { facility(authpriv); };
filter f_filter4     { facility(mail); };
filter f_filter5     { level(emerg); };
filter f_filter6     { facility(uucp) or
(facility(news) and level(crit)); };
filter f_filter7     { facility(local7); };
filter f_filter8     { facility(cron); };
filter f_filter9     { facility(daemon); };
filter f_filter10     { facility(local6); };
#log { source(s_sys); filter(f_filter1); destination(d_cons); };
#log { source(s_sys); filter(f_filter2); destination(d_mesg); };
#log { source(s_sys); filter(f_filter3); destination(d_auth); };
#log { source(s_sys); filter(f_filter4); destination(d_mail); };
#log { source(s_sys); filter(f_filter5); destination(d_mlal); };
#log { source(s_sys); filter(f_filter6); destination(d_spol); };
#log { source(s_sys); filter(f_filter7); destination(d_boot); };
#log { source(s_sys); filter(f_filter8); destination(d_cron); };
# Remote logging
source s_remote {
udp(ip(0.0.0.0) port(514));
};
destination r_mesg { file("/var/log/syslog-ng/$YEAR/$MONTH/$HOST/messages" owner("root") group("root") perm(0640) dir_perm(0750) create_dirs(yes)); };
destination r_auth { file("/var/log/syslog-ng/$YEAR/$MONTH/$HOST/secure" owner("root") group("root") perm(0640) dir_perm(0750) create_dirs(yes)); };
destination r_mail { file("/var/log/syslog-ng/$YEAR/$MONTH/$HOST/maillog" owner("root") group("root") perm(0640) dir_perm(0750) create_dirs(yes)); };
destination r_spol { file("/var/log/syslog-ng/$YEAR/$MONTH/$HOST/spooler" owner("root") group("root") perm(0640) dir_perm(0750) create_dirs(yes)); };
destination r_boot { file("/var/log/syslog-ng/$YEAR/$MONTH/$HOST/boot.log" owner("root") group("root") perm(0640) dir_perm(0750) create_dirs(yes)); };
destination r_cron { file("/var/log/syslog-ng/$YEAR/$MONTH/$HOST/cron" owner("root") group("root") perm(0640) dir_perm(0750) create_dirs(yes)); };
destination r_daemon { file("/var/log/syslog-ng/$YEAR/$MONTH/$HOST/daemon" owner("root") group("root") perm(0640) dir_perm(0750) create_dirs(yes)); };
destination r_local6 { file("/var/log/syslog-ng/$YEAR/$MONTH/network/messages" owner("root") group("root") perm(0640) dir_perm(0750) create_dirs(yes)); };
#destination d_separatedbyhosts {
#       file("/var/log/syslog-ng/$HOST/messages" owner("root") group("root") perm(0640) dir_perm(0750) create_dirs(yes));
#};
#log { source(s_remote); destination(d_separatedbyhosts); };
log { source(s_remote); filter(f_filter2); destination(r_mesg); };
log { source(s_remote); filter(f_filter3); destination(r_auth); };
log { source(s_remote); filter(f_filter4); destination(r_mail); };
log { source(s_remote); filter(f_filter6); destination(r_spol); };
log { source(s_remote); filter(f_filter7); destination(r_boot); };
log { source(s_remote); filter(f_filter8); destination(r_cron); };
log { source(s_remote); filter(f_filter9); destination(r_daemon); };
log { source(s_remote); filter(f_filter10); destination(r_local6); };
## cacti settings
# cacti local settings
destination d_mysql {
pipe("/tmp/mysql.pipe"
template("INSERT INTO syslog_incoming(host,facility,priority,date,time,message) VALUES('$HOST','$FACILITY','$PRIORITY','$YEAR-$MONTH-$DAY','$HOUR:$MIN:$SEC','$MSG');\n")
template-escape(yes));
};
log{ source(s_remote);destination(d_mysql); };
log{ source(s_sys);destination(d_mysql); };
# cacti remote settings
#destination r_mysql {
#        pipe("/tmp/mysql.pipe" owner("root") group("root")
#   template("INSERT INTO syslog_incoming(host,facility,priority,date,time,message) VALUES('$HOST','$FACILITY','$PRIORITY','$YEAR-$MONTH-$DAY','$HOUR:$MIN:$SEC','$MSG');\n")
#   template-escape(yes));
#};
#log { source(s_remote); destination(r_mysql); };
## client settings
destination d_udp { udp ("192.168.254.123" port(514)); };
log { source(src);destination(d_udp); };

這裏編寫的比較亂,是用了Ubuntu syslog-ng自帶的配置文件做的修改,本地日誌生成被我停掉了,所有日誌都是通514端口獲取,包括syslog服務器的日誌,具體配置文件的說明參見附件3

添加IP地址對應主機名稱解析

DNS服務器不需要

Shell>vi /etc/hosts

wKioL1NPTiqSai1aAACQ9g_5c2w805.jpg

客戶端配置

2-4

如果沒有安裝syslog-ng

Shell>emerge syslog-ng

Shell>/etc/init.d/syslog-ng start

Shell>rc-update add syslog-ng default

配置syslog-ng.conf文件

Shell>echo “destination d_udp { udp(“192.168.254.123”prot(514)); }; ” >>/etc/syslog-ng/syslog-ng.conf

Shell>echo “log { source(src);destination(d_udp); };” >> /etc/syslog-ng/syslog-ng.conf

Shell>cat /etc/syslog-ng/syslog-ng.conf 

wKiom1NPTpLQ-Dq5AABT8v3izj8063.jpg

具體配置的說明參考附件3

這裏source(src)默認配置自帶

重啓syslog服務

1-4

Shell> /etc/init.d/syslog-ng restart

到這裏syslog服務器就配置完成了

測試

配置完成去主機1上,進入syslog-ng日誌目錄,如下

wKiom1NPTrDigvgbAABbOSqwL78477.jpg

可以看到對應的服務器日誌文件夾,這裏我們用主機2測試,打開 secure(登錄驗證日誌)

Shell>tail -f /var/log/syslog-ng/2014/04/namenode/secure

另外在開一個終端,登錄主機2,如果日誌有變化,則說明配置成功

wKioL1NPTpDC5-m9AACbyqtG07I705.jpg

Message/daemon/cron測試日誌同上

Message系統日誌

Daemon服務開啓/關閉日誌

Secure用戶驗證日誌

Cron計劃任務日誌

Windows客戶端配置

Windows服務器不支持日誌服務器,需要安裝一個轉換軟件evtsys
下載地址爲:
http://down.51cto.com/tag-evtsys.html

根據系統的版本下載32位和64位的程序。
解壓後是兩個文件evtsys.dllevtsys.exe
把這兩個文件拷貝到 c:\windows\system32目錄下。

以下操作在CMD

安裝evtsys服務
C:\>evtsys –i –h 192.168.254.123 –p 514 
-i 
表示安裝成系統服務
-h 指定log服務器的IP地址

-p 指定端口

詳細參數使用evtsys /?查看

啓動evtsys 

C:\net start evtsys

停止 evtsys

c:\net stop evtsys

卸載evtsys
evtsys –u

效果如下

wKioL1NPTp-BVeRDAAOnro0NkVY168.jpg

這裏有箇中文字體會轉碼的問題,如上圖操作”View”à”Encoding”à”Unicode(UTF-8)”.

 cacti syslog插件安裝配置

關於cacti配置及cacti syslog插件的安裝,參考之前的筆記

http://chengchow.blog.51cto.com/all/1642666

下面主要說用cacti syslog插件讀取syslog日誌

Cacti for syslog的安裝目錄

wKioL1NPTr_hYnxvAAF0eko2BmY401.jpg

先配置下權限問題

Shell> cd /var/www/localhost/htdocs/cacti/plugins/syslog

Shell> chmod –R 755 +x ../syslog

Shell> chown –R cactiuser:cactiuser ../syslog

Syslog數據庫導入

這裏有兩種方法

方法1利用原來的cacti數據(優點是不需要另外創建數據庫,缺點是日誌文件太多,不方便管理)

Shell> mysql –uroot –p cactidb < syslog.sql

方法2新建立個數據庫管理

Shell> mysql –uroot –p

mysql> create databse syslogdb;

mysql>grant all privileges on syslogdb.* to ‘sysloguser’@’localhost’ indentify by ‘syslogpass’;

mysql>quit

shell> mysql –uroot –p syslogdb < syslog.sql

這裏用方法1

Cacti for syslog配置文件修改

Shell> vi ./config.php

wKiom1NPTvaw2bCoAAHAlG3xGRg569.jpg

注意箭頭部分,true是使用cactidb數據庫,false是使用自建數據庫

同步日誌的到數據庫腳本

Shell> cat ./syslog2mysql.sh

#!/bin/bash
if [ ! -e /tmp/mysql.pipe ];then
mkfifo /tmp/mysql.pipe
fi
while [ -e /tmp/mysql.pipe ]
do
mysql -ucactiuser -pcactipass cactidb < /tmp/mysql.pipe
done
exit 0

運行腳本,一個死循環,需要在後臺運行

Shell> nohup ./syslog2mysql.sh &

注意,腳本里面的臨時文件路徑,必須是在syslog-ng.conf裏面destination配置路徑

添加計劃任務

Shell> vi /etc/crontab

wKiom1NPTxKiI4aBAABs16qnkuU108.jpg

這裏爲了測試方便,改成了1分鐘獲取一次數據,時間日誌同步建議和cacti獲取時間同步

登錄cacti界面

“console”à”configuration”à”plugins management”會出現如下界面

如果沒有如下界面也沒關係,刪除syslog插件重新登錄,按照以上步驟就會出現,主要是一些參數的選擇

wKioL1NPTvjTms_bAAN5XF6iLVU561.jpg

第一個選項有MyISAMInnodb兩種數據庫類型,建議選innodb.

第二個是數據庫結構,5.5以上可以直接選擇partitioined table5.1.6以下不支持.

第三個是日誌保存時間,最大爲1.

第一次登錄好像還有個參數,沒留意什麼,直接默認安裝了

如果不清楚選項含義,可以全部默認,默認配置性能上不能達到最優,兼容性最好,選擇完成點擊Install按鈕安裝。

安裝完成,如果有安裝clog插件的,順便看下cacti日誌是否有報錯;

如果沒有錯誤,繼續;

1-4上面做服務重啓或者登錄的操作,等待幾分鐘,點擊syslog頁面查看,如下界面。

wKiom1NPTzbjrQbmAAcS2mpwQUc580.jpg

1選擇頁面

2主機名稱

3過濾選項

4日誌內容

5日誌等級顏色標誌

附件1syslog日誌獲取流程

wKiom1NPT8LA0-gUAAM4WQMpztQ952.jpg

附件2cacti for syslog日誌獲取流程

wKioL1NPT7KC7fQJAAL5Jhq7jpk382.jpg

附件3 syslog-ng.conf配置簡單介紹

Syslog-ng.conf一共有5個字段(1-5

1.Option { };

全局選項

選項格式

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_的宏代替日誌記錄的時間,而不要依靠該值定義。

2.Source { };

source <sourcename> { 日誌源日誌源; ... };

#日誌源可用參數:

file (filename) 從指定的文件讀取日誌信息

unix-dgram(filename) SOCK_DGRAM模式的unix套接字接收日誌消息

unix-stream (filename) SOCK_STREAM模式的unix套接字接收日誌消息

udp ( (ip),(port) ) :從UDP端口接收日誌

tcp ( (ip),(port) ) TCP端口接收日誌

internal()  syslog-ng內部產生的日誌

pipe(filename),fifo(filename) 從指定的管道或者FIFO設備,讀取日誌信息可以同

時配置多個日誌,

經典應用

source s_sys { file ("/proc/kmsg" log_prefix("kernel: ")); unix-stream ("/dev/log"); internal(); };

3.Filter { };

filter <filtername> { 過濾參數; };

#過濾參數可用:

facility(,)根據facility(設備)選擇日誌消息,使用逗號分割多個facilitylevel(,)

level(優先級)選擇日誌消息,使用逗號分割多個level,或使用“..表示一個範圍

program(regexp)日誌消息的程序名是否匹配一個正則表達式

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

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

filter()調用另一條過濾規則並判斷它的值

#過濾參數操作式:

And

or 

not 

#facility(設備)可用消息類型

Auth用戶認證

authpriv有特權的用戶認證

croncron守護進程

daemon各種系統守護進程

ftpftp守護進程

kern內核消息

local0-local7保留用於本地用法

lpr打印機

mail郵件

news新聞

syslog內部syslog

uucpuucp系統

user各種用戶程序來的消息

cactifilter參數查詢的分類

wKioL1NPT_DgM5UwAAA3pQiDKSo801.jpg

#Level等級:

emerg最嚴重的錯誤 (system panic)

alert需要立即處理的嚴重錯誤

critcritical warming

err普通錯誤

warn警告信息

notice比較不嚴重的信息

info普通信息

debug除錯信息

cactifileter等級查詢的分類

wKiom1NPUAqxGivuAABgTyGps7o230.jpg

4.Destination { };

destination <name> { 目標操作目標操作;...;};

#目標操作常用參數:

file (filename) :寫入指定文件

unix-dgram(filename) :寫入SOCK_DGRAM模式的unix套接字

unix-stream (filename) :寫入SOCK_STREAM模式的unix套接字

tcp(ip),(port) :以TCP協議發送指定主機端口

udp (ip),(port) :以UDP協議發送指定主機端口

usertty(username) :把日誌消息發送到已經登陸的指定用戶終端

pipe(filename),fifo(filename):把日誌消息發送到指定管道或FIFO設備

program(parm) :啓動指定的程序,並把日誌消息發送到該進程的標準輸入

5.Log { };

日誌生成

格式

Log {source<sourcename> filter<filtername> destination<destinationname> };

Filter可以省略,不過濾日誌。

6.擴展file部分函數的參數

syslog-ng除了有全局選項參數外,不同的函數還可以定義其參數,其中包括:

6.1、擴展file的宏

HOST 日誌消息的源發主機名。如果日誌消息穿過幾個主機,並且chain_hostname()功能已經打開,就使用第一個主機名。

FACILITY :日誌消息來自的日誌設備

PRIOPRITY/LEVEL :日誌消息的優先級

PROGRAM :發送日誌消息的程序

YEAR :發送日誌消息的年份,這個宏既可以指定日誌消息送出的時間,也可以指定日誌消息收到的時間。這由use_time_recvd()選項控制

MONTH :發送日誌消息的月份

DAY :發送日誌消息的日子

HOUR :小時

MIN 分鐘

SEC :秒

6.2file的參數

log_file_size()日誌文件大小

program_override()原來的sync參數

owner()日誌文件用戶

perm()日誌文件權限

group()日誌文件用戶組

dir_perm()日誌文件夾權限

create_dir ()自動創建文件夾

6.3tcpupd的參數

ipxxx.xxx.xxx.xxx):定義綁定的IP地址

portn):定義綁定的端口

max-connectionsn定義最大連接數

TCP基於連接方式傳輸,不會造成日誌丟失,而UDP則不同。但因爲傳統的syslog基於UDP514端口,所以,UDP方式也經常會使用到。

另外,514也是rshell的默認端口,請注意衝突。

實驗文檔使用的就是udp連接

 

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