首页 > 后端开发 > Golang > 可观察性 - 为什么记录很重要

可观察性 - 为什么记录很重要

PHPz
发布: 2024-07-17 21:57:01
原创
839 人浏览过

Observability - Why logging its important

在日益复杂的数字时代,可观察性是管理现代软件系统的关键。可观察性最重要的支柱之一是日志记录。让我们探讨一下为什么日志记录如此重要以及如何充分利用它。

什么是日志记录?

日志记录是记录系统中活动和事件的过程。这包括各种信息,从错误消息、用户活动到系统性能。将日志记录视为系统的飞机“黑匣子” - 始终记录正在发生的事情,准备在需要时提供见解。

为什么日志记录如此重要?

以下是可以考虑日志为何如此重要的一些要点:

  1. 更快地解决问题
    有了良好的日志,开发团队就可以确定根本原因,而无需猜测。寻找bug就像拥有一张藏宝图!

  2. 安全改进
    日志可以成为您检测可疑活动的“间谍”。安全团队可以更快地响应威胁,例如让消防部门始终待命。

  3. 性能分析
    通过日志,您可以识别系统中的瓶颈。这就像您的应用程序的健康有一位私人医生。

  4. 了解用户行为
    用户活动日志提供了有关如何使用产品的宝贵见解。这就像有一个私人助理不断观察和报告客户的喜好。

日志记录的最佳实践

为了最大限度地发挥日志记录的好处,以下是可以执行的一些最佳实践:

确定适当的日志级别

使用这些适当的日志级别可以帮助您快速过滤信息,例如按紧急程度对日志进行排序。

以下是使用Golang语言显示不同级别日志的示例。这里我们使用 Logrus。

package main

import (
    "github.com/sirupsen/logrus"
)

func main() {
    log := logrus.New()
    log.SetLevel(logrus.DebugLevel)

    log.Debug("Starting app..")
    log.Info("User has successfully logged in")
    log.Warn("CPU usage exceeds 80%")
    log.Error("Failed to save data to database")
    log.Fatal("A critical error occurs, the application will stop")
}
登录后复制

下面是对上面几个日志级别的解释:

  • DEBUG:调试的详细信息,通常仅在开发过程中启用。
  • INFO:有关应用程序正常流程的一般信息。
  • 警告:对于将来可能出现问题的情况,但不要停止应用程序。
  • 错误:导致特定功能失败的错误,但应用程序仍在运行。
  • 致命:严重错误,可能导致应用程序停止。

包括相关的上下文信息

每个日志条目都应该提供足够的上下文来理解发生了什么。这可能包括:

  • 时间戳。
  • 交易或会话 ID。
  • 用户 ID(如果相关)。
  • 函数或模块名称。
  • 相关输入数据(小心敏感数据)。
  • 错误的堆栈跟踪

这是打印日志时的代码示例,包括帮助我们跟踪的上下文信息。

package main

import (
    "github.com/sirupsen/logrus"
    "time"
)

type UserAction struct {
    UserID    int
    Action    string
    Timestamp time.Time
}

func main() {
    log := logrus.New()
    log.SetLevel(logrus.DebugLevel)

    // Use format json
    log.SetFormatter(&logrus.JSONFormatter{})

    // Dummy data
    action := UserAction{
        UserID:    12345,
        Action:    "checkout",
        Timestamp: time.Now(),
    }

    // Print log
    log.WithFields(logrus.Fields{
        "user_id":    action.UserID,
        "action":     action.Action,
        "timestamp":  time.Now().Format(time.RFC3339),
        "session_id": generateSessionID(),
        "module":     "payment_processor",
        "ip_address": "192.168.1.100",
    }).Error("Payment failed")

}

func generateSessionID() string {
    return "sess_abc123"
}
登录后复制

我们可以看到,我们已经包含了上下文信息的几个元素,可以让我们以后更容易进行追踪。有什么方便之处,就是我们可以根据级别来搜索日志,例如上面代码示例中的错误级别,也可以根据我们输入的信息根据时间等进行搜索。

使用一致的格式

一致的日志格式使解析和分析变得更容易,特别是在使用自动化工具时(关于工具,将在下面讨论)。格式化还使我们更容易根据条件搜索日志,例如日志级别、消息或时间。格式示例:

[TIMESTAMP] [LEVEL] [MODULE] [MESSAGE]
登录后复制

或者 JSON 格式,方便解析,如上面代码示例中的结果:

{
    "action": "checkout",
    "ip_address": "192.168.1.100",
    "level": "error",
    "module": "payment_processor",
    "msg": "Payment failed",
    "session_id": "sess_abc123",
    "time": "2024-06-26T20:59:02+07:00",
    "timestamp": "2024-06-26T20:59:02+07:00",
    "user_id": 12345
}
登录后复制

实施日志轮换来管理文件大小

日志轮转可防止日志文件变得太大而难以管理。这涉及:

  • 限制日志文件的大小。

  • 定期创建新的日志文件(例如每天或每周)。

  • 存档或删除旧日志文件。

  • 在 Linux 上使用 logrotate 等工具或支持轮换的日志框架。

考虑记录信息的隐私和安全

安全和隐私在日志记录中非常重要:

  • 请勿记录密码或信用卡信息等敏感数据。

  • 如有必要,屏蔽或加密个人数据。

  • 确保只有授权人员才能访问日志文件。

  • 根据公司政策和法规实施保留政策以删除旧日志。

监控和分析日志的工具

随着系统复杂性的增加,对监控和分析日志的复杂工具的需求也变得越来越重要。以下是一些可以帮助进行可观察性和日志分析的流行工具:

  1. 格拉法纳
    Grafana 是一个用于可视化日志数据的开源平台。这些工具可以集成到包括日志在内的各种数据源中。允许创建定制的交互式仪表板。适用于指标和日志的实时可视化。

  2. 新遗物
    New Relic 是一个一体化的可观察平台
    在一处提供日志分析、跟踪和指标。还有人工智能功能可以检测异常并关联问题。
    适合监控大型应用程序和基础设施。

  3. 洛基
    Loki 是一个轻量级且经济高效的日志聚合系统。 Loki 旨在与 Grafana 良好配合
    使用基于标签的索引,类似于 Prometheus
    非常适合已经使用 Prometheus 和 Grafana 的组织。

  4. AWS CloudWatch 日志见解
    AWS 的这种集成日志分析服务可以查询和分析来自各种 AWS 服务的日志。
    检测 RDS 和其他数据库服务中的慢查询的功能
    与其他 AWS 服务轻松集成。

结论

日志记录不仅仅是一个附加功能,而且是构建可靠系统的重要组成部分。通过正确实施,日志记录可以成为您的超级传感器 - 提供系统操作的完整可见性,帮助预防问题发生,并在问题出现时加快解决速度。

所以,今天就开始投资良好的日志记录实践吧。请记住,在复杂技术的世界中,好的日志可以成为暴风雨中的指路明灯!

如果您有其他信息,请在下面的评论栏中输入。

阅读参考文献

  • Github 存储库

  • 应用程序日志记录及其重要性

  • 为什么日志管理很重要?

  • 2024 年 10 个可观察性工具:功能、市场份额并选择适合您的工具

  • 前 20 名最佳日志分析工具和日志分析器(优点和缺点)

以上是可观察性 - 为什么记录很重要的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板