Apache APISIX 集成 Google Cloud Logging

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

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”,开始创建项目。

Apache APISIX 集成 Google Cloud Logging_第1张图片

  1. 输入项目名称,选择组织名称,单击 “CREATE” 创建项目。

Apache APISIX 集成 Google Cloud Logging_第2张图片

  1. 创建项目成功后,控制台右上角提示创建成功。

Apache APISIX 集成 Google Cloud Logging_第3张图片

  1. 在窗口中点击选择项目,或在控制台首页顶部导航栏选择项目操作路径。选择项目后,将跳转至控制台首页,此时在顶部导航栏和信息中心的项目信息中已经可以看到当前项目的相关数据。

Apache APISIX 集成 Google Cloud Logging_第4张图片

  1. 完成项目创建后,你需要为该项目创建服务账号。请返回 Google Cloud 控制台首页,单击左侧菜单“IAM & Admin > Service Account”,开始创建服务账号。

Apache APISIX 集成 Google Cloud Logging_第5张图片

  1. 单击“CREATE SERVICE ACCOUNT”创建服务账号。

Apache APISIX 集成 Google Cloud Logging_第6张图片

  1. 输入服务账号名称及 ID(ID 一般跟随账号生成),然后单击 “CREATE AND CONTINUE”。

Apache APISIX 集成 Google Cloud Logging_第7张图片

  1. 单击“Role”,在搜索框中输入“Logging Admin” 搜索这个角色,选择“Logging Admin”作为角色。

Apache APISIX 集成 Google Cloud Logging_第8张图片

  1. 单击“DONE”, 完成服务账号创建,跳转到服务账号首页。此时你可以在列表中看到刚刚创建的账号及详情。

Apache APISIX 集成 Google Cloud Logging_第9张图片

  1. 在服务账号最后一列的操作栏单击“Manage keys”,进入秘钥管理界面。

Apache APISIX 集成 Google Cloud Logging_第10张图片

  1. 单击“ADD KEY > Create new key”,开始创建新秘钥。

Apache APISIX 集成 Google Cloud Logging_第11张图片

  1. 在弹窗页中选择秘钥类型为“JSON”,然后单击“CREATE”,创建新秘钥。

Apache APISIX 集成 Google Cloud Logging_第12张图片

  1. 私钥信息将通过浏览器自动下载到系统默认 Downloads 目录中,启用 google-cloud-logging 插件时,需要使用这个私钥中的信息,因此请妥善保存私钥文件。

Apache APISIX 集成 Google Cloud Logging_第13张图片

配置 Apache APISIX

启用 google-cloud-logging 插件

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

  1. 将私钥文件上传到 Apache APISIX 节点服务器中。
  2. 将文件路径配置到 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 文本配置

  1. 打开私钥文件。
  2. project_id 的值配置到 google-cloud-logging. auth_config.project_id 配置项中。
  3. 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 半可选 必须配置 auth_config 或 auth_file 之一
auth_config.private_key 必选 谷歌服务帐号的私钥参数
auth_config.project_id 必选 谷歌服务帐号的项目 ID
auth_config.token_uri 可选 oauth2.googleapis.com/token 请求谷歌服务帐户的令牌的 URI
auth_config.entries_uri 可选 logging.googleapis.com/v2/entries:write 谷歌日志服务写入日志条目的 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 半可选 谷歌服务账号 JSON 文件的路径(必须配置 auth_config 或 auth_file 之一)
ssl_verify 可选 TRUE 启用 SSL 验证, 配置根据 OpenResty文档选项
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 每个批处理队列可容纳的最大条目数

验证插件是否成功运行

  1. 运行以下命令,向 Google 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
  1. 打开浏览器,访问 Google Cloud 首页
  2. 输入用户名和密码,登录 Google Cloud 控制台。
  3. 通过日志浏览器查看发送的请求日志,返回结果如下图所示。

Apache APISIX 集成 Google Cloud Logging_第14张图片

停用 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 Logging 对接的详细操作步骤,希望通过本文可以让大家对于在 Apache APISIX 中使用 Google Cloud 有了更清晰的理解,方便后续进行上手实操。

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

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

相关阅读

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

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

你可能感兴趣的:(Apache APISIX 集成 Google Cloud Logging)