当前位置: 首页 > 科技观察

在Debian9上,使用Rsyslog安装中央日志服务器

时间:2023-03-15 01:37:50 科技观察

在Linux上,日志文件包含有关系统功能的信息,系统管理员经常使用它来识别机器上的问题。日志帮助管理员恢复过去系统中发生的事件。一般来说,Linux中所有的日志文件都存放在/var/log目录下。在此目录中,有几种类型的日志文件,其中包含各种信息。例如,记录系统事件的日志文件、记录安全相关信息的日志文件、内核特定的日志文件以及用户或cron作业使用的日志文件。日志文件的主要作用是系统调试。Linux中的大多数日志文件都由rsyslogd服务管理。在最近的Linux发行版中,日志文件也可能由journald系统服务管理和控制。journald服务是systemd初始化程序的一部分。journald以二进制格式存储日志并将它们写入内存和/run/log/journal/中的环形缓冲区,但是,journald也可以配置为永久存储在syslog中。在Linux中,您可以配置和运行Rsyslog服务器以集中管理日志。在流行的服务器-客户端模式中,日志信息通过TCP或UDP传输协议在网络上发送,或者从网络设备、服务器、路由器、交换机发送,并接受其他系统或嵌入式设备中生成的日志。Rsyslog守护进程可以配置为同时作为客户端和服务器运行。当配置为服务器时,Rsyslog默认会监听TCP和UDP的514端口,收集远程系统通过网络发送的日志信息。当配置为作为客户端运行时,Rsyslog将通过相同的TCP或UDP端口通过网络发送内部日志消息。Rsyslog可以根据选定的属性和操作过滤系统日志消息。Rsyslog具有以下过滤器:设备或优先级过滤器基于属性的过滤器基于表达式的过滤器设备过滤器代表生成日志的内部Linux子系统。它们目前分类如下:auth/authpriv=认证过程生成的消息cron=与cron任务相关的日志daemon=与运行系统服务相关的消息kernel=Linux内核消息mail=邮件服务器消息syslog=syslog或其他守护进程(日志由DHCP服务器发送至此处)相关信息lpr=打印机或打印服务器信息local0~local7=管理员控制下的自定义信息优先级或严重级别分配有关键字或数字,如下所述。emerg=emergency-0alert=alert-1err=error-3warn=warning-4notice=prompt-5info=information-6debug=debug-7(最高级别)另外还有一些Rsyslog特有的关键字,比如星号(*)可以用来定义所有的设备和优先级,none关键字更具体的是没有优先级,等号(=)表示只有那个优先级,感叹号(!)表示取消这个优先事项。Rsyslog中的操作部分由声明的目的地表示。日志信息的目的地可以是:存储在文件系统中的文件、/var/log/目录中的文件、通过命名管道或FIFO作为输入的另一个本地进程。日志信息也可以直接发送给用户,或者掉入“黑洞”(/dev/null),或者发送到标准输出,或者通过TCP/UDP协议发送到远程syslog服务器。日志信息也可以存储在数据库中,例如MySQL或PostgreSQL。将Rsyslog配置为服务器Rsyslog守护进程自动安装在大多数Linux发行版上。如果您的系统中没有安装Rsyslog,您可以根据您的系统分布执行以下命令之一来安装该服务。您必须具有root权限才能运行此命令。在基于Debian的发行版上:sudoapt-getinstallrsyslog在基于RHEL的发行版(如CentOS)上:sudoyuminstallrsyslog验证Rsyslog守护程序是否正在您的系统上运行,具体取决于发行版,可选择运行以下命令:在较新的Linux发行版上使用systemd:systemctlstatusrsyslog.service在使用init的旧Linux发行版上:servicersyslogstatus或/etc/init.d/rsyslogstatus要启动rsyslog守护进程,请运行以下命令。在旧的Linux版本中使用init:servicersyslogstart或/etc/init.d/rsyslogstart在最新的Linux发行版中:systemctlstartrsyslog.service安装一个rsyslog程序以作为服务器模式运行,你可以编辑主配置文件/etc/rsyslog.conf。可以使用下面显示的命令更改它。sudovi/etc/rsyslog.conf要允许在UDP端口514上接收日志消息,请找到并删除以下行前面的井号(#)以取消注释。默认情况下,syslog使用UDP端口接收消息。$ModLoadimudp$UDPServerRun514由于使用UDP协议在网络上交换数据不可靠,可以设置Rsyslog使用TCP协议向远程服务器输出日志信息。要使TCP协议能够接受日志消息,请打开/etc/rsyslog.conf文件并删除以下行前面的井号(#)以取消注释。这将允许rsyslog守护程序绑定并侦听TCP端口514。$ModLoadimtcp$InputTCPServerRun514两种协议可以同时在rsyslog上启用。如果要指定允许哪些发件人访问rsyslog守护程序,可以在启用协议行之后添加以下行:$AllowedSenderTCP,127.0.0.1,10.110.50.0/24,*.yourdomain.com在接收入站之前您可以记录消息,您需要为rsyslog守护进程创建一个新模板来解析日志。此模板将指示本地Rsyslog服务器在何处存储传入的日志消息。使用以下示例在$AllowedSender行之后创建合适的模板。$templateIncoming-logs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log"*.*?Incoming-logs&~为了只接收内核产生的日志信息,可以使用如下语法。kern.*?incoming-logs接收到的日志经过上面的模板解析后,会保存在本地文件系统/var/log/目录下的文件中,下面以客户端主机名命名,客户端设备名称日志文件名称:%HOSTNAME%和%PROGRAMNAME%变量。下面的&~重定向规则将Rsyslog守护进程配置为将传入的日志消息保存到上面变量名指定的文件中。否则,接收到的日志信息将被进一步处理并保存在本地日志文件中,例如/var/log/syslog文件。要添加规则以丢弃所有与电子邮件相关的日志消息,您可以使用以下语法。mail.*~其他可以在输出文件名中使用的变量是:%syslogseverity%,%syslogfacility%,%timegenerated%,%HOSTNAME%,%syslogtag%,%msg%,%FROMHOST-IP%,%PRI%,%MSGID%、%APP-NAME%、%TIMESTAMP%、%$year%、%$month%、%$day%。从Rsyslog版本7开始,一种新的配置格式用于在Rsyslog服务器中声明模板。版本7模板应类似于以下行。template(name="MyTemplate"type="string"string="/var/log/%FROMHOST-IP%/%PROGRAMNAME:::secpath-replace%.log")另一种模式是你也可以使用如下写法上面的模板如上图:template(name="MyTemplate"type="list"){constant(value="/var/log/")property(name="fromhost-ip")constant(value="/")property(name="programname"SecurePath="replace")constant(value=".log")}要使Rsyslog配置文件的更改生效,您必须重新启动守护程序以加载新配置。sudoservicersyslogrestartsudosystemctlrestartrsyslog在DebianLinux系统上要检查它正在侦听哪个套接字,您可以使用root权限运行netstat命令。将输出传递给过滤程序,例如grep。须藤netstat-tulpn|greprsyslog注意:您必须在防火墙上打开Rsyslog端口以允许入站连接。在使用Firewalld的基于RHEL的发行版上,运行以下命令:firewall-cmd--permanent--add-port=514/tcpfirewall-cmd--permanent--add-port=514/tcpfirewall-cmd-reloadinOnDebian-based使用UFW的发行版,运行以下命令:ufwallow514/tcpufwallow514/udpIptables防火墙规则:iptables-AINPUT-ptcp-mtcp--dport514-jACCEPTiptables-AINPUT-pudp--dport514-j接受将Rsyslog配置为客户端启用Rsyslog守护进程以客户端模式运行并将输出本地日志消息发送到远程Rsyslog服务器,编辑/etc/rsyslog.conf文件并添加以下行:*.*@IP_REMOTE_RSYSLOG_SERVER:514*。*@FQDN_RSYSLOG_SERVER:514此行启用Rsyslog服务并将所有内部日志输出发送到在UDP端口514上运行的远程Rsyslog服务器。要使用TCP协议发送日志信息,请使用以下模板:*。*@@IP_reomte_syslog_server:514要将所有优先级,仅与cron相关的日志信息输出到Rsyslog服务器,请使用以下模板:cron.*@IP_reomte_syslog_server:514在/etc/rsyslog.conf文件中添加以下行,当rsyslog服务器无法通过网络访问,将客户端的日志信息暂时存放在它的一个磁盘缓冲文件中,当网络或服务器恢复时,再恢复发送。$ActionQueueFileNamequeue$ActionQueueMaxDiskSpace1g$ActionQueueSaveOnShutdownon$ActionQueueTypeLinkedList$ActionResumeRetryCount-1为使上述规则生效,需要重启Rsyslog守护进程激活客户端模式。