2026/10/8 14:11:36

Helm Charts 中部署 Logstash:基于 stable/logstash Chart 的管道配置与 Kubernetes 实战指南

Helm Charts 中部署 Logstash:基于 stable/logstash Chart 的管道配置与 Kubernetes 实战指南 【免费下载链接】charts⚠️(OBSOLETE) Curated applications for Kubernetes项目地址https://gitcode.com/gh_mirrors/chart/charts点击查看免费下载仓库归档提示本仓库Helm Charts 官方仓库自 2020 年 11 月 13 日起停止更新其中stable/logstashChart 已在 Chart.yaml 中标记为deprecated: trueChart 版本 2.4.3对应 Logstash 应用版本 7.1.1。本文内容以当前仓库实际文件为准可用于理解该 Chart 的设计思路与历史实现生产环境中建议优先评估官方 Elastic Helm 仓库或 operator 方案。Logstash 是一个开源的、服务端的数据处理管道data processing pipeline能够同时从多种数据源摄取数据、对其进行加工转换再发送到你心仪的 stash存储后端。本文以stable/logstashChart 为骨架完整讲解在 Kubernetes 上以 Helm 方式部署 Logstash 的安装、卸载流程逐项剖析其全部可配置参数并结合仓库内 values.yaml 与各 templates 源码讲清管道配置inputs / filters / outputs、持久化队列、Prometheus 监控集成等关键实现原理。读完本文你将能够独立定制并发布一套面向 Beats → Logstash → Elasticsearch 的日志采集管道。快速安装TL;DR最简安装方式直接使用仓库内已打包好的 Chart$ helm install stable/logstash如需指定 release 名称使用--name参数$ helm install --name my-release stable/logstash卸载 Chart删除名为my-release的部署$ helm delete my-release该命令会移除 Chart 关联的几乎所有 Kubernetes 组件并删除对应的 release。结合模板目录templates可以看到一次安装会创建以下资源StatefulSetstatefulset.yaml、Serviceservice.yaml、三个配置型 ConfigMappipeline / patterns / files分别由 pipeline-config.yaml、patterns-config.yaml、files-config.yaml 生成、PodDisruptionBudgetpoddisruptionbudget.yaml、ServiceAccountserviceaccount.yaml、可选的 Ingressingress.yaml与 ServiceMonitorservicemonitor.yaml卸载时这些资源会一并清理。最佳实践一个 Logstash 管道对应一次 Chart 发布为了在同一个集群中实现多条 Logstash 管道Chart 官方推荐的最佳实践是每条管道单独维护一次 Chart 发布one pipeline per chart release。这样配置更简单各管道之间也能更好地相互隔离。这条建议在 values.yaml 中也有明确注释并且在pipeline-config.yaml的渲染逻辑下是自然成立的——每个 release 只会生成一组input_*.conf、filter_*.conf、output_*.conf。默认管道Beats Input → Elasticsearch Output当前 ELK 日志采集的最佳实践是宿主机上的 Filebeat 将日志发送到 Logstash同时启用 Logstash 的持久化队列persistent queues。Filebeat 既支持结构化日志如 JSON也支持非结构化日志如普通日志行的传输。在该 Chart 中这一默认管道由inputs与outputs的默认值直接体现values.yamlinputs.main默认只启用一个beatsinput监听5044端口input { beats { port 5044 } }outputs.main默认写入 Elasticsearch并使用%{[metadata][beat]}-%{YYYY.MM.dd}作为索引名按天滚动分片output { elasticsearch { hosts [${ELASTICSEARCH_HOST}:${ELASTICSEARCH_PORT}] manage_template false index %{[metadata][beat]}-%{YYYY.MM.dd} } }这里注意两点实现细节管道中的ELASTICSEARCH_HOST与ELASTICSEARCH_PORT是环境变量占位符它们在 StatefulSet 中被注入见 statefulset.yaml其值来自values.yaml中的elasticsearch.host与elasticsearch.portelasticsearch: host: elasticsearch-client.default.svc.cluster.local port: 9200特别地elasticsearch.host会经过 Helm 的tpl函数渲染value: {{ tpl (.Values.elasticsearch.host | toString) $ | quote }}意味着该字段支持使用{{ .Release.Namespace }}之类的模板表达式做动态替换。manage_template false表示 Logstash 不会自动管理 Elasticsearch 索引模板模板管理职责交由 Beats 侧完成见下文。将 Beats 生成的索引模板加载到 Elasticsearch为了充分发挥 Beats、Logstash、Elasticsearch 的组合能力官方建议按 Elastic 文档的说明将 Beats 生成的索引模板加载进 Elasticsearch。在 Kubernetes 集群外的一台 Linux 实例上可以运行如下命令把该实例的 Beats 索引模板加载进 ElasticsearchElasticsearch 主机名视环境而定filebeat setup --template -E output.logstash.enabledfalse \ -E output.elasticsearch.hosts[elasticsearch.cluster.local:9200]该命令关闭 Filebeat 的 Logstash 输出直接连接 Elasticsearch 完成模板装载模板就绪后Logstash 输出端manage_template false才不会造成索引模板缺失。配置参数详解下表完整列出该 Chart 的全部可配置参数及其默认值来自 README.md 与 values.yaml。工作负载与调度参数说明默认值replicaCount副本数量1podDisruptionBudgetPod 中断预算maxUnavailable: 1updateStrategy更新策略type: RollingUpdatepodManagementPolicyStatefulSet 的 Pod 管理策略OrderedReady可改为ParallelpriorityClassNamepriorityClassNamenilnodeSelector节点选择器{}tolerations污点容忍[]affinity亲和性 / 反亲和性{}terminationGracePeriodSecondsPod 优雅终止时长秒30说明该 Chart 使用StatefulSet作为工作负载类型而非 Deployment并将replicaCount、podManagementPolicy直接写入 statefulset.yaml。podManagementPolicy默认为OrderedReady顺序、逐个启动可切换为Parallel以加快多副本启动。podDisruptionBudget通过 poddisruptionbudget.yaml 渲染为policy/v1beta1的 PDB 资源保障主动运维如节点维护时的可用副本数。镜像参数说明默认值image.repository容器镜像名docker.elastic.co/logstash/logstash-ossimage.tag容器镜像标签7.1.1image.pullPolicy镜像拉取策略IfNotPresent镜像字段被拼接为{{ .Values.image.repository }}:{{ .Values.image.tag }}注入 StatefulSetstatefulset.yaml。注意默认使用 OSS开源发行版镜像。若镜像位于私有仓库可在image.pullSecrets中引用预先创建的 Kubernetes Secret。Service 与端口参数说明默认值service.typeService 类型ClusterIP / NodePort / LoadBalancerClusterIPservice.annotationsService 注解{}service.portsService 暴露的端口beats5044service.loadBalancerIPService 的负载均衡器 IPunsetservice.loadBalancerSourceRanges允许访问负载均衡器的 CIDR 范围unsetservice.clusterIPService 的集群 IPunsetservice.nodePortService 的 nodePortunsetservice.externalTrafficPolicy设置 externalTrafficPolicyunsetportsLogstash 容器暴露的端口beats5044service.ports与ports是两个不同层级的配置service.ports定义 Service 对外端口映射默认只开放beats: 5044TCP。在 values.yaml 中注释给出了 syslog-udp1514/UDP、syslog-tcp1514/TCP、http8080等可选端口模板service.yaml 会按{{- range $key, $value : .Values.service.ports }}遍历渲染并以键名作为端口name。ports定义容器内实际监听的 containerPort默认beats: 5044TCP。在 statefulset.yaml 中除了用户定义的ports还会固定暴露一个名为monitor的端口其值取自exporter.logstash.target.port默认9600用于 Logstash 的监控 API 与探针检查。service.yaml对 Service 类型的处理有明确分支service.yaml当类型为LoadBalancer时才注入loadBalancerIP与loadBalancerSourceRanges当类型为NodePort且设置了nodePort时才注入对应端口。externalTrafficPolicy设为Local可以保留客户端源 IP。Ingress参数说明默认值ingress.enabled是否启用 Ingressfalseingress.annotationsIngress 注解{}ingress.pathIngress 路径/ingress.hostsIngress 接受的域名[logstash.cluster.local]ingress.tlsIngress TLS 配置[]Ingress 模板位于 ingress.yaml使用extensions/v1beta1API注意该 API 在较新 Kubernetes 集群中已废弃。tls支持配置secretName与对应的hosts列表示例见 values.yaml。另外在 values.yaml 中还给出了 AWS LoadBalancer 场景下的注解示例如external-dns.alpha.kubernetes.io/hostname与service.beta.kubernetes.io/aws-load-balancer-internal。运行环境与资源参数说明默认值logstashJavaOptsLogstash 的 JVM 参数如堆大小-Xmx1g -Xms1gresourcesPod 资源请求与限制{}podAnnotationsPod 注解{}podLabelsPod 标签{}extraEnv额外的 Pod 环境变量[]envFrom从 ConfigMap / Secret 注入环境变量[]extraContainers添加额外的容器[]extraInitContainers添加额外的 init 容器[]livenessProbeLogstash 容器的存活探针见values.yamlreadinessProbeLogstash 容器的就绪探针见values.yamlsecurityContext.fsGroup容器组 ID1000securityContext.runAsUser容器用户 ID1000args传给 Logstash 入口的附加参数unsetlogstashJavaOpts会注入名为LS_JAVA_OPTS的环境变量statefulset.yaml默认分配 1GB 堆内存-Xmx1g -Xms1g。生产环境建议根据数据规模调整。config中的每个键值对会被转换为大写且点号替换为下划线的环境变量注入容器见下文config 详解例如config.reload.automatic会变成CONFIG_RELOAD_AUTOMATIC。默认探针配置values.yaml对monitor端口9600执行 HTTP GET/initialDelaySeconds: 20其余周期、超时、阈值参数均可按注释取消并调优。存活与就绪探针分别对应 StatefulSet 中的livenessProbe与readinessProbe。securityContextrunAsUser: 1000、fsGroup: 1000与官方 Logstash 镜像的默认 UID/GID 一致确保容器能以非 root 身份写入数据目录。extraInitContainers/extraContainers会在 StatefulSet 的initContainers/containers中按toYaml原样展开statefulset.yaml可用于放置等待外部依赖就绪的 busybox 脚本等场景。持久化参数说明默认值persistence.enabled是否启用持久化truepersistence.storageClassPVC 的 StorageClassunset使用默认 provisionerpersistence.accessModePVC 访问模式ReadWriteOncepersistence.sizePVC 容量2GivolumeMountsLogstash 容器的挂载配置见values.yamlvolumes附加卷配置[]持久化由 StatefulSet 的volumeClaimTemplates实现statefulset.yaml当persistence.enabled: true时为名为data的卷创建 PVC并挂载到/usr/share/logstash/datastorageClass语义特殊设为-时渲染为空字符串storageClassName: 禁用动态供给留空或null时不写storageClassName交由集群默认 provisionerAWS 上为 gp2GKE/AWS/OpenStack 上为 standard当persistence.enabled: false时改用emptyDir提供数据目录Pod 重启后数据即丢失。默认volumeMounts定义了 4 个挂载点values.yaml卷名挂载路径用途data/usr/share/logstash/dataLogstash 数据目录含持久化队列patterns/usr/share/logstash/patternsGrok 等过滤器的自定义 pattern 文件files/usr/share/logstash/files插件可引用的自定义文件pipeline/usr/share/logstash/pipeline管道配置目录其中patterns、files、pipeline三个卷均以 ConfigMap 形式挂载statefulset.yaml分别对应-patterns、-files、-pipeline三个 ConfigMap 资源。附加卷可通过volumes配置如挂载 TLS 证书 Secret、hostPath 等示例见 values.yaml。监控logstash-exporter 与 ServiceMonitor参数说明默认值exporter.logstashPrometheus logstash-exporter 设置见values.yamlexporter.logstash.enabled是否启用 logstash-exporterfalseexporter.serviceMonitor.enabled是否为 prometheus-operator 创建 ServiceMonitor CRDfalseexporter.serviceMonitor.namespaceServiceMonitor 安装的命名空间若设置则不同exporter.serviceMonitor.labelsprometheus-operator 的标签{}exporter.serviceMonitor.interval指标抓取间隔10sexporter.serviceMonitor.scrapeTimeout抓取超时时间10sexporter.serviceMonitor.scheme抓取协议http监控体系由两部分组成logstash-exporter sidecar默认关闭。启用后exporter.logstash.enabled: true会在 StatefulSet 中追加一个logstash-exporter容器statefulset.yaml使用镜像bonniernews/logstash_exporter默认 tagv0.1.2。其启动命令先sleep 60等待 Logstash 完全就绪再以--logstash.endpointhttp://localhost:9600目标端口取自exporter.logstash.target.port与--web.listen-address:9198导出端口取自exporter.logstash.port运行。默认路径为/metrics且带有独立的存活/就绪探针与资源限制配置。ServiceMonitor默认关闭。当exporter.serviceMonitor.enabled: true时servicemonitor.yaml 会生成monitoring.coreos.com/v1的 ServiceMonitor CRD供 Prometheus Operator 自动发现抓取目标支持自定义labels、抓取interval/scrapeTimeout、schemehttp/https以及安装到指定namespace。同时 values.yaml 还给出了通过 Pod 注解prometheus.io/scrape: true等配合传统 Prometheus 注解发现的备选方案。Elasticsearch 输出参数说明默认值elasticsearch.hostElasticsearch 主机名支持 tpl 渲染elasticsearch-client.default.svc.cluster.localelasticsearch.portElasticsearch 端口9200这两个值被注入为ELASTICSEARCH_HOST与ELASTICSEARCH_PORT环境变量见前文供管道中的output配置引用。管道配置核心config / patterns / files / binaryFiles / inputs / filters / outputs这是本 Chart 最具特色的部分——所有 Logstash 管道与辅助配置都以 YAML 形式写在 values 中由 Helm 渲染成 ConfigMap 后挂载进容器。configLogstash 运行配置config是一个键值对 mapvalues.yaml默认值如下config: config.reload.automatic: true path.config: /usr/share/logstash/pipeline path.data: /usr/share/logstash/data queue.checkpoint.writes: 1 queue.drain: true queue.max_bytes: 1gb # disk capacity must be greater than the value of queue.max_bytes queue.type: persisted这些键会被转换成环境变量注入容器{{ $key | upper | replace . _ }}见 statefulset.yaml例如path.config→PATH_CONFIG、queue.max_bytes→QUEUE_MAX_BYTES。Logstash 官方镜像的启动脚本基于 env2yaml会将LOGSTASH_*/LS_*之外的环境变量按点分键映射为 logstash.yml 配置这正是该 Chart 采用此约定的原因values 中注释引用了 elastic/logstash-docker 的 env2yaml 实现。默认值即启用持久化队列queue.type: persistedqueue.max_bytes: 1gb限定队列容量注意磁盘容量必须大于该值queue.checkpoint.writes: 1控制每写 1 条即做 checkpointqueue.drain: true表示关闭时排空队列——这是实现零丢失日志管道的关键设置也对应 README 中启用持久化队列的最佳实践。config.reload.automatic: true使 Logstash 在管道配置变更时自动重载与下文checksum注解机制配合可实现滚动更新。inputs / filters / outputs三段式管道values.yaml 将管道拆成三段每个字段都是一个以键名为区分、内容为 Logstash 配置片段的 mapinputs默认键main内容为input { beats { port 5044 } }filters默认未启用# main: |-注释可自定义如 grok、mutate、date 等 filteroutputs默认键main内容为 Elasticsearch 输出见上文。渲染逻辑见 pipeline-config.yaml每个inputs键生成input_key.conf每个filters键生成filter_key.conf每个outputs键生成output_key.conf全部汇总到pipelineConfigMap 并挂载到path.config/usr/share/logstash/pipeline。因此在一个 release 内可以通过定义多个键如inputs.syslog、inputs.beats来组织不同来源的配置片段但正如最佳实践所述多套完整独立管道更推荐拆成多次 release。values 中还注释了 kafka input / kafka output 的示例配置说明该 Chart 也可将管道出口或入口替换为 Kafka 等中间件。patterns自定义 Grok 模式patterns是一个 YAML heredoc mapvalues.yamlpatterns: # main: |- # TESTING {foo:.*}$每个键会被渲染成patternsConfigMap 中的一个独立 pattern 文件patterns-config.yaml挂载到/usr/share/logstash/patterns供grok过滤器以patterns_dir方式引用。files 与 binaryFiles自定义文件与二进制文件files用于存放插件可引用的文本类自定义文件如索引模板 JSON每个 YAML heredoc 键生成一个文件位于 Logstash home 目录下的files子目录挂载/usr/share/logstash/files。默认注释示例给出了一个logstash-template.json索引模板文件values.yaml。binaryFiles则用于二进制文件每个值是以base64 编码的字符串渲染到filesConfigMap 的binaryData字段files-config.yaml挂载后会自动解码为真实文件适用于 TLS 证书、keystore 等场景。配置变更自动触发滚动更新statefulset.yaml 中定义了三个checksum/*注解分别对patterns-config.yaml、files-config.yaml、pipeline-config.yaml的渲染结果做 sha256 摘要annotations: checksum/patterns: {{ include (print $.Template.BasePath /patterns-config.yaml) . | sha256sum }} checksum/templates: {{ include (print $.Template.BasePath /files-config.yaml) . | sha256sum }} checksum/pipeline: {{ include (print $.Template.BasePath /pipeline-config.yaml) . | sha256sum }}ConfigMap 内容变更会导致 Pod 模板注解摘要变化从而触发 StatefulSet 的滚动更新避免ConfigMap 已更新但 Pod 仍是旧配置的经典陷阱。常用操作示例通过 NodePort 暴露 beats 端口service: type: NodePort ports: beats: port: 5044 targetPort: beats protocol: TCP nodePort: 30044自定义一条带 grok 过滤的管道inputs: main: |- input { beats { port 5044 } } filters: main: |- filter { grok { match { message %{COMBINEDAPACHELOG} } } } outputs: main: |- output { elasticsearch { hosts [${ELASTICSEARCH_HOST}:${ELASTICSEARCH_PORT}] manage_template false index %{[metadata][beat]}-%{YYYY.MM.dd} } }启用持久化队列调优示例config: config.reload.automatic: true path.config: /usr/share/logstash/pipeline path.data: /usr/share/logstash/data queue.type: persisted queue.max_bytes: 4gb # 需保证 PVC 容量大于该值 queue.checkpoint.writes: 1024 queue.drain: true注意若调大queue.max_bytes必须同步调大persistence.size默认仅2Gi否则持久化队列会因磁盘写满而阻塞。深入阅读Chart 元数据名称、版本、appVersion、deprecated 标记Chart.yaml全部参数默认值与示例values.yaml工作负载与探针、环境变量注入实现statefulset.yaml管道配置渲染逻辑pipeline-config.yamlpatterns / files / binaryFiles 渲染逻辑patterns-config.yaml、files-config.yaml网络与监控资源service.yaml、ingress.yaml、servicemonitor.yaml、poddisruptionbudget.yaml补充说明本文中的命令与配置均基于当前仓库内的 Chart 2.4.3Logstash 7.1.1实现。由于该 Chart 已归档废弃若在较新版本 Kubernetes 上使用需注意extensions/v1beta1Ingress、policy/v1beta1PDB 等 API 版本可能已不再被集群接受建议结合实际集群版本评估迁移方案。赞分享【免费下载链接】charts⚠️(OBSOLETE) Curated applications for Kubernetes项目地址https://gitcode.com/gh_mirrors/chart/charts点击查看免费下载相关推荐Kubernetes Helm 部署 Logstash 实践基于 incubator/logstash 图表的多管道配置与持久化队列指南Kubernetes Helm 部署 Logstash 实践基于 incubator/logstash 图表的多管道配置与持久化队列指南 本篇技术指南以当前开oh-my-openagent 开发失败修复实录omo-senpi 测试环境隔离、Agent 目录解析与 QA 隔离治理oh my openagent 开发失败修复实录omo senpi 测试环境隔离、Agent 目录解析与 QA 隔离治理 导读 本文基于 oh my openElastic-stack Helm Chart 实战在 Kubernetes 上部署 ELK 全家桶Elasticsearch Kibana LogstashElastic stack Helm Chart 实战在 Kubernetes 上部署 ELK 全家桶Elasticsearch Kibana Lo上一篇空洞骑士模组管理器终极指南Scarab让你的游戏体验焕然一新下一篇HsMod终极指南55项功能重塑你的炉石传说游戏体验创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考