MinIO 经常用于存储 Elasticsearch 快照,为 Elasticsearch 备份提供了一个安全的家园。与存储分层一起使用时,它效率更高,这降低了 Elasticsearch 的总拥有成本,此外,您还可以获得将数据写入 MinIO 的额外好处,这些数据是不可变的 、版本化的 ,并受擦除编码 保护。此外,将 Elasticsearch 快照保存到 MinIO 对象存储使它们可供其他云原生机器学习和分析应用程序使用。在我们之前的一篇博文中,我们详细介绍了如何从 Elasticsearch创建快照和恢复 。
从那时起,MinIO 和 Elasticsearch 的功能都得到了增强,现在我们可以做更多的事情。
我们将 MinIO journalctl 日志发送到 Elasticsearch。 将 MinIO 存储桶中的日志发送到 Elasticsearch。 MinIO 是 Elasticsearch 的完美伴侣,因为它具有业界领先的性能和可扩展性。MinIO 的可扩展性和高性能的结合使每个数据密集型工作负载(不仅仅是 Elasticsearch)触手可及。MinIO 能够提供惊人的性能 - 最近的基准测试 在仅使用 32 个现成的 NVMe SSD 节点的 GET 操作中实现了 325 GiB/s(349 GB/s),在 PUT 操作中实现了 165 GiB/s(177 GB/s)。通过将 MinIO 服务日志发送到 Elasticsearch,我们将能够洞察 MinIO 的操作,您可以在 Kibana 图形界面中查看模式和警报,这将使您能够根据某些阈值运行进一步的分析甚至警报。例如,您可能希望检查趋势或瓶颈,并尝试识别工作负载类型或一天中的时间模式。在这篇博文中,我们将向您展示如何以一种促进洞察力的易于理解的方式可视化这些模式。
安装 ELK 栈 我们将介绍安装 Elasticsearch-Logstash-Kibana 的最基本方法。为了简单起见,我们将在同一个节点上安装它,以确保我们不必担心在节点之间打开端口。
在生产环境中,您应该将这些组件架构在单独的节点上,以便您可以扩展各个组件。
添加 apt 仓库密钥,不仅可以下载 Elasticsearch,还可以下载后续步骤中使用的其他组件,例如 Logstash 和 Kibana。 安装 Elasticsearch 软件包。 root@aj-test-1:~ # curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - root@aj-test-1:~ # echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list root@aj-test-1:~ # apt-get update root@aj-test-1:~ # apt-get -y install elasticsearch
启动并验证 Elasticsearch 是否正常工作。启动后,即使状态为运行,Elasticsearch 的 API 也可能需要一两分钟才能响应,因此,如果服务启动后立即超时,请在几分钟后重试。 root@aj-test-1:~ # systemctl enable elasticsearch root@aj-test-1:~ # systemctl start elasticsearch root@aj-test-1:~ # curl -X GET "localhost:9200" { "name" : "aj-test-1" , "cluster_name" : "elasticsearch" , "cluster_uuid" : "b-ivUmYnRWyXBiwMuljO9w" , "version" : { "number" : "7.17.6" , "build_flavor" : "default" , "build_type" : "deb" , "build_hash" : "f65e9d338dc1d07b642e14a27f338990148ee5b6" , "build_date" : "2022-08-23T11:08:48.893373482Z" , "build_snapshot" : false , "lucene_version" : "8.11.1" , "minimum_wire_compatibility_version" : "6.8.0" , "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }
我们将使用 Kibana 可视化日志。我们也可以使用 ElasticSearch API 读取索引,但图形界面将使理解更加用户友好。
root@aj-test-1:~ # apt-get -y install kibana root@aj-test-1:~ # systemctl enable kibana root@aj-test-1:~ # systemctl start kibana
访问 http://localhost:5601
在这些示例中,我已在 /etc/hosts
中将 kibana.min.io
指向 localhost
以获得更好的可见性,但您可以使用 localhost
。 目前还没有索引,但我们将在接下来的几个步骤中添加它们。为了处理日志以加载我们的索引,我们需要安装 Logstash。
可以将 Logstash 视为日志解析器。它不存储任何内容,它有输入和输出,以及介于两者之间的一系列不同类型的过滤器。它解析输入数据,对其进行过滤/转换,然后以各种方式输出它。
root@aj-test-1:~ # apt-get -y install logstash
在以下文件中配置 Logstash 以输出到 Elasticsearch root@aj-test-1:~ # vi /etc/logstash/conf.d/01-example.conf
使用以下内容发送到默认索引。
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "default-%{+YYYY.MM.dd}"
}
}
注意:在启动 Logstash 之前,请在调试模式下运行它以确保一切正常。在我的情况下,它无法找到 pipelines.yml,因此我不得不通过将其符号链接到原始位置来手动修复它。所以在继续之前请先验证。 root@aj-test-1:~ # /usr/share/logstash/bin/logstash --debug
如果一切看起来都很好,请启用并启动 Logstash 服务。
root@aj-test-1:~ # systemctl enable logstash root@aj-test-1:~ # systemctl start logstash
此时 Logstash 已经在技术上运行,但我们尚未配置任何输入来消费数据,仅配置了输出,所以现在让我们通过安装 MinIO 并收集服务日志来完成此操作。
安装 MinIO 在之前的博文中,我们讨论了如何配置MinIO 作为 SystemD 服务 。我们将在这里使用相同的原则,只是它将作为操作系统包安装,而不是二进制文件。
安装 MinIO .deb 包。如果您使用的是其他操作系统系列,则可以在此处 找到其他软件包 root@aj-test-1:~ # wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio_20220825071705.0.0_amd64.deb -O minio.deb root@aj-test-1:~ # dpkg -i minio.deb
分别创建用户和组 minio-user
和 minio-user
。 root@aj-test-1:~ # groupadd -r minio-user root@aj-test-1:~ # useradd -M -r -g minio-user minio-user
为 MinIO 创建数据目录,并使用上一步创建的用户和组设置权限。 root@aj-test-1:~ # mkdir /opt/minio root@aj-test-1:~ # chown minio-user:minio-user /opt/minio
root@aj-test-1:~ # systemctl enable minio root@aj-test-1:~ # systemctl start minio
您可以通过控制台访问 http://localhost:9001
或通过 mc 管理员验证 MinIO 是否正在运行。
root@aj-test-1:~ # wget https://dl.min.io/client/mc/release/linux-amd64/mc root@aj-test-1:~ # chmod +x mc root@aj-test-1:~ # mv mc /usr/local/bin/mc root@aj-test-1:~ # mc alias set local http://127.0.0.1:9000 minioadmin minioadmin root@aj-test-1:~ # mc admin info local ● 127.0.0.1:9000 Uptime: 5 minutes Version: 2022-08-25T07:17:05Z Network: 1/1 OK Drives: 1/1 OK Pool: 1 Pools: 1st, Erasure sets: 1, Disks per erasure set : 1 1 drive online, 0 drives offline
如果您看到类似这样的消息,则可以确定 MinIO 已经启动。稍后,我们将创建一个桶并添加一些对象以进一步测试 MinIO。
使用 Journalbeat 发送 Journalctl 日志 Elasticsearch 使用 Beats 从各种来源收集数据,并且有不同类型的 Beats。Journalbeat 就是其中一个 Beat;从名称可以看出它读取 journalctl 日志。在本例中,我们将读取 MinIO 的 journalctl 日志。
安装 Journalbeat 软件包。大多数常见操作系统都有不同的 软件包,但这里我们将在这台基于 Ubuntu 的机器上安装 .DEB 软件包。 root@aj-test-1:~ # curl -L -O https://artifacts.elastic.co/downloads/beats/journalbeat/journalbeat-7.15.2-amd64.deb root@aj-test-1:~ # dpkg -i journalbeat-7.15.2-amd64.deb
更新 01-example.conf
文件,使用以下配置。这允许 Logstash 在端口 5044 上监听各种Beats ,在本例中为 Journalbeat。 root@aj-test-1:~ # vi /etc/logstash/conf.d/01-example.conf input { beats { port => 5044 } } output { elasticsearch { hosts => [ "localhost:9200" ] index => "minio-journalctl-logs-%{+YYYY.MM.dd}" } }
root@aj-test-1:~ # systemctl restart logstash
修改journalbeat.yml
以显式添加minio.service
。您可以配置各种输入 使其更广泛,并收集所有服务的全部journalctl日志。 root@aj-test-1:~ # vi /etc/journalbeat/journalbeat.yml 15 journalbeat.inputs: 16 # 应爬取和获取的路径。可能的值为文件和目录。 17 # 设置目录时,其下的所有日志都会合并。 18 # 为空时开始读取本地日志。 19 - id: minio.service 20 paths: [] 21 include_matches: 22 - _SYSTEMD_UNIT=minio.service
在同一个journalbeat.yml
文件中,修改输出以发送到我们之前在01-example.conf中配置的Logstash Beats端口5044
。 注释掉output.elasticsearch
,因为我们希望日志通过Logstash进行解析。 122 # ----------------------- Elasticsearch 输出 ------------------------ 123 #output.elasticsearch: ←—----- 注释掉这些行 124 # 要连接的主机数组。 125 #hosts: ["localhost:9200"] ←—----- 注释掉这些行
[...截断...]
135 # ------------------------- Logstash 输出 --------------------------- 136 output.logstash: ←—----- 取消注释掉这些行 137 # Logstash 主机 138 hosts: [ "localhost:5044" ] ←—----- 取消注释掉这些行
root@aj-test-1:~ # systemctl enable journalbeat root@aj-test-1:~ # systemctl start journalbeat
使用/_cat/
端点查看新的索引。您应该看到如下内容 root@aj-test-1:~ # curl -s localhost:9200/_cat/indices | grep -i minio yellow open minio-journalctl-logs-2022.08.26 J72DiduZQqWZfzt_Ml7Rvw 1 1 24 0 314.8kb 314.8kb
应该已经有一些日志了。如果您没有看到日志,您可以执行以下两种操作之一 修改Kibana仪表板中的日期以扩大日志范围。这可能是因为在我们启动MinIO和安装Journalbeat之间,日志可能比Kibana中的默认范围(通常为15分钟)更旧。因此,如果扩大范围,您应该可以看到旧的日志。 如果您需要立即获取一些新的journalctl日志,只需如下重新启动MinIO root@aj-test-1:~ # systemctl restart minio
如果您转到Kibana仪表板,您应该几乎立即在索引minio-journalctl-logs-*
中看到新的日志。 如果您看到类似上述内容,则MinIO journalctl日志现在位于Elasticsearch中。
使用Filebeat读取MinIO中的Apache日志 假设您已经在MinIO存储桶中有一些日志,并且想要将它们加载到Elasticsearch中。此操作的一个可能的用例是存档日志。有时您只想恢复特定范围的日志进行分析,并且在完成分析后,您将从集群中删除这些索引。这通过避免存储每天不使用的旧日志来节省成本。
我们将使用Filebeat的S3输入从MinIO存储桶中读取。
在MinIO中创建一个存储桶来存储Apache服务器日志。 root@aj-test-1:~ # mc mb local/apachelogs 存储桶已成功创建 ` local /apachelogs`。
root@aj-test-1:~ # mc cp /var/log/apache2/access.log local/apachelogs /var/ log /apache2/access.log: 1.55 KiB / 1.55 KiB ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 117.96 KiB/s 0s root@aj-test-1:~ # mc ls local/apachelogs [2022-08-29 18:37:31 UTC] 1.5KiB STANDARD access.log
root@aj-test-1:~ # curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.4.0-amd64.deb root@aj-test-1:~ # dpkg -i filebeat-8.4.0-amd64.deb
使用以下配置在 filebeat.yml
中配置 Filebeat 从 S3 源输入,在本例中为 MinIO 的 apachelogs
桶。 输出到我们的 Logstash 处理器 root@aj-test-1:~ # vi /etc/filebeat/filebeat.yml 15 filebeat.inputs: 16 - type : aws-s3 17 non_aws_bucket_name: apachelogs 18 number_of_workers: 5 19 bucket_list_interval: 60s 20 access_key_id: minioadmin 21 secret_access_key: minioadmin 22 endpoint: http://localhost:9000 23 expand_event_list_from_field: Records [...TRUNCATED...] 138 # ------------------------ Elasticsearch 输出 ----------------------- 139 #output.elasticsearch: ← 注释掉这些行 140 # 要连接的主机数组。 141 #hosts: ["localhost:9200"] ← 注释掉这些行 [...TRUNCATED...] 151 # -------------------------- Logstash 输出 -------------------------- 152 output.logstash: ← 取消注释掉这些行 153 # Logstash 主机 154 hosts: [ "localhost:5044" ] ← 取消注释掉这些行
在我们启动 Filebeat 并通过 Logstash 将日志发送到 Elasticsearch 之前,让我们更新我们可靠的 01-example.conf
Logstash 配置,以便将这些日志发送到新的索引。 root@aj-test-1:~ # vi /etc/logstash/conf.d/01-example.conf 10 index => "apache-%{+YYYY.MM.dd}"
root@aj-test-1:~ # systemctl restart logstash
如果您现在在 Kibana 中检查 apache-*
,您应该会看到一些 Apache 日志。 最终想法 之前,我们向您展示了如何使用 MinIO 将 Elasticsearch 索引进行快照、备份和恢复。
在本期中,我们向您展示了如何
将 MinIO Journalctl 日志发送到 Elasticsearch 将 Apache 日志从 MinIO 桶发送 您可以更进一步,将 Filebeat 与 Kafka 通知集成。这允许您利用MinIO 的存储桶通知 功能,在添加新对象时启动 Filebeat 读取存储桶,而不是每隔几秒轮询一次。
现在,您对 MinIO 在漂亮的 Kibana 仪表盘中执行的操作有了更好的了解。不仅如此,我们还向您展示了如何将日志从 MinIO 存储桶按需加载到您选择的索引中,而不是将大量数据存储在 Elasticsearch 集群中,这可能会变得非常昂贵。这样,一旦您完成分析,就可以丢弃该索引。MinIO 可以无缝地融入现有的 DevOps 实践和工具链,从而可以与各种 Elasticsearch 工作流集成。
有问题?想开始使用?在Slack 上联系我们。