讲师中心 微信公众号
AI工具推荐 视频效率加速

NestJS + Opentelemetry (Loki)

风明姑娘_6971

风明姑娘_6971

发布时间:2024-08-19 08:12:02

|

976人浏览过

|

来源于dev.to

转载

先决条件

  • opentelemetry collector 必须准备好。 (去准备吧)

  • grafana 设置查看 opentelemetry 跟踪(转到准备)

  • (可选)opentelemetry知识(遇到困难可以学习^0^)(去学习)

  • (可选)nestjs + opentelemetry 帖子(查看)

nestjs 到 loki

本来,当你设置零代码opentelemetry时,日志应该自动发送到otel收集器并累积在loki中。

但是,日志记录自动仪器存在问题,因此如果设置不当,日志不会累积。

(感谢这个bug,我研究了otel?)

如何正确设置自动

问题中的组合方法。 (嗯,这不是魔法)

auto-instrumentation in sdk (not working)
instrumentation-winston in sdk (not working)
instrumentation-winston in sdk + winston-transport in logger transports (working)
auto-instrumentation in sdk + winston-transport in logger transports (working)
auto-instrumentation in sdk + winston-transport installed only (working)

最后原因是instrumentation-winston没有包含winston-transport依赖,所以必须单独安装

请务必执行 npm install @opentelemetry/winston-transport。

如果你运气好并且设置正确的话,就不需要按照下面的方法了

温斯顿

我决定让 winston 作为记录器。我本来用的是pino,但看到这篇文章后改成了winston。 (+网上有更多关于winston的信息)

即使你使用的是pino,下面的方法仍然适用。

代码

手动设置 loggerprovider

创建一个新文件 logger.ts 来设置记录器。

import { otlplogexporter } from "@opentelemetry/exporter-logs-otlp-http";
import { resource } from "@opentelemetry/resources";
import {
  batchlogrecordprocessor,
  loggerprovider,
} from "@opentelemetry/sdk-logs";
import {
  semresattrs_service_name,
  semresattrs_service_version,
} from "@opentelemetry/semantic-conventions";
import { opentelemetrytransportv3 } from "@opentelemetry/winston-transport";

const logexporter = new otlplogexporter();
const loggerprovider = new loggerprovider({
  resource: new resource({
    [semresattrs_service_name]: "your-service-name",
    [semresattrs_service_version]: "1.0",
  }),
});

loggerprovider.addlogrecordprocessor(
  new batchlogrecordprocessor(logexporter)
  // new simplelogrecordprocessor(new consolelogrecordexporter())
);
api.logs.setgloballoggerprovider(loggerprovider);

创建loggerprovider,连接exporter、resource、processor,然后在globalloggerprovider中设置。

创建温斯顿记录器

之后,创建一个用于nestjs的winston logger。还写入 logger.ts。

import { opentelemetrytransportv3 } from "@opentelemetry/winston-transport";

export default function createlogger() {
  const transports = [
    new winston.transports.console({
      format: winston.format.combine(
        winston.format.timestamp({ format: "yyyy-mm-ddthh:mm:ss.sssz" }),
        winston.format.json(),
        winston.format.ms(),
        nestwinstonmoduleutilities.format.nestlike("api", {
          colors: true,
          prettyprint: true,
          processid: true,
          appname: true,
        })
      ),
    }),
    new opentelemetrytransportv3(),
  ];
  const logger = winstonmodule.createlogger({
    defaultmeta: { environment: process.env.node_env },
    transports,
  });

  return logger;
}

这里,opentelemetrytransportv3被注册为winston的transport,允许将winston的日志导出到oltp。

导入记录器

与 tracer 一样,logger 也是在 main.ts 顶部导入。

// eslint-disable-next-line import/order
import otelsdk from "./tracer"; // otelsdk should be imported before any other imports
// eslint-disable-next-line import/order
import createlogger from "./logger";

连接记录器

创建nestapp时,会创建并移交一个记录器。这取代了 nestjs/common 中的记录器。

  const app = await nestfactory.create<nestexpressapplication>(
    appmodule,
    new expressadapter(expressapp),
    {
      logger: createlogger(),

提供商温斯顿模块

我们使用nestjs-winston创建了winston logger,因此它在appmodule中作为provider提供。

@Module({
  providers: [
    Logger,

结果

现在,来自 winston 的日志被传输到 logger 提供者,并由 loggerprovider 的导出器发送到 oltp 端点(http://localhost:4317 或 http://localhost:4318)。

日志数据将由预先启动的收集器收集并存储在 loki 中。

结果屏幕

去格拉法纳
您可以使用 explore -> 查看日志 数据源:loki -> 标签浏览器 -> 选择服务 -> 显示日志。

NestJS + Opentelemetry (Loki)

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
resource是什么文件
resource是什么文件

Resource文件是一种特殊类型的文件,它通常用于存储应用程序或操作系统中的各种资源信息。它们在应用程序开发中起着关键作用,并在跨平台开发和国际化方面提供支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

320

2023.12.20

http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3723

2023.11.09

http请求415错误怎么解决
http请求415错误怎么解决

解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。更多http请求415错误怎么解决的相关内容,可以阅读下面的文章。

934

2023.11.14

HTTP 503错误解决方法
HTTP 503错误解决方法

HTTP 503错误表示服务器暂时无法处理请求。想了解更多http错误代码的相关内容,可以阅读本专题下面的文章。

6646

2024.03.12

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

5490

2024.08.16

Go 语言 HTTP 编程与中间件开发教程合集
Go 语言 HTTP 编程与中间件开发教程合集

全面讲解 Go 语言 HTTP 编程的核心知识,涵盖 net/http 标准库的 Server/Handler/HandlerFunc 体系、DefaultServeMux 路由注册与自定义路由器、Request / ResponseWriter 请求响应处理、中间件(Middleware)链式设计模式与常见中间件(日志/CORS/认证/限流)开发、http.Client 的超时配置与连接池管理、Cookie / Session 处理、

561

2026.05.08

Grafana重置admin密码
Grafana重置admin密码

本专题整合了grafana admin密码相关教程,阅读专题下面的文章了解更多详细内容。

2374

2025.09.02

Grafana admin密码
Grafana admin密码

本专题整合了Grafana密码相关教程,阅读专题下面的文章了解更多详细内容。

730

2025.12.09

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

60

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn