Swisscom Application Cloud 上的应用程序性能监控
Application Performance monitoring on Swisscom Application Cloud
我正在研究监控我们在 Swisscom 的 cloud-foundry 中安装的选项。我的目标如下:
- 监控已部署应用程序的性能指标(例如 cpu、磁盘、内存)
- 监控服务的性能指标(慢速查询、查询数量,理想情况下还有一些关于达到配额的指标)
到目前为止,我理解的选项如下(包括一些BUT):
- 我使用了一个非常好的 TOP cf-plugin (github)
这很好用。似乎它注册自己以获得所需的消防水管喷嘴并消耗数据。
这对于跟踪/临时监控非常有用,但对于严肃的基础设施监控不是很好。
- 我发现的另一种方法是使用 firehose-syslog 解决方案。
这可以部署为一个应用程序(据我所知)以类似的方式完成工作,就像 TOP cf 插件一样。
问题是,它需要注册客户端,因此它可以通过多普勒端点进行身份验证。出于某种原因,top-cf-plugin 会自动/以另一种方式执行此操作。
- 我正在考虑的最后一个选项是将监控本身构建到应用程序(使用特殊的构建包)
这可以用 Datadog 来完成。但是好像还需要专门的uaa客户端来注册Nozzle。
我想检查一下,是否有人(曾经)在类似的道路上,有一些发现。
最后我想向swisscom社区支持提出以下问题:
- 是否可以注册 uaac 客户端以便能够通过 firehose 喷嘴从外部服务中摄取事件? (如果我没看错,这需要管理员凭据)
- 是否有其他方法来使用喷嘴进行身份验证(例如使用特殊用户及其身份验证令牌?)
- 是否有其他方法可以监控 Swisscom 中的 CF 部署?最终,是否有一篇论文、博客文章或其他形式的文档在这方面有帮助(也适用于 AppCloud 的其他用户)?
由于需要管理员权限,我们无法为firehose提供UAA客户端。
但是,有不同的方法可以在用户上下文中获取指标。
CF API
您可以通过轮询CF来获取特定应用的基本指标API:
https://apidocs.cloudfoundry.org/5.0.0/apps/get_detailed_stats_for_a_started_app.html
但是,由于您必须轮询(并且针对每个应用程序),因此不推荐使用这种方式。
syslog drain 中的指标
CF 允许开发人员将他们的日志转发到 syslog drain;在更新的版本中,CF 还会将指标发送到此 syslog drain(请参阅 https://docs.cloudfoundry.org/devguide/deploy-apps/streaming-logs.html#container-metrics)。
例如,您可以使用 Swisscom 的 Elasticsearch 服务来存储这些指标,然后使用 Kibana 对其进行分析。
使用 loggregator (firehose) 的指标
firehose 允许为两种类型的角色将日志流式传输到客户端:
将 所有 日志流式传输给管理员(这需要具有管理员权限的 UAA 客户端)并将 app 日志和指标流式传输给具有应用 [=] 权限的开发人员58=]。这也是 cf logs
命令使用的。 cf top
也是这样 (it enumerates all apps and streams the logs of each app).
但是,您会发现大多数利用 firehose 的开源工具只能在管理员模式下工作,因为它们是为平台运营商编写的。
当然,您也可以通过对其进行检测(白盒方法)来监控您的应用程序,例如通过在 Spring 启动应用程序中配置 Spring 执行器或通过包含代理您最喜欢的 APM 供应商(Dynatrace、AppDynamics 等)
我想这是最常见的方法;我们已经看到很多团队通过检测他们的应用程序而取得成功。特别是因为高级监控无论如何都需要您创建自己的指标,因为 firehose 提供的 cpu/memory 指标在微服务世界中并不那么强大。
但是,选项 2. 也值得一试,特别是因为 ELK 的堆栈指标支持越来越好。
我正在研究监控我们在 Swisscom 的 cloud-foundry 中安装的选项。我的目标如下:
- 监控已部署应用程序的性能指标(例如 cpu、磁盘、内存)
- 监控服务的性能指标(慢速查询、查询数量,理想情况下还有一些关于达到配额的指标)
到目前为止,我理解的选项如下(包括一些BUT):
- 我使用了一个非常好的 TOP cf-plugin (github) 这很好用。似乎它注册自己以获得所需的消防水管喷嘴并消耗数据。
这对于跟踪/临时监控非常有用,但对于严肃的基础设施监控不是很好。
- 我发现的另一种方法是使用 firehose-syslog 解决方案。
这可以部署为一个应用程序(据我所知)以类似的方式完成工作,就像 TOP cf 插件一样。
问题是,它需要注册客户端,因此它可以通过多普勒端点进行身份验证。出于某种原因,top-cf-plugin 会自动/以另一种方式执行此操作。
- 我正在考虑的最后一个选项是将监控本身构建到应用程序(使用特殊的构建包)
这可以用 Datadog 来完成。但是好像还需要专门的uaa客户端来注册Nozzle。
我想检查一下,是否有人(曾经)在类似的道路上,有一些发现。
最后我想向swisscom社区支持提出以下问题:
- 是否可以注册 uaac 客户端以便能够通过 firehose 喷嘴从外部服务中摄取事件? (如果我没看错,这需要管理员凭据)
- 是否有其他方法来使用喷嘴进行身份验证(例如使用特殊用户及其身份验证令牌?)
- 是否有其他方法可以监控 Swisscom 中的 CF 部署?最终,是否有一篇论文、博客文章或其他形式的文档在这方面有帮助(也适用于 AppCloud 的其他用户)?
由于需要管理员权限,我们无法为firehose提供UAA客户端。 但是,有不同的方法可以在用户上下文中获取指标。
CF API
您可以通过轮询CF来获取特定应用的基本指标API: https://apidocs.cloudfoundry.org/5.0.0/apps/get_detailed_stats_for_a_started_app.html
但是,由于您必须轮询(并且针对每个应用程序),因此不推荐使用这种方式。
syslog drain 中的指标
CF 允许开发人员将他们的日志转发到 syslog drain;在更新的版本中,CF 还会将指标发送到此 syslog drain(请参阅 https://docs.cloudfoundry.org/devguide/deploy-apps/streaming-logs.html#container-metrics)。 例如,您可以使用 Swisscom 的 Elasticsearch 服务来存储这些指标,然后使用 Kibana 对其进行分析。
使用 loggregator (firehose) 的指标
firehose 允许为两种类型的角色将日志流式传输到客户端: 将 所有 日志流式传输给管理员(这需要具有管理员权限的 UAA 客户端)并将 app 日志和指标流式传输给具有应用 [=] 权限的开发人员58=]。这也是
cf logs
命令使用的。cf top
也是这样 (it enumerates all apps and streams the logs of each app). 但是,您会发现大多数利用 firehose 的开源工具只能在管理员模式下工作,因为它们是为平台运营商编写的。
当然,您也可以通过对其进行检测(白盒方法)来监控您的应用程序,例如通过在 Spring 启动应用程序中配置 Spring 执行器或通过包含代理您最喜欢的 APM 供应商(Dynatrace、AppDynamics 等)
我想这是最常见的方法;我们已经看到很多团队通过检测他们的应用程序而取得成功。特别是因为高级监控无论如何都需要您创建自己的指标,因为 firehose 提供的 cpu/memory 指标在微服务世界中并不那么强大。
但是,选项 2. 也值得一试,特别是因为 ELK 的堆栈指标支持越来越好。