捷报频传!Apache APISIX 现已支持对接 Google Cloud Logging

帅进超

更新时间 12/22/2021

Apache APISIX-Google Cloud logging cover

日志是大型分布式系统的重要基础设施,可以帮助开发者检查观测服务运行的状态,提高服务故障排查和诊断效率以及进行多维度的分析,以此提高系统整体的稳定性和运行效率。

Google Cloud Logging 是由 Google Cloud 提供的全代管式实时日志管理服务,提供 EB 级的存储、搜索、分析和提醒等服务。通过 Google Cloud Loging 的日志浏览器你可以简单高效的对日志进行对日志进行搜索、排序和分析,并且 Google Cloud Logging 还提供了保存查询和丰富的图表功能可以使日志筛查结果可回溯且有更直观的呈现。

Apache APISIX 在此之前已经支持集成了 HTTP LoggerTCP LoggerKafka LoggerUDP LoggerRocketMQ LoggerSkyWalking LoggerAliyun Cloud Logging(SLS)等众多开源及云日志服务解决方案。

最近,Apache APISIX 对 Google Cloud Logging 也完成了支持,在使用 Apache APISIX 作为网关时用户又多了一种新的日志解决方案:使用 google-cloud-logging 插件,将 Apache APISIX 的请求日志转发到 Google Cloud Logging 服务中进行分析和存储。

启用该插件后, Apache APISIX 将在 Log Phase 获取请求上下文信息并序列化为 Google Cloud Logging 的日志格式,然后将序列化后的日志数据提交到批处理队列中,当批处理队列触发用户设置的时间或条目阈值时会将日志数据通过 Google Cloud API 批量转发到 Google Cloud Logging 服务中。

本文将为大家介绍如何在 Apache APISIX 中配置和使用 Google Cloud Logging 服务。

配置 Google Cloud

  1. 打开浏览器,访问 Google Cloud 首页。
  2. 输入用户名和密码,登录 Google Cloud 控制台。
  3. 单击 Google Cloud 控制台左侧菜单,选择 “IAM & Admin > Create a Project”,开始创建项目。 创建项目
  4. 输入项目名称,选择组织名称,单击 “CREATE” 创建项目。 创建项目-2
  5. 创建项目成功后,控制台右上角提示创建成功。 成功创建项目
  6. 在窗口中点击选择项目,或在控制台首页顶部导航栏选择项目操作路径。选择项目后,将跳转至控制台首页,此时在顶部导航栏和信息中心的项目信息中已经可以看到当前项目的相关数据。 查看项目
  7. 完成项目创建后,你需要为该项目创建服务账号。请返回 Google Cloud 控制台首页,单击左侧菜单“IAM & Admin > Service Account”,开始创建服务账号。 开始创建服务账号
  8. 单击“CREATE SERVICE ACCOUNT”创建服务账号。 创建服务账号
  9. 输入服务账号名称及 ID(ID 一般跟随账号生成),然后单击 “CREATE AND CONTINUE”。 创建服务账号-2
  10. 单击“Role”,在搜索框中输入“Logging Admin”搜索这个角色,选择“Logging Admin”作为角色。 创建服务账号-3
  11. 单击“DONE”,完成服务账号创建,跳转到服务账号首页。此时你可以在列表中看到刚刚创建的账号及详情。 查看账号及详情
  12. 在服务账号最后一列的操作栏单击“Manage keys”,进入秘钥管理界面。 进入秘钥管理界面
  13. 单击“ADD KEY > Create new key”,开始创建新秘钥。 创建新秘钥
  14. 在弹窗页中选择秘钥类型为“JSON”,然后单击“CREATE”,创建新秘钥。 创建新秘钥-2
  15. 私钥信息将通过浏览器自动下载到系统默认 Downloads 目录中,启用 google-cloud-logging 插件时,需要使用这个私钥中的信息,因此请妥善保存私钥文件。 下载私钥文件

配置 Apache APISIX

启用 google-cloud-logging 插件

方式一:上传私钥文件配置

  1. 将私钥文件上传到 Apache APISIX 节点服务器中。
  2. 将文件路径配置到 google-cloud-logging. auth_file 配置项上,如下所示:
1curl http://127.0.0.1:9080/apisix/admin/routes/1  -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
2{
3    "uri":"/logging.do",
4    "upstream":{
5        "type":"roundrobin",
6        "nodes":{
7            "127.0.0.1:1980":1
8        }
9    },
10    "plugins":{
11        "google-cloud-logging":{
12            // Google Cloud Logging 私钥文件
13            "auth_file":"/path/to/apache-apisix-fcafc68c2f41.json",
14            // 每个批处理队列最大容纳日志条目数
15            "batch_max_size": 1,
16            // 刷新批处理队列缓冲区的最大时间(以秒为单位)
17            "inactive_timeout": 10
18        }
19    }
20}'

通过 JSON 文本配置

  1. 打开私钥文件。
  2. project_id 的值配置到 google-cloud-logging. auth_config.project_id 配置项中。
  3. private_key 的值配置到 google-cloud-logging. auth_config. private_key 配置项中。

如下所示:

1curl http://127.0.0.1:9080/apisix/admin/routes/1  -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
2{
3    "uri":"/logging.do",
4    "upstream":{
5        "type":"roundrobin",
6        "nodes":{
7            "127.0.0.1:1980":1
8        }
9    },
10    "plugins":{
11        "google-cloud-logging":{
12            // Google Cloud Logging 私钥文件
13            "auth_config":{
14                "project_id":"apache-apisix",
15                "private_key":"-----BEGIN RSA PRIVATE KEY-----your private key-----END RSA PRIVATE KEY-----"
16            },
17            // 每个批处理队列最大容纳日志条目数
18            "batch_max_size": 1,
19            // 刷新批处理队列缓冲区的最大时间(以秒为单位)
20            "inactive_timeout": 10
21        }
22    }
23}'

参数说明

参数名称是否必填默认值描述
auth_confign/aGoogle Cloud Logging 私钥文件,必须配置 auth_config 或 auth_file 之一
auth_config.private_keyn/aGoogle Cloud Logging 的私钥参数
auth_config.project_idn/a谷歌服务帐号的项目 ID
auth_config.token_urioauth2.googleapis.com/token请求 Google Service Account 的令牌的 URI
auth_config.entries_urilogging.googleapis.com/v2/entries:writeGoogle Cloud Logging 写入日志条目的 API
auth_config.scopes["https://www.googleapis.com/auth/logging.read","https://www.googleapis.com/auth/logging.write","https://www.googleapis.com/auth/logging.admin","https://www.googleapis.com/auth/cloud-platform"]谷歌服务账号的访问范围, 参考:OAuth 2.0 Scopes for Google APIs
auth_filen/a谷歌服务账号 JSON 文件的路径(必须配置 auth_config 或 auth_file 之一)
ssl_verifyTRUE启用 SSL 验证, 配置根据 OpenResty documentation选项
resource{"type": "global"}谷歌监控资源,参考:MonitoredResource
log_idapisix.apache.org%2Flogs谷歌日志 ID,参考:LogEntry.
max_retry_count0从处理管道中移除之前的最大重试次数
retry_delay1如果执行失败,流程执行应延迟的秒数
buffer_duration60必须先处理批次中最旧条目的最大期限(以秒为单位)
inactive_timeout10刷新缓冲区的最大时间(以秒为单位)
batch_max_size100每个批处理队列可容纳的最大条目数

验证插件是否成功运行

  1. 运行以下命令,向 Google Cloud Logging 发送请求。
1curl -i http://127.0.0.1:9080/logging.do
2HTTP/1.1 200 OK
3Content-Type: text/html; charset=utf-8
4Transfer-Encoding: chunked
5Connection: keep-alive
6Date: Fri, 10 Dec 2021 09:57:52 GMT
7Server: APISIX/2.11.0
8
9Hello, Google Cloud Logging
  1. 打开浏览器,访问 Google Cloud 首页。
  2. 输入用户名和密码,登录 Google Cloud 控制台。
  3. 通过日志浏览器查看发送的请求日志,返回结果如下图所示。 查看日志

停用 google-cloud-logging 插件

如使用结束,可以移除 google-cloud-logging 相关配置块进行停用该插件。

1curl http://127.0.0.1:9080/apisix/admin/routes/1  -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
2{
3    "uri":"/logging.do",
4    "upstream":{
5        "type":"roundrobin",
6        "nodes":{
7            "127.0.0.1:1980":1
8        }
9    },
10    "plugins":{
11    }
12}'

总结

本文为大家描述了 Apache APISIX 和 Google Cloud Logging 对接的详细操作步骤,希望通过本文可以让大家对于在 Apache APISIX 中使用 Google Cloud Logging 有更清晰的理解,方便后续进行上手实操。

Apache APISIX 不仅致力于保持自身的高性能,也一直非常重视开源生态的建设。目前 Apache APISIX 已经拥有了 10+ 个日志相关的插件,支持与业界主流的开源日志项目对接。

如果你有对接其他日志的需求,不妨访问 Apache APISIX 的 GitHub,通过 issue 留下你的建议;或订阅 Apache APISIX 的邮件列表,通过邮件表达你的想法。

相关阅读

强强联合!APISIX 集成 SkyWalking 打造全方位日志处理

Apache APISIX 携手 RocketMQ 为实时 API 日志监控功能再下一城