在 Red Hat OpenShift 上安装 SigNoz - 自托管指南
本指南介绍如何通过 SigNoz Helm chart 安装 SigNoz 到 Red Hat OpenShift 集群,可以使用 Foundry,也可以直接使用 Helm。由于 OpenShift 强制执行安全上下文约束(SCC),安装的第一步是为 SigNoz 创建一个 SCC。
前提条件
- 一个 OpenShift 集群。
- 已配置好连接集群的
oc或kubectlCLI,且同一台机器上安装了 Helm 3。 - 集群有足够的资源容量运行 SigNoz。容量规划可参考资源规划文档。
- 一个由 OpenShift 支持的 provisioner 提供的存储类(storage class)。详见 Red Hat 存储文档。
安装 SigNoz
第 1 步:创建 SecurityContextConstraints
在 OpenShift 中,只有当 SCC 允许 Pod 所需的权限时,Pod 才能被准入。ClickHouse 和 ZooKeeper 以固定的用户和组 ID 运行,并挂载持久化卷。创建一个名为 signoz-scc.yaml 的文件,为它们的服务账户开放这些权限:
apiVersion: security.openshift.io/v1
kind: SecurityContextConstraints
metadata:
name: signoz-scc
allowPrivilegedContainer: false
runAsUser:
type: RunAsAny # allow any container UID
fsGroup:
type: RunAsAny # allow any supplemental GID
seLinuxContext:
type: RunAsAny # no SELinux label constraints
volumes:
- persistentVolumeClaim # mounted PVC
- emptyDir # ephemeral scratch space
- configMap # ConfigMap files
- projected # combined CM/secret/etc.
- downwardAPI # expose pod metadata
readOnlyRootFilesystem: false
allowHostDirVolumePlugin: false
users:
# Bind the SCC to Required Service Accounts for SigNoz
- system:serviceaccount:signoz:signoz-clickhouse
- system:serviceaccount:signoz:default请核对这些值:
system:serviceaccount:后面的signoz:即第 4 步中传给helm install的命名空间。signoz-clickhouse:ClickHouse 使用的服务账号。前缀是你传递给helm install的 release 名称,因此如果 release 名称不同,请替换开头的signoz。default:ZooKeeper 运行的默认服务账号。请保持不变。
应用该配置。在运行 oc 的机器上执行以下命令:
oc apply -f signoz-scc.yamlkubectl apply -f signoz-scc.yaml 的作用相同。
步骤 2:添加 Helm 仓库
在运行 kubectl 的机器上执行以下命令:
helm repo add signoz https://charts.signoz.io
helm repo update步骤 3(可选):选择存储类
SigNoz 将数据存储在持久卷中。存储类决定了集群为这些数据创建何种类型的磁盘。若跳过此步骤,SigNoz 将使用集群的默认存储类。在 OpenShift 中,请选用集群支持的 storage provisioner 对应的存储类;具体请参阅先决条件中链接的 Red Hat 存储文档。查看集群提供的存储类:
Copykubectl get storageclass如需使用特定存储类,请创建名为 values.yaml 的文件:
global:
storageClass: <storage-class>验证以下值:
<storage-class>:来自kubectl get storageclass输出的存储类名称。
其他 chart 值可写入同一文件。参见 chart 配置参考。
步骤 4:安装 Chart
在包含 values.yaml 的目录下执行:
helm install signoz signoz/signoz \
--namespace signoz --create-namespace \
--wait --timeout 1h \
-f values.yaml如果跳过了步骤 3,请省略 -f values.yaml。--wait 参数会使命令在所有 pod 就绪后才返回。
步骤 5:验证安装
检查 pod 是否正在运行:
Copykubectl get pods -n signoz输出应类似以下内容。Pod 后缀会有所不同:
NAME READY STATUS RESTARTS AGE
chi-signoz-clickhouse-cluster-0-0-0 1/1 Running 0 3m
signoz-0 1/1 Running 0 3m
signoz-clickhouse-operator-7f8c9d6b5-q4w2z 2/2 Running 0 3m
signoz-otel-collector-6d9c7b8f5c-k2x9p 1/1 Running 0 3m
signoz-telemetrystore-migrator-x7h3k 0/1 Completed 0 2m
signoz-zookeeper-0 1/1 Running 0 3m
待所有 Pod 均进入 Running 状态后,对 SigNoz UI 执行端口转发,并在浏览器中打开 http://localhost:8080/:
kubectl port-forward -n signoz svc/signoz 8080:8080
在另一个终端中检查健康端点:
curl -X GET http://localhost:8080/api/v1/health
响应如下:
{"status":"ok"}
默认情况下,日志和 Trace 的保留期限为7 天,指标的保留期限为30 天。如需修改,请前往 SigNoz UI 的设置页面,选择常规选项卡。
更多详情参见保留期限指南。
向 SigNoz 发送数据
你的应用程序将 Trace、指标和日志发送至 SigNoz 收集器。在集群内部,收集器的监听地址为:
http://signoz-otel-collector.signoz.svc.cluster.local:4318
在埋点配置中,将此地址作为 OTLP 端点,例如用作 OTEL_EXPORTER_OTLP_ENDPOINT 的值。若使用 gRPC,请改用端口 4317。
地址中的第二个 signoz 代表命名空间。如果你将 SigNoz 安装在了其他命名空间,请使用对应的命名空间。
对于集群外部的应用,请参阅自托管数据摄入指南。
自定义安装
所有配置变更均遵循相同流程:编辑 values.yaml,然后执行 Helm 升级:
helm upgrade signoz signoz/signoz --namespace signoz -f values.yaml
- Chart 参数:所有配置项参见Chart 配置参考。
- Chart 版本:在
helm install和helm upgrade命令中加上--version <chart-version>。可用版本请查看 SigNoz charts releases。
请确认以下值:
<chart-version>:SigNoz charts releases 中的某个 chart 版本,例如0.144.0。
故障排查
helm install 超时
--wait 参数会等待所有 Pod 变为就绪状态。如果命令超时,先用 kubectl get pods -n signoz 查看 Pod 列表,再按下面两种情况处理。
Pod 一直处于 Pending 状态
用 describe 命令查看 Pod 无法调度的原因:
Copykubectl describe pod -n signoz <pod-name>把 <pod-name> 替换为 kubectl get pods -n signoz 输出中的 Pod 名称。
如果提示 CPU 或内存不足,说明节点资源不够,请参考资源规划文档。
问题解决后,kubectl get pods -n signoz 会显示该 Pod 处于 Running 状态。
Pod 不断重启
查看其日志:
Copykubectl logs -n signoz <pod-name>加上 --previous 参数可以查看上次重启之前的日志。
安装 SigNoz
What is Foundry?Foundry 是一个开源 CLI 工具,能以代码方式运行你的自托管可观测性技术栈。只需一份声明式配置,即可在裸机、容器或 Kubernetes 上完成基础设施创建、SigNoz 后端安装,以及 OpenTelemetry 采集配置。了解更多关于 Foundry 的信息。
第 1 步:创建 SecurityContextConstraints
OpenShift 只在 SCC 允许 Pod 所需权限时才会接纳该 Pod。ClickHouse、ZooKeeper 和 PostgreSQL 以固定的用户和组 ID 运行,并挂载持久化卷。创建一个名为 signoz-scc.yaml 的文件,为它们的服务账号授予相应权限:
apiVersion: security.openshift.io/v1
kind: SecurityContextConstraints
metadata:
name: signoz-scc
allowPrivilegedContainer: false
runAsUser:
type: RunAsAny # 允许任意容器 UID
fsGroup:
type: RunAsAny # 允许任意辅助 GID
seLinuxContext:
type: RunAsAny # 无 SELinux 标签限制
volumes:
- persistentVolumeClaim # 挂载的 PVC
- emptyDir # 临时工作空间
- configMap # ConfigMap 文件
- projected # 组合的 CM/secret 等
- downwardAPI # 暴露 Pod 元数据
readOnlyRootFilesystem: false
allowHostDirVolumePlugin: false
users:
# 将 SCC 绑定到 SigNoz 所需的 Service Account
- system:serviceaccount:signoz:signoz-telemetrystore-clickhouse
- system:serviceaccount:signoz:signoz-metastore-postgres
- system:serviceaccount:signoz:default请核对以下数值:
system:serviceaccount:后的signoz代表命名空间。它取自casting.yaml中的metadata.name,或第 3 步中设置的命名空间注解。signoz-telemetrystore-clickhouse和signoz-metastore-postgres分别是 ClickHouse 和 PostgreSQL 的服务账号。其前缀取自casting.yaml中的metadata.name,若名称不同,请替换开头的signoz。default是 ZooKeeper 运行的服务账号,请保持不变。
应用该配置。在运行 oc 的机器上执行以下命令:
oc apply -f signoz-scc.yamlkubectl apply -f signoz-scc.yaml 具有相同效果。
步骤 2:安装 foundryctl
在运行 kubectl 的机器上执行以下命令:
curl -fsSL https://signoz.io/foundry.sh | bash如需手动安装(如 Windows PowerShell、物理隔离环境)或配置 PATH,请参阅 foundry 入门指南。
步骤 3:创建 casting.yaml
创建一个名为 casting.yaml 的文件。它描述安装详情:通过 Helm chart 部署 SigNoz,命名空间设为 signoz:
apiVersion: v1alpha1
kind: Installation
metadata:
name: signoz
spec:
deployment:
flavor: helm
mode: kubernetes
telemetrykeeper:
kind: zookeeper
telemetrykeeper 相关的配置行对应 ZooKeeper,Helm chart 用它来协调 ClickHouse。