Observability:你所需要知道的关于 Syslog 的一些知识
2022年8月25日 | by mebius
Syslog 是一种标准,用于以特定格式从各种网络设备发送和接收通知消息。 这些消息包括时间戳、事件消息、严重性、主机 IP 地址、诊断等。 就其内置的严重性级别而言,它可以传达级别 0、紧急、级别 5、警告、系统不稳定、严重以及级别 6 和 7(即信息和tgcode调试)之间的范围。
此外,Syslog 是开放式的。 Syslog 旨在监控网络设备和系统,以便在出现任何功能问题时发送通知消息——它还针对预先通知的事件发出警报,并通过参与网络设备的更改日志/事件日志来监控可疑活动。
Syslog 协议最初由 Eric Allman 编写,并在 RFC 3164 中定义。消息通过 IP 网络发送到事件消息收集器或 syslog 服务器。 Syslog 使用用户数据报协议 (UDP) 端口 514 进行通信。 虽然,系统日志服务器不会发回收到消息的确认。 自 2009 年以来,系统日志已由 IETF 在 RFC 5424 中标准化。
如今,它已在许多操作系统上获得广泛支持,包括几乎所有版本的 Linux、Unix 和 MacOS。 对于 Microsoft Windows,Syslog 通过开源和商业第三方库得到支持。
Syslog 的名称来自系统日志记录协议。 它是消息记录的标准,并且已经使用了数十年,用于将系统日志或事件消息发送到特定的服务器,称为 Syslog 服务器。
Syslog Severs
Syslog 服务器用于发送诊断和监控数据。 然后可以分析数据以进行系统监控、网络维护等。 由于大量设备支持 Syslog 协议,它们可以方便地将信息记录到 Syslog 服务器中。
SNMP 数据可用于快速评估任何故障点。 系统日志服务器还可以具有自动事件来触发有助于防止停机或中断的警报。 以下是一些基于 Windows 的 Syslog 服务器的列表:
Syslog Servers 组件
为了实现为来自多个来源的日志提供中央存储库的目标,Syslog 服务器具有多个组件,包括:
- Syslog Listener:收集和处理通过 UDP 端口 514 发送的 Syslog 数据。
- 数据库:系统日志服务器需要数据库来存储大量数据以便快速访问。
- 管理和过滤软件:Syslog 服务器需要帮助来自动化工作,以及过滤以查看特定的日志消息。 该软件能够根据需要提取特定参数和过滤日志。
消息组件
Syslog 具有由 RFC 5424 定义的日志消息的标准定义和格式。Syslog消息格式分为三部分:
- PRI:计算的优先级值,详细说明消息优先级。
- HEADER:由两个标识字段组成,它们是时间戳和主机名(发送日志的机器名称)。
- 结构化数据(SD)
- MSG:这包含有关发生的事件的实际消息。 它是 UTF-8 编码的,也分为 TAG 和 CONTENT 字段。 这些信息包括事件消息、严重性、主机 IP 地址、诊断等。
在 header 中,你将看到类型的描述,例如:
- Priority
- Version
- Timestamp
- Hostname
- Application
- Process id
- Message id
然后,你将在方括号内看到结构化数据,其中包含 “key=value” 格式的数据块。 在 SD 之后,您将看到详细的日志消息,它以 UTF-8 编码。
例如,以下消息:
1 2003-10-11T22:14:15.003Z mymachine.example.com su - ID47 - BOM'su root' failed for lonvick on /dev/pts/8
对应以下格式:
VERSION ISOTIMESTAMP HOSTNAME APPLICATION PID MESSAGEID STRUCTURED-DATA MSG
更多关于 PRI 的介绍
这是从有助于对消息进行分类的两个数值得出的,即设施代码(Facility Code)和严重级别(Severity Level)。
Facility Code
该值是 15 个预定义代码之一或在 16 到 23 的情况下是各种本地定义的值。这些代码指定记录消息的程序的类型。 具有不同设施的消息可能会有不同的处理方式。 可用设施列表由标准定义:
Facility Code | Keyword | Description |
---|---|---|
0 | kern | Kernel messages |
1 | user | User-level messages |
2 | Mail system | |
3 | daemon | System daemons |
4 | auth | Security/authentication messages |
5 | syslog | Messages generated internally by syslogd |
6 | lpr | Line printer subsystem |
7 | news | Network news subsystem |
8 | uucp | UUCP subsystem |
9 | cron | Clock daemon |
10 | authpriv | Security/authentication tgcodemessages |
11 | ftp | FTP daemon |
12 | ntp | NTP subsystem |
13 | security | Log audit |
14 | console | Log alert |
15 | solaris-cron | Scheduling daemon |
16-23 | local0 – local7 | Locally-used facilities |
Severity Level
系统日志消息的第二个值以 0 到 7 的数字代码对消息的重要性或严重性进行分类。
Level | Severity | Description |
---|---|---|
0 | Emergency | System is unusable |
1 | Alert | Action must be taken immediately |
2 | Critical | Critical conditions |
3 | Error | Error conditions |
4 | Warning | Warning conditions |
5 | Notice | Normal but significant condition |
6 | Informational | Informational messages |
7 | Debug | Debug-level messages |
PRI 值的计算方法是将设施代码乘以 8,然后加上严重级别。 消息通常不超过 1024 字节。
它是如何工作的?
Syslog 标准中有三个不同的层,它们是:
- Syslog content:事件消息中包含的信息
- Syslog application:生成、解释、路由和存储消息
- Syslog transport:发送消息
此外,可以将应用程序配置为将消息发送到多个目的地。 还有一些警报可以为事件提供即时通知,例如:
- Hardware errors
- Application failures
- Lost contact
- Mis-configuration
此外,可以设置警报以通过 SMS、弹出消息、电子邮件、HTTP 等方式发送通知。 由于该过程是自动化的,IT 团队将立即收到任何设备突然故障的通知。
优点
Syslog 允许将生成消息的软件、存储它们的系统以及报告和分析它们的软件分开。因此,它提供了一种方法来确保在原始服务器之外记录和存储关键事件。攻击者在破坏系统后的第一个努力通常是掩盖他们在日志中留下的痕迹。通过 Syslog 转发的日志是遥不可及的。
监控来自众多系统的大量日志既耗时又不切实际。 Syslog 通过将这些事件转发到集中式 Syslog 服务器,将来自多个来源的日志整合到一个位置来帮助解决这个问题。
虽然 Syslog 不是监控联网设备状态的最佳方式,但它可能是监控网络设备整体健康状况的好方法。例如,事件量的突然高峰可能表示流量突然高峰。在系统边缘了解这一点可以让你在问题发生之前提前解决问题。
Syslog 可以配置为将身份验证事件转发到 Syslog 服务器,而无需安装和配置完整的监视代理程序的开销。
局限性
Syslog 不包含身份验证机制,因此安全性较弱。因此,一台机器有可能冒充另一台机器并发送虚假的日志事件。它也容易受到重放攻击。
此外,由于它依赖于 UDP 传输,因此可能会丢失 Syslog 消息。 UDP 是无连接的且无法保证,因此消息可能由于网络拥塞或数据包丢失而丢失。
Syslog 协议的另一个限制是被监控的设备必须启动并运行并连接到网络才能生成和发送消息。如果系统脱机,来自服务器的严重错误可能根本不会发送错误。因此,Syslog 并不是监控设备上下线状态的好方法。
最后,虽然有关于消息组件的标准,但在消息内容的格式方面缺乏一致性。该协议没有定义标准消息格式。有些消息可能是人类可读的,有些则不是。 Syslog 只是提供了一种传输消息的方法。
Log 信息的最佳实践
为了帮助创建最有用的 Syslog 消息,请遵循以下最佳实践:
使用可解析的日志格式
日志消息没有通用结构。 如果你无法自动解析日志条目以找到你正在搜索的内容,那么处理大量日志几乎是不可能的。 工具更有可能使用可解析的格式。
一个例子是 JSON,这是一种结构化数据日志格式,已成为许多日志记录应用程序使用的标准。 它既是机器可读的,也是人类可读的,并且被大多数语言和运行时支持。 它还具有紧凑且高效的解析的额外好处。
使用日志库或框架
有许多用于编程语言和运行时环境的日志库。 无论你的应用程序是用什么语言开发的,都可以使用兼容的框架将日志从你的应用程序或服务传输到 Syslog 服务器。
标准化格式
在操作标准中设置消息的格式或架构,供所有用户遵循。 标准化格式将意味着日志中的混乱更少,并且它们变得更易于搜索。 避免长句并使用标准缩写,即使用 “ms” 表示 “毫秒”。
你的日志中应该有不可协商的字段。 IP 地址,时间戳,任何你需要的。 每次都设置基本字段非常重要。 此外,随着新的日志代码添加到你的软件、新团队成员的加入和新功能的开发,没有模式的日志格式难以维护。
准确了解需要在日志消息中嵌入哪些信息有助于用户编写它们并帮助其他人阅读它们。
包括标识符
与使用格式来精确描述日志格式密切相关的是在消息中使用标识符的最佳实践。 标识符有助于识别消tgcode息的来源并确定多条消息之间的关系。 例如,在日志消息中包含事务或会话 ID 允许你将两个单独的错误链接到同一个用户会话。
包括 Syslog 严重级别
发送消息时正确使用最合适的日志记录严重性级别可以使将来的故障排除更加容易。 允许将日志记录设置在错误的级别,并可能导致监控问题产生错误警报或掩盖紧急问题。
包括适量的上下文
最好的 Syslog 消息包括所有相关的上下文,以在日志调用时重新创建应用程序的状态。 这意味着在错误消息中添加问题的根源以及发送紧急日志消息的简明原因。
避免多行日志消息
Syslog 协议规范允许在单个日志消息中包含多行,但这可能会导致一些解析问题。 日志行中的换行符对每个日志分析工具都不友好。 例如,sed 和 grep 命令不能很好地处理跨行模式搜索。 因此,请按照商定的消息格式查看和整理消息。
但是,如果你绝对必须包含多行消息,那么请使用基于云的日志聚合工具(例如 Papertrail)进行调查。 当单个日志消息跨行拆分时,它能够找到它的单独部分。
不要记录敏感数据
永远不要将任何密码写入日志文件。 这同样适用于敏感数据,如信用卡详细信息、银行账户详细信息和个人信息。 Syslog 消息很少在静态时加密。 恶意攻击者将能够轻松读取它们。
优化您的日志记录代码
另一个好的做法是查看日志记录代码以:
- 在 Emergency、Alert、Critical、Error 和 Warning 日志语句中添加更多内容。
- 保持通知、信息和调试消息简短。
- 登录决策点,不要在短循环内登录。
常用工具
适用于 Linux 和 Windows 的一些最佳 Syslog 工具包括:
SolarWinds Kiwi 系统日志服务器
收集、查看和归档 Syslog 消息的最佳工具之一。 它是一个多功能、用户友好的查看器,具有自动消息响应功能。 该工具易于安装并以纯文本或 HTML 格式生成报告。
该软件处理来自 Windows、Linux 和 UNIX 主机的 Syslog 和 SNMP。
Logstash
来自集中式 Syslog 服务器的数据可以转发到 Logstash。 这可以在将日志数据发送到 Elasticsearch 之前执行进一步的解析和丰富。你如果想了解更多,请参阅文章:
Beats
我们可以采用 Filebeat 来收集 System 日志。详细细节可以参考文章
Elastic Agents
在最新的 Elastic Stack 发布版中,我们可以采用 Elastic Agents 来采集 System 日志。详细信息可以参考文章 “Observability:使用 Elastic Agent 来摄入日志及指标 – Elastic Stack 8.0”。
Fuentd
我们可以采用 Fluentd 来摄入日志。详细描述,请阅读文章 “Elastic:Fluentd 在 Elastic Stack 中的运用”
LOGalyzer
LOGalyzer 是另一个免费的开源集中式日志管理和网络监控工具。它支持 Linux 和 Unix 服务器、网络设备和 Windows 主机,提供实时事件检测和广泛的搜索功能。
总结
完整的网络监控需要使用多种工具。 Syslog 是网络监控中的一个重要工具,因为它可以确保在没有显着影响的情况下发生的事件不会通过任何监控漏洞。 最佳实践是使用结合了所有工具的软件,以便始终了解网络中发生的情况。
由于 Syslog 是一种标准协议,因此许多应用程序都支持向 Syslog 发送数据。 通过集中这些数据,你可以轻松审核安全性、监控应用程序行为并跟踪其他重要的服务器信息。
大多数编程工具和运行时环境都支持 Syslog 日志消息格式,因此它是传输和记录日志消息的有用方式。 使用正确的数据创建日志消息需要用户考虑情况并适当地调整消息。 遵循最佳实践使工作更容易。
文章来源于互联网:Observability:你所需要知道的关于 Syslog 的一些知识
相关推荐: Observability:如何使用 Elastic Agents 把微服务的数据摄入到 Elasticsearch 中
在 Elastic Agents 出现之前,我们有很多方法来把微服务的数据摄入到 Elasticsearch 中。我们可以使用各种语言的 client API 直接写入到 Elasticsearch 中,我们也可以使用 Logstash 或者 Filebeat…