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. Flink 和 Iceberg 如何解决数据入湖面临的挑战

    简介: 4.17 上海站 Meetup 胡争老师分享内容:数据入湖的挑战有哪些,以及如何用 Flink + Iceberg 解决此类问题. 一.数据入湖的核心挑战 数据实时入湖可以分成三个部分,分别是 ...

  2. 10个Bug环环相扣,你能解开几个?

    ​简介:由阿里云云效主办的2021年第3届83行代码挑战赛已经收官.超2万人围观,近4000人参赛,85个团队组团来战.大赛采用游戏闯关玩儿法,融合元宇宙科幻和剧本杀元素,让一众开发者玩得不亦乐乎. ...

  3. [PHP] Laravel 的 503 Service Unavailable 模板提示的来源

    当我们看到 Laravel 的 503 样式的模板时,是启用维护模式的时候的提示(php artisan down). 开启访问运行 php artisan up. Refer:Laravel 503 ...

  4. [FE] Quasar BEX 所有位置类型 types

    科普:[FE] Quasar BEX 预览版指南 New Tab Quasar BEX 的默认类型是 New Tab,在新 tab 栏里打开内容. Dev Tools 也就是在开发者栏里面的内容. O ...

  5. 修复 Debian 安装 dotnet 失败 depends on ca-certificates

    本文记录我在 Debian 安装 dotnet 失败,报错信息是 packages-microsoft-prod depends on ca-certificates; however: Packag ...

  6. Gradle8.4构建SpringBoot多模块项目

    Gradle8.4构建SpringBoot多模块项目 一.基本 1.版本 这个版本是Jdk8最后一个SpringBoot版本 软件 版本 Gradle 8.4 SpringBoot 2.7.15 JD ...

  7. Servlet注解的使用,简化配置 以及,使用模板方法设计模式优化oa项目

    Servlet注解的使用,简化配置 以及,使用模板方法设计模式优化oa项目 每博一文案 有句谚语说:"一怒之下踢石头,只有痛着脚趾头." 比一件糟糕的事情更可拍的,是你用糟糕的态度 ...

  8. Headless BI

    Headless的概念最初的来源与内容管理平台有关,一般是指内容管理平台中的一些应用不提供可视化界面,只是通过API方式把内容以数据的方式给前端.前端根据不同的设备类型,可以再去进行针对性地渲染和展现 ...

  9. Nginx教程+笔记

    Nginx 学习视频: 2020最新 Nginx教程全面讲解(Nginx快速上手) https://www.bilibili.com/video/BV1W54y1z7GM?t=553&p=14 ...

  10. uniapp获取用户信息

    新接口getUserProfileFn内置login,如果必须要login返回的参数要隔离开 vue3书写要对按钮配置属性 <button @click="logintou" ...