OpenShift 4 - 可观测性之 OpenShift Logging - Loki(附视频)

文章介绍了OpenShift如何从EFK转向基于Loki的日志架构,以实现更轻量级和高效的日志处理。内容包括Loki和Vector组件的使用,以及如何配置使用MinIO或AWSS3作为对象存储的详细步骤。此外,还涉及了在OpenShift环境中安装和配置LokiOperator、OpenShiftLoggingOperator,以及设置ClusterLogging和ClusterLogForwarder以收集和访问日志。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OpenShift / RHEL / DevSecOps 汇总目录
说明:本文已经在 OpenShift 4.15 + Loki Operator 5.9.3 + OpenShift Logging Operator 5.8.8 以及 OpenShift 4.18 + Loki Operator 6.1.0 + OpenShift Logging Operator 6.1.0 环境中验证。

OpenShift 基于 Loki 的日志架构

在 OpenShift 4.10 以后开始逐步用基于 Vector+Loki 的日志架构替换原有基于 EFK 的日志架构。之所以用 Loki 替换 EFK 主要是因为 Loki 有更加轻量级的运行环境。这是因为在 EFK 架构中 Elasticsearch 会对传入的日志记录进行完全索引,而 Loki 只对一些固定的标签进行索引,并将更复杂的解析工作推迟到日志被存储之后,因此 Loki 不但占用空间更小,而且还可以更快速地收集日志。
在这里插入图片描述
OpenShift 基于 Loki 的日志架构主要使用了 2 个组件:Vector 和 Loki。其中 Vector 用来收集日志,Loki 作为存储日志,另外访问日志页面也直接集成到了 OpenShift 控制台中。需要注意的是 Loki 必须使用对象存储来保存日志。

安装配置基于 Loki 的日志环境

安装 Operator

  1. 使用默认配置安装 OpenShift Logging Operator,该 Operator 将会安装在 openshift-logging 命名空间中。
  2. 使用默认配置安装 Loki Operator,该 Operator 将会安装在 openshift-operators-redhat 命名空间中。
  3. 如果用的是 OpenShift Logging Operator 6.1.0,还可以使用默认配置安装 Cluster Observability Operator 0.4.1 (可以将日志界面嵌入到 OpenShift Console 中),该 Operator 将会安装在 openshift-operators 命名空间中。

配置对象存储

可以使用以下任一种 S3 对象存储作为 Loki 的存储。

使用 MinIO 对象存储

  1. 参考《OpenShift 4 - 基于 MinIO 安装 Red Hat Quay 镜像仓库》一文的 “安装 MinIO” 一节安装 MinIO 环境,然后创建名为 loki-logging 的 bucket 和 user (用户名和密码为 loki/openshift4,权限为 readwrite)。
  2. 创建访问 loki 存储桶的 Secret。
$ oc apply -f - << EOF
apiVersion: v1
kind: Secret
metadata:
  name: lokistack-dev-s3
  namespace:  openshift-logging
stringData:
  access_key_id: loki
  access_key_secret: openshift4
  bucketnames: loki-logging
  endpoint: http://minio-svc.minio-dev.svc:9000
  insecure: "true"
EOF

使用 AWS 对象存储

  1. 执行命令创建访问 AWS 的凭证文件,其中我们会用到 us-east-1 区的 AWS S3 服务。
$ aws configure
AWS Access Key ID [None]: AKIAVROBYTZYQBBNWLF6
AWS Secret Access Key [None]: 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
Default region name [None]: us-east-1
Default output format [None]: json
 
$ cat .aws/credentials
[default]
aws_access_key_id = AKIAVROBYTZYQBBNWLF6
aws_secret_access_key = 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
  1. 在 AWS 上创建 S3 存储的 bucket。
$ GUID=`hostname | cut -d. -f2`
$ aws --profile default s3api create-bucket --bucket $GUID --region us-east-1 --create-bucket-configuration LocationConstraint=us-east-1
{
    "Location": "/j68pw"
}
  1. 基于以下 YAML 创建访问 AWS bucket 的 Secret 对象。
apiVersion: v1
kind: Secret
metadata:
  name: lokistack-dev-s3
  namespace: openshift-logging
stringData:
  access_key_id: w3EDfSERUiLSAEXAMPLE (Replace with your aws creds)
  access_key_secret: mshdyShDTYKWEywajsqpshdNSUWJDA+1+REXAMPLE (Replace with your aws creds)
  bucketnames: j68pw (we called it j68pw in our example)
  endpoint: https://s3.us-east-1.amazonaws.com/
  region: us-east-1

配置基于 Loki 的 OpenShift Logging (Loki Operator 5.9.3 + OpenShift Logging Operator 5.8.8)

  1. 在 Loki Operator 中根据以下 2 个截图创建一个 LokiStack 对象。
    在这里插入图片描述

以下 Storage Class Name 为可提供 RWO 存储的存储类即可。
在这里插入图片描述
上述配置过程会生成以下 YAML,其中 gp2-csi 是 OpenShift 中已有的 StorageClass。

apiVersion: loki.grafana.com/v1
kind: LokiStack
metadata:
  name: loki-logging
  namespace: openshift-logging
spec:
  size: 1x.extra-small
  storage:
    schemas:
    - version: v13
      effectiveDate: "2023-10-15"
    secret:
      name: lokistack-dev-s3
      type: s3
  storageClassName: gp2-csi
  managementState: Managed
  hashRing:
    type: memberlist 
  tenants:
    mode: openshift-logging
  1. 基于以下 YAML 创建一个基于 lokistack 存储和 vector 收集器的 ClusterLogging 对象。
apiVersion: logging.openshift.io/v1
kind: ClusterLogging
metadata:
  name: instance
  namespace: openshift-logging
spec:
  logStore:
    type: lokistack
    lokistack:
      name: loki-logging
  collection:
    type: vector
  visualization:
    type: ocp-console
  managementState: Managed
  1. 基于以下 YAML 创建一个 LogFileMetricExporter 对象。说明:当使用 OpenShift Logging Operator 5.8.8 时无需此步操作,不过和 https://docs.openshift.com/container-platform/4.15/observability/logging/logging_release_notes/logging-5-8-release-notes.html#logging-release-notes-5-8-0-enhancements 似乎不一致。
apiVersion: logging.openshift.io/v1alpha1
kind: LogFileMetricExporter
metadata:
  name: instance
  namespace: openshift-logging
spec:
  resources:
    limits:
      cpu: 500m
    requests:
      cpu: 200m
      memory: 128Mi
  tolerations:
    - effect: NoSchedule
      key: node-role.kubernetes.io/master
      operator: Exists
  1. 在完成后可在 OpenShift 的 “开发者” 视图中看到部署运行的组件。说明:此图不包括上一步说的 LogFileMetricExporter 对象。
    在这里插入图片描述
  2. 刷新 OpenShift 的 “管理员” 视图,在 “观察” 菜单中会出现 “Logs” ,点击进入 Logs 可以看到集群日志。
    在这里插入图片描述
  3. 为了能获得并访问 Auditor 日志,需根据以下 YAML 创建 ClusterLogForwarder 对象。
apiVersion: logging.openshift.io/v1
kind: ClusterLogForwarder
metadata:
  name: instance
  namespace: openshift-logging
spec:
  pipelines:
  - name: all-to-default
    inputRefs:
    - infrastructure
    - application
    - audit
    outputRefs:
    - default

配置基于 Loki 的 OpenShift Logging (Loki Operator 6.1.0 + OpenShift Logging Operator 6.1.0 + COO 0.4.1)

  1. 参照上一节第一步的配置创建一个 LokiStack 对象。
apiVersion: loki.grafana.com/v1
kind: LokiStack
metadata:
  name: loki-logging
  namespace: openshift-logging
spec:
  size: 1x.extra-small
  storage:
    schemas:
    - version: v13
      effectiveDate: "2023-10-15"
    secret:
      name: lokistack-dev-s3
      type: s3
  storageClassName: gp2-csi
  managementState: Managed
  hashRing:
    type: memberlist 
  tenants:
    mode: openshift-logging
  1. 在 openshift-logging 项目中创建名为 collector 的 ServiceAccount。
$ oc create sa collector -n openshift-logging
  1. 给名为 collector 的 ServiceAccount 添加角色。
$ oc -n openshift-logging adm policy add-cluster-role-to-user logging-collector-logs-writer -z collector
$ oc -n openshift-logging adm policy add-cluster-role-to-user collect-application-logs -z collector
$ oc -n openshift-logging adm policy add-cluster-role-to-user collect-audit-logs -z collector
$ oc -n openshift-logging adm policy add-cluster-role-to-user collect-infrastructure-logs -z collector
  1. 在 Cluster Observability Operator 中创建一个 UIPlugin 对象。完成后可刷新 OpenShift 控制台,在 “观察” 菜单中会出现 “Logs” ,但此时日志还不能显示出来。
apiVersion: observability.openshift.io/v1alpha1
kind: UIPlugin
metadata:
  name: logging
spec:
  logging:
    lokiStack:
      name: loki-logging
  type: Logging
  1. 在 OpenShift Logging Operator 中创建一个 ClusterLogForwarder 对象,将 OpenShift 的 Application、Infrastructue、Audit 日志传给 Loki。
apiVersion: observability.openshift.io/v1
kind: ClusterLogForwarder
metadata:
  name: clf-loki
  namespace: openshift-logging
spec:
  managementState: Managed
  outputs:
    - lokiStack:
        authentication:
          token:
            from: serviceAccount
        target:
          name: loki-logging
          namespace: openshift-logging
      name: default-lokistack
      tls:
        ca:
          configMapName: openshift-service-ca.crt
          key: service-ca.crt
      type: lokiStack
  pipelines:
    - inputRefs:
        - application
        - infrastructure
        - audit
      name: logs-to-loki
      outputRefs:
        - default-lokistack
  serviceAccount:
    name: collector
  1. 点击进入 “观察” 菜单的 “Logs” ,可以看到集群的 Application、Infrastructue、Audit 日志。
    在这里插入图片描述

验证应用日志

  1. 参考《OpenShift 4 - 配置 OpenShift 的 EFK 日志环境》的 “查看应用日志” 一节部署测试应用。
  2. 在运行的 Pod 中可以看到 Aggregated Logs 标签,确认是发给 Loki 的应用日志。
    在这里插入图片描述
  3. 进入“观察”的 Logs 菜单,可以选则按 Namespace 过滤,命名空间选中 log-app。此时只会显示 log-app 项目中的应用日志。
  4. 再点击 Show Resources ,可显示日志的来源。
  5. 点击 Show Query 后在输入区可以看到 { log_type="application", kubernetes_namespace_name="log-app" } | json。可手工编辑日志查询条件,然后点击 Run Query 按钮执行日志查询。
    在这里插入图片描述

视频

视频

参考

https://github.com/OpenShiftDemos/openshift-ops-workshops/blob/ocp4-prod/workshop/content/logging.adoc
https://github.com/OpenShiftDemos/openshift-ops-workshops/blob/ocp4-prod/workshop/content/logging-with-loki.adoc
https://www.redhat.com/en/topics/devops/what-is-observability
https://landscape.cncf.io/guide#observability-and-analysis
https://cloud.redhat.com/blog/whats-new-in-red-hat-openshift-monitoring-4.13-logging-5.7-and-distributed-tracing-2.8
https://docs.openshift.com/container-platform/4.16/logging/cluster-logging.html
https://github.com/grafana/loki/blob/main/operator/hack/lokistack_gateway_ocp.yaml
https://github.com/OpenShiftDemos/openshift-ops-workshops/blob/ocp4-prod/workshop/content/logging-with-loki.adoc
https://videos.learning.redhat.com/media/OpenShift%20Logging%20-%20Technical%20Enablement%20-%20Log-based%20Alerts/1_fl713aj5
https://docs.redhat.com/zh_hans/documentation/openshift_container_platform/4.17/html-single/logging/index

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值