我们想使用 Swisscom 云提供的 ELK 服务。因为我们要登录的应用程序不是由 Swisscom 托管的,而是在外部托管的,所以我们想从外部连接到 ELK 服务。这可能吗?或者 ELK 服务是否仅适用于 Swisscom 云中托管的应用程序?
2 回答
当您创建和绑定 ELK 服务时,您将收到这样的连接字符串和凭据
$ cf env $APP
Getting env variables for app $APP in org $ORC / space $SPACE as $USER...
OK
System-Provided:
{
"VCAP_SERVICES": {
"elk": [
{
"credentials": {
"elasticSearchHost": "9zz2ulprvgzlepa5.service.consul",
"elasticSearchPassword": "$PASSWORD",
"elasticSearchPort": 48783,
"elasticSearchUsername": "$USERNAME",
"kibanaPassword": "$PASSWORD",
"kibanaUrl": "http://xjcv9zh0jer2s44q.service.consul:59664",
"kibanaUsername": "$USERNAME",
"logstashHost": "gew5qn71sxcz49gd.service.consul",
"logstashPort": 46611,
"syslog": "syslog://uew5qn71sxcz49gd.service.consul:46611"
},
"label": "elk",
"name": "example-so",
"plan": "small",
"provider": null,
"syslog_drain_url": "syslog://gew5qn71sxcz49gd.service.consul:46611",
"tags": []
}
],
您无法到达地址 *. service.consul
从外部(DNS 仅在 Swisscom Cloud 中可用)。您只能从您的应用程序(在 Cloud Foundry 容器中运行)访问这些地址。
有一种解决方法,但我建议仅用于开发目的。
您可以从本地桌面创建通往 Elasticsearch 或 Kibana Web 界面的隧道。
请参阅使用服务连接器管理服务实例。这是 Swisscom 开发的 CF CLI 插件。
创建服务实例后,您最终需要管理该服务。例如,您可能需要在数据库中创建数据表或备份/恢复您的数据。对于这些用例,我们创建了 Cloud Foundry CLI 插件服务连接器,它是一个本地代理应用程序,您可以通过它使用您首选的本地安装工具连接到您的服务实例。
Kibana Web 界面的示例。
cf service-connector 80 xjcv9zh0jer2s44q.service.consul:59664
您还可以从桌面访问 Elasticsearch 并使用 API 插入或查询文档。
ELK 堆栈包含三个组件:
- 弹性搜索 - 存储、索引
- Logstash - 接收和处理日志消息(如系统日志、JSON、文本)
- Kibana - 用于搜索和可视化的 Web UI
就像@Fydor 所写的那样,您无法从外部访问 ELK 的服务端点。如果您想访问 CF 托管应用程序的日志,这也是一个问题。您并不总是希望必须使用 Swisscom 的服务连接器来访问 Kibana。
因此,通常,您部署一个小型代理应用程序。Swisscom 有一个样品。
或者,也可以使用 Swisscom Kibana Proxy之类的代理应用程序来公开您的 Kibana 仪表板。
由于 Elastic Search 使用 REST 接口,您可以使用代理来发布 Elastic Search 端点。最终,您还应该抓住机会,在代理应用程序中加入一些安全措施。
已经有很多日志框架,直接支持转发到 Elastic Search。
如果您需要集成到现有的日志记录解决方案(如 Syslog、文本日志等),那么您可能需要使用 logstash。
由于 Cloud Foundry 目前仅支持发布 HTTP 和 HTTPS 端点,因此您不能为此使用 Swisscom 提供的实例,而必须部署您自己的实例并将其配置为使用您发布的 Elastic Search 端点。