使用 GitOps 进行 Logstash 管道管理与配置

11 阅读8分钟

作者:来自 Elastic

不要再把 Logstash 当作黑盒。本指南将向你展示如何使用 GitOps 创建可审计、自动化且具有弹性的数据管道。通过这份 GitHub 和 Jenkins 蓝图,消除配置漂移并提升安全性。

你的 Logstash 环境是否成了一个 “黑盒”?手动配置更改是否导致意外宕机、安全漏洞,以及无数小时的故障排查?现在是时候停止把可观测性基础设施当作一个脆弱的艺术项目来对待了。这篇博客文章为你提供了一份战略蓝图,帮助你驯服 Logstash 管道,将其转变为一个可版本控制、自动化且可审计的资产。通过采用 GitOps 方法,你可以消除配置漂移,使团队能够安全协作,并确保你的可观测性平台与其所监控的系统一样具备弹性。

从脆弱的艺术项目到可审计的资产:如何通过版本控制和自动化驯服你的 Logstash 配置

可观测性确保系统的健康、性能和安全。Logstash 通过处理和路由你的数据来实现这一点。但随着规模扩大,手动配置管理会成为瓶颈。它会导致错误、宕机和安全漏洞。你需要一种更好的方式。

这篇博客文章将向你展示如何使用 GitOps 管理 Logstash 管道。你将使用 Git 作为唯一的事实来源,并自动化部署,以提高企业组织可观测性基础设施的稳定性、安全性和效率。

本文详细介绍了这种方法的优势,并提供了一个使用 GitHub 进行版本控制以及使用 Jenkins 实现持续集成和持续部署(CI/CD)的实践实施模型。

幕后英雄:为什么 Logstash 仍然是企业数据战略的基石

在不断演进的可观测性和数据管道领域,Logstash 仍然是 Elastic 生态系统中最强大、最可靠的组件之一。虽然它未必总是处于聚光灯下,但其能力深度、灵活性和弹性使其成为管理复杂、多样化数据流的企业不可或缺的工具。Logstash 提供四个主要优势:

  • 广泛的集成支持: Logstash 支持大量输入和输出插件 —— 包括 Kafka、syslog、Beats、云服务和数据库 —— 使其非常适合从多样化环境中摄取数据,并在你的架构中进行路由。
  • 高级数据转换能力: 通过丰富的过滤功能以及可选的 Ruby 脚本,Logstash 能够实现复杂的数据增强、字段操作和条件路由 —— 让团队可以在管道早期阶段对数据进行标准化和预处理。
  • 分担 Elasticsearch 的摄取负载: elastic_integration 过滤器可以在 Logstash 中复制摄取管道逻辑,实现上游数据转换,从而减少 Elasticsearch 的处理开销并简化索引路径。
  • 通过持久化队列实现运营弹性: Logstash 的持久化队列在下游变慢或发生故障时缓冲数据,有助于平滑摄取峰值、防止数据丢失,并在高负载下保持系统稳定。

在现代 CI/CD 工作流中,自动化和快速迭代已成为常态,Logstash 的成熟性和灵活性使其持续成为可靠的选择 —— 默默支撑着可观测性管道中持续稳定运行的数据流。

以 GitOps 驱动的可观测性战略的必要性

GitOps 是一种将经过验证的 DevOps 最佳实践(如版本控制、协作、合规和 CI/CD)应用于基础设施和配置管理的范式。当应用于 Logstash 时,这意味着每个管道配置都被视为代码 —— 在 Git 仓库中进行定义、版本控制、评审和部署。

在企业环境中,为 Logstash 管道采用 GitOps 模型具有显著优势:

  • 增强的可审计性和合规性: 每一次管道修改都会作为 Git 提交被记录,形成不可变的时间顺序审计轨迹。这为 “谁在何时因为什么做了什么更改” 提供了无与伦比的可见性,对于满足监管合规要求和开展安全审计至关重要。
  • 提升系统稳定性和可靠性: 部署错误配置的风险大幅降低。通过强制执行拉取请求(PR)工作流,所有更改在合并和部署之前都要经过同行评审和自动验证。一旦新配置引发事件,回滚操作就像还原一个 Git 提交一样快速且简单。
  • 提高自动化程度和运营效率: 自动化部署生命周期可以消除手动且易出错的配置任务。这使得高技能工程师摆脱日常运维工作,专注于更高价值的活动,例如优化数据流、改进分析能力以及加强安全态势。
  • 促进跨团队协作: Git 提供了一个通用且广为理解的协作平台。开发、安全和运维(DevSecOps)团队可以在统一的代码库上无缝协作。这种共享所有权打破了部门壁垒,确保管道配置在整个组织内既稳健又安全,并真正满足业务需求。

实施模型:GitHub 和 Jenkins

本节详细介绍如何为 Logstash 实施 GitOps 工作流的实用框架。

1. 前提条件

  • 已建立的 GitHub 组织或账户。

  • 一个正在运行的 Jenkins 实例,并已安装必要插件(例如 Git、GitHub Integration)。

  • 一个用于部署配置的目标 Logstash 环境。

  • 具备 Git、Jenkins Pipeline 以及 Logstash 配置语法的基本知识。

2. 第一步:建立集中式 Git 仓库

GitOps 工作流的基础是一个受版本控制的仓库。

创建仓库:
在 GitHub 中创建一个新的仓库(例如 logstash-configurations)。该仓库将作为所有管道配置的单一事实来源(single source of truth)。

定义目录结构:
合理的目录结构对于管理不同环境的配置至关重要。推荐结构如下:

`

1.  logstash-configurations/
2.  ├── pipelines/
3.  │   ├── dev/
4.  │   ├── staging/
5.  │   └── production/
6.  ├── shared/
7.  │   └── filters/
8.  ├── tests/
9.  └── Jenkinsfile

`AI写代码
  • pipelines/:按环境划分的 Logstash 管道配置。

  • shared/:可复用的过滤器或公共配置片段。

  • tests/:用于配置验证或示例数据测试。

  • Jenkinsfile:定义 CI/CD 流水线,实现自动验证与部署。

通过建立这样的集中式仓库结构,你为后续的自动化验证、审查流程和安全部署打下了坚实基础。

3. 第2步:使用 Jenkins CI/CD 流水线实现自动化部署

Jenkins 流水线将配置从 Git 自动验证并部署到你的 Logstash 实例。

  1. 创建 Jenkinsfile:在你的仓库根目录添加一个 Jenkinsfile 来定义自动化流水线。这种 pipeline-as-code 方法确保部署流程本身是版本控制的。
  2. 定义流水线阶段:该流水线应包含明确的阶段,用于检出代码、验证配置以及部署到目标环境。

一个示例 Jenkinsfile 如下:

 `2.   pipeline {
3.       agent any

5.       // Trigger the pipeline on every push to the main branch
6.       triggers {
7.           githubPush()
8.       }

10.       stages {
11.           stage('Checkout') {
12.               steps {
13.                   // Clone the repository
14.                   git 'https://github.com/your-org/logstash-configurations.git'
15.               }
16.           }

18.           stage('Validate Staging Configs') {
19.               steps {
20.                   // Run Logstash's built-in config test
21.                   // This prevents syntax errors from reaching production
22.                   sh 'docker run --rm -v ${WORKSPACE}/pipelines/staging:/usr/share/logstash/pipeline/ docker.elastic.co/logstash/logstash:9.3.0 logstash --config.test_and_exit'
23.                   sh 'docker run --rm -v ${WORKSPACE}/pipelines/staging:/usr/share/logstash/pipeline/ docker.elastic.co/logstash/logstash:8.19.11 logstash --config.test_and_exit'
24.               }
25.           }

27.           stage('Deploy to Staging') {
28.               // This stage requires Jenkins to have credentials to access the Staging server
29.               steps {
30.                   withCredentials([sshUserPrivateKey(credentialsId: 'staging-server-creds', keyFileVariable: 'KEY_FILE')]) {
31.                       sh '''
32.                           scp -i ${KEY_FILE} ${WORKSPACE}/pipelines/staging/*.conf user@staging-logstash-host:/etc/logstash/conf.d/
33.                           ssh -i ${KEY_FILE} user@staging-logstash-host 'sudo systemctl reload logstash'
34.                       '''
35.                   }
36.               }
37.           }

39.           // Optional: Add a manual approval step before deploying to production
40.           stage('Approval for Production') {
41.               steps {
42.                   input 'Deploy to Production?'
43.               }
44.           }

46.           stage('Deploy to Production') {
47.                steps {
48.                   // Similar deployment steps for the production environment
49.                   // using production credentials
50.                }
51.           }
52.       }
53.   }`AI写代码![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)收起代码块![](https://csdnimg.cn/release/blogv2/dist/pc/img/arrowup-line-top-White.png)

4. 实践中的 GitOps 工作流

该设置实现了一个受控、可审计且自动化的工作流:

  1. 分支创建:工程师在 Git 中创建一个功能分支来提出更改(例如 feature/add-syslog-input)。
  2. 配置更改:工程师在其分支中修改或新增一个管道配置文件。
  3. Pull Request:在 GitHub 中创建一个 Pull Request。此操作可以触发 Jenkins 中的自动检查,以验证所提更改的语法。
  4. 同行评审:团队成员对更改进行审查,包括逻辑、安全性以及是否符合规范。
  5. 合并与部署:在批准后,PR 被合并到 main 分支。此合并会自动触发 Jenkins 流水线,将已验证的配置部署到相应的 Logstash 环境。

企业级采用的最佳实践

要在企业规模下成功实施该模型,请考虑以下最佳实践:

  • 分支策略:采用一致的分支策略,例如 GitFlow,以有序方式管理功能、发布和热修复。为 main 或 production 分支设置保护规则,在合并前必须完成 PR 审查并通过状态检查。
  • 可扩展性:对于拥有大量 Logstash 节点的大规模部署,在 Jenkins 流水线中使用配置管理工具,例如 Ansible、Puppet 或 Chef,以在整个节点集群中编排部署。
  • 培养 GitOps 文化:成功采用不仅关乎工具,也关乎人员和流程。提供培训和文档,确保所有相关人员理解工作流及其在其中的角色。强调协作优势以及共同维护稳定且安全的可观测性平台的责任。
  • 流水线可观测性(可选):监控 CI/CD 流水线的健康状况和性能至关重要,并建议这样做,以便及早发现问题、识别瓶颈并确保可审计性。Elastic Observability 提供对 Jenkins 流水线的原生支持,可通过 Elastic CI/CD Observability plugin 进行监控。
  • 密钥管理:切勿在配置文件中硬编码敏感信息(密码、API keys)。使用密钥管理工具,例如 HashiCorp Vault 或 AWS Secrets Manager,并让 Logstash 在运行时检索这些密钥。

一个用于检索密钥并将其安全存储到 Logstash keystore 中的示例代码片段如下:

`1.  ...

3.  	stage('Update Logstash Secret') {
4.      // Define the secret path and key in Vault
5.      def secretPath = 'secret/logstash/production'
6.      def secretKey = 'elasticsearch_password'
7.      def keystoreKey = 'ES_PWD' // The key name to be used in the Logstash keystore

9.      // Wrap the steps in withVault to get access to the secrets
10.      withVault(configuration: [url: 'http://your-vault-server:8200',
11.                               credentialsId: 'vault-approle-creds']) {

13.          // Retrieve the secret from Vault. The plugin makes it available as an environment variable.
14.          def secrets = readVault(path: secretPath, key: secretKey)
15.          def esPassword = secrets[secretKey]

17.          // Use SSH credentials to access the Logstash server
18.          withCredentials() {
19.              sh """
20.              ssh -i ${KEY_FILE} user@logstash-host <<'ENDSSH'
21.              # Pipe the secret directly into the logstash-keystore command
22.              # This avoids writing the secret to disk or exposing it in the process list
23.              echo "${esPassword}" | sudo -u logstash /usr/share/logstash/bin/logstash-keystore add ${keystoreKey} --stdin

25.              # After updating the keystore, reload Logstash to apply the change
26.              sudo systemctl reload logstash
27.              ENDSSH
28.              """
29.          }
30.      }
31.  }
32.  ...` AI写代码![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)

结论

采用 GitOps 方法管理 Logstash 管道是一项战略性举措,使可观测性与现代 DevSecOps 原则保持一致。它用自动化、透明且协作的框架取代手动、不可见的流程。对于企业组织而言,这将带来更安全、弹性更强且更高效的可观测性基础设施,使团队能够最大化数据价值,同时将运营开销和风险降到最低。

上述示例只是一个起点;一旦打下基础,你可以做的事情还有很多 —— GitOps 仅仅是开始。从分支自动化到流水线升级工作流,再到构建自助部署门户,可能性只受你的创造力限制(也可能受你的 CI 分钟限制)。

GitOps 打下基础。要看到完整画面,你需要监控你的流水线。开始试用并体验 Elastic 的 CI/CD Observability 解决方案,以追踪构建健康状况和部署趋势。它将代码更改与生产行为关联,为你提供对新自动化工作流的深度可见性。

构建更智能的流水线。监控重要事项。让你的 GitOps 驱动可观测性堆栈成为 DevSecOps 故事中的幕后英雄。了解 Streams 如何通过下一代 AI 驱动的日志管理和日志处理,助力你的数据工程提速。

原文:www.elastic.co/observabili…