2.3. 核心设置和配置
基于角色的访问控制、基本监控和 pod 放置来部署 Loki。
2.3.1. 授权 LokiStack 规则 RBAC 权限 复制链接链接已复制到粘贴板!
管理员可以允许用户通过将集群角色绑定到 username 来创建和管理自己的警报和记录规则。集群角色定义为 ClusterRole 对象,其中包含用户所需的基于角色的访问控制(RBAC)权限。
LokiStack 有以下用于警报和记录规则的集群角色:
| 运行名称 | 描述 |
|---|---|
|
|
具有此角色的用户具有管理级别访问权限来管理警报规则。此集群角色授予在 |
|
|
具有此角色的用户可以查看与 |
|
|
具有此角色的用户有权创建、更新和删除 |
|
|
具有此角色的用户可以读取 |
|
|
具有此角色的用户具有管理记录规则的管理级别访问权限。此集群角色授予在 |
|
|
具有此角色的用户可以查看与 |
|
|
具有此角色的用户有权创建、更新和删除 |
|
|
具有此角色的用户可以读取 |
2.3.1.1. 例子 复制链接链接已复制到粘贴板!
要为用户应用集群角色,您必须将现有集群角色绑定到特定用户名。
集群角色可以是集群或命名空间范围,具体取决于您使用的角色绑定。使用 RoleBinding 对象时,如使用 oc adm policy add-role-to-user 命令时,集群角色仅适用于指定的命名空间。当使用 ClusterRoleBinding 对象时,如使用 oc adm policy add-cluster-role-to-user 命令时,集群角色会应用到集群中的所有命名空间。
以下示例命令为指定用户在集群中的特定命名空间中创建、读取、更新和删除(CRUD)权限:
特定命名空间中警报规则 CRUD 权限的集群角色绑定命令示例
oc adm policy add-role-to-user alertingrules.loki.grafana.com-v1-admin -n <namespace> <username>
$ oc adm policy add-role-to-user alertingrules.loki.grafana.com-v1-admin -n <namespace> <username>
以下命令为所有命名空间中的警报规则授予指定用户管理员权限:
管理员权限的集群角色绑定命令示例
oc adm policy add-cluster-role-to-user alertingrules.loki.grafana.com-v1-admin <username>
$ oc adm policy add-cluster-role-to-user alertingrules.loki.grafana.com-v1-admin <username>
2.3.2. 使用 Loki 创建基于日志的警报规则 复制链接链接已复制到粘贴板!
AlertingRule CR 包含一组规格和 webhook 验证定义,用于声明单个 LokiStack 实例的警报规则组。另外,webhook 验证定义支持规则验证条件:
-
如果
AlertingRuleCR 包含无效的interval周期,则它是一个无效的警报规则 -
如果
AlertingRuleCR 包含无效的for周期,则它是一个无效的警报规则 -
如果
AlertingRuleCR 包含无效的 LogQLexpr,则它是一个无效的警报规则。 -
如果
AlertingRuleCR 包含两个同名的组,则它是一个无效的警报规则。 - 如果以上都不适用,则警报规则被视为有效。
| 租户类型 | AlertingRule CR 的有效命名空间 |
|---|---|
| application |
|
| audit |
|
| infrastructure |
|
流程
创建
AlertingRule自定义资源 (CR):基础架构
AlertingRuleCR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 创建此
AlertingRuleCR 的命名空间必须具有与 LokiStackspec.rules.namespaceSelector定义匹配的标签。 - 2
labels块必须与 LokiStackspec.rules.selector定义匹配。- 3
infrastructure租户的AlertingRuleCR 只在openshift-*,kube-\*, 或default命名空间中被支持。- 4
kubernetes_namespace_name:的值必须与metadata.namespace的值匹配。- 5
- 此必需字段的值必须是
critical、warning或info。 - 6
- 这个字段是必须的。
- 7
- 这个字段是必须的。
应用程序
AlertingRuleCR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
AlertingRuleCR:oc apply -f <filename>.yaml
$ oc apply -f <filename>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.3. 配置 Loki 以容许 memberlist 创建失败 复制链接链接已复制到粘贴板!
在 OpenShift Container Platform 集群中,管理员通常使用非专用 IP 网络范围。因此,Loki memberlist 配置会失败,因为默认情况下,它只使用私有 IP 网络。
作为管理员,您可以为 memberlist 配置选择 pod 网络。您可以修改 LokiStack 自定义资源(CR)以使用 hashRing spec 中的 podIP 地址。要配置 LokiStack CR,请使用以下命令:
oc patch LokiStack logging-loki -n openshift-logging --type=merge -p '{"spec": {"hashRing":{"memberlist":{"instanceAddrType":"podIP"},"type":"memberlist"}}}'
$ oc patch LokiStack logging-loki -n openshift-logging --type=merge -p '{"spec": {"hashRing":{"memberlist":{"instanceAddrType":"podIP"},"type":"memberlist"}}}'
LokiStack 示例,使其包含 podIP
2.3.4. 使用 Loki 启用基于流的保留 复制链接链接已复制到粘贴板!
您可以根据日志流配置保留策略。您可以在全局范围内、每个租户或两者都设置保留规则。如果同时配置这两个,则租户规则会在全局规则之前应用。
如果没有在 s3 存储桶或 LokiStack 自定义资源 (CR) 中定义保留周期,则不会修剪日志,它们会永久保留在 s3 存储桶中,这可能会填满 s3 存储。
-
虽然日志记录版本 5.9 及更新的版本支持 schema
v12,但推荐使用 schemav13以获得将来的兼容性。 为了有效地进行日志修剪,请直接在对象存储供应商上配置保留策略。使用存储供应商的生命周期管理功能来确保自动删除旧日志。这也可避免从 Loki 额外处理并删除对 S3 的请求。
如果对象存储不支持生命周期策略,您必须将 LokiStack 配置为在内部强制保留。支持的保留周期最多为 30 天。
先决条件
- 有管理员权限。
- 已安装 Loki Operator。
-
已安装 OpenShift CLI(
oc)。
流程
要启用基于流的保留,请创建一个
LokiStackCR,并将它保存为 YAML 文件。在以下示例中,它名为lokistack.yaml。S3 的全局基于流的保留示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow S3 基于每个租户流的保留示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
LokiStackCR:oc apply -f lokistack.yaml
$ oc apply -f lokistack.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.5. Loki pod 放置 复制链接链接已复制到粘贴板!
您可以通过在 pod 上使用容忍度或节点选择器来控制 Loki pod 在哪些节点上运行,并防止其他工作负载使用这些节点。
您可以使用 LokiStack 自定义资源 (CR) 将容限应用到日志存储 pod,并将污点应用到具有节点规格的节点。节点上的污点是一个 key:value 对,它指示节点排斥所有不允许污点的 pod。通过使用不在其他 pod 上的特定 key:value 对,可确保只有日志存储 pod 能够在该节点上运行。
带有节点选择器的 LokiStack 示例
带有节点选择器和容限的 LokiStack CR 示例
要配置 LokiStack (CR) 的 nodeSelector 和 tolerations 字段,您可以使用 oc explain 命令查看特定资源的描述和字段:
oc explain lokistack.spec.template
$ oc explain lokistack.spec.template
输出示例
如需更多信息,您可以添加一个特定字段:
oc explain lokistack.spec.template.compactor
$ oc explain lokistack.spec.template.compactor
输出示例