【AWS】我构思的最强运维与监控配置
首先
我组合了一些在运维和监控AWS基础架构中使用方便的服务,并创建了一个配置图。我将简要介绍每个服务,推荐类似的服务,并详细解释配置的细节。
(我也会介绍一些用于开发的服务,但请注意这仅仅是运维和监控的配置。)
我认为每个人或企业的环境都是不同的,而且每个人对于舒适的服务也有所不同,所以这并不是唯一的正确答案,但希望能作为参考。
我还写了一篇介绍有用的教材的文章,希望你能一定要去读一读!
-
- 【AWS】さいきょうの運用・監視構成を作成するのに参考になった書籍
- インフラエンジニア1年生がプログラミングを勉強するのに使った教材
整体图
以下是我在AWS上設計的最佳運營和監視架構。由於它可能很複雜且不易理解,我將進行詳細解釋。如果您閱讀到最後,您應該能夠完全理解此圖表。


我想通过这张图表达以下内容。
監視はすべてGrafanaに一元化
メトリクス監視
ログ監視
トレース監視
セキュリティ監視
コスト監視
その他監視
アラートの管理
AWS Lambda等を使った運用の自動化
AWS Amplifyを使った独自ツールの開発
AWS CodePipelineを活用してTerraformやAnsibleでの構築
Terraform
Packer
Ansible
Serverless Framework
AWS IAM Identity Center(旧AWS SSO)を使ってすべてのアカウント管理
我希望分别对这些进行详细解释。
在Grafana上实现监控的统一化
使用开源软件Grafana来监控指标、日志、跟踪、安全性和成本。
Grafana是什么?
Grafana = 神笔

Grafana 云
Grafana Cloud是Grafana Labs作为托管服务提供的前述四个服务(Grafana、Prometheus、Loki、Tempo)。在内部,它们使用AWS、Azure、GCP中的任何一个来运行,并且您可以在注册时进行选择(AWS仅在高级计划中可选)。
AWS的Grafana和Prometheus
由于Grafana和Prometheus在AWS上作为托管服务提供,所以我也建议使用它们。个人而言,我认为Grafana Cloud更易用,因为它可以使用最新版本并且支持插件。AWS托管的Grafana是与Grafana Labs共同开发的,因此未来可能会像Grafana Cloud那样支持最新版本和插件。
指标监控
在指标监控中,我们将使用以下的服务。
普罗米修斯
Prometheus是一个开源软件,用于收集指标,属于Cloud Native Computing Foundation(CNCF)的项目。它提供了各种导出器(Exporter),用于获取Linux、Apache、MySQL等的指标,可以根据需要收集相应的指标(也可以自己创建导出器)。通常情况下,人们使用Grafana来可视化Prometheus的数据。
顺便提一下,CNCF 是 Linux Foundation 的一个项目,它是一个非营利组织,推动云原生计算系统的发展。
开放遥测技术
OpenTelemetry是开源软件,用于收集和传输度量、日志和追踪数据,也是CNCF的项目之一。由于Prometheus Exporter单独无法将数据发送到Grafana Cloud的Prometheus,因此我们将使用OpenTelemetry进行发送。此外,OpenTelemetry还可以过滤度量数据,从而降低Grafana Cloud的使用费用。
监控度量配置
指标监控配置已经设置完成。

使用Prometheus的Exporter获取指标数据,并通过OpenTelemetry将其发送到Prometheus。然后在Grafana中进行可视化。

在ECS中,您可以通过将OpenTelemetry作为应用容器的Sidecar来收集应用容器的指标数据,而无需准备Prometheus Exporter。

亚马逊RDS和AWS Lambda等托管服务只能通过亚马逊CloudWatch获取指标。
但是,使用Grafana可以将亚马逊CloudWatch的数据可视化。
此外,Grafana Cloud还可以将亚马逊CloudWatch的指标转换为Prometheus格式进行保存。(使用CloudWatch Exporter,即使不是在Grafana Cloud上,也可以将其转换为Prometheus格式。)
日志监控
在日志监视中我们使用以下服务。
流利的Bit
Fluent Bit是CNCF项目的Fluentd的轻量化版本。Fluentd是一个用于日志收集、分析和传输的开源软件,用户可以使用各种自定义插件来扩展其功能。我认为,如果不使用特定插件或运行在大规模系统上,使用Fluent Bit应该没有问题。
Grafana Loki
Grafana Loki是由Grafana Labs参考Prometheus开发的一款用于收集日志的开源软件。
Grafana Loki的相似服务:
除了Elasticsearch这个以收集和分析日志而闻名的工具之外,还有一个与Grafana兼容性良好的服务,叫做Grafana Loki。所以我选择了Grafana Loki。
只需要更改Fluent Bit的目标,就可以立即切换到Elasticsearch上的监控。
日志监控配置

使用 Fluent Bit 收集日志并发送到 Grafana Loki,然后在 Grafana 上进行可视化。

在ECS中,有一种名为FireLens的日志驱动程序可供使用,通过使用它,您可以轻松地使用Fluent Bit。与OpenTelemetry在度量监控时使用的方式类似,Fluent Bit也作为应用程序容器的边车运行。

与Metrics时一样,Amazon RDS、AWS Lambda等托管服务的日志将保存在Amazon CloudWatch中,但可使用Grafana进行可视化。
此外,使用Grafana Cloud,可以将Amazon CloudWatch日志以Grafana Loki的格式保存。
跟踪监视
“トレース”在中文中被称为“追踪”,它是指对某物或某人的动态行动进行记录和追踪的过程。
在可观察性的三个支柱之一中,指标可以判断“正在发生什么”,日志可以判断“问题为何发生”,而跟踪可以通过收集有关应用程序处理请求的数据来确定“问题发生在哪里”。
在追踪监视中,我们将使用以下服务。
Grafana Tempo: 思致监控
Grafana Tempo是Grafana Labs开发的用于追踪监控的开源软件。
Grafana Tempo的类似服务
在AWS中,有一项名为AWS X-Ray的跟踪监控服务,您也可以在Grafana中进行参考,但由于与Grafana的兼容性良好,我选择了Grafana Tempo。此外,CNCF项目中还有一个名为Jaeger的跟踪监控开源软件,您也可以在Grafana中进行参考,但需要准备服务器才能使用,因此我选择了在Grafana Cloud中以托管方式使用的Tempo。
只需更改OpenTelemetry的传输目的地,即可立即切换到AWS X-Ray或Jaeger进行监视。
追踪监视的配置

使用安装了AWS OpenTelemetry SDK的应用程序来获取OpenTelemetry跟踪数据,并将其发送到Grafana Tempo中进行可视化。

在ECS中也是如此。通过将OpenTelemetry作为应用容器的辅助组件运行,从已安装OpenTelemetry SDK的应用程序中获取跟踪数据。
安全监控
在安全监控中,我们将使用以下的服务。
AWS 安全湖
AWS安全湖是一项服务,它以开放的网络安全模式(OCSF)的形式保存和聚合管理AWS Security Hub和AWS CloudTrail等各种安全日志,并且支持AWS之外的其他服务。
亚马逊云服务可信顾问
AWS Trusted Advisor是一项基于AWS最佳实践的服务,提供涵盖5个类别的检查和建议,包括安全性、成本优化、容错性、性能和服务限制。对于安全性,可以汇总AWS Security Hub的结果,对于成本优化,则可以汇总AWS Compute Optimizer服务的结果。
开启搜索
OpenSearch是一个开源的全文搜索引擎,可用于实时应用程序监控、日志分析、网站搜索等各种用例。它是基于Elasticsearch由AWS开发的。
作为AWS的托管服务,提供了名为Amazon OpenSearch Service的服务,其中还可以使用OpenSearch Dashboard这个可视化工具,因此即使不使用Grafana也可以进行监视。但由于希望将所有监视统一在Grafana中进行,因此本次将使用Grafana进行可视化。
OpenSearch服务上的SIEM
SIEM on OpenSearch Service是一种解决方案,采用了先前介绍的Amazon OpenSearch Service,用于在AWS上调查安全事故。它能自动使用AWS CloudFormation构建资源,包括Amazon S3、AWS Lambda和Amazon OpenSearch Service等。
它可以导入并可视化AWS Security Lake和Trusted Advisor等日志。
翻译:猎鹰
通过在服务器上引入Falco,可以实时检测CNCF项目中的意外行为、入侵和数据盗窃。使用Falcosidekick工具,可以将检测到的数据发送到AWS Security Lake。
除了AWS安全湖之外,您还可以将Falcosidekick的日志发送到Amazon S3、AWS SNS、Prometheus、Slack等。
安全监控的组成

所有的SIEM数据都被导入到OpenSearch Service中,并通过Grafana进行可视化。
成本监控
在成本监控中,我们将使用以下服务。
AWS成本和使用报告
AWS成本和使用报告是用于记录AWS成本和使用情况的报告,在Amazon S3上保存。
亚马逊 Athena
Amazon Athena是AWS的一项服务,可以使用SQL直接分析存储在Amazon S3中的数据。通过使用它,我们可以查询AWS Cost and Usage Report的数据。
AWS Glue 可以进行重述。
AWS Glue是亚马逊网络服务(AWS)提供的用于数据提取、转换和加载的服务。在使用Amazon Athena查询Amazon S3时,将通过AWS Glue的Crawler创建Data Catalog,然后Amazon Athena会对该Data Catalog进行查询操作。
成本监控的设置

将AWS Cost and Usage Report的结果存储在Amazon S3中。使用AWS Glue和Amazon Athena查询这些数据,并通过Grafana进行可视化。
其他监视
合成监控
作为Grafana Cloud的一部分,提供的合成监控插件。其内部使用了Prometheus的导出器Blackbox Exporter,用于生成与目标服务器的运行状态相关的度量和日志。保存地点使用了Grafana Cloud的Prometheus和Loki。
Grafana 法罗
Grafana Labs正在开发中的开源软件,用于进行实时用户监控。实时用户监控是指监视用户正在查看的网站或应用程序的性能。以前我们只能监视后端,而现在我们可以监视前端。
日志和跟踪信息被生成并保存到Grafana Cloud的Loki和Tempo中。
※目前为私人测试版。
警报管理
AWS的警报和Grafana的警报通过使用名为Grafana OnCall的开源软件进行管理。您可以免费在Grafana Cloud上使用它。
Grafana OnCall 图表化唤醒系统
这个开源软件可以综合管理来自各种监控工具的警报。它不仅支持Grafana的警报,还支持AWS、Zabbix等其他警报,并且在警报通知方面,可以通过电子邮件、Slack、Teams等聊天工具以及电话进行呼叫。

类似于Grafana OnCall的服务
除了 PagerDuty 和 Opsgenie 这些类似的服务之外,还有 Grafana OnCall 这个需要额外收费的 SaaS 服务。
由于 Grafana OnCall 可以免费使用,并且警报可以在 Grafana 内部完成,所以我选择了这个服务。
使用自动化
能够利用自动化的AWS服务
我将介绍一些可以在AWS上自动化运营的服务。特别是AWS Lambda和AWS Systems Manager,它们都非常深入,并具有多种用法。
亚马逊云服务Lambda
AWS Lambda是一个无服务器的AWS服务,可以执行代码。通过使用AWS SDK,您可以从程序中操作AWS服务。
比如说,我们可以通过调用AWS Systems Manager的RunCommand来执行在Amazon EC2实例上运行命令的操作,就像下图所示。因此,我们可以根据Grafana的警报来对EC2实例执行命令。

亚马逊网络服务(AWS)系统管理器
AWS Systems Manager是一项在AWS基础架构管理中非常有用的服务。通过在服务器上安装代理程序,可以进行服务器管理。不仅适用于Amazon EC2,还适用于本地服务器。
有关功能的详细信息,请参考以下文章。
亚马逊事件桥(EventBridge)
Amazon EventBridge是AWS的一项服务,它可以触发各种AWS事件,并调用AWS Lambda、AWS Systems Manager、Amazon SNS等服务。除了事件,它还可以根据时间表触发调用。
亚马逊 EC2 自动扩展
Amazon EC2 Auto Scaling是AWS的一项服务,可以自动对Amazon EC2进行扩展。当进行扩展时,可以将通知发送到Amazon SNS。
尽管名字相似会带来困扰,但在管理跨多个服务和多个资源的扩展性时,请使用AWS Auto Scaling。
亚马逊云备份服务
AWS Backup是亚马逊为Amazon EC2、Amazon S3、Amazon RDS等数据备份提供的集中化和自动化服务。备份结果可以发送到Amazon SNS。
亚马逊运维专家
Amazon DevOps Guru是一项AWS服务,它利用机器学习来检测AWS中的异常行为模式。检测结果可以发送到Amazon SNS。
使用AWS Amplify开发自定义工具。
我认为只有提供的服务无法涵盖所有运营,并且可能需要开发内部专用工具。
在开发工具的方法有很多种,但我推荐使用AWS Amplify来开发无服务器应用程序。
AWS Amplify是一项服务。
亚马逊云服务增强版
AWS Amplify是一個平台,可以快速且輕鬆地開發移動應用程式和Web應用程式,提供所需的前端和後端功能並輕鬆整合。
它在內部使用Amazon S3、Amazon DynamoDB、AWS AppSync、Amazon Cognito等服務。

亚马逊DynamoDB
亚马逊DynamoDB是亚马逊云服务(AWS)提供的一种全面托管的NoSQL数据库服务。
AWS AppSync:
AWS AppSync 是一种托管的服务,可让开发者能够轻松构建、部署和扩展用于移动、Web 和本地应用程序的 GraphQL API。
AWS AppSync是由Facebook开发的用于解决GraphQL这种REST API的问题的特定API查询语言的AWS服务。
在AWS Amplify的API中,可以选择使用REST API或GraphQL,其中REST API使用Amazon API Gateway,而GraphQL使用AWS AppSync。
使用亚马逊Cognito进行登录。
通过使用Amazon Cognito来对AWS Amplify进行登录认证,可以实现使用AWS IAM Identety Center的用户进行登录。
亚马逊 Cognito
Amazon Cognito是AWS提供的一项服务,用于提供Web和移动应用的身份验证、授权和用户管理功能。
使用AWS CodePipeline结合Terraform和Ansible进行构建。
在资源构建方面,我们使用Terraform、Ansible、Packer和Serverless Framework,并利用AWS CodePipeline实现CI/CD。
在AWS CodePipeline上进行CI/CD运维。
为了在Terraform和Ansible的构建中进行CI/CD,我们将使用以下三个AWS服务。
亚马逊云服务(AWS)的CodeCommit
AWS CodeCommit是由AWS提供的一项全托管服务,能够使用Git进行版本控制。
除了AWS CodeCommit,AWS CodePipeline还支持使用GitHub和Bitbucket。
亚马逊云服务的CodeBuild功能
AWS CodeBuild是由AWS提供的全托管的持续集成服务。
亚马逊云服务的代码管道
AWS CodePipeline是由AWS提供的完全托管的CI/CD服务。
通过使用AWS CodePipeline,实现从AWS CodeCommit到AWS CodeBuild的流程自动化,以进行Terraform和Ansible的CI/CD。
Terraform是什么?
在基础设施的建设中,使用Terraform来构建。
形塑
Terraform是HashiCorp提供的开源软件,可以将基础设施配置管理为代码,可在各种服务中使用,包括AWS和Grafana。
类似于Terraform的服务
AWS的IaC服务中,有AWS CloudFormation。但由于我还想搭建AWS之外的资源,所以我选择了Terraform。
使用Terraform进行CI/CD配置

来自一个化学品公司的员工,我非常担心我们的产品在安全性方面存在问题。所以我建议我们使用Trivy这个软件,它能够快速扫描和识别我们的产品中的安全漏洞。
Trivy是Aqua Security的一款工具,用于诊断容器镜像的漏洞。通过与称为tfsec的Terraform安全扫描工具的集成,Trivy可以进行Terraform的安全扫描。我们将在运行Terraform的AWS CodeBuild中使用它。
Packer是什么
创建EC2的AMI需要使用Packer工具。
Packer – 包装工人
Packer是HashiCorp提供的开源软件,与Terraform相似,可在不同的虚拟化/云平台上自动化创建机器镜像。
它不仅支持AWS,还支持Azure和GCP,并且可以构建Docker镜像。
Packer的持续集成/持续交付架构
北京的组装将按照以下方式进行。
将用于在AWS CodePipeline中执行Packer的文件部署到Amazon S3,并使用该文件在AWS Systems Manager的Automation中执行Packer,创建临时EC2实例。然后,基于该实例创建AMI。

Ansible是什么?
在服务器配置管理中,我们使用Ansible作为工具。
变幻自如
Ansible是由红帽提供的能够通过代码管理服务器的开源配置管理工具。它用于在Amazon EC2实例中进行安装和配置文件管理。
只需要一种选项:Ansible的类似服务
像Ansible这样的配置管理工具还有其他服务,比如Chef和Puppet。而且Amazon Web Services(AWS)还提供了一个叫做AWS OpsWorks的托管服务。然而,与Ansible相比,Chef和Puppet的学习成本较高,并且需要在服务器上安装代理,所以我们选择了更方便使用的Ansible。
Ansible的CI/CD配置
Ansible的配置如下所示。
使用AWS CodePipeline将Ansible执行文件(Playbook)部署到Amazon S3,并使用该Playbook通过AWS Systems Manager的Run Command执行Ansible。

※Ansible最初是根据控制节点(安装Ansible并执行Playbook的服务器)和目标节点(管理对象服务器,不需要安装Ansible)进行划分的,在连接过程中需要打开SSH端口。
如果使用AWS Systems Manager,则需要在目标节点上安装Ansible并在本地执行,因此不需要控制节点,也不需要打开SSH端口,因为可以通过AWS Systems Manager执行。
Serverless框架是什么?
在AWS Lambda的建立和部署方面,我们使用Serverless Framework。
无服务器框架
Serverless Framework是一个简单开发和部署无服务器应用程序的框架。除了AWS之外,还可以在Azure、GCP等其他云平台上使用。
无服务器架构的CI/CD配置

AWS IAM 身份中心用于账户管理。
尽管现在已经出现了各种各样的服务,但我们将通过AWS IAM身份中心来进行所有账户管理。
AWS IAM身份认证中心是什么?
AWS身份和访问管理(IAM)身份中心
AWS IAM Identity Center是一项由AWS提供的服务,可以在一个帐户中使用单点登录(SSO)登录多个AWS帐户和AWS以外的服务。可以免费使用。

不仅可以登录多个AWS帐户,还可以登录Grafana,以及登录使用Amazon Cognito创建的在AWS Amplify中开发的工具。
AWS IAM Identity Center的类似服务
有许多实现类似AWS IAM Identity Center的SSO服务,但我们选择了AWS IAM Identity Center,因为它易于使用作为AWS的登录认证,并且免费。
最后

我认为,通过我们在本次介绍中提到的架构,我们已经实现了符合AWS Well architected框架的五个支柱,即操作优越性、安全性、可靠性、性能效率和成本优化。(我们省略了第六个可持续性支柱。)
我们计划继续不断改进这一点。同时,我还打算写一些深入探讨各项服务的文章。