一、原理
Skywalking结合OpenTelemetry Collector + Apisix的promethus插件实现对apisix metrics数据的收集。
二、数据流图
1. Apisix Promethus插件从Apisix收集指标数据。
2. OpenTelemetry Collector通过promethus receiver获取来自Apisix Promethus插件的指标数据,并通过OpenTelemetry gRpc exporter将指标推送给SkyWalking OAP Server。
3. SkyWalking OAP Server使用MAL解析表达式来过滤、计算、合并及存储结果。
三、安装使用
1.apisix启用prometheus插件
参考地址:prometheus | Apache APISIX® -- Cloud-Native API Gateway
#prometheus插件默认是有效的,但是可以在apisix的配置文件(config.yaml)中设置一些属性,如:
# 我只更改了export_addr 其他使用的是默认值。
plugin_attr:
prometheus:
export_addr:
ip: 服务器IP地址
port: 9091
# 重启apisix
sudo apisix stop
sudo apisix start
#在路由配置中启用prometheus插件
2. 安装OpenTelemetry Collector
安装方式参考:Install the Collector | OpenTelemetry
我使用的是rpm安装方式
#下载otelcol_0.96.0_linux_amd64.rpm安装包,上传到服务器
https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.96.0/otelcol_0.96.0_linux_amd64.rpm
# 使用rpm命令安装
sudo rpm -ivh otelcol_0.96.0_linux_amd64.rpm
#配置receiver和exporter
#修改/etc/otelcol/otelcol.conf,将配置文件改为otel-collector-config.yaml。
otel-collector-config.yaml配置文件的具体内容如下:
receivers:
prometheus:
config:
scrape_configs:
- job_name: 'apisix-monitoring' #名称是固定的,改了就不行了
scrape_interval: 1s
metrics_path: "/apisix/prometheus/metrics"
static_configs:
- targets: ['apisix服务器IP:9091']
labels:
skywalking_service: apisix-dev-service
processors:
batch:
exporters:
logging:
loglevel: info
otlp:
endpoint: skywalking服务器IP:11800
tls:
insecure: true
service:
pipelines:
metrics:
receivers:
- prometheus
processors:
- batch
exporters:
- logging
- otlp
#启动otelcol
sudo systemctl restart otelcol
#检测otelcol的输出
sudo journalctl -u otelcol
3.skywalking配置(按照默认规则的话,此步骤就可以忽略了)
skywalking已经配置了apisix的处理规则,我就按照默认的规则来的。
也可以定制规则,metrics定义和规则都在skywalking安装目录的otel-rules/apisix.yaml中,自己可以更改。参考OpenTelemetry Metrics Format | Apache SkyWalking