欢迎来到我们为期 30 天的 DevOps 成神之路课程的第 9 天。今天,我们将深入探讨监控和日志记录的世界,这在确保应用程序的健康和性能方面发挥着至关重要的作用。在本课程结束时,您将熟练使用 Prometheus、Grafana 和 ELK 堆栈等流行工具来实现强大的监控和日志记录解决方案。
为什么监控和日志记录很重要?
想象一下运行一个应用程序而对其性能、资源利用率或潜在错误没有任何可见性。听起来像是一场灾难,对吧?这就是监控和日志记录发挥作用的地方。
这些实践使您能够:
主动识别问题: 通过监控,您可以在性能瓶颈、资源限制和其他问题升级之前识别它们,从而帮助您维护可靠的应用程序。
深入了解用户行为: 通过分析应用程序和基础设施指标,您可以了解用户行为、识别流行功能并优化应用程序以获得更好的用户体验。
有效排除故障: 日志记录提供有关应用程序内部工作的宝贵信息,使您能够查明错误的根本原因并快速采取纠正措施。
使用 Prometheus 和 Grafana 实施监控
第 1 步:安装和设置 Prometheus
Prometheus 是一个功能强大的开源监控系统,可以从目标收集指标并存储它们以供分析。
以下是如何开始:
# 在 Ubuntu 上安装
$ sudo apt- get update
$ sudo apt- get install -y prometheus
步骤 2:配置 Prometheus
接下来,您需要配置 Prometheus 以从应用程序中抓取指标。这可以通过编辑 prometheus.yml 文件来完成:
# prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'your_app'
static_configs:
- targets: ['your_app_ip:your_app_port']
步骤 3:安装和设置 Grafana
Grafana 是一个流行的开源分析和监控平台,可与 Prometheus 无缝协作。
让我们安装 Grafana:
# 在 Ubuntu 上安装
$ sudo apt- get install -y grafana
安装完成后,启动 Grafana 并使其在启动时启动:
$ sudo systemctl start grafana-server
$ sudo systemctl enable grafana-server
在浏览器中通过http://your\_server\_ip:3000访问 Grafana ,使用默认凭据 (admin/admin) 登录,然后使用 Prometheus 设置新的数据源。
使用 ELK 堆栈收集和分析日志
ELK 堆栈代表 Elasticsearch、Logstash 和 Kibana,是广泛使用的日志聚合和分析解决方案。让我们探讨一下如何设置:
第 1 步:安装并设置 Elasticsearch
#在 Ubuntu 上安装
$ sudo apt-get install -y openjdk-8-jre
$ wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
$ sudo sh -c 'echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" > /etc/apt/sources.list.d/elastic-7 .x.list'
$ sudo apt-get update
$ sudo apt-get install -y elasticsearch
启动并启用 Elasticsearch:
$ sudo systemctl start elasticsearch
$ sudo systemctl enable elasticsearch
步骤 2:安装和设置 Logstash
Logstash 负责在将日志发送到 Elasticsearch 之前收集和处理日志:
# Installation on Ubuntu
$ sudo apt-get install -y logstash
创建 Logstash 配置文件(例如 your_app.conf),并定义输入、过滤器和输出部分来处理日志。
步骤 3:安装和设置 Kibana
Kibana 提供了一个用户友好的界面来可视化和探索您的日志:
# 在 Ubuntu 上安装
$ sudo apt- get install -y kibana
启动并启用 Kibana:
$ sudo systemctl start kibana
$ sudo systemctl enable kibana
在浏览器中通过 http://your\_server\_ip:5601 访问 Kibana ,并配置索引模式来探索您的日志。
让我们考虑一个假设的实时项目,该项目使用 Prometheus、Grafana 和 ELK(Elasticsearch、Logstash 和 Kibana)堆栈监控电子商务网站的应用程序日志。
项目概述:
电子商务网站有多个微服务运行在不同的服务器上。每个微服务都会生成日志,其中包含有关用户交互、系统运行状况和潜在错误的宝贵信息。目标是建立一个监控系统,可以实时收集、存储和可视化这些日志,以帮助快速识别和解决问题。
使用的组件:
Prometheus: 一种时间序列监控系统,用于收集和存储来自各种来源的指标。
Grafana: 一种数据可视化工具,与 Prometheus 集成以创建实时仪表板和图表。
ELK Stack: Elasticsearch 用于日志存储和索引,Logstash 用于日志摄取,Kibana 用于日志可视化和分析。
项目设置:
第 1 步:安装和配置 Prometheus
在专用服务器上设置 Prometheus,以从各种服务中获取指标。
定义要监视的目标,例如 HTTP 端点、导出器和其他服务。
配置警报规则以在出现异常或错误时通知管理员。
步骤 2:安装和配置 Grafana
在另一台服务器上设置 Grafana,以可视化从 Prometheus 收集的指标。
将 Grafana 连接到 Prometheus 作为数据源来访问指标。
使用相关图形和图表创建自定义仪表板以监控系统运行状况和性能。
步骤 3:安装和配置 ELK Stack
设置 Elasticsearch 来存储和索引应用程序日志。
在单独的服务器上设置 Logstash 以从不同的微服务获取日志。
在Logstash中定义日志解析规则,从日志中提取相关信息。
在服务器上安装 Kibana 以可视化和分析存储在 Elasticsearch 中的日志。
步骤 4:应用程序日志集成
通过将日志发送到其定义的端点,将每个微服务与 Logstash 集成。
Logstash将解析日志并将其转发到Elasticsearch进行存储。
第5步:监控和警报:
使用Grafana创建实时仪表板,用于监控Prometheus收集的指标。
在 Prometheus 中设置警报规则,以便在满足预定义条件时触发通知。
配置要通过电子邮件、Slack 或其他通信渠道发送的通知。
优点:
通过此设置,电子商务网站的团队可以获得以下好处:
实时监控: 团队可以通过 Grafana 仪表板实时监控系统运行状况、性能和潜在错误。
集中式日志存储:所有应用程序日志都集中在Elasticsearch中,可以更轻松地搜索和分析来自不同微服务的日志。
轻松排除故障: 开发人员和运营团队可以使用 Kibana 快速搜索和过滤日志,从而更快地进行故障排除和问题解决。
主动警报: Prometheus 可以根据预定义的阈值触发警报,帮助团队在问题变得严重之前识别并解决问题。
历史分析: ELK 堆栈允许对日志进行历史分析,这可以帮助识别模式、趋势和需要改进的领域。
在现实场景中,安全性、扩展和性能优化等额外考虑因素对于确保监控系统在生产环境中高效、安全地工作至关重要。
用于理解监控和日志记录概念的存储库!!!
用于 EKS 监控的 Github Repo
使用 ELK 堆栈监控 Springboot 应用程序
我在面试中遇到的实时项目具体问题如下:
-
Prometheus 如何从目标收集指标?
-
如何在 Prometheus 中创建自定义指标来监控应用程序?
-
解释一下 Prometheus 中标签的概念以及它们如何帮助数据聚合?
-
如何在 Grafana 中设置警报以及支持哪些通知渠道?
-
解释 Grafana 模板的概念,以及它如何促进动态仪表板创建?
-
Logstash 在将日志发送到 Elasticsearch 之前如何处理和转换日志?
-
Elasticsearch的索引和分片概念在分布式日志存储中有何意义?
-
Kibana 可视化如何帮助识别日志数据中的模式和趋势?
结论:
现在,我们拥有全面的监控和日志记录解决方案,可为您提供有关应用程序运行状况和性能的宝贵见解。请记住,主动监控和日志记录对于维护弹性和高性能应用程序至关重要。
至此,我们的课程第 9 天就结束了。明天,我们将讨论云平台作为我们的下一个主题,因此请继续关注更多令人兴奋的内容和实践示例!
系列课程-持续更新
DevOps 从零到英雄 — 第 2 天:版本控制系统 — VCS
DevOps 从零到英雄 - 第 3 天:持续集成 (CI)
DevOps成神之路 — 第6天:使用Docker进行容器化!
DevOps 成神之路 — 第 7 天:使用 Kubernetes (K8s) 进行容器编排
DevOps 成神之路 — 第 8 天:基础设施即代码 (IaC)
微信号 | HELLO程序员
视频号| iron.guo
