收集应用程序日志并将其发送到 SAP Cloud Logging

学习目标

  • 收集并发送日志

使用场景

将基于微服务的应用程序部署到 Kyma 后,您希望借助 Kyma 的遥测功能以及与 SAP Cloud Logging 的集成对它进行持续监控。

任务流程

在本练习中,您将执行以下任务:

  1. 部署一个会生成应用程序日志的示例应用程序。

  2. 预配一个 SAP Cloud Logging 服务实例,并创建带凭证轮换的服务绑定。

  3. 配置一个引用该绑定的 Kyma Telemetry LogPipeline 资源。

  4. 为 Kyma 仪表盘添加深层链接。

  5. 使用 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:部署一个会生成应用程序日志的示例应用程序

步骤

  1. 创建一个名为telemetry-exercise的新命名空间:

kubectl create namespace telemetry-exercise
  1. 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
  1. 验证 Deployment 是否已创建:

kubectl get deployments -n telemetry-exercise

如果成功,您将获得以下输出:

NAME         READY   UP-TO-DATE   AVAILABLE   AGE
hello-kyma   1/1     1            1           2m
  1. hello-kyma Service 端口转发到您的本地计算机:

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 实例并创建带凭证轮换的绑定

步骤

  1. 使用 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
  1. 为您刚创建的实例定义一个启用了凭证轮换的新 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

步骤

  1. 创建一个 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 浏览日志

步骤

  1. 若要查看您的凭证,请检查 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-usernamedashboards-password 包含用于身份验证的凭证。 2. 打开从 dashboards-endpoint 获取的 URL,并使用这些凭证进行身份验证。 3. 在 Discover 部分中检查 logs-json-kyma-* 索引。所有日志都可立即使用所使用的日志属性进行查询。

任务 5:为 Kyma 仪表盘添加深层链接

步骤

  1. 若要为 Kyma 仪表盘添加导航和深层链接,请按照 使用 SAP Cloud Logging 仪表盘 操作。

  2. 若要试用新链接,请转到 Kyma 仪表盘,选择一个命名空间,然后选择 Discover Logs in SAP Cloud Logging

结果

太棒了!您已完成本练习。您使用 Telemetry 模块收集了扩展应用程序的日志,并通过 SAP Cloud Logging 对其进行了可视化。