syslog快速开始

syslog快速开始

一、什么是syslog协议

  • RFC3164 (https://www.ietf.org/rfc/rfc3164.txt)
  • RFC5424 (https://www.ietf.org/rfc/rfc5424.txt)

Syslog 协议最初由 Eric Allman 编写,并在 RFC 3164 中定义。消息通过 IP 网络发送到事件消息收集器或系统日志服务器。Syslog 使用用户数据报协议 (UDP) 端口 514进行通信。虽然,系统日志服务器不会发回收到消息的确认。自 2009 年以来,系统日志已由 IETF 在RFC 5424 中标准化。

Syslog协议没有对日志的内容做任何限制,可以根据需要自定义日志的格式和内容。 Syslog协议使用一个中心日志服务器来接收和存储所有的日志消息。这个服务器称为Syslog服务器

syslog发展史

syslog协议多年来,用于syslog协议的标准RFC是RFC3194,现在,RFC5424是针对syslog协议提出的新标准草案。

换句话说,RFC5424取代了RFC3194。RFC5424是对较早的syslog协议的急需的改进。协议的最大变化之一是遵循RFC3339的时间戳规范。在较旧的协议在时间戳方面没有指定太多。但是在RFC5424收到的日志消息中至少包含年份,月份,日期,小时和秒。

syslog使用场景

系统日志记录:syslog最常见的用途是记录操作系统和应用程序的日志信息。这些日志信息可以用于故障排除、安全审计和性能分析等方面。

安全审计:syslog可以记录安全事件,例如登录失败、访问拒绝和恶意软件检测等。这些事件可以用于安全审计和监控。

网络设备管理:syslog可以用于记录网络设备的日志信息,例如路由器、交换机和防火墙等。这些日志信息可以用于网络故障排除和性能分析。

应用程序日志记录:syslog可以用于记录应用程序的日志信息,例如Web服务器、数据库和邮件服务器等。这些日志信息可以用于应用程序故障排除和性能分析。

日志聚合:syslog可以将来自多个设备和应用程序的日志信息聚合到一个中心位置。这些日志信息可以用于全面的故障排除和性能分析。

syslog 是一种标准的日志消息传输协议,主要用于在计算机系统中的不同组件之间进行日志消息的收集、传输和存储。它可以用于发送各种类型的日志,包括系统级别的日志、应用程序日志以及其他业务相关的日志。

对于业务系统的日志,你可以通过在应用程序中集成 syslog 客户端库来将日志消息发送到 syslog 服务器。这样,你可以在业务系统中使用 syslog 协议来传输和收集日志,以便集中存储、分析和监控。

例如,使用syslog发送HTTP上次下载请求日志

Syslog消息格式

Syslog协议格式通常由三个部分组成:头部、消息体和可选的结尾符。

下面是一个标准的Syslog消息格式:

< PRI > TIMESTAMP HOSTNAME TAG: MESSAGE

其中,各字段含义如下:

<PRI>:消息的优先级,由Facility和Severity两个部分组成。Facility表示日志来源类型,Severity表示日志级别。它们可以通过简单相加得到一个1~191之间的整数值。例如,Local0和Info级别对应的PRI值为16。
TIMESTAMP:消息产生时间戳,通常采用RFC 3339或ISO 8601格式。
HOSTNAME:消息发送者主机名或IP地址。
TAG:日志源程序或进程名称,可以用来识别不同应用程序生成的日志。
MESSAGE:具体的日志内容。

Syslog协议还支持多行文本、结构化数据等特性,并允许使用一些转义字符来处理特殊字符和空格等情况。例如,“\n”表示换行符,“\t”表示制表符等。

以下是一个示例Syslog消息:

<14>2019-12-31T23:59:59.000Z myserver.example.com nginx: [error] 1234#0: *56789 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.0.2.1, server: example.com, request: "GET /foo HTTP/1.1", upstream: "http://192.0.2.2:8080/bar", host: "example.com"

这条消息的PRI值为14(表示Notice级别),时间戳为2019年12月31日23时59分59秒,发送主机名为myserver.example.com,日志源程序为nginx,内容是一条错误消息,包括具体的错误码和请求信息等

Level的定义如下:

每个消息优先级还具有一个十进制严重性级别指示符。下表描述了它们及其数值价值观。严重性值必须在0到7之间(包括0和7)。

VERSION字段

VERSION字段表示syslog协议的版本规范。对于任何新版本,必须增加版本号更改HEADER任意部分的syslog协议规范格式。更改包括添加或删除字段,或者更改现有字段的语法或语义。本文件使用VERSION值为“ 1”。

TIMESTAMP字段

TIMESTAMP字段是源自[RFC3339]的形式化时间戳。在[RFC3164]格式必须是“Mmm dd hh:mm:ss”,不包括年份。“月份取值包括:Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec

二、python中使用syslog发日志

使用logging模块

import logging
import logging.handlers
# 日志对象的名称
my_logger = logging.getLogger('chenjunfei_log')
my_logger.setLevel(logging.INFO)
# 日志格式
formatter = logging.Formatter("%(processName)s %(name)s %(message)s")
handler = logging.handlers.SysLogHandler(address=("192.168.10.101", 514))
handler.setFormatter(formatter)
my_logger.addHandler(handler)
my_logger.info("test")

pysyslogclient

官方文档:https://pypi.org/project/pysyslogclient/

import pysyslogclient
# 通过UDP协议发送syslog日志
client = pysyslogclient.SyslogClientRFC5424('192.168.10.101', 514, proto="UDP")
# 通过TCP协议发送syslog日志
# client = pysyslogclient.SyslogClientRFC5424('192.168.10.101', 514, proto="TCP")
client.log("test message")

三、go中使用syslog发日志

标准库log/syslog

官方: https://pkg.go.dev/log/syslog

Syslog软件包被冷冻,不接受新功能。一些外部软件包提供了更多功能。看:
https://godoc.org/?q=syslog

☞ This package is not implemented on Windows. As the syslog package is frozen, Windows users are encouraged to use a package outside of the standard library. For background, see https://golang.org/issue/1108. ☞ This package is not implemented on Plan 9. ☞ This package is not implemented on NaCl (Native Client).
☞该软件包未在Windows上实现。由于Syslog软件包被冷冻,

鼓励Windows用户使用标准以外的软件包

golang提供了syslog 包,只需要调用Dial(),就可以连接syslog服务器,然后发送消息。
在写失败的情况下,syslog client会尝试重连syslog服务器,并重写。
连接方式由参数network定义(可以为tcp, udp,或空)。

如果network是空,Dial会连接到本地的syslog服务器。

package main

import (
        "log"
        "log/syslog"
)

func main() {
        sysLog, err := syslog.Dial("", "",syslog.LOG_ERR, "Saturday")
        if err != nil {
                log.Fatal(err)
        }
       
        sysLog.Emerg("Hello world!")
}

总结:如果你要用window下也可以用,不要用标准库syslog。另外官方思路,syslog建议采用三方库,标准库不推荐实现。

go-syslog

官方: https://pkg.go.dev/github.com/hashicorp/go-syslog#section-readme

这个代码库提供了一个非常简单的gsyslog包。这个包的目的是在不引入跨编译问题的情况下安全地导入syslog。标准库log/syslog在Windows系统上无法导入,而没有条件编译会增加复杂性。

gsyslog包是一个对log/syslog进行简单封装的包装器,但如果尝试在非Linux或OSX系统上进行初始化,就会返回一个运行时错误。简而言之,gsyslog只允许在Linux或OSX系统上使用,如果在其他系统上尝试使用它,就会引发错误。这样可以确保代码在不受支持的系统上无法使用,并提醒开发人员限制gsyslog在特定操作系统上的使用。

总结:gsyslog就是对标准库 syslog的简单封装,也不支持windows

同时支持linux和windows go syslog 库

暂时没有找到比较好的,有人有好的发现,可以留言,我跟踪研究一下,补充到这里,感谢~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西京刀客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值