《OpenShift / RHEL / DevSecOps 汇总目录》
说明:本文已经在支持 OpenShift 4.15 + Loki Operator 5.9.3 + OpenShift Logging Operator 5.8.8 的环境中验证(OpenShift Logging Operator 5.9.3 有问题)
文章目录
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 的日志环境
安装 OpenShift Logging Operator 和 Loki Operator
- 使用默认配置安装 OpenShift Logging Operator,该 Operator 将会安装在 openshift-logging 命名空间中。
- 使用默认配置安装 Loki Operator,该 Operator 将会安装在 openshift-operators-redhat 命名空间中。
配置对象存储
可以使用以下任一种 S3 对象存储作为 Loki 的存储。
使用 MinIO 对象存储
- 参考《OpenShift 4 - 基于 MinIO 安装 Red Hat Quay 镜像仓库》一文的 “安装 MinIO” 一节安装 MinIO 环境,然后创建名为 loki-logging 的 bucket 和 user (用户名和密码为 loki/openshift4,权限为 readwrite)。
- 创建访问 loki 存储桶的 Secret。
$ cat << EOF | kubectl apply -f -
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 对象存储
- 执行命令创建访问 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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
- 在 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"
}
- 基于以下 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 中根据以下 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
- 基于以下 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
- 基于以下 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
- 在完成后可在 OpenShift 的 “开发者” 视图中看到部署运行的组件。说明:此图不包括上一步说的 LogFileMetricExporter 对象。
- 刷新 OpenShift 的 “管理员” 视图,在 “观察” 菜单中会出现 “Logs” ,点击进入 Logs 可以看到集群日志。
- 为了能获得并访问 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
视频
参考
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