收集应用程序日志并将其发送到 SAP Cloud Logging
学习目标
收集并发送日志
使用场景
将基于微服务的应用程序部署到 Kyma 后,您希望借助 Kyma 的遥测功能以及与 SAP Cloud Logging 的集成对它进行持续监控。
任务流程
在本练习中,您将执行以下任务:
部署一个会生成应用程序日志的示例应用程序。
预配一个 SAP Cloud Logging 服务实例,并创建带凭证轮换的服务绑定。
配置一个引用该绑定的 Kyma Telemetry LogPipeline 资源。
为 Kyma 仪表盘添加深层链接。
使用 SAP Cloud Logging 浏览日志。
前提条件
在开始之前,请确保满足以下前提条件:
您已在 SAP BTP 子账户中创建 SAP BTP, Kyma runtime 实例。请参见 使用 Kyma 在 SAP BTP 上部署 Kubernetes 集群 。
您已配置 kubectl 以便与您的 SAP BTP, Kyma runtime 实例交互。请参见 为 Kyma 设置和配置 kubectl 。
您已添加 Serverless 模块。请参见 添加 Kyma 模块 。
您拥有 SAP Cloud Logging 计划的权益。
任务 1:部署一个会生成应用程序日志的示例应用程序
步骤
创建一个名为
telemetry-exercise的新命名空间:
kubectl create namespace telemetry-exercise
在
telemetry-exercise命名空间中创建一个名为hello-kyma的新 Deployment:
kubectl apply -n telemetry-exercise -f https://raw.githubusercontent.com/SAP-samples/kyma-runtime-learning-journey/main/unit_9/hello-kyma-deployment-svc.yaml
验证 Deployment 是否已创建:
kubectl get deployments -n telemetry-exercise
如果成功,您将获得以下输出:
NAME READY UP-TO-DATE AVAILABLE AGE
hello-kyma 1/1 1 1 2m
将
hello-kymaService 端口转发到您的本地计算机:
kubectl port-forward -n telemetry-exercise svc/hello-kyma 8080:8080
保持此终端窗口打开,并在新的浏览器标签页中打开 http://localhost:8080。您将看到消息 Hello Kyma! (Version 1.0.0)。
5. 在终端窗口中按 Ctrl+C 停止端口转发。
6. 验证每次请求都会将日志写入 stdout:
kubectl logs -n telemetry-exercise -l app=hello-kyma
使用 kubectl 检索到的日志临时存储在 Node 文件系统上。这些日志会被频繁轮换,并且在 Pod 或 Node 被重新调度时丢失。以下设置会从 Node 文件系统收集日志,将它们长期存储在 SAP Cloud Logging 中,并使它们可以跨 Pod 和命名空间进行搜索。
任务 2:预配 SAP Cloud Logging 实例并创建带凭证轮换的绑定
步骤
使用 SAP BTP Operator 模块(该模块默认位于您的 Kyma 集群中)为 SAP Cloud Logging 定义一个新实例:
cat <<EOF | kubectl -n telemetry-exercise apply -f -
apiVersion: services.cloud.sap.com/v1
kind: ServiceInstance
metadata:
name: cloud-logging
spec:
serviceOfferingName: cloud-logging
servicePlanName: standard
externalName: Cloud Logging
parameters:
ingest_otlp: # must be enabled for trace and metric data ingestion
enabled: true
EOF
为您刚创建的实例定义一个启用了凭证轮换的新 Service Binding:
cat <<EOF | kubectl -n telemetry-exercise apply -f -
apiVersion: services.cloud.sap.com/v1
kind: ServiceBinding
metadata:
name: cloud-logging
spec:
serviceInstanceName: cloud-logging
externalName: cloud-logging
secretName: cloud-logging
credentialsRotationPolicy:
enabled: true
rotationFrequency: 720h
rotatedBindingTTL: 24h
EOF
凭证轮换会定期轮换所生成 Secret 中的凭证,并在指定的 TTL 内保持旧凭证并行有效。每当 Secret 的内容发生变化时,下一步中定义的 LogPipeline 资源都会动态重新加载 Secret 值。这确保凭证不会过期并且会被频繁轮换。
3. 为验证该设置,请检查服务实例和绑定的状态:
kubectl -n telemetry-exercise get serviceinstance
kubectl -n telemetry-exercise get servicebinding
实例完成预配、以及绑定和相关的 Kubernetes Secret 被创建需要几分钟时间。不过,您可以继续执行后续步骤,因为 LogPipeline 会在 Secret 值就绪后立即动态获取它。
任务 3:配置一个引用该服务绑定的 Kyma Telemetry LogPipeline
步骤
创建一个 LogPipeline:
cat <<EOF | kubectl apply -f -
apiVersion: telemetry.kyma-project.io/v1alpha1
kind: LogPipeline
metadata:
name: cloud-logging
spec:
output:
http:
dedot: true
host:
valueFrom:
secretKeyRef:
name: cloud-logging
namespace: telemetry-exercise
key: ingest-mtls-endpoint
tls:
cert:
valueFrom:
secretKeyRef:
name: cloud-logging
namespace: telemetry-exercise
key: ingest-mtls-cert
key:
valueFrom:
secretKeyRef:
name: cloud-logging
namespace: telemetry-exercise
key: ingest-mtls-key
uri: /customindex/kyma
EOF
注意
此示例使用 LogPipeline,但 Telemetry 模块并不局限于日志。您可以用类似的方式集成跟踪和指标。
任务 4:使用 SAP Cloud Logging 浏览日志
步骤
若要查看您的凭证,请检查 Secret:
kubectl -n telemetry-exercise get secret cloud-logging -o go-template='{{range $key, $value := .data}}{{$key}}={{$value|base64decode}}{{"\n"}}{{end}}'
属性 dashboards-endpoint 包含指向 SAP Cloud Logging Dashboard 的 URL。属性 dashboards-username 和 dashboards-password 包含用于身份验证的凭证。
2. 打开从 dashboards-endpoint 获取的 URL,并使用这些凭证进行身份验证。
3. 在 Discover 部分中检查 logs-json-kyma-* 索引。所有日志都可立即使用所使用的日志属性进行查询。
任务 5:为 Kyma 仪表盘添加深层链接
步骤
若要为 Kyma 仪表盘添加导航和深层链接,请按照 使用 SAP Cloud Logging 仪表盘 操作。
若要试用新链接,请转到 Kyma 仪表盘,选择一个命名空间,然后选择 Discover Logs in SAP Cloud Logging。
结果
太棒了!您已完成本练习。您使用 Telemetry 模块收集了扩展应用程序的日志,并通过 SAP Cloud Logging 对其进行了可视化。