海运的博客

Syslog-ng配置文件详解

发布时间:June 22, 2012 // 分类:日记分析 // No Comments

Syslog-ng作为syslog的下一代日记记录工具,兼容于syslog协议,可通过定义规则,实现高级过滤功能,可以构建灵活的、可靠的中央日志服务器。
配置文件基于以下架构:

log { source( ); filter( l); destination( ); };
#通过关联数据源、过滤规则、目标操作组成一个完整的消息路径。
#数据源、过滤规则、目标操作分别定义。

数据源定义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 net {udp();};
从UDP 514端口接收日志

过滤参数定义:

filter <filtername> { 过滤参数; };
#过滤参数可用:
facility(,): 根据facility(设备)选择日志消息,使用逗号分割多个facility
level(,): 根据level(优先级)选择日志消息,使用逗号分割多个level,或使用“..”表示一个范围
program(regexp): 日志消息的程序名是否匹配一个正则表达式
host(regexp): 日志消息的主机名是否和一个正则表达式匹配
match(regexp): 对日志消息的内容进行正则匹配
filter(): 调用另一条过滤规则并判断它的值
#过滤参数操作式:
and 和
or 或者
not 不包含
#facility(设备)可用消息类型
auth            用户认证
authpriv        有特权的用户认证
cron            cron守护进程
daemon          各种系统守护进程
ftp             ftp守护进程
kern            内核消息
local0-local7   保留用于本地用法
lpr             打印机  
mail            邮件    
news            新闻    
syslog          内部syslog
uucp            uucp系统
user            各种用户程序来的消息
#Level等级:
emerg   最严重的错误 (如system panic)
alert   需要立即处理的严重错误
crit    critical warming
err     普通错误
warn    警告信息
notice  比较不严重的信息
info    普通信息
debug   除错信息

应用举例:

filter f_local { facility(authpriv) or level(notice); };
#定义过滤规则f_local包含authpriv所有消息和其它设备notice级别以上消息

目标操作定义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) :启动指定的程序,并把日志消息发送到该进程的标准输入

应用示例:

destination d_kern { file("/var/log/kern"); }
定义目标规则d_kern写入日志到文件/var/log/kern
destination d_udp  { udp("127.0.0.1" port(514)); };
定义目标规则d_udp发送日志到相应IP端口

Windows下用EvtSys发送日志到syslog-ng服务器

发布时间:June 21, 2012 // 分类:Cacti,日记分析 // 2 Comments

之前有介绍cacti配合syslog-ng构建中央日志服务器,对于Linux服务器可以直接将日志通过网络发送到syslog-ng服务端,Windows下要利用EvtSys这个小工具转换日记为syslog格式并发送到syslog-ng服务器。
EvtSys官方下载地址:http://code.google.com/p/eventlog-to-syslog/downloads/list,支持windows2003和windows2008系统。
将下载的文件解压复制到C:\WINDOWS\SYSTEM32目录下,打开cmd窗口执行:

#https://www.haiyun.me
evtsys -i -h server
-i ;安装为系统服务
-h ;syslog-ng服务器地址
-p ;syslog-ng服务器端口,默认514

启动EvtSys:

net start evtsys

然后在syslog管理界面就可查看windows server日志信息了。

Cacti安装syslog插件配合syslog-ng构建中央日志服务器

发布时间:June 20, 2012 // 分类:Cacti,日记分析 // No Comments

实现流程:Cacti服务器安装syslog-ng为中央日志服务器,Cacti通过syslog插件展示,从服务器通过网络将日志实时发送到中央日志服务器。
Cacti下syslog插件安装:

#https://www.haiyun.me
cd /home/wwwroot/cacti/plugins/
wget -O syslog.tar.gz http://docs.cacti.net/_media/plugin:syslog-v1.22-2.tgz
tar zxvf syslog.tar.gz 

新建syslog数据库并授权:

mysql -u root -p
create database syslog;
grant all privileges on syslog.* to cacti@localhost;

导入syslog数据库:

mysql -u root -p syslog < syslog/syslog.sql

修改syslog插件配置文件,然后通过web界面安装syslog插件,略过。

vim syslog/config.php 
$use_cacti_db = false; #不使用cacti默认数据库
#定义syslog数据库信息
if (!$use_cacti_db) {
    $syslogdb_type     = 'mysql';
    $syslogdb_default  = 'syslog';
    $syslogdb_hostname = 'localhost';
    $syslogdb_username = 'cactiuser';
    $syslogdb_password = 'password';
    $syslogdb_port     = 3306;

Cacti服务器端安装syslog-ng服务端,yum安装需先安装epel源

yum -y install syslog-ng
service syslog stop
chkconfig syslog off
service syslog-ng start
chkconfig syslog-ng on

编辑syslog-ng配置文件添加以下内容:

vim /etc/syslog-ng/syslog-ng.conf 
source net { #源设备为网络接收数据
        udp();
};

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(net); destination(d_mysql); };
#log { source(s_sys); destination(d_mysql); };

新建日志数据库导入脚本:

vim /etc/syslog-ng/syslog.sh 
#!/bin/bash
if [ ! -e /tmp/mysql.pipe ]; then
            mkfifo /tmp/mysql.pipe
    fi 
    while [ -e /tmp/mysql.pipe ]
    do
        mysql -u root --password=passwd syslog < /tmp/mysql.pipe
done

启动脚本并配置开机启动:

sh /etc/syslog-ng/syslog.sh &
echo "sh /etc/syslog-ng/syslog.sh" >> /etc/rc.local 

从服务器配置syslog将日志发送到syslog-ng服务器:

echo "*.*                        @server" >> /etc/syslog.conf
/etc/init.d/syslog restart

上张效果图:
cacti插件syslog.png

Nginx/Lnmp定时分割日志shell脚本

发布时间:May 5, 2012 // 分类:日记分析 // No Comments

如果服务器访问量较大,Nginx日志占用空间也是个很大的问题,也不可能每天都手工清除日志,久而久之硬盘空间。。。
此脚本用于每天定时切割日记,备份30天内的日志数据备查,并删除30前备份的数据。

#/bin/bash
#Create by https://www.haiyun.me
log_path="/home/wwwlogs"
mkdir -p $log_path/$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/$(date -d "yesterday" +"%d")  
for logname in $(ls /home/wwwlogs/*.log |awk -F/ '{print $NF}')
do
         mv $log_path/$logname $log_path/$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/$(date -d "yesterday" +"%d")/$logname
 done
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
find $log_path -type d -mtime +30 -exec rm {} \;

将此脚本添加到计划任务:

echo "30 1 * * * sh /path/file.sh" > /etc/cron.d/nginx
#每天凌晨1点30执行任务

Nginx/Apache/Lnmp网站常用日记统计命令

发布时间:April 13, 2012 // 分类:日记分析 // No Comments

Nginx配置日记格式为Apache日志格式,便于分析。
1.访问次数最多的前10个IP。

awk '{print $1}' www.haiyun.me.log|sort|uniq -c|sort -rn|head -n 10

2.访问次数最多的10个页面。

awk '{print $7}' www.haiyun.me.log|sort|uniq -c|sort -rn|head -n 10

3.访问最多的时间,取前十个。

awk '{print $4}' www.haiyun.me.log|cut -c 14-18|sort|uniq -c|sort -rn|head -n10

4.查看下载次数最多的文件,显示前10个。

awk '{print $7}' www.haiyun.me.log|awk -F '/' '{print $NF}'|sort|uniq -c|sort -rn|head -n 10
#如统计请求链接去除awk -F '/' '{print $NF}'|sort|

5.统计网站流量,以M为单位。

awk '{sum+=$10} END {print sum/1024/1024}' www.haiyun.me.log

6.统计IP平均流量、总流量。

awk 'BEGIN {print"ip average total"}{a[$1]+=$10;b[$1]++}END{for(i in a)print i,a[i]/1024/1024/b[i]"MB",\
a[i]/1024/1024"MB"}' www.haiyun.me.log |column -t

7.用sed统计特定时间内日志,配合以上使用awk分析。

sed -n '/10\/Feb\/2012:18:[0-9][0-9]:[0-9][0-9]/,$p' www.haiyun.me.log
#截取二月10号18点后所有日志
sed -n '/10\/Feb\/2012:18:[0-9][0-9]:[0-9][0-9]/,/10\/Feb\/2012:20:[0-9][0-9]:[0-9][0-9]/p' \
www.haiyun.me.log
#截取二月10号18点到20点之间日志

8.统计404或403最多的网址。

awk '$9 ~ /403/ {print $7}' www.haiyun.me.log|sort|uniq -c|sort -rn|head -n 80
awk '$9 ~ /404/ {print $7}' www.haiyun.me.log|sort|uniq -c|sort -rn|head -n 80
分类
最新文章
最近回复
  • opnfense: 谢谢博主!!!解决问题了!!!我之前一直以为内置的odhcp6就是唯一管理ipv6的方式
  • liyk: 这个方法获取的IPv6大概20分钟之后就会失效,默认路由先消失,然后Global IPV6再消失
  • 海运: 不好意思,没有。
  • zongboa: 您好,請問一下有immortalwrt設定guest Wi-Fi的GUI教學嗎?感謝您。
  • 海运: 恩山有很多。
  • swsend: 大佬可以分享一下固件吗,谢谢。
  • Jimmy: 方法一 nghtp3步骤需要改成如下才能编译成功: git clone https://git...
  • 海运: 地址格式和udpxy一样,udpxy和msd_lite能用这个就能用。
  • 1: 怎么用 编译后的程序在家里路由器内任意一台设备上运行就可以吗?比如笔记本电脑 m参数是笔记本的...
  • 孤狼: ups_status_set: seems that UPS [BK650M2-CH] is ...