Hello 大家好,最新版的 AgileConfig 1.9.4 发布了。现在它可以通过 OpenTelemetry 对外提供 logs,traces,metrics 三个维度的数据。用户可以自由选择支持 otlp 协议的工具来进行查询与分析。比如 Seq,loki,prometheus, grafana 等等。

本来 AgileConfig 的日志是通过 Nlog 写在本地的。但是文本日志无法进行集中的查询与分析,况且现在绝大多数同学使用 docker 或者 k8s 来运行 AgileConfig 的服务端,这就导致日志会存储在容器来,查看起来特别费劲。

于是就有同学提出对接第三日志组件的需求,比如要我直接对接 Seq 等等。当然 AgileConfig 对接 Seq 或者 ELK 等组件当然技术上没有难度。但是,如果对接了特定的三方组件,这个就太定制化了,耦合性太强。如果用户不用 Seq 也不用 ELK 而是使用 Loki 呢?难道要让用户特地安装一套 Loki 吗?

为了解决这个问题:既要把日志可以对外提供出来,又不依赖特定的三方组件,所以我决定让 AgileConfig 对接 OpenTelemetry。

什么是 OpenTelemetry

OpenTelemetry 是一个开放源代码项目,用于帮助开发人员生成、收集、处理和导出软件性能和行为的可观测性数据。它主要涵盖三个方面的数据:分布式追踪(tracing)、指标(metrics)和日志(logs)。OpenTelemetry 的目标是提供一个统一的工具和规范来简化可观测性数据的收集和分析,从而帮助开发者更好地理解和优化他们的应用程序。

也就是说 OpenTelemetry 不光支持 logs,而且还支持 tracing 跟 metrics。所以这次干脆除了 logs 其他两个也一并集成进来了。

OTLP

OTLP(OpenTelemetry Protocol,OpenTelemetry 协议)是 OpenTelemetry 项目定义的一个协议,用于传输可观测性数据,包括追踪(traces)、指标(metrics)和日志(logs)。OTLP 的设计目标是高效、可扩展且易于实现,旨在统一不同类型的可观测性数据传输,简化数据收集和分析的过程。

OTLP 的特点

  • 统一性:OTLP 提供了一个统一的协议,可以传输不同类型的可观测性数据,减少了系统集成的复杂性。
  • 高效性:OTLP 的设计注重性能和资源效率,确保在高负载情况下仍能稳定传输数据。
  • 扩展性:协议具有良好的扩展性,可以适应未来的需求和新增的可观测性数据类型。

    多种传输方式:支持 gRPC 和 HTTP/JSON 传输方式,方便集成到不同的系统环境中。

查看 Logs

如果你想查看 AgileConfig 的 Logs 内容,你可以选择任意一个支持 otlp 的 log 组件,如 Seq,loki 等等。

在 AgileConfig 服务启动之前,你需要配置 logs 的 endpoint:

  "otlp": {
"instanceId": "agileconfig_server_admin", // if empty, will generate a new one
"logs": {
"protocol": "http", // http grpc
"endpoint": "http://xxxx:5341/ingest/otlp/v1/logs"
},

或者配置环境变量:

otlp:logs:protocal=http
otlp:logs:endpoint=http://xxxx:5341/ingest/otlp/v1/logs

三方 log 组件的文档上都会表明 otlp 的 endpoint 地址,如 Seq:

或者 loki:

如果配置正确服务启动后就能在 log 组件里查询到了。

查询 Traces

跟上面的 logs 一样,如果你想查看 AgileConfig 的 Traces 内容,你可以选择任意一个支持 otlp 的 traces 组件,如 Seq,Jaeger 等等。

在 AgileConfig 服务启动之前,你需要配置 traces 的 endpoint:

  "otlp": {
"traces": {
"protocol": "http", // http grpc
"endpoint": "http://xxxx:5341/ingest/otlp/v1/traces"
},

或者配置环境变量:

otlp:traces:protocal=http
otlp:traces:endpoint=http://xxxx:5341/ingest/otlp/v1/traces

三方 traces 组件的文档上都会表明 otlp 的 endpoint 地址,如 Seq:

创建 Metrics Dashboard

对 Metrics 进行查询其实跟上面也是类似,只要配置好 otlp 地址就好了。但是为了更好的监控效果,metrics 一般会做成 dashboard 实时挂在大屏上展示。下面我们就以 prometheus + grafana 的方案来给 AgileConfig 定制一个 dashboard。

安装 Prometheus

首先我们要安装 prometheus,这次我偷懒直接在 windonws 下安装了 prometheus。下载好安装包后,直接解压,如果运行如下命令:

./prometheus --enable-feature=otlp-write-receiver

访问以下 localhost:9090 如果可以登录那么就是成功了。可以看到 prometheus 其实自带界面,但是功能上来说还是跟 grafana 差远了。

安装 Grafana

使用 docker 来安装最新版的 grafana:

docker run --name=vk-grafana -p 3000:3000 grafana/grafana:6.7.4

访问以下 localhost:3000 如果可以登录那么就是成功了。

在 Grafana 内添加 Prometheus 数据源

在 grafana 的 datasource 菜单下添加 Prometheus 数据源。

填写 Prometheus 的地址

配置服务端

跟 logs,traces 一样,在服务启动之前需要对 metrics 的 endpoint 进行配置:

  "otlp": {
"metrics": {
"protocol": "http", // http grpc
"endpoint": "http://xxx:9090/api/v1/otlp/v1/metrics"
},

或者配置环境变量:

otlp:metrics:protocal=http
otlp:metrics:endpoint=http://xxx:9090/api/v1/otlp/v1/metrics

支持的 Metrics

如果以上步骤都没问题,那么我们启动 AgileConfig 的服务端后,稍等片刻就能在 grafana 里查询到这些 metrics 了。

AgileConfig 对外提供了以下 metrics:

名称 说明
AppCount 应用数量
NodeCount 节点数量
ClientCount 客户端数量
ServiceCount 注册的服务数量
ConfigCount 配置项数量
CpuUsed CPU 使用率,0~100 内的浮点数
MemoryUsed 内存使用量,单位 MB
PullAppConfigCounter client 通过 http 接口拉取 app 配置的次数统计

制作 Dashboard

有了以上指标,我们就可以在 grafana 上来创建一个 dashboard 来监控我们的 AgileConfig 服务啦。因为本文不是 grafana 的介绍文章,所以如何来创建 dashboard 就不在这多说了。让我们看一下效果吧。

总结

通过以上介绍。我们可以看到现在要采集 AgileConfig logs 或者进行 tracing 都非常简单。只要找个支持 otlp 的组件配置一下 endpoint 就可以了。而且这并不依赖特定的组件。这次 AgileConfig 还支持了 opentelemetry metrics。有了这些 metrics,我们可以通过 grafana 轻松的创建出一个漂亮的 dashboard 来对 AgileConfig 进行监控。

最后

Github地址:https://github.com/dotnetcore/AgileConfig 开源不易,欢迎 star

演示地址:http://agileconfig-server.xbaby.xyz/ 超管账号:admin 密码:123456

关注我的公众号一起玩转技术

AgileConfig-1.9.4 发布,支持 OpenTelemetry的更多相关文章

  1. AgileConfig 1.6.0 发布 - 支持服务注册与发现

    大家好,好久没有输出博文了,一是因为比较忙,另外一个原因是最近主要的精力是在给 AgileConfig 添加一个新的功能:服务注册与发现. 先说说为什么会添加这个功能.我自己的项目是用 Consul ...

  2. CAP 6.0 版本发布通告 - 支持 OpenTelemetry

    前言 今天,我们很高兴宣布 CAP 发布 6.0 版本正式版,在这个版本中,我们主要致力于对 OpenTelemetry 提供支持,以及更好的适配 .NET 6. 那么,接下来我们具体看一下吧. 总览 ...

  3. AgileConfig 轻量级配置中心 1.5 发布 - 支持多环境配置

    AgileConfig 从发布到现在,收到不同学的 issue 说需要多环境的支持.也就是一个应用在不同的环境下可以配置不同的配置项.这是一个非常有用的功能,就跟我们开发的时候会设置多个 appset ...

  4. YARP+AgileConfig 5分钟实现一个支持配置热更新的代理网关

    YARP 是微软开源的一个反向代理项目,英文名叫 Yet Another Reverse Proxy .所谓反向代理最有名的那就是 nginx 了,没错 YARP 也可以用来完成 nginx 的大部分 ...

  5. Visual Studio Code 1.0发布,支持中文在内9种语言

    Visual Studio Code 1.0发布,支持中文在内的9种语言:Simplified Chinese, Traditional Chinese, French, German, Italia ...

  6. 发布支持多线程的PowerShell模块 —— MultiThreadTaskRunner

    应用场景 多线程在需要批量处理一些任务的时候相当有用,也更加有利于充分利用现有计算机的能力.所有主流的开发语言都支持多线程. 默认情况下,PowerShell作为一个脚本语言,是不支持多线程操作的,虽 ...

  7. CAP 2.3版本发布,支持 MongoDB

    前言 经过2个月的调整及测试,CAP 2.3 版本终于发布了,这个版本最大的特性就是对于 MongoDB 的支持,感谢博客园团队的keke同学对于 MongoDB 支持所提供的 PR,相信随着博客园的 ...

  8. robbe-1.2发布-支持最新版本的friso+WinNT下php各版本的dll

    robbe是建立在friso中文分词组建上的一个高性能php中文分词扩展.(只支持UTF-8编码) robbe-1.2: 1. friso近几天发布1.3了, 接口有些许变化, 更改robbe适合最新 ...

  9. 深蓝词库转换2.5发布——支持微软五笔,支持Linux和macOS和更多命令行功能

    最近利用晚上的时间,对很久没有新版本发布的深蓝词库转换进行了版本升级.本次升级主要包含的功能包括: 一.支持Win10自带的微软五笔输入法用户自定义短语的导入导出. 1.在转换输入法词库列表中选择“W ...

  10. SmartIDE v0.1.16 已经发布 - 支持阿里&蚂蚁开源的国产 IDE OpenSumi

    SmartIDE v0.1.16 (Build 3137) 已经在2022年4月19日发布到稳定版通道,我们在这个版本中增加了阿里和蚂蚁发布的国产IDE OpenSumi的支持,以及其他一些改进.Sm ...

随机推荐

  1. LlamaIndex 是什么

    LlamaIndex 是一个基于 LLM(大语言模型)的应用程序数据框架,适用于受益于上下文增强的场景. 这类 LLM 系统被称为 RAG(检索增强生成)系统. LlamaIndex 提供了必要的抽象 ...

  2. Region-区域(默认和新增)适配器

    Prism内置了几个区域适配器 ContentControlRegionAdapter ItemsControlRegionAdapter SelectorRegionAdapter ComboBox ...

  3. ASP.NET Core 浅析环境变量与配置的优先级

    本文将简单介绍在 dotnet 6 下的 ASP.NET Core 里的环境变量当成配置的优先级行为.这部分内容在官方文档都有提到,只是我开始粗心没有看仔细,而踩到了坑,特意写篇博客记录一下 在 AS ...

  4. dotnet 6 在 System.Text.Json 使用 source generation 源代码生成提升 JSON 序列化性能

    这是一个在 dotnet 6 早就引入的功能,此功能的使用方法能简单,提升的效果也很棒.使用的时候需要将 Json 序列化工具类换成 dotnet 运行时自带的 System.Text.Json 进行 ...

  5. PostMan接口测试实用小点

    PostMan接口测试实用小点 1. 接口测试变量存取操作 在Postman中有很多地方可以存储一些变量,这里只介绍经常使用的环境变量.变量设置后,在UI界面可以通过{{变量名}}获取到对应值. 在环 ...

  6. Springboot+Prometheus+grafana 制作自己的业务监控

    目录 知识储备 系统架构 开始实现 生成业务指标 经典实现方法 自己的实现方案 引入依赖 配置文件 注册自己的指标[我这里用的是guaua格式数据] 写入指标 效果展示 配置prometheus 抓取 ...

  7. 【人脸识别】OpenCV获取自己的图像

    思路:先获取10000张自己的图像,然后通过CNN神经网络进行学习. 第一步:先获取自己的脸的数据.如何做? 代码如下: import cv2 import os import sys import ...

  8. 🔥🔥httpsok-谷歌免费SSL证书如何申请

    httpsok-谷歌免费SSL证书如何申请 使用场景: 部署CDN证书.OSS云存储证书 证书类型: 单域名 多域名 通配符域名 混合域名 证书厂商: ZeroSSL Let's Encrypt Go ...

  9. jeecg-boot中导出excel冲突问题

    jeecg-boot自带的库是autopoi,如果自定义导出excel引入poi,则需要POI版本要保持一致,否则会出现冲突的情况,导致这2个都用不了的情况. Autopoi底层用的是POI库,poi ...

  10. JavaScript 实现前端文件下载

    A.download HTML5的A标签有一个download属性,可以告诉浏览器下载而非预览文件,很实用,参考链接:http://www.zhangxinxu.com/wordpress/2016/ ...