
【免费下载链接】helm-chartsPrometheus community Helm charts项目地址https://gitcode.com/gh_mirrors/he/helm-charts点击查看免费下载本指南以 Prometheus Community 官方仓库中的prometheus-systemd-exporterHelm Chart 为核心讲解如何在 Kubernetes 集群中通过 DaemonSet 方式部署 systemd exporter、配置采集的 systemd 单元范围、启用 ServiceMonitor 与告警规则并剖析其底层模板实现原理。读完本文你将掌握该 Chart 的安装、卸载、自定义配置与 Prometheus 集成等完整实战方法。一、Chart 概览与设计动机prometheus-systemd-exporter是一个用 Go 编写的 Prometheus 导出器用于采集 systemd 单元unit的运行状态与资源指标。在 Kubernetes 集群中kubelet、容器运行时如 docker、containerd以及集群内的其他系统服务都以 systemd 单元的形式运行在节点上因此通过该导出器可以观测每个节点的系统服务健康度。本仓库中的 Chart 文件位于 charts/prometheus-systemd-exporter其 Chart.yaml 记录了关键元数据apiVersion: v2type: application表示这是一个标准的应用型 Helm v2 Chart当前 Chart 版本0.5.2对应导出器应用版本appVersion: 0.7.0上游项目为 prometheus-community/systemd_exporter本 Chart 仅负责将导出器以 Kubernetes 原生工作负载形式部署。从模板结构templates可以看出该 Chart 的核心资源是一个DaemonSetdaemonset.yaml并辅以 Service、ServiceAccount、ServiceMonitor、PrometheusRule 等可选资源。选择 DaemonSet 而非 Deployment 的原因很直观systemd 单元是每个节点上独立运行的导出器必须运行在每一台需要被观测的节点上才能通过宿主机命名空间读取该节点的 systemd 状态。二、安装与卸载该 Chart 同时以两种方式分发OCI 制品oci://ghcr.io/prometheus-community/charts/prometheus-systemd-exporter传统 Helm 仓库https://prometheus-community.github.io/helm-chartschart 名为prometheus-systemd-exporter安装 Chart使用 OCI 方式安装helm install [RELEASE_NAME] oci://ghcr.io/prometheus-community/charts/prometheus-systemd-exporter安装前建议先用helm show values查看全部可配置项及注释说明helm show values oci://ghcr.io/prometheus-community/charts/prometheus-systemd-exporter如需自定义配置可将其写入一个 YAML 文件后通过-f传入helm install [RELEASE_NAME] oci://ghcr.io/prometheus-community/charts/prometheus-systemd-exporter -f my-values.yaml若选择传统 Helm 仓库方式则需要先执行helm repo add与helm repo update再使用helm install [RELEASE_NAME] prometheus-community/prometheus-systemd-exporter进行安装详见 Helm 仓库使用文档。注意该 Chart 的 DaemonSet 默认开启了hostNetwork: true与hostPID: true见 values.yaml 第 138-141 行意味着 exporter 会直接绑定宿主机网络并共享宿主机进程命名空间这正是它能够访问节点 systemd 私有接口的前提。生产环境应评估这一权限影响。卸载 Charthelm uninstall [RELEASE_NAME]该命令会移除 Chart 创建的所有 Kubernetes 组件DaemonSet、Service、ServiceMonitor、PrometheusRule、ServiceAccount 等并删除对应的 Helm release 记录。三、核心配置导出哪些 systemd 单元这是 README 中重点讲解的配置主题也是使用该 Chart 时最常调整的参数。默认采集范围Chart 默认只为kubelet.service和docker.service两个单元生成指标对应 values.yaml 中的默认值config: systemd: collector: unitInclude: - kubelet.service - docker.service使用正则匹配多个单元config.systemd.collector.unitInclude支持正则表达式因此可以用一个模式覆盖一类单元。例如要覆盖所有单元将默认值覆盖为config: systemd: collector: unitInclude: - .这里.会匹配任意非空字符串即导出节点上的全部 systemd 单元。也可以按需缩小范围例如只采集 kubelet 与 containerdconfig: systemd: collector: unitInclude: - kubelet.service - containerd.service配置如何传递到底层导出器unitInclude的值并不是以 YAML 形式直接传给 exporter而是在模板中拼接为导出器的命令行参数。在 daemonset.yaml 第 52-57 行可以看到args: - --log.level{{ .Values.config.log.level }} - --systemd.collector.unit-include{{ join | .Values.config.systemd.collector.unitInclude }} {{- with .Values.extraArgs }} {{- toYaml . | nindent 10 }} {{- end }}关键细节列表中的多个单元会被join |用竖线连接最终形成一个正则表达式例如kubelet.service|docker.service。也就是说unitInclude列表本质上是一个正则备选分支列表这解释了为什么单个元素可以直接写.。同时--log.level由config.log.level控制默认值为info。若导出器还支持其他命令行参数如--systemd.collector.enable-resolved等可参考上游 systemd_exporter 项目的配置文档可通过extraArgs列表追加extraArgs: - --systemd.collector.enable-resolved指标暴露端口导出器默认在9558端口暴露 Prometheus 指标values.yaml 第 41-42 行的service.port: 9558、targetPort: 9558DaemonSet 模板中同时设置了containerPort: 9558与hostPort: {{ .Values.service.port }}daemonset.yaml 第 62-66 行结合默认开启的 hostNetwork可以从节点 IP 的 9558 端口直接抓取指标。Service 默认类型为ClusterIP端口名为metricsservice.yaml。四、Pod 与调度配置由于导出器需要读取宿主机上的 systemd 信息Chart 在 Pod 层面做了多处针对性配置。hostPath 卷挂载daemonset.yaml 第 77-86 行、第 101-110 行将两个宿主目录以只读方式挂载进容器挂载名宿主路径容器路径用途systemd/run/systemd/run/systemd访问 systemd 私有 socket/接口dbus/var/run/dbus/var/run/dbus通过 D-Bus 与 systemd 通信如果需要挂载额外的卷可以通过extraVolumes与extraVolumeMounts追加values.yaml 第 218-225 行给出了 hostPath 示例。安全上下文Chart 为 Pod 与容器分别提供了安全上下文默认值values.yaml 第 125-135 行securityContext: fsGroup: 65534 runAsGroup: 65534 runAsNonRoot: true runAsUser: 65534 containerSecurityContext: readOnlyRootFilesystem: true即以 UID/GID 65534nobody非 root 运行且根文件系统只读。如需为容器增加 capabilities如SYS_TIME可在containerSecurityContext.capabilities.add中声明values 中已注释示例。更新策略与节点调度updateStrategy默认RollingUpdatemaxUnavailable: 1保证滚动更新过程中同一时刻最多只有一个节点上的 exporter 不可用values.yaml 第 97-101 行nodeSelector默认限定kubernetes.io/os: linux因为 systemd 仅存在于 Linux 节点第 171-173 行tolerations默认容忍NoSchedule污点operator: Exists确保 exporter 能调度到被常规业务 Pod 避开的节点第 175-177 行此外还支持affinity、priorityClassName、podAnnotations、podLabels、daemonsetAnnotations、namespaceOverride、extraInitContainers等常规选项。其中podAnnotations默认注入了cluster-autoscaler.kubernetes.io/safe-to-evict: true第 156-158 行用于解决 GKE 集群升级时节点缩容缓慢的问题。探针与资源Chart 提供了 liveness/readiness 探针values.yaml 第 192-216 行默认对9558端口的/路径做 HTTP GET 探测resources默认不设置第 103 行以便在 Minikube 等小资源环境中也能顺利运行需要时可参考注释中的limits/requests示例自行配置。五、镜像与 ServiceAccount镜像配置默认镜像来自quay.io/prometheuscommunity/systemd-exportervalues.yaml 第 4-10 行tag默认为空此时模板会回退到v{{ .Chart.AppVersion }}即v0.7.0支持digest精确锁定镜像摘要也支持通过global.imageRegistry由父 Chart 统一覆盖 registry 主机名便于内网镜像仓库场景镜像地址的最终拼接逻辑实现在 _helpers.tpl 的prometheus-systemd-exporter.image模板中并且该模板对image.sha显式fail报错要求改用image.digest。私有仓库场景可配置imagePullSecrets或global.imagePullSecrets支持 k8s 风格 map 列表与 helm 风格字符串列表两种写法模板prometheus-systemd-exporter.imagePullSecrets会统一归一化处理见 _helpers.tpl 第 124-132 行。ServiceAccountserviceAccount.create默认false即默认使用defaultServiceAccountautomountServiceAccountToken默认false不会自动挂载 API 令牌values.yaml 第 115-123 行。由于导出器只需要访问宿主 systemd 而无需调用 Kubernetes API这一最小权限设计是合理的。若需要创建独立 ServiceAccount可设置serviceAccount.create: true并配合annotations、imagePullSecrets使用对应模板见 serviceaccount.yaml。六、接入 PrometheusServiceMonitor 与告警规则启用 ServiceMonitor要接入 Prometheus Operator 生态将prometheus.monitor.enabled设为trueprometheus: monitor: enabled: true additionalLabels: {} interval: scrapeTimeout: 10s relabelings: [] metricRelabelings: []对应的 servicemonitor.yaml 会生成一个monitoring.coreos.com/v1的 ServiceMonitor其jobLabel为app.kubernetes.io/nameendpoint 指向名为metrics的 Service 端口并支持自定义interval、scrapeTimeout、relabelings与metricRelabelings。仓库 CI 配置 ci/prometheus-operator-values.yaml 验证了同时开启 monitor 与 rules 的渲染路径。使用 PrometheusRule 告警Chart 内置了一条示例告警规则默认关闭prometheus.rules.enabled: false启用方式prometheus: rules: enabled: true namespace: additionalLabels: {} rules: - alert: SystemdServiceFailed expr: | systemd_unit_state{statefailed, service{{ template prometheus-systemd-exporter.fullname . }}} 1 for: 5m labels: severity: warning annotations: description: | Systemd service {{ {{ $labels.name }} }} has entered failed state at {{ {{ $labels.instance }} }} runbook_url: | https://runbooks.prometheus-operator.dev/runbooks/node/nodesystemdservicefailed summary: Systemd service has entered failed state.要点说明规则基于systemd_unit_state{statefailed}指标expr中通过{{ template prometheus-systemd-exporter.fullname . }}注入 release 名称从而将规则约束到当前 release 对应的 exporter 实例触发条件为指标值等于 1 且持续5m严重级别为warning注释里同时给出了description、runbook_url复用 node_exporter 的 systemd runbook与summaryprometheusrule.yaml 模板将rules列表渲染进以 fullname 命名的 group并支持通过namespace覆盖规则所在命名空间、通过additionalLabels追加标签如需要匹配 kube-prometheus-stack 的规则选择器。values 中对此规则有明确提示这只是一条示例规则请根据实际需求调整并建议将规则约束到当前 service。与 kube-prometheus-stack 协同releaseLabel默认false置为true时会在 Pod/Service 标签中加入release: {{ .Release.Name }}见 _helpers.tpl 第 49-51 行从而使 ServiceMonitor 能被 kube-prometheus-stack 默认的release标签选择器直接选中实现开箱即用的抓取。七、完整参数速查下表汇总了 values.yaml 中的关键参数及其默认值参数默认值说明image.registry/image.repositoryquay.io/prometheuscommunity/systemd-exporter镜像地址image.tag空回退v0.7.0镜像标签image.pullPolicyIfNotPresent拉取策略service.enabled/service.typetrue/ClusterIPService 开关与类型service.port/service.targetPort9558/9558指标端口config.log.levelinfo日志级别config.systemd.collector.unitInclude[kubelet.service, docker.service]采集的 systemd 单元支持正则extraArgs[]追加 exporter 命令行参数prometheus.monitor.enabledfalse是否生成 ServiceMonitorprometheus.rules.enabledfalse是否生成 PrometheusRulehostNetwork/hostPIDtrue/true宿主机网络/进程命名空间updateStrategy.typeRollingUpdateDaemonSet 更新策略securityContext.runAsNonRoottrue非 root 运行serviceAccount.createfalse是否创建独立 ServiceAccountnodeSelectorkubernetes.io/os: linux节点选择tolerations容忍NoSchedule污点容忍八、常见场景速览只采集 kubelet 与容器运行时使用默认配置即可无需改动采集节点全部 systemd 单元将unitInclude覆盖为[.]接入 Prometheus Operator 自动抓取开启prometheus.monitor.enabled如需被 kube-prometheus-stack 选中再开启releaseLabel对失败单元告警开启prometheus.rules.enabled并保留/改造示例SystemdServiceFailed规则内网镜像仓库通过global.imageRegistry覆盖 registry必要时配合imagePullSecrets。以上配置均可通过helm show values与 values.yaml 逐一核对并在安装时以-f传入覆盖。赞分享【免费下载链接】helm-chartsPrometheus community Helm charts项目地址https://gitcode.com/gh_mirrors/he/helm-charts点击查看免费下载相关推荐prometheus-couchdb-exporter Helm Chart 实战在 Kubernetes 上部署 CouchDB Prometheus Exporter 并采集指标prometheus couchdb exporter Helm Chart 实战在 Kubernetes 上部署 CouchDB Prometheus Exprometheus-rabbitmq-exporter Helm Chart 实战在 Kubernetes 上采集 RabbitMQ 指标并接入 Prometheusprometheus rabbitmq exporter Helm Chart 实战在 Kubernetes 上采集 RabbitMQ 指标并接入 PromePrometheus NATS Exporter Helm Chart 完整指南在 Kubernetes 中采集 NATS 监控指标Prometheus NATS Exporter Helm Chart 完整指南在 Kubernetes 中采集 NATS 监控指标 导读 本文基于当前仓库上一篇如何简单快速永久保存微信聊天记录WeChatMsg完整备份与导出指南下一篇libwebsocketslws集成外来事件循环minimal-http-server-eventlib-foreign 示例深度解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考