最近在调研APM相关的开源方案,发现ATA上这类的文章比较少,准备搞一系列APM的“初体验”文章,那么先从最近github势头较热的SigNoz开始
SigNoz简介
SigNoz是一套开源APM方案,用于监控应用指标和链路,可以看到调用情况、异常、trace上下链路,也可以自己定义Dashboard。官方对于SigNoz介绍很全面了,不赘述啦。
值得注意的是,SigNoz支持OpenTelemetry规范(https://opentelemetry.io/),改期我们介绍下OpenTelemetry这个几乎把Trace、Metrics、Logging所有监控项统一了的规范。
官网网站
代码:https://github.com/SigNoz/signoz
官网站点:https://signoz.io/
架构
SigNoz主要包括4个模块:
-
Otel Collector: 即OpenTelemetry Collector,从服务或容器收集指标数据。针对java,app可以Agent和SDK 2种方式将数据发送给collector,collector负责数据收集、处理和导出到db。当然也可以直接在agent里将数据处理好再持久到db
-
ClickHouse:db存储,需要是时序数据库,这里也可以替换为InfluxDB或Apache Druid等开源时序数据库方案
-
Query Service:官方是Go语言的查询后端服务,也可以DIY成自己的服务
-
Frontend:前端页面,官方是TypeScript和ReactJS写的
上手
参考官网 https://signoz.io/docs/install/docker/
系统要求
-
Linux or MacOS系统,官方暂不支持WIndows
-
需要Docker
-
>4GB内存(分配给Docker,单机测试可以使用无上限)
-
git
-
相关端口开放,如3301,4317,4318
Docker Compose方式安装
我们来用docker compose方式安装下SigNoz单机版,官网同时也提供了bash脚本安装,都是差不多的逻辑
-
clone 相关git代码
git clone -b main https://github.com/SigNoz/signoz.git && cd signoz/deploy/
-
docker compose命令部署
sudo docker-compose -f docker/clickhouse-setup/docker-compose.yaml up -d
运行完后我们耐心等待一会,后台会pull image、部署container
部署完可以看到官方示例里除了clickhouse、query、frontend3个容器外,还有几个示例服务
示例是Jaeger提供的Hot R.O.D https://github.com/jaegertracing/jaeger/tree/main/examples/hotrod
体验监控页面
在浏览器中打开 http://localhost:3301/ 我们可以看到SigNoz的登录页面了,第一次登录注册账号即为管理员账号
主要面板
-
Metrics 指标相关
默认是请求量、异常量相关的指标数据
-
Trace 链路追踪相关
-
Dashboards 这里可以自定义面板,语法遵循Prometheus
-
Service Map 提供了服务间调用可视化,动态可以每个服务间调用量多少
应用端
SigNoz提供了多种语言应用的接入方式,主要也是得益于OpenTelemetry规范提供了大部分语言的采集端的能力
比如我们最常用的java语言,可以使用OpenTelemetry的agent方式探针到应用中,再配置下SigNoz的接入点就可以了
java -javaagent:/path/opentelemetry-javaagent.jar \
-Dotel.metrics.exporter=none \
-Dotel.exporter.otlp.endpoint=http://<IP of SigNoz Backend>:4317 \
-Dotel.resource.attributes="service.name=<app_name>" \
-jar <myapp>.jar
这里https://opentelemetry.io/docs/instrumentation/java/ 有详细的OpenTelemetry Java应用如何接入agent(要求jdk>8)
采集端
主要使用OpenTelemetry-Collector
https://signoz.io/docs/userguide/send-metrics/ 这里有介绍有两种方式可以将指标发送出去,这里不赘述,感兴趣读者可以去看官方介绍文档。
https://opentelemetry.io/docs/collector/getting-started/
这里collector的方式也可以用agent或gateway的方式,主要也是看规模,如果agent对于应用影响较大、处理数据逻辑复杂,可以单独使用gateway collector部署
其他
这里有一篇文章介绍如何将SpringBoot采集的JVM指标在SigNoz配置出来,利用的也是Dashboard配置面板
https://signoz.notion.site/Adding-JVM-metrics-from-Springboot-40c3b026573f435b932f3a42f8983e13
后文
差不多到这里,我们初次介绍了SigNoz的入门demo,里面配置项和细节还是很多的。市面上主流的APM方案都差不多,agent/sdk收集,发送到collector处理数据(或者直接在agent/sdk处理好指标数据),发送到时序数据库存储,另外有个query服务和ui界面供用户查看监控内容。
下篇预告 —— SkyWalking开源方案初体验~