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

15分钟学 Go 第 46 天 : 监控与日志

第46天:监控与日志

学习目标

了解如何实现应用监控与日志管理,掌握相关工具和最佳实践。


内容结构

  1. 引言
  2. 监控的概念与工具
    • 监控的定义
    • 常见监控工具
  3. 日志管理的概念与工具
    • 日志的重要性
    • 常见日志管理工具
  4. 实现监控与日志的最佳实践
    • 监控指标
    • 日志格式
  5. 实战案例
    • 使用Prometheus进行监控
    • 使用Logrus进行日志管理
  6. 代码示例
  7. 代码运行流程图
  8. 总结

1. 引言

监控与日志是现代应用程序管理中不可或缺的重要部分。有效的监控能够在系统故障发生前及早警报,而良好的日志管理则能帮助我们快速定位问题。在这一天的内容中,我们将深入研究如何在Go语言中实现应用监控和日志管理。


2. 监控的概念与工具

2.1 监控的定义

监控是指对系统状态的实时观察与记录,通常以指标(Metrics)的形式表现。这些指标可以包括CPU使用率、内存占用、请求响应时间、错误率等。

2.2 常见监控工具

工具描述
Prometheus一个用于监控系统和服务的开源系统,采用Pull模型。
Grafana用于展示监控数据的开源工具,支持多种数据源。
Datadog提供云监控和应用性能管理的商业平台。
Prometheus与Grafana

Prometheus是一款流行的监控工具,它使用时间序列数据库存储数据。Grafana可以与Prometheus配合,进行数据可视化。


3. 日志管理的概念与工具

3.1 日志的重要性

日志记录是追踪应用程序行为和问题的手段,通过分析日志我们可以洞悉系统运行情况,并进行性能优化。

3.2 常见日志管理工具

工具描述
LogrusGo语言中一个结构化、标准化的日志库。
ELK StackElasticsearch, Logstash, Kibana的集合,用于集中管理和展示日志。
Fluentd用于统一管理日志的开源数据收集器。

4. 实现监控与日志的最佳实践

4.1 监控指标

  • 可用性(Availability):服务是否在线。
  • 性能(Performance):响应时间、吞吐量等。
  • 错误率(Error Rate):应用程序中的错误次数与总请求数之比。

4.2 日志格式

采用统一的日志格式,有助于后期的分析与检索。通常使用JSON格式进行结构化日志记录。

示例日志格式:

{"level": "info","msg": "User logged in","user_id": "12345","timestamp": "2024-11-01T12:00:00Z"
}

5. 实战案例

在本节中,我们将实现一个简单的Go应用程序,使用Prometheus进行监控,并使用Logrus进行日志管理。

5.1 使用Prometheus进行监控

首先,我们需要安装Prometheus并在Go应用中集成。

go get github.com/prometheus/client_golang/prometheus
go get github.com/prometheus/client_golang/prometheus/promhttp
创建一个简单的Go应用
// main.go
package mainimport ("log""net/http""github.com/prometheus/client_golang/prometheus""github.com/prometheus/client_golang/prometheus/promhttp"
)var (requests = prometheus.NewCounterVec(prometheus.CounterOpts{Name: "app_requests_total",Help: "Total number of requests",},[]string{"method"},)
)func init() {prometheus.MustRegister(requests)
}func handler(w http.ResponseWriter, r *http.Request) {requests.WithLabelValues(r.Method).Inc()w.Write([]byte("Hello, World!"))
}func main() {http.HandleFunc("/", handler)http.Handle("/metrics", promhttp.Handler())log.Fatal(http.ListenAndServe(":8080", nil))
}
运行应用
go run main.go

访问 http://localhost:8080/metrics 查看Prometheus指标。

5.2 使用Logrus进行日志管理

安装Logrus:

go get github.com/sirupsen/logrus
修改应用以集成Logrus
// main.go
package mainimport ("log""net/http""github.com/prometheus/client_golang/prometheus""github.com/prometheus/client_golang/prometheus/promhttp""github.com/sirupsen/logrus"
)var (requests = prometheus.NewCounterVec(prometheus.CounterOpts{Name: "app_requests_total",Help: "Total number of requests",},[]string{"method"},)
)func init() {prometheus.MustRegister(requests)logrus.SetFormatter(&logrus.JSONFormatter{})
}func handler(w http.ResponseWriter, r *http.Request) {requests.WithLabelValues(r.Method).Inc()logrus.WithFields(logrus.Fields{"method": r.Method,"path":   r.URL.Path,}).Info("Received request")w.Write([]byte("Hello, World!"))
}func main() {http.HandleFunc("/", handler)http.Handle("/metrics", promhttp.Handler())log.Fatal(http.ListenAndServe(":8080", nil))
}
查看日志

运行应用后,访问各路径,并在控制台查看相应的日志信息。


6. 代码示例

完整代码示例:

// main.go
package mainimport ("log""net/http""github.com/prometheus/client_golang/prometheus""github.com/prometheus/client_golang/prometheus/promhttp""github.com/sirupsen/logrus"
)var (requests = prometheus.NewCounterVec(prometheus.CounterOpts{Name: "app_requests_total",Help: "Total number of requests",},[]string{"method"},)
)func init() {prometheus.MustRegister(requests)logrus.SetFormatter(&logrus.JSONFormatter{})
}func handler(w http.ResponseWriter, r *http.Request) {requests.WithLabelValues(r.Method).Inc()logrus.WithFields(logrus.Fields{"method": r.Method,"path":   r.URL.Path,}).Info("Received request")w.Write([]byte("Hello, World!"))
}func main() {http.HandleFunc("/", handler)http.Handle("/metrics", promhttp.Handler())log.Fatal(http.ListenAndServe(":8080", nil))
}

7. 代码运行流程图

+---------------------+
|    HTTP Request     |
+----------+----------+|v
+---------------------+
|  Request Handler    |
+----------+----------+|v
+---------------------+
|  Increment Metrics  |
|  Log Request Info   |
+----------+----------+|v
+---------------------+
|     HTTP Response   |
+---------------------+

8. 总结

在本节内容中,我们通过学习监控与日志管理的概念和工具,掌握了如何在Go语言中实现监控与日志的功能。通过结合Prometheus和Logrus,我们可以有效地收集应用程序的性能指标和日志信息,帮助我们进行性能分析和故障排查。监控与日志管理是构建高可用、高性能应用的核心部分,后续可以根据项目需求选择合适的工具进行深入学习与应用。


怎么样今天的内容还满意吗?再次感谢观众老爷的观看,关注GZH:凡人的AI工具箱,回复666,送您价值199的AI大礼包。最后,祝您早日实现财务自由,还请给个赞,谢谢!

相关文章:

15分钟学 Go 第 46 天 : 监控与日志

第46天:监控与日志 学习目标 了解如何实现应用监控与日志管理,掌握相关工具和最佳实践。 内容结构 引言监控的概念与工具 监控的定义常见监控工具 日志管理的概念与工具 日志的重要性常见日志管理工具 实现监控与日志的最佳实践 监控指标日志格式 实战…...

BFS 算法专题(四):多源 BFS

目录 1. 01 矩阵 1.1 算法原理 1.2 算法代码 2. 飞地的数量 2.1 算法原理 2.2 算法代码 3. 地图中的最高点 3.1 算法原理 3.2 算法代码 4. 地图分析 4.1 算法原理 4.2 算法代码 1. 01 矩阵 . - 力扣(LeetCode) 1.1 算法原理 采用 BFS 正难…...

基于Spring Boot+Vue的养老院管理系统【原创】

一.系统开发工具与环境搭建 1.系统设计开发工具 后端使用Java编程语言的Spring boot框架 项目架构:B/S架构 运行环境:win10/win11、jdk17 前端: 技术:框架Vue.js;UI库:ElementUI; 开发工具&…...

Linux screen和cscope工具使用总结

1 minicom使用 1.1 minicom配置 第一次启动时: 如果输入sudo minicom提示错误,则需: sudo minicom -s 启动 出现配置菜单:选serial port setup 进入串口配置 输入A配置串口驱动为/dev/ttyUSB0 输入E配置速率为115200 8N1 输入F将 …...

深度学习面试八股汇总

按序发布: 深度学习——优化算法、激活函数、归一化、正则化 进入 深度学习——权重初始化、评估指标、梯度消失和梯度爆炸 进入 深度学习——前向传播与反向传播、神经网络(前馈神经网络与反馈神经网络)、常见算法 进入 深度学习——卷积神…...

微服务架构面试内容整理-API 网关-Gateway

Spring Cloud Gateway 是一个用于构建 API 网关的框架,它为微服务架构提供了灵活的路由和过滤功能。作为 Spring Cloud 生态的一部分,Gateway 提供了易于使用的 API 和强大的功能,适合用于现代微服务架构中的请求管理和服务交互。以下是 Spring Cloud Gateway 的主要特点、工…...

22.04Ubuntu---ROS2使用rclcpp编写节点C++

节点需要存在于功能包当中,功能包需要存在于工作空间当中。 所以我们要想创建节点,就要先创建一个工作空间,再创建功能包。 第一步:创建工作空间 mkdir -p chapt2_ws/src/ 第二步:创建example_cpp功能包&#xff0c…...

XML 现实案例:深入解析与应用

XML 现实案例:深入解析与应用 XML(可扩展标记语言)自1998年成为W3C推荐标准以来,一直是数据交换和存储的重要工具。它是一种用于标记电子文件的结构化语言,使得数据不仅人类可读,而且机器可处理。本文将探讨XML在现实世界中的应用案例,展示其如何在不同领域中发挥作用。…...

Spring源码(十二):Spring MVC之Spring Boot

本篇将详细讨论Spring Boot 的启动/加载、处理请求的具体流程。我们先从一个简单的Spring Boot项目日志开始分析(这里假设读者已经仔细阅读完了前面的文章,且对Spring源码有一定深度的了解,否则会看得一脸懵逼)。 本文为2024重置…...

Kafka 之事务消息

前言: 在分布式消息系统中,事务消息也是一个热门课题,在项目的实际业务场景中,如果用到事务消息的场景也不少见,那 Kafka 作为一个高性能的分布式消息中间件,同样也支持事务消息,本篇我们将对 …...

小菜家教平台(四):基于SpringBoot+Vue打造一站式学习管理系统

前言 昨天配置完了过滤器,权限检验,基本的SpringSecurity功能已经配置的差不多了,今天继续开发,明天可能会暂停一天整理一下需求,然后就进行CRUD了。 今日进度 补充SpringSecurity异常处理和全局异常处理器 详细操作…...

解决 Vue3、Vite 和 TypeScript 开发环境下跨域的问题,实现前后端数据传递

引言 本文介绍如何在开发环境下解决 Vite 前端(端口 3000)和后端(端口 80)之间的跨域问题: 在开发环境中,前端使用的 Vite 端口与后端端口不一致,会产生跨域错误提示: Access to X…...

量化交易系统开发-实时行情自动化交易-3.3.数据采集流程

19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。 接下来说说数据采集流程,后…...

探索PyAV:Python中的多媒体处理利器

文章目录 探索PyAV:Python中的多媒体处理利器第一部分:背景介绍第二部分:PyAV是什么?第三部分:如何安装PyAV?第四部分:简单的库函数使用方法1. 打开文件2. 查看流3. 遍历帧4. 编码帧5. 关闭输出…...

SpringBoot源码解析(三):启动开始阶段

SpringBoot源码系列文章 SpringBoot源码解析(一):SpringApplication构造方法 SpringBoot源码解析(二):引导上下文DefaultBootstrapContext SpringBoot源码解析(三):启动开始阶段 目录 前言一、入口二、SpringApplicationRunListener1、作用…...

C# const与readonly关键字的区别

在C#中,readonly关键字用于定义在对象创建后不能更改的字段。它可以与常量(const)有些相似,但也有显著不同。以下是readonly关键字的一些关键点: 定义与用法: readonly字段可以在类的构造函数中初始化,而const字段必须…...

【数据分享】1901-2023年我国省市县镇四级的逐年降水数据(免费获取/Shp/Excel格式)

之前我们分享过1901-2023年1km分辨率逐月降水栅格数据和Shp和Excel格式的省市县四级逐月降水数据,原始的逐月降水栅格数据来源于彭守璋学者在国家青藏高原科学数据中心平台上分享的数据!基于逐月数据我们采用求年累计值的方法得到逐年降水栅格数据&#…...

hhdb数据库介绍(9-4)

访问安全 权限体系 计算节点有两类用户,一类是计算节点数据库用户,用于操作数据,执行SELECT,UPDATE,DELETE,INSERT等SQL语句。另一类是关系集群数据库可视化管理平台用户,用于管理配置信息。此…...

苍穹外卖的分层所用到的技术以及工具+jwt令牌流程图(jwt验证)

分层用到的技术以及工具: jwt令牌流程图:...

Python——数列1/2,2/3,3/4,···,n/(n+1)···的一般项为Xn=n/(n+1),当n—>∞时,判断数列{Xn}是否收敛

没注释的源代码 from sympy import * n symbols(n) s n/(n1) print(数列的极限为:,limit(s,n,oo))...

免费好用的去水印工具推荐:哪个效果最好?免费去水印工具对比 2026 实测

免费好用的去水印工具推荐:哪个效果最好?免费去水印工具对比 2026 实测 去水印这件事,真的是越来越高频了。自媒体剪素材、收藏喜欢的短视频、整理图片资料……一旦碰到带水印的内容,找个顺手的工具就成了刚需。网上工具多&#x…...

Sora 2国内可用性深度测评(2024Q2最新版):API调用失败率<0.8%的私有化部署方案首次公开

更多请点击: https://intelliparadigm.com 第一章:ChatGPT Sora 2视频生成怎么用 Sora 2 并非 OpenAI 官方发布的模型——截至目前(2024年中),OpenAI 仅公开了 Sora(初代)的演示能力&#xff0…...

阴阳师百鬼夜行AI自动化:3分钟配置实现全智能碎片收集

阴阳师百鬼夜行AI自动化:3分钟配置实现全智能碎片收集 【免费下载链接】OnmyojiAutoScript Onmyoji Auto Script | 阴阳师脚本 项目地址: https://gitcode.com/gh_mirrors/on/OnmyojiAutoScript 还在为手动刷百鬼夜行而烦恼吗?每天重复点击、熬夜…...

电光非线性计算加速Transformer注意力机制

1. 电光非线性计算加速Transformer注意力机制的技术背景Transformer架构已经成为当前自然语言处理和计算机视觉领域的主导性神经网络结构,其核心组件——注意力机制依赖于Softmax等非线性运算。虽然这些非线性操作仅占模型总计算量的不到1%,但由于现代GP…...

Standard计划突然限速?揭秘MJ v6.1后台配额算法变更,3步绕过队列延迟,今日生效

更多请点击: https://intelliparadigm.com 第一章:Standard计划限速事件的全貌还原 2024年Q2,Standard计划在多个云原生生产环境中突发性触发API速率限制(Rate Limiting),导致下游服务批量超时与重试风暴。…...

Windows和Office激活难题?KMS智能激活脚本让你轻松告别烦恼

Windows和Office激活难题?KMS智能激活脚本让你轻松告别烦恼 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 你是否曾经因为Windows系统突然弹出激活提示而中断工作?是否遇…...

200+ 发音人怎么缩小范围:先定风格再试听

🎯 200 发音人怎么缩小范围:先定风格再试听面对顶伯文字转语音工具中超过 200 种发音人,选择困难症难免发作。😵 别急,掌握 「先定风格再试听」 的筛选逻辑,就能快速锁定目标。 本文从风格分类、筛选技巧到…...

基于开关电容器的级联多电平逆变器,使用布尔PWM控制技术研究(Simulink仿真实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

Python 爬虫高级实战:爬虫接口限流自适应调节

前言 网络目标站点普遍具备严格的接口访问限流、频率校验、IP 频次风控、接口令牌校验等防护机制,常规固定延时、固定并发的爬虫模式极易触发封禁、接口 429 限流、会话失效、IP 拉黑等问题。人工配置延时、手动调整并发阈值的传统方式,无法适配站点动态…...

Arm编译器在嵌入式开发中的优化实践

1. Arm编译器嵌入式开发环境概述在嵌入式系统开发领域,工具链的选择往往决定了最终产品的性能上限。作为Arm架构的"原生"编译器,Arm Compiler for Embedded凭借其深度优化的代码生成能力,在物联网设备、工业控制器等资源受限场景中…...