go-kit 入门(三)日志和仪表化

日志和仪表化

任何服务在日志和仪表化没有就绪的情况下,都不能说是生产环境就绪的。

传输日志

任何需要日志记录的组件都需要将 logger 作为依赖,就像数据库连接一样。因此,我们在 main 函数中构造 logger 对象,然后将其传入需要使用它的组件中。我们始终不去使用一个全局的 logger 对象。

我们可以直接将 logger 传入到 stringService 的实现代码中,但是,还有一个更好的方式。我们可以使用 中间件 (middleware) ,也常常被称为 装饰者。

middleware 是一个函数,它接收一个 endpoint 作为参数,并且返回一个 endpoint。

在函数中,它可以做任何事情。下面就让我们来创建一个基本的日志中间件。

然后,我们将它加入到每一个处理函数中。

事实证明,这项技术是非常有价值的,远远不止于记录日志,Go kit 的很多模块都被实现为端点中间件。

应用日志

那么,在我们的应用中,应该如何记录日志呢?比如那些需要被传入的参数等。事实上,我们能够为我们的服务定义一个中间件,从而获得同样好的组合效果。由于我们的 StringService被定义为一个接口,我们只需要作出一个新的类型,来包装先有的 StringService,让它来执行扩充的记录日志的任务。

然后,将新的类型引入到下面的代码中:

在传输环节使用端点中间件,比如回路断路器和速率限制。在业务环节使用服务中间件,比如日志和仪表化。

仪表化

在 Go kit 中,仪表化意味着使用 包指标 来记录关于服务运行行为的状态。统计执行的任务的数量,在请求完成后记录消耗的时间,以及跟踪所有正在执行的操作的数量,都被认为是 仪表化。

我们可以使用同样的中间件模式,在记录日志的环节我们曾经用过。

然后将其引入到服务中:

stringsvc2

目前位置,完整的服务是 stringsvc2.

|2|left
此条目发表在GoLang, MircroService分类目录。将固定链接加入收藏夹。

go-kit 入门(三)日志和仪表化》有 1 条评论

  1. Pingback引用通告: Cıvata

发表评论

电子邮件地址不会被公开。 必填项已用*标注


Warning: fsockopen(): php_network_getaddresses: getaddrinfo failed: No address associated with hostname in /mydata/www/wordpress/wp-content/plugins/are-you-a-human/includes/ayah.php on line 312

Warning: fsockopen(): unable to connect to ssl://ws.areyouahuman.com:443 (php_network_getaddresses: getaddrinfo failed: No address associated with hostname) in /mydata/www/wordpress/wp-content/plugins/are-you-a-human/includes/ayah.php on line 312

Unable to load the Are You a Human PlayThru™. Please contact the site owner to report the problem.