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 管道结合在一起,我们展示了它如何帮助我们监控和修复问题。

