7.2. 将日志转发到 LokiStack 实例
您可以使用 Collector 组件部署 OpenTelemetry Collector,将日志转发到 LokiStack 实例。
这种 Loki Exporter 是一个临时技术预览功能,计划被一个改进的解决方案被一个改进的解决方案替代,其中 Loki Exporter 被 OTLP HTTP Exporter 替换。
Loki Exporter 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
先决条件
- 已安装红帽构建的 OpenTelemetry Operator。
- 已安装 Loki Operator。
- 在集群中部署了受支持的 LokiStack 实例。
流程
为 OpenTelemetry Collector 创建服务帐户。
ServiceAccount
对象示例apiVersion: v1 kind: ServiceAccount metadata: name: otel-collector-deployment namespace: openshift-logging
创建一个集群角色,为 Collector 的服务帐户授予将日志推送到 LokiStack 应用程序租户的权限。
ClusterRole
对象示例apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: otel-collector-logs-writer rules: - apiGroups: ["loki.grafana.com"] resourceNames: ["logs"] resources: ["application"] verbs: ["create"] - apiGroups: [""] resources: ["pods", "namespaces", "nodes"] verbs: ["get", "watch", "list"] - apiGroups: ["apps"] resources: ["replicasets"] verbs: ["get", "list", "watch"] - apiGroups: ["extensions"] resources: ["replicasets"] verbs: ["get", "list", "watch"]
将集群角色绑定到服务帐户。
ClusterRoleBinding
对象示例apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: otel-collector-logs-writer roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: otel-collector-logs-writer subjects: - kind: ServiceAccount name: otel-collector-deployment namespace: openshift-logging
创建
OpenTelemetryCollector
自定义资源(CR)对象。OpenTelemetryCollector
CR 对象示例apiVersion: opentelemetry.io/v1beta1 kind: OpenTelemetryCollector metadata: name: otel namespace: openshift-logging spec: serviceAccount: otel-collector-deployment config: extensions: bearertokenauth: filename: "/var/run/secrets/kubernetes.io/serviceaccount/token" receivers: otlp: protocols: grpc: {} http: {} processors: k8sattributes: auth_type: "serviceAccount" passthrough: false extract: metadata: - k8s.pod.name - k8s.container.name - k8s.namespace.name labels: - tag_name: app.label.component key: app.kubernetes.io/component from: pod pod_association: - sources: - from: resource_attribute name: k8s.pod.name - from: resource_attribute name: k8s.container.name - from: resource_attribute name: k8s.namespace.name - sources: - from: connection resource: attributes: 1 - key: loki.format 2 action: insert value: json - key: kubernetes_namespace_name from_attribute: k8s.namespace.name action: upsert - key: kubernetes_pod_name from_attribute: k8s.pod.name action: upsert - key: kubernetes_container_name from_attribute: k8s.container.name action: upsert - key: log_type value: application action: upsert - key: loki.resource.labels 3 value: log_type, kubernetes_namespace_name, kubernetes_pod_name, kubernetes_container_name action: insert transform: log_statements: - context: log statements: - set(attributes["level"], ConvertCase(severity_text, "lower")) exporters: loki: endpoint: https://logging-loki-gateway-http.openshift-logging.svc.cluster.local:8080/api/logs/v1/application/loki/api/v1/push 4 tls: ca_file: "/var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt" auth: authenticator: bearertokenauth debug: verbosity: detailed service: extensions: [bearertokenauth] 5 pipelines: logs: receivers: [otlp] processors: [k8sattributes, transform, resource] exporters: [loki] 6 logs/test: receivers: [otlp] processors: [] exporters: [debug]
- 1
- 提供 Web 控制台要使用的以下资源属性:
kubernetes_namespace_name
,kubernetes_pod_name
,kubernetes_container_name
, 和log_type
。如果您将它们指定为此loki.resource.labels
属性的值,则 Loki Exporter 将它们作为标签处理。 - 2
- 配置 Loki 日志的格式。支持的值有
json
、logfmt
和raw
。 - 3
- 配置哪些资源属性作为 Loki 标签处理。
- 4
- 将 Loki Exporter 指向 LokiStack
logging-loki
实例的网关,并使用application
租户。 - 5
- 启用 Loki Exporter 所需的 BearerTokenAuth Extension。
- 6
- 启用 Loki Exporter 从 Collector 导出日志。
您可以将 telemetrygen
部署为测试:
apiVersion: batch/v1 kind: Job metadata: name: telemetrygen spec: template: spec: containers: - name: telemetrygen image: ghcr.io/open-telemetry/opentelemetry-collector-contrib/telemetrygen:v0.106.1 args: - logs - --otlp-endpoint=otel-collector.openshift-logging.svc.cluster.local:4317 - --otlp-insecure - --duration=180s - --workers=1 - --logs=10 - --otlp-attributes=k8s.container.name="telemetrygen" restartPolicy: Never backoffLimit: 4
其他资源