本文将为大家介绍如何在 Apache APISIX 中配置和使用 Google Cloud Logging 服务。
日志是大型分布式系统的重要基础设施,可以帮助开发者检查观测服务运行的状态,提高服务故障排查和诊断效率以及进行多维度的分析,以此提高系统整体的稳定性和运行效率。
Google Cloud Logging 是由 Google Cloud 提供的全代管式实时日志管理服务,提供 EB 级的存储、搜索、分析和提醒等服务。通过 Google Cloud Loging 的日志浏览器你可以简单高效的对日志进行对日志进行搜索、排序和分析,并且 Google Cloud Logging 还提供了保存查询和丰富的图表功能可以使日志筛查结果可回溯且有更直观的呈现。
Apache APISIX 在此之前已经支持集成了 HTTP Logger 、TCP Logger、Kafka Logger、UDP Logger、RocketMQ Logger、SkyWalking Logger、Aliyun 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
- 打开浏览器,访问 Google Cloud 首页。
- 输入用户名和密码,登录 Google Cloud 控制台。
- 单击 Google Cloud 控制台左侧菜单,选择 “IAM & Admin > Create a Project”,开始创建项目。
Click to Preview
- 输入项目名称,选择组织名称,单击 “CREATE” 创建项目。
Click to Preview
- 创建项目成功后,控制台右上角提示创建成功。
Click to Preview
- 在窗口中点击选择项目,或在控制台首页顶部导航栏选择项目操作路径。选择项目后,将跳转至控制台首页,此时在顶部导航栏和信息中心的项目信息中已经可以看到当前项目的相关数据。
Click to Preview
- 完成项目创建后,你需要为该项目创建服务账号。请返回 Google Cloud 控制台首页,单击左侧菜单“IAM & Admin > Service Account”,开始创建服务账号。
Click to Preview
- 单击“CREATE SERVICE ACCOUNT”创建服务账号。
Click to Preview
- 输入服务账号名称及 ID(ID 一般跟随账号生成),然后单击 “CREATE AND CONTINUE”。
Click to Preview
- 单击“Role”,在搜索框中输入“Logging Admin”搜索这个角色,选择“Logging Admin”作为角色。
Click to Preview
- 单击“DONE”,完成服务账号创建,跳转到服务账号首页。此时你可以在列表中看到刚刚创建的账号及详情。
Click to Preview
- 在服务账号最后一列的操作栏单击“Manage keys”,进入秘钥管理界面。
Click to Preview
- 单击“ADD KEY > Create new key”,开始创建新秘钥。
Click to Preview
- 在弹窗页中选择秘钥类型为“JSON”,然后单击“CREATE”,创建新秘钥。
Click to Preview
- 私钥信息将通过浏览器自动下载到系统默认 Downloads 目录中,启用 google-cloud-logging 插件时,需要使用这个私钥中的信息,因此请妥善保存私钥文件。
Click to Preview
配置 Apache APISIX
启用 google-cloud-logging 插件
方式一:上传私钥文件配置
- 将私钥文件上传到 Apache APISIX 节点服务器中。
- 将文件路径配置到
google-cloud-logging. auth_file
配置项上,如下所示:
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"uri":"/logging.do",
"upstream":{
"type":"roundrobin",
"nodes":{
"127.0.0.1:1980":1
}
},
"plugins":{
"google-cloud-logging":{
// Google Cloud Logging 私钥文件
"auth_file":"/path/to/apache-apisix-fcafc68c2f41.json",
// 每个批处理队列最大容纳日志条目数
"batch_max_size": 1,
// 刷新批处理队列缓冲区的最大时间(以秒为单位)
"inactive_timeout": 10
}
}
}'
通过 JSON 文本配置
- 打开私钥文件。
- 将
project_id
的值配置到google-cloud-logging. auth_config.project_id
配置项中。 - 将
private_key
的值配置到google-cloud-logging. auth_config. private_key
配置项中。
如下所示:
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"uri":"/logging.do",
"upstream":{
"type":"roundrobin",
"nodes":{
"127.0.0.1:1980":1
}
},
"plugins":{
"google-cloud-logging":{
// Google Cloud Logging 私钥文件
"auth_config":{
"project_id":"apache-apisix",
"private_key":"-----BEGIN RSA PRIVATE KEY-----your private key-----END RSA PRIVATE KEY-----"
},
// 每个批处理队列最大容纳日志条目数
"batch_max_size": 1,
// 刷新批处理队列缓冲区的最大时间(以秒为单位)
"inactive_timeout": 10
}
}
}'
参数说明
参数名称 | 是否必填 | 默认值 | 描述 |
---|---|---|---|
auth_config | 否 | n/a | Google Cloud Logging 私钥文件,必须配置 auth_config 或 auth_file 之一 |
auth_config.private_key | 是 | n/a | Google Cloud Logging 的私钥参数 |
auth_config.project_id | 是 | n/a | 谷歌服务帐号的项目 ID |
auth_config.token_uri | 否 | oauth2.googleapis.com/token | 请求 Google Service Account 的令牌的 URI |
auth_config.entries_uri | 否 | logging.googleapis.com/v2/entries:write | Google 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_file | 否 | n/a | 谷歌服务账号 JSON 文件的路径(必须配置 auth_config 或 auth_file 之一) |
ssl_verify | 否 | TRUE | 启用 SSL 验证, 配置根据 OpenResty documentation选项 |
resource | 否 | {"type": "global"} | 谷歌监控资源,参考:MonitoredResource |
log_id | 否 | apisix.apache.org%2Flogs | 谷歌日志 ID,参考:LogEntry. |
max_retry_count | 否 | 0 | 从处理管道中移除之前的最大重试次数 |
retry_delay | 否 | 1 | 如果执行失败,流程执行应延迟的秒数 |
buffer_duration | 否 | 60 | 必须先处理批次中最旧条目的最大期限(以秒为单位) |
inactive_timeout | 否 | 10 | 刷新缓冲区的最大时间(以秒为单位) |
batch_max_size | 否 | 100 | 每个批处理队列可容纳的最大条目数 |
验证插件是否成功运行
运行以下命令,向 Google Cloud Logging 发送请求。
curl -i http://127.0.0.1:9080/logging.do
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Date: Fri, 10 Dec 2021 09:57:52 GMT
Server: APISIX/2.11.0
Hello, Google Cloud Logging打开浏览器,访问 Google Cloud 首页。
输入用户名和密码,登录 Google Cloud 控制台。
通过日志浏览器查看发送的请求日志,返回结果如下图所示。
Click to Preview
停用 google-cloud-logging 插件
如使用结束,可以移除 google-cloud-logging
相关配置块进行停用该插件。
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"uri":"/logging.do",
"upstream":{
"type":"roundrobin",
"nodes":{
"127.0.0.1:1980":1
}
},
"plugins":{
}
}'
总结
本文为大家描述了 Apache APISIX 和 Google Cloud Logging 对接的详细操作步骤,希望通过本文可以让大家对于在 Apache APISIX 中使用 Google Cloud Logging 有更清晰的理解,方便后续进行上手实操。
Apache APISIX 不仅致力于保持自身的高性能,也一直非常重视开源生态的建设。目前 Apache APISIX 已经拥有了 10+ 个日志相关的插件,支持与业界主流的开源日志项目对接。
如果你有对接其他日志的需求,不妨访问 Apache APISIX 的 GitHub,通过 issue 留下你的建议;或订阅 Apache APISIX 的邮件列表,通过邮件表达你的想法。