当前位置: 首页 > news >正文

php syslog 514,syslog详解及配置远程发送日志和远程日志分类

1、日志协议syslog

1.1、syslog简介

完善的日志分析系统应该能够通过多种协议(包括syslog等)进行日志采集并对日志分析,因此日志分析系统首先需要实现对多种日志协议的解析。其次,需要对收集到的海量日志信息进行分析,再利用数据挖掘技术,发现隐藏再日志里面的安全问题。

Syslog再UNIX系统中应用非常广泛,它是一种标准协议,负责记录系统事件的一个后台程序,记录内容包括核心、系统程序的运行情况及所发生的事件。Syslog协议使用UDP作为传输协议,通过514端口通信,Syslog使用syslogd后台进程,syslogd启动时读取配置文件/etc/syslog.conf,它将网络设备的日志发送到安装了syslog软件系统的日志服务器,Syslog日志服务器自动接收日志数据并写到指定的日志文件中。

1.2、syslog日志格式

syslog标准协议如下图:

0b107953ce7439aa6695088d829c8655.png

Syslog消息并没有对最小长度有所定义,但报文的总长度必须在1024字节之内。其中PRI部分必须有3个字符,以‘’结尾。在括号内的数字被称为Priority(优先级),priority值由Facility和severity两个值计算得出,这两个值的级别和含义见表1-1和表1-2。下面是一个例子:

<30>Oct 10 20:30:10 fedora auditd [1780]: The audit daemon is exiting

▶“<30>”是PRI部分,即Priority(优先级),取值范围0~191。

▶“Oct 10 20:30:10 fedora”是HEADER(报头部分)。

▶“auditd [1780]: The audit daemon is exiting”是MSG(信息)部分。

在PRI部分,该数值和Facility和Level有关,Facility是创建日志的实体,比如由Kernel产生,还是由User产生,或者是Mail产生.....而level可以看成是日志级别。他们的关系可以利用公式推导:

Priority=Facility * 8 + Level

后台监控程序会被分配一个facility值,而没有分配到facility值的进程则会使用“local user”的facility值,比如很多网络设备都会默认使用facility值“local user 7”来发送信息。

表1-1  Facility级别

a18caf1ac72e9d50baa2e39fa708eb85.png

从分类能看出来Syslog的Facility有一部分(序号16~23)是为其他程序预留的,例如Cisco设备使用local4发送PIX防火墙的syslog日志。

表1-2日志级别描述

2472dfe1c02277c87696f042d9ae6f1a.png

1.3、rsyslog介绍

针对syslog协议的不足,rsyslog日志协议应运而生,它提供了丰富的内容过滤和灵活的配置选项,多线程的syslogd功能,同一台机器上支持多子rsyslog进程,可以监听不同端口。除了继续支持udp外,还添加了tcp进行传输的功能。在日志传输安全方面,以前通过Stunnel解决了rsyslog传输数据加密的问题,目前最新的rsyslog版本自身就支持ssl加密技术保证安全,在近几年发布的所有Linux发行版中都切换成了rsyslog。在实际的使用过程中,我们可以通过查看配置文件和相应的日志文件来使用Rsyslog。在数据库支持方面,它广泛支持各种数据库,尤其对Mysql和Postgres数据库支持的比较好。

rsyslog配置文件详解:

77f0c13ff6633c8df7f413edf17b769c2b9.jpg

c5495e5f6952bc1bd1b4119a203ae22eec5.jpg

#### MODULES #### #定义日志的模块。

$ModLoad imuxsock #imuxsock为模块名,支持本地系统日志的模块。

$ModLoad imjournal #imjournal为模块名,支持对系统日志的访问。

#$ModLoad imklog #imklog为模块名,支持内核日志的模块。

#$ModLoad immark #immark为模块名,支持日志标记。

# Provides UDP syslog reception #提供udp syslog的接收。

#$ModLoad imudp #imudp为模块名,支持udp协议。

#$UDPServerRun514#允许514端口接收使用udp和tcp转发来的日志。

# Provides TCP syslog reception #提供tcp syslog的接收。

#$ModLoad imtcp #imtcp为模块名,支持tcp协议。

#$InputTCPServerRun514#### GLOBAL DIRECTIVES #### #定义全局日志格式的指令。

# Where to place auxiliary files

$WorkDirectory/var/lib/rsyslog #工作目录。

# Usedefaulttimestamp format

$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat #定义日志格式默认模板。

$IncludeConfig/etc/rsyslog.d/*.conf #所有配置文件路径。

$OmitLocalLogging on #省略本地登录。

# File to store the position in the journal

$IMJournalStateFile imjournal.state

#### RULES ####

#kern.* /dev/console

#记录所有日志类型的info级别以及大于info级别的信息到messages文件,但是mail邮件信息,authpriv验证方面的信息和corn时间和任务相关信息除外。

*.info;mail.none;authpriv.none;cron.none /var/log/messages

# authpriv验证相关的所有信息存放在/var/log/secure。

authpriv.* /var/log/secure

#邮件的所有信息存在/var/log/maillog;这里有一个“-”符号表示是使用异步的方式记录

mail.* -/var/log/maillog

#任务计划有关的信息存放在/var/log/cron。

cron.* /var/log/cron

#记录所有的≥emerg级别信息,发送给每个登录到系统的日志。

*.emerg :omusrmsg:*

#记录uucp,news.crit等存放在/var/log/spooler

uucp,news.crit /var/log/spooler

#本地服务器的启动的所有日志存放在/var/log/boot.log

local7.* /var/log/boot.log

#发送日志,@表示传输协议(@表示udp,@@表示tcp),后面是ip和端口。

#*.* @@remote-host:514

rsyslog配置文件

2、 日志采集和分析

再此环境中,我们利用rsyslog的客户端分别把ssh、iptables等以及h3c交换机和路由器的日志发送到rsysog的服务端,并在服务端配置存储策略,把不同的日志存放在不同的文件当中,本环境中以ssh日志为例。架构图如下:

b8b0326af2eb5c97a24744253efe0ef1.png

环境说明:

H3C交换机IP:192.168.0.249;

H3C路由器IP:192.168.1.1

业务服务器IP:192.168.1.218;

Syslog服务器IP:192.168.1.221;

信息级别高于等于info的日志信息将会发送到syslog服务器上;

▶业务服务器配置

打开rsyslog的配置文件;

vim /etc/rsyslog.conf

在配置文件中我们可以看到默认有以下配置,这条配置就是把用户认证所有级别的日志都存到后面的路径文件下;

authpriv.* /var/log/secure

将记录下来的日志发送到rsyslog服务端,打开rsyslog配置文件看配置文件的最底部有以下内容;

# *.* @@remote-host:514

此处用于指定接收日志的rsyslog服务器的协议、IP地址和端口号,此处用的tcp;

*.*@@192.168.1.221:514

注意:使用@代表走UDP协议,使用@@代表走TCP协议。

重启rsyslog服务

systemctl restart rsyslog

▶  Rsyslog服务器配置

打开rsyslog的配置文件;

vim /etc/rsyslog.conf

把以下配置的注释打开,下面分别有tcp和udp的配置,和客户端保持一致,下面都开启因为路由器和交换机默认走的是udp协议;

Provides UDP syslog reception

$ModLoad imudp

$UDPServerRun514Provides TCP syslog reception

$ModLoad imtcp

$InputTCPServerRun514

重启rsyslog服务

Systemctl restart rsyslog

配置完后,业务服务器的的日志就可以发生到rsyslog服务端了。可以利用以下命令查看连接状态。

lsof -i :514

命令输出:

d93fa96299b47e198c2e16fa8886c4a6.png

上图用红框圈起来的就是rsyslog和业务服务器建立的连接。

现在只是属于把日志接收过来并存放在默认路径,如下图:

fb9c7dc5f1542caa7614df47601ed697.png

服务端会根据产生日志的设施和级别把日志存放到不同的文件里,我们发过来的是ssh日志,默认就存在服务端的/var/log/secure文件里。当然发过来的其他设施产生的日志也会存到指定的文件里面。

如果我们要想把发过来的ssh日志存放到自己的指定的文件里面,可以在/etc/rsyslog.d/目录里面新建一个文件,这个目录是rsyslog的工作目录。文件内容如下:

if $programname contains 'sshd' then -/var/log/remote_log/ssh.log& ~

语法解释:

如果发过来的日志“程序名”包含sshd,就输入到ssh.log日志里面。

什么是程序名:程序名就是你这一类日志是哪个服务产生的。

&~表示不做后续的操作,日志只输入到ssh.log中。

▶   结果

1)  验证方法:

在业务服务器上产生一条ssh日志,可以利用ssh连接工具连接业务服务器,这样就好产生一条ssh日志,产生新的日志就会让rsyslog发送到服务端。

2)  测试结果:

业务服务器已经把日志发送过来,根据rsyslog的上述配置把sshd的日志已经保存在了/var/log/remote_log/ssh.log的文件里面,使用如下命令查看文件是否已经有了内容。

tail –f /var/remote_log/ssh.log

输出结果如下:

7aee91313147cf31e09abf04a0898940.png

文件里面已经保存了业务服务器发过来的日志。

相关文章:

  • 兰春 MySQL,MySQL中经典的too many connection怎么破
  • php后台处理传来的图片文件,如何处理展示后台程序实时生成的文件?
  • php遍历json键值对,JS实现键值对遍历json数组功能示例
  • php服务器cpu要求,如何分析服务器需要什么样的配置(CPU、内存、带宽等)
  • oracle查看表的字段个数据,oracle逆向查询某个字段内容所存在的数据表名称
  • oracle在procedure调用自己,oracle 在plsql中创建procedure并调用
  • oracle if 插入,Oracle有条件地插入数据
  • oracle修复sysaux表空间,修复受损的SYSAUX表空间
  • matlab runge现象,龙格现象matlab算法.doc
  • oracle支持分区移动,Oracle 12c 新特性 --- 移动分区支持数据过滤
  • linux如何打开控制端口tty2,linux – 如何检测属于gsm/3g-modem的tty是数据还是控制端口?...
  • linux服务器安装xfce,Ubuntu 16.10安装Xfce桌面与VNC远程连接
  • linux个图形界面对比,Linux对比文件,很好用的图形界面
  • Linux配置与管理samba服务器,Linux Samba服务器配置与管理
  • linux邮箱客户端配置,Linux下安装使用Mutt邮件客户端并配置邮件警报功能
  • Android单元测试 - 几个重要问题
  • echarts花样作死的坑
  • ES6简单总结(搭配简单的讲解和小案例)
  • ES学习笔记(12)--Symbol
  • Facebook AccountKit 接入的坑点
  • Git 使用集
  • java8 Stream Pipelines 浅析
  • Laravel Telescope:优雅的应用调试工具
  • PHP 小技巧
  • Python 基础起步 (十) 什么叫函数?
  • Shell编程
  • vue的全局变量和全局拦截请求器
  • Wamp集成环境 添加PHP的新版本
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 分布式任务队列Celery
  • 基于axios的vue插件,让http请求更简单
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 蓝海存储开关机注意事项总结
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • Prometheus VS InfluxDB
  • ​业务双活的数据切换思路设计(下)
  • #QT(智能家居界面-界面切换)
  • (5)STL算法之复制
  • (JS基础)String 类型
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (六)Hibernate的二级缓存
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (十三)Maven插件解析运行机制
  • (四)c52学习之旅-流水LED灯
  • (循环依赖问题)学习spring的第九天
  • (正则)提取页面里的img标签
  • (转)EOS中账户、钱包和密钥的关系
  • (转)母版页和相对路径
  • .net core 控制台应用程序读取配置文件app.config
  • .NET Standard 的管理策略
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖