Apache APISIX & RocketMQ 助力用户API日志监控能力

379 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 18 天,点击查看活动详情

本文将介绍最新集成的Apache APISIX 和Apache RocketMQ rocketmq-logger 插件的特性和使用。通过该插件,您可以在使用Apache APISIX 时更方便地连接到RocketMQ 集群。

自2016年Apache RocketMQ受到全球开发者关注以来,已成长为电商、金融、教育、科技等多个领域的技术中台核心数据库。

据不完全统计,国内超过70%的用户(包括金融、保险、财富、券商等各领域百强企业)在核心应用链路上规模部署了Apache RocketMQ,其中全球前5云厂商均有还推出了关于 Apache RocketMQ 的云产品服务。

除了核心业务消息处理的常规应用外,大量公司正在使用 Apache RocketMQ 进行日志处理和分析。

插件介绍

为了满足企业用户对日志处理的需求,Apache APISIX 发布了rocketmq-logger基于Apache RocketMQ 的日志插件,支持将API 接口请求日志以JSON 格式推送到RocketMQ 集群。

该插件使用RocketMQ原生支持的TCP协议,通过OpenResty提供的非阻塞TCP socket API实现高并发和高性能访问。

此外,使用该rocketmq-logger插件发送的 API 日志格式与其他日志插件相同,支持批量日志记录、自定义日志格式、重试支持和其他功能。

此外,该插件还支持TLS加密传输,以及配置AK、SK认证接入Apache RocketMQ,满足用户对数据安全的需求

如何使用

启动RocketMQ

使用以下命令在本地启动RocketMQ,具体参考官方文档

wget https://dlcdn.apache.org/rocketmq/4.9.2/rocketmq-all-4.9.2-bin-release.zipunzip rocketmq-all-4.9.2-bin-release.zipcd rocketmq-4.9.2/nohup sh bin/mqnamesrv &nohup sh bin/mqbroker -n 127.0.0.1:9876 -c conf/broker.conf &

在 Apache APISIX 中启用插件

在生产环境中为给定路由启用rocketmq-logger插件只需要一个命令。

curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
    "plugins": {
        "rocketmq-logger": {
            "nameserver_list" : [ "127.0.0.1:9876" ],
            "topic" : "test",
        }
    },
    "upstream": {
        "nodes": {
            "127.0.0.1:1980": 1
        },
    "type": "roundrobin"
    },
    "uri": "/hello"
}'

启用插件后rocketmq-logger,对端点的任何请求URI/hello都会将日志推送到 Apache RocketMQ。

插件元数据设置

当然,如果你在使用过程中不想使用默认的日志格式,你也可以为插件设置元数据。

调整日志格式后,您需要向端点发送请求/apisix/admin/plugin_metadata以更新元数据,如下面的代码所述。

curl http://127.0.0.1:9080/apisix/admin/plugin_metadata/rocketmq-logger -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
    "log_format": {
        "host": "$host",
        "@timestamp": "$time_iso8601",
        "client_ip": "$remote_addr"
    }
}'

禁用插件

如果您不再使用该插件,您可以rocketmq-logger通过从插件配置中删除适当的 JSON 配置来禁用该插件。这个过程不需要重启服务,输入下面的代码会立即生效。

curl http://127.0.0.1:9080/apisix/admin/routes/1  -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
    "methods": ["GET"],
    "uri": "/hello",
    "plugins": {},
    "upstream": {
        "type": "roundrobin",
        "nodes": {
            "127.0.0.1:1980": 1
        }
    }
}'