DevOps - ELK

良好的日志管理和数据可视化有助于我们保持系统良好可靠地运行。ELK Stack 是一个很好的工具。它包括 Elasticsearch、Logstash 和 Kibana。此堆栈可帮助我们收集、分析和显示来自许多不同来源的日志数据。

在本章中,我们将介绍 ELK Stack 的各个部分。我们还将了解如何设置它以实现更好的日志管理。此设置将帮助我们轻松连接 CI/CD 管道并遵循 DevOps 工作中的最佳实践。

DevOps 中的 ELK Stack

ELK Stack 有三个主要工具:Elasticsearch、Logstash 和 Kibana。此堆栈对于在 DevOps 中记录和显示数据非常有用。我们可以使用它来收集、查看和显示来自许多地方的日志数据。这有助于我们更快地解决问题并关注性能。

ELK Stack 的组件

以下是 ELK Stack 的三个组件 −

  • Elasticsearch −这是一个帮助我们搜索和分析数据的工具。它存储和组织日志数据。这样,我们可以快速搜索并轻松收集信息。
  • Logstash − 它就像一个数据管道。它从不同的来源获取数据,对其进行更改,然后将其发送到 Elasticsearch。Logstash 可以获取多种类型的数据,例如日志、指标和事件。
  • Kibana − 这是我们在网上用来查看数据的工具。它帮助我们创建仪表板、图表和图形。使用 Kibana,我们可以以简单的方式可视化我们的日志数据。

设置 Elasticsearch 进行日志管理

我们知道 Elasticsearch 是一个分布式搜索和分析引擎。它对于 ELK Stack 非常重要。要设置 Elasticsearch 进行日志管理,我们可以按照以下简单步骤操作。

Elasticsearch 安装

对于 Debian 或 Ubuntu,使用以下命令 −


wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.x.x-amd64.deb
sudo dpkg -i elasticsearch-7.x.x-amd64.deb

对于基于 RPM 的系统,我们可以运行以下命令 −


wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.x.x-x86_64.rpm
sudo rpm -ivh elasticsearch-7.x.x-x86_64.rpm

启动 Elasticsearch − 我们可以使用以下命令启动 Elasticsearch −


sudo service elasticsearch start

Elasticsearch 配置

编辑 elasticsearch.yml − 在 /etc/elasticsearch/ 中找到此文件。像这样更改它 −


network.host: localhost
http.port: 9200
cluster.initial_master_nodes: ["node-1"]

验证安装

检查 Elasticsearch 是否正在运行。我们可以使用此命令 −


curl -X GET "localhost:9200/"

索引创建

现在我们为日志管理创建一个索引。我们可以运行此命令 −


curl -X PUT "localhost:9200/logs/"

此设置可帮助 Elasticsearch 很好地收集、存储和管理日志。它还允许我们以强大的方式搜索和分析数据。

配置 Logstash 以进行数据提取

我们知道 Logstash 是一种强大的数据处理工具。它从不同的地方获取数据,对其进行更改,然后将其发送到我们选择的地方,例如 Elasticsearch。要设置 Logstash,我们需要在配置文件中定义输入、过滤器和输出插件。

基本配置结构

标准 Logstash 配置文件有三个主要部分 −


input {
   # Define input sources
   beats {
      port => 5044
   }
}

filter {
   # Data transformation
   grok {
      match => { "message" => "%{COMBINEDAPACHELOG}" }
   }
   date {
      match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
   }
}

output {
   # Define output destination
   elasticsearch {
      hosts => ["http://localhost:9200"]
      index => "logs-%{+YYYY.MM.dd}"
   }
}

请注意以下要点 −

  • 使用输入插件确认数据来自何处(如 Beats、Kafka 或文件)。
  • 过滤插件帮助我们更改数据(如解析或添加信息)。
  • 使用输出插件将数据发送到我们想要的位置(如 Elasticsearch 或文件)。

示例输入插件

要从文件获取输入,我们可以使用 −


input {
   file {
      path => "/var/log/myapp/*.log"
      start_position => "beginning"
   }
}

运行 Logstash

要使用我们的配置启动 Logstash,我们可以运行 −


bin/logstash -f path/to/your/logstash.conf

此设置允许 Logstash 获取日志、处理日志并将其发送到 Elasticsearch 进行进一步检查。

使用 Kibana 进行数据可视化

我们可以使用 Kibana 作为强大的可视化工具。它与 Elasticsearch 配合得很好。它帮助我们以简单的方式探索和显示数据。我们可以使用其易于使用的界面轻松创建交互式仪表板、图表和图形。

以下是Kibana 的主要功能 −

  • 仪表板 − 我们可以将许多可视化效果组合到一个视图中。这让我们可以全面了解我们的数据。
  • 可视化 − 我们可以创建不同类型的可视化效果。这包括折线图、饼图和地图。
  • 搜索和过滤 − 我们可以使用 Lucene 查询语言。这有助于我们更好地搜索和过滤日志。

开始使用 Kibana

首先,让我们安装 Kibana −


sudo apt-get install kibana

接下来,您需要配置 Kibana。我们需要更改 kibana.yml 文件以将其连接到我们的 Elasticsearch −


server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]

现在让我们启动 Kibana −


sudo service kibana start

要访问 Kibana,请打开浏览器并转到 http://localhost:5601。

创建可视化

您可以使用"可视化"选项卡选择所需的可视化类型。然后,选择与我们的数据匹配的索引模式。接下来,设置指标和存储桶。它将帮助您决定如何显示和分组数据。

通过使用 Kibana,您可以实时了解应用程序的执行情况并查看日志数据。

将 ELK Stack 与 CI/CD 管道集成

通过将 ELK Stack 添加到我们的 CI/CD 管道,我们可以更好地进行监控和故障排除。这让我们可以实时查看应用程序日志和性能数据。以下是我们如何将 ELK 组件添加到我们的 CI/CD 工作流程 −

  • 持续日志收集 − 我们可以在构建和部署阶段使用 Logstash 或 Filebeat 从我们的应用程序获取日志。我们应该以相同的方式格式化日志,以便它们更易于阅读。
  • 自动数据提取 − 让我们设置 Logstash 以自动从不同来源获取日志 −

input {
   beats {
      port => 5044
   }
}
filter {
   # Example filter for parsing application logs
   grok {
      match => { "message" => "%{COMBINEDAPACHELOG}" }
   }
}
output {
   elasticsearch {
      hosts => ["http://localhost:9200"]
      index => "app-logs-%{+YYYY.MM.dd}"
   }
}
  • 仪表板创建 − 我们可以使用 Kibana 制作显示应用程序性能和错误率的仪表板。我们应该自动化在 CI/CD 管道中部署 Kibana 仪表板的方式。
  • 警报 − 我们需要在 Kibana 中设置警报或使用 Elasticsearch Watcher。这将帮助我们在部署时告知团队严重问题。
  • 反馈循环 − 我们可以使用 ELK 中的日志和指标来不断改进我们的 CI/CD 流程。

通过执行这些步骤,我们可以将 ELK Stack 紧密集成到我们的 CI/CD 管道中。这将帮助我们更清楚地了解问题并更快地做出响应。

结论

在本章中,我们研究了 ELK Stack 的重要部分。这些部分是 Elasticsearch、Logstash 和 Kibana。它们在改善 DevOps 方面发挥着重要作用。

我们设置了 Elasticsearch 来管理日志。我们还配置了 Logstash 来接收数据。然后,我们使用 Kibana 以清晰的方式显示数据。通过将 ELK Stack 与 CI/CD 管道结合在一起,我们展示了它如何帮助我们监控和修复问题。