转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。
前文链接:
开源可观测性平台Signoz(三)【服务器主机监控篇】
在前文中,分享了signoz的安装、基础配置、日志采集、主机监控添加,本文则分享signoz中链路监控、数据库、中间件接入过程。
1. java链路监控
1.1 接入方案
java链路监控接入方式类似skywalking监控接入方式,通过agent,将相关指标接入signoz。
客户端jar包:opentelemetry-javaagent.jar
客户端jar包下载:
wget https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jar
java启动参数加入:
-javaagent:/${path}/opentelemetry-javaagent.jar -Dotel.resource.attributes=service.namespace=test,service.name=zrtc-api,deployment.environment=poc -Dotel.metrics.exporter=none -Dotel.exporter.otlp.endpoint=http://${IP of signoz}:4317
参数详解:
-javaagent:/${path}/opentelemetry-javaagent.jar:配置jar包的路径
-Dotel.resource.attributes:配置应用的基本信息,如namespace、servicename、environment等,根据当前环境适当增减参数,如非k8s的应用,可去掉namespace配置
otel.metrics.exporter:这个是metrics的配置,在此处必须要特地提醒一下,在旧版本中这个值默认为none,即不开启。但是在较新的版本中这个值默认变成了otlp,因此需要提醒下如果不需要metrics的能力,需要在新版本中将这个值手动设置为none
otel.traces.exporter:用来配置数据输出的exporter,默认是otlp,但是jaeger,zipkin等等也在支持的范围之内,可以根据自己的需求进行配置。
otel.exporter.otlp.trace.endpoint:用来配置具体的采集端点地址,注意此配置仅生效于otlp,如果是jaeger等其他,需要自行使用其他配置。一般来说的话:gRPC协议使用4317端口,http协议使用4318端口(建议使用gRPC)
1.2 例子
以某docker-compose方式部署的java应用sre-test为例,记录java应用接入signoz过程。
先将agent包上传到服务器某个目录,这里是将opentelemetry-javaagent.jar所在目录挂载到了容器里测试接入:
修改docker-compose.yaml部署文件,添加signoz agent:
[root@test102 sre-test]# cat sre-test.yaml
version: "3"
services:
zrtc-api:
image: www.harbor.com/sre/sre-test:1.0.0
container_name: sre-test
restart: always
privileged: true
environment:
TZ: Asia/Shanghai
### 修改SERVICE_STARTUP_CONFIG,添加opentelemetry-javaagent.jar启动相关参数
SERVICE_STARTUP_CONFIG: -javaagent:/jar/opentelemetry-javaagent.jar -Dotel.resource.attributes=service.namespace=test,service.name=sre-test,deployment.environment=poc -Dotel.metrics.exporter=none -Dotel.exporter.otlp.endpoint=http://10.0.0.101:4317 -Xmx512m -Xms512m
SPRING_PROFILES_ACTIVE: poc
volumes:
- /home/otel/jar:/jar ###挂载jar包目录
[root@test102 sre-test]#
启动sre-test应用:
docker-cmpose -f sre-test.yaml start
在应用启动后,signoz界面的链路板块,就能看到相关的监控信息了:
2. 数据库与中间件接入
2.1 接入方案
signoz支持Prometheus指标采集,因此数据库和中间件可通过exporter客户端导出数据到Prometheus,然后在signoz配置Prometheus target,即可完成监控数据接入。
2.2 例子
以MongoDB和RabbitMQ为例,记录数据库和中间件的监控接入。
2.2.1exporter安装
MongoDB安装exporter
mongodb_exporter下载链接:https://github.com/percona/mongodb_exporter
步骤:
1)先在mongodb创建监控专用用户,这里创建的用户为prometheus
2)然后启动mongodb_exporter:
nohup ./mongodb_exporter --mongodb.uri mongodb://prometheus:prometheus@{IP OF MONGODB}:27017/admin --collector.diagnosticdata --collector.replicasetstatus --collector.dbstats --collector.topmetrics --collector.indexstats --collector.collstats --metrics.overridedescendingindex --collect-all &
mongodb_exporter启动的端口为9216,这个端口要配置到otel-collector-metrics-config.yaml中。
RabbitMQ开启rabbitmq_prometheus
rabbitmq-plugins enable rabbitmq_prometheus
2.2.2 修改signoz配置文件,接入监控
在Prometheus模块加入以上需要监控的应用target:
..... #前面省略若干行
prometheus:
config:
scrape_configs:
# otel-collector-metrics internal metrics
- job_name: otel-collector-metrics
scrape_interval: 60s
static_configs:
- targets:
- localhost:8888
labels:
job_name: otel-collector-metrics
# SigNoz span metrics
- job_name: signozspanmetrics-collector
scrape_interval: 60s
static_configs:
- targets:
- otel-collector:8889
###############新增配置开始###############
- job_name: "mongo-test"
scrape_interval: 60s
static_configs:
- targets: ["10.0.0.1:9216","10.0.0.2:9216","10.0.0.3:9216"]
- job_name: "rabbitmq-test"
scrape_interval: 60s
static_configs:
- targets: ["10.0.0.1:15692","10.0.0.2:15692","10.0.0.3:15692"]
###############新增配置结束###############
processors:
batch:
send_batch_size: 10000
send_batch_max_size: 11000
timeout: 10s
...... #后面省略若干行
重启otel-collector-metrics并确认otel-collector-metrics日志无报错信息
docker-compose -f docker-compose.yaml restart otel-collector-metrics
2.2.3 创建Dashboard和Alert
告警接入后,就可以创建Dashboard看板和告警信息了,方法同《开源可观测性平台Signoz(三)【服务器主机监控篇】》。
其余如mysql、PostgreSQL、redis等,可采用相同方案接入。