作者: du

  • 在 AWS 上使用 Elasticsearch(Elastic Cloud)的要点 (上篇)

    在 AWS 上使用 Elasticsearch(Elastic Cloud)的要点 (上篇)

    本文将介绍在 AWS 上使用 Elasticsearch(Elastic Cloud)的要点。在本文中,将统一把 Elastic Cloud(Elasticsearch Service)简称为 “Elastic Cloud”。

    1. 监控(Monitoring)设置(Metric/Logs)

    关于Monitoring功能

    通过使用Monitoring功能,可一目了然地掌握集群状态;即便发生故障,也能从资源和日志两方面快速排查问题。

    在 Elastic Cloud 中启用Monitoring功能

    Monitoring功能默认处于未启用状态,需按以下步骤启用:

    (1) 访问 Elastic Cloud 的Deployment页面,点击菜单中的 “Logs and metrics”。

    点击 “Logs and metrics”

    (2) 点击 “Ship to a deployment”下方的 “Enable”。

    点击 “Enable”

    (3) 选择已搭建的部署,点击 “Save”,Monitoring功能即启用。

    点击 “Save”

    查看指标(Metric)

    通过指标可查看 Elastic Stack 各组件的服务器资源使用情况:

    (1) 在 Kibana 页面左侧菜单中,点击 “Stack Monitoring”

    点击 “Stack Monitoring”

    (2) 点击 Elasticsearch 的 “Overview”。在概览页面中,可实时查看 Elasticsearch 整体的搜索性能与索引性能。

    点击 “Overview”

    (3) 在 Elasticsearch 的 “Nodes”中,选择并点击一个实例。

    从 “Nodes” 中选择一个实例并点击

    此时可实时查看每台服务器的资源状态。

    查看Metric

    查看日志(Logs)

    通过日志可实时查看、筛选日志并进行问题排查:

    (1) 在 Kibana 页面左侧菜单中,点击 “Logs”。

    点击 “Logs”

    在Stream页面中,会实时显示导入 Elasticsearch 的各类日志。

    日志实时显示

    (2) 在页面上方的搜索框中输入 “error”,执行日志筛选。

    可以一边筛选日志,一边开展问题排查。

    输入 “error” 并执行日志筛选

    修改指标的保留期限

    指标的默认保留期限为 3 天。由于不同需求下的保留期限可能不同,建议根据实际情况修改设置:

    (1) 在 Kibana 页面左侧菜单中,点击 “Stack Management”

    点击 “Stack Management”

    (2) 点击 “Index Lifecycle Policies”。

    点击 “Index Lifecycle Policies”

    (3) 在搜索框中输入 “.monitoring”,点击显示结果中的 “.monitoring-8-ilm-policy”。

    点击 “.monitoring-8-ilm-policy”

    Elasticsearch 会将索引按 “阶段(Phase)” 进行管理,各阶段的过渡条件通过 ILM(索引生命周期管理,Index Lifecycle Management)定义。

    详情可参考以下链接:ILM: Manage the index lifecycle | Elasticsearch Guide [8.14] | Elastic

    修改前的设置如下表所示:

    阶段(Phase)设定值
    Hot 阶段索引创建后满 3 天,或主分片(Primary Shard)大小达到 50GB 以上时,对索引执行 Rollover
    Warm 阶段执行强制合并(Forcemerge),将分片的段(Segment)数量合并为 1
    Delete 阶段索引执行 Rollover 后满 3 天,将其删除

    简单来说,Hot 阶段中定义的 “Rollover” 是指当满足特定条件时,自动创建新索引的功能。

    详情可参考以下链接:Rollover | Elasticsearch Guide [8.14] | Elastic

    (4) 将 Delete 阶段的保留时间从 “3 天” 修改为 “31 天”,点击 “Save Policy”。

    修改设置并点击 “Save Policy”

    通过上述步骤,已成功将设置修改为:索引执行 Rollover 后满 31 天自动删除。

    2. Snapshot设置

    关于Snapshot设置

    在 Elastic Cloud 中,默认设置为每 30 分钟创建一次Snapshot。下面将介绍如何确认并修改该设置:

    (1) 在 Kibana 页面左侧菜单中,点击 “Stack Management

    点击 “Stack Management”

    (2) 点击 “Snapshot and Restore”

    点击 “Snapshot and Restore”

    (3) 点击 “Policies” 标签页,点击 “cloud-snapshot-policy” 右侧的 “Edit” 按钮。

    点击 “Edit”

    (4) 修改 “Schedule” 的设置值

    时间设置支持使用 Cron 表达式,请注意时区为 UTC(世界协调时间)

    详情可参考以下文档:API conventions | Elasticsearch Guide [8.14] | Elastic

    修改 “Schedule” 的设置值

    (5) 根据需求修改 “Expiration”“Snapshots to retain” 的设置值。

    (6) 点击 “Save policy”

    点击 “Save policy”

    (7) 点击 “cloud-snapshot-policy”,查看 “Summary”。修改后,snapshot将按设置在每天 0 点创建。

    查看 “Summary”

    3. Alert设置

    关于 Elastic Cloud 的Alert功能

    在 Elastic Cloud 中,可通过 “Alert” 功能实现监控与通知。默认情况下,系统提供了多个可配置的监控项,便于快速完成Alert设置。下面将介绍如何创建默认规则并使用Alert功能:

    (1) 从左侧菜单点击 “Stack Monitoring”,在监控页面右上角选择 “alerts and rules”,点击 “Create default rules”。

    点击 “Create default rules”

    (2) 点击 “Create”。至此,Alert设置完成。最后我们来确认已创建的规则列表:

    点击 “Create”

    (3) 点击 “Stack Management”,选择 “Alerts”,然后点击页面右上角的 “Manage rules”。

    点击 “Manage rules”

    此时会显示已创建的规则列表。通过编辑规则,可修改告警条件或配置通知方式。

    显示已创建的规则列表

    例如,“CPU Usage” 规则的默认配置为:当 CPU 使用率 5 分钟平均值超过 85% 时,触发告警并发送通知。

    CPU Usage

    此外,通知的默认接收方式为 “输出到 Kibana 日志”,但系统也支持配置邮件、Slack 等多种连接器(Connector)作为通知渠道。

    连接器列表

    总结

    在实际运维过程中,除了上述 内容外,可能还需要以下操作:

    • 版本升级应对
    • 审计日志

    因此,在下次的文章中,我会对上述内容进行讲解。

  • 在 AWS 上使用 Elastic Cloud

    在 AWS 上使用 Elastic Cloud

    各位是否使用过 Elastic Cloud 呢?Elastic Cloud 是 Elastic 公司提供的 SaaS 服务,支持 AWS、Azure、GCP 这三大云服务提供商。由于只需点击几次鼠标,就能完成最新版本集群的搭建以及现有集群的版本升级,因此非常易于部署使用。

    但在实际使用时,需要考虑的事项其实有很多,比如访问限制、与 Cognito 的联动等。我认为这其中有不少容易让人 “踩坑” 的地方,所以整理了相关操作步骤和注意事项。

    本文将介绍如何通过 AWS Marketplace 搭建集群,以及后续的安全设置 / 认证设置步骤。

    1. 前言

    本文中,将统一把 Elastic Cloud(Elasticsearch Service)简称为 “Elastic Cloud”。

    在 AWS 上搭建 Elastic Cloud 的步骤

    通过 AWS Marketplace,可按照以下 4 个步骤在 AWS 上搭建 Elastic Cloud:

    1. 通过 Marketplace 搭建集群
    2. 安全强化(IP 过滤设置)
    3. 安全强化(Private Link 设置)
    4. 为 Kibana 添加 Cognito 认证

    架构示意图如下:

    架构示意图

    接下来,将分别说明每个步骤的搭建 / 设置方法。

    2. 通过 Marketplace 搭建集群

    Elastic Cloud 账号创建

    首先需要注意的是,无法将已有的 Elastic Cloud 账号与 AWS Marketplace 上的 Elastic Cloud 进行关联使用,请务必留意。因此,本次将通过 “Sign up with email(使用邮箱注册)”,使用新的邮箱地址创建账号。

    Elastic Cloud 账号注册页面

    登录成功后的页面如下:

    通过 Marketplace 的部署步骤

    第一步,我们将通过 AWS Marketplace 搭建 Elastic Cloud。

    (1) 访问 AWS Marketplace 上的 Elastic Cloud 页面,点击 “View purchase options(查看购买选项)”

    aws.amazon.com

    (2) 在购买页面点击 “Subscribe(订阅)”

    点击后,页面顶部会显示如下提示信息,请点击 “Set up your account(设置您的账号)”。

    (3) 按照页面显示的步骤完成各项设置在步骤 2 中,需关联此前创建的 Elastic Cloud 账号。

    关联成功后,将显示如下页面。

    在步骤 3 中,可通过 CloudFormation 部署 Elastic Cloud。

    此时需要注意,需提前创建好 CloudFormation 在搭建过程中要使用的角色。
    所需的权限策略可通过页面上的 “View required IAM permission” 进行确认。

    只需设置 CloudFormation 的堆栈名称、要创建的Deployment名称、搭建所在的Region以及 CloudFormation 在搭建时使用的角色名称,即可在 AWS 上搭建Deployment。

    当页面显示 “CREATE_COMPLETE” 时,即表示搭建成功。

    在步骤 4 中,点击 “Launch software”,即可在 Elastic Cloud 控制台中查看已创建的Deployment。

    (4) 确认登录已部署的 Kibana

    已成功创建的 Deployment,其 Kibana可正常登录。

    URL的格式为「https://<Deployment 名>.kb.us-east-2.aws.elastic-cloud.com/app/home」,其中会包含创建 Deployment 时所设定的名称。

    2. 安全强化(IP 过滤设置)

    接下来,为已搭建的 Deployment 配置 IP 过滤规则。

    IP 过滤的作用与优势

    通过配置 IP 过滤,可对 Deployment(包含 Elasticsearch、Kibana)的访问进行限制。有关详细信息,请参博客:www.elastic.co

    下面实际操作配置步骤。

    IP 过滤配置方法

    (1) 在已创建的 Deployment 管理页面中,点击 “Features”

    (2) 点击 “Add traffic filters”,再点击 “Create filter”

    (3) 输入 IP 地址等条件后,点击 “Create filter”创建成功后,页面将显示已创建的 IP 过滤规则定义,如下所示。

    (4) 在 Deployment 的安全设置页面中,点击 “Apply filter”,将创建的规则应用到该 Deployment

    将已创建的 IP 过滤规则定义应用到 Deployment。

    至此,已成功为在 Elastic Cloud 上搭建的 Deployment 应用 IP 过滤规则。

    3. 安全强化(Private Link 设置)

    接下来配置 Private Link。通过配置 Private Link 实现 VPC(虚拟私有云)之间的连接,可使通信无需经过互联网,从而提升安全性。

    Private Link 配置方法

    (1) 创建 AWS 的 Endpoint(终端节点)有关创建方法,请参考以下链接:docs.aws.amazon.com

    (2) 点击 “Add traffic filters”,再点击 “Create filter”

    与配置 IP 过滤时相同,将打开过滤规则创建页面。

    (3) 在 “Filter type” 中选择 “Private link endpoint”,在 “Endpoint ID” 中输入步骤 (1) 创建的 Endpoint ID,然后点击 “Create filter”

    选择过滤类型并输入终端节点 ID

    (4) 与配置 IP 过滤时的操作相同,将创建的规则应用到 Deployment

    此时,IP 过滤和 Private Link 这两项安全设置已成功应用。

    应用过滤规则后的页面

    4. 为 Kibana 添加 Cognito 认证

    Elasticsearch 支持通过 OIDC(OpenID Connect,开放身份连接)实现认证。通过 OIDC 联动实现认证的优势在于,可将用户管理集中到一个服务中,从而简化管理与运维工作。

    因此,最后为 Kibana 添加 Cognito 认证。

    基于 Cognito 的 Kibana 认证配置方法

    配置 OIDC 认证需执行以下步骤,详细内容请参考官方文档:www.elastic.co

    1. SSL/TLS 配置
    2. Token Service启用
    3. OIDC 认证配置
    4. role mapping(Kibana 操作权限配置)

    在上述步骤中,步骤 1 和步骤 2 在 Elastic Cloud 中默认已配置完成,因此本次操作将从步骤 3 “OIDC 认证配置” 开始。

    (1) 创建 AWS Cognito 的用户池,并注册用户

    本次将同时使用 Cognito 作为 OP(OpenID Provider)和 RP(Relying Party)。

    本文将省略 Cognito 自身的配置与搭建方法。需特别注意的一点是:由于 OIDC 认证配置需要,需在 RP 侧创建客户端密钥(Client Secret)。

    (2) 在已创建的 Deployment 管理页面中,点击 “Security”

    (3) 在 Elasticsearch keystore区域,点击 “Add settings”

    (4) 在 “Setting name” 中输入xpack.security.authc.realms.oidc.oidc1.rp.client_secret,在 “Secret” 中输入步骤 (1) 创建的客户端密钥

    (5) 点击 “Save”,将客户端密钥注册到 Elasticsearch keystore 中

    (6) 在已创建的 Deployment 管理页面中,点击 “Edit”

    (7) 点击 Elasticsearch 右侧的链接 “Manage user settings and extensions”

    (8) 为 Elasticsearch 应用 OIDC 配置

    配置内容如下:

    xpack:​
      security:​
        authc:​
          realms:​
            oidc:​
              oidc1:​
                order: 2​  
                rp.client_id: "<RP客户端ID>"​  
                rp.response_type: code​ 
                rp.redirect_uri: https://<Kibana URL>/api/security/oidc/callback  
                op.issuer: https://cognito-idp.<区域名>.amazonaws.com/<OP用户池ID>​  
                op.authorization_endpoint: https://<OP域名>/oauth2/authorize​ 
                op.token_endpoint: https://<OP域名>/oauth2/token​ 
                op.userinfo_endpoint: https://<OP域名>/oauth2/userInfo​  
                op.jwkset_path: "https://cognito-idp.<区域名>.amazonaws.com/<OP用户池ID>/.well-known/jwks.json"​  
                claims.principal: sub
    

    (9) 点击页面底部的 “Save”,将配置应用到 Elasticsearch

    (10) 点击 Kibana 页面左侧菜单的 “Stack management”,随后点击 “Role mappings”

    通过定义 Role mappings,可为经 Cognito(OIDC)认证的用户配置 Kibana 操作权限。

    (11) 点击 “Create role mapping”,将权限与 OIDC 账号关联

    在 Role Mapping 页面点击 “Create role mapping”

    按以下方式,为通过 OIDC 登录的用户配置权限

    为通过 OIDC 登录的用户配置权限

    登录 Kibana

    配置完成后,可使用已注册用户的邮箱地址和密码登录 Kibana。

    登录后的页面

    总结

    Elastic Cloud 不仅搭建简便,后续的安全设置与认证设置也十分容易。在使用 Elasticsearch 时,不妨考虑选择 Elastic Cloud。

  • 轻松开启 Elastic Cloud 可观测性(2024 年版)

    轻松开启 Elastic Cloud 可观测性(2024 年版)

    Elastic Cloud 是 Elastic 公司提供的 SaaS 服务,支持 AWS、Azure、GCP 等云服务提供商。只需点击几下,即可完成最新版本集群的搭建以及现有集群的版本升级,因此非常易于上手使用。

    本文将以步骤为基础,介绍如何利用 Elastic Cloud 轻松开启 AWS 资源指标监控、日志监控和存活监控。

    前言

    在本文中,Elastic Cloud(Elasticsearch Service)将统一称为 “Elastic Cloud”。此外,关于 Elastic Cloud 与待监控的各 AWS 服务的搭建步骤及权限设置,本文将予以省略。

    架构示意图

    本次将利用 Elastic Agent 实现对 AWS 资源指标、日志及存活状态的监控。

    1. Elastic AWS Integration 的安装

    (1)安装相关仪表盘等组件

    点击 “Install AWS” 按钮,安装相关资源。

    安装完成后,会显示相关仪表盘、API 参考文档等内容。

    (2)在 EC2 上安装 Elastic Agent

    点击 “Add Amazon EC2”,跳转页面后,点击页面底部的 “Install Elastic Agent”,开始安装 Agent。

    按照 “①在主机上安装 Elastic Agent” 的步骤,在 EC2 上执行命令,完成 Elastic Agent 的安装。按照步骤执行后,Agent 会如以下所示完成注册。

    (3)AWS Integration 的设置

    直接点击页面底部的 “Add the integration”,跳转至 AWS Integration 的设置页面。本次将进行以下设置:

    • 开启 “Collect EC2 logs from CloudWatch”(从 CloudWatch 收集 EC2 日志)
    • 设置 CloudWatch Logs 中已注册的待监控日志的 ARN
    • 将 “Collect EC2 metrics”(收集 EC2 指标)的 “Collection Period”(收集周期)设置为 “1m”
    • 从 “Advanced Setting”(高级设置)中输入访问密钥(Access Key)和秘密密钥(Secret Key)

    点击 “Save and Continue”(保存并继续)后,再点击 “Save and deploy changes”(保存并部署更改),将 AWS Integration 的设置同步到 Elastic Agent 中。

    (4)确认通过 AWS Integration 注册的数据

    完成上述操作后,即可通过 Elastic Agent 查看 EC2 的指标以及存储在 CloudWatch Logs 中的 EC2 日志。

    2. 资源指标监控

    首先,我们来确认已注册的 EC2 资源指标。

    (1)访问 Kibana 仪表盘页面

    从 Kibana 页面左侧菜单中选择「Dashboards」(仪表盘),点击「[Elastic Agent] Input Metrics」,即可显示以下仪表盘。

    通过该仪表盘可以跳转到各服务对应的仪表盘。本次仅针对 EC2 和 CloudWatch 收集资源指标,但 Elastic Cloud(Elastic Stack)的优势在于,还能聚合其他云环境、本地环境的资源信息,进行统一监控与分析。

    (2)确认 EC2 的资源指标

    同样,使用「[Metrics AWS] EC2 Overview」([AWS 指标] EC2 总览)仪表盘,能够更详细地查看各 EC2 实例的 CPU 使用率等指标。

    3. 日志监控

    日志监控将使用 Logs Explorer(日志探索器)。

    (1)通过 Logs Explorer 进行日志监控

    在 Logs Explorer 中,会显示日志的时间戳及其摘要(Summary),如下所示。当发生问题时,可以通过筛选日志消息、状态等信息进行分析,从而确认问题状况。截图中仅显示了特定主机的错误(Error)日志。

    Elasticsearch 的一大特点是,即便对大量日志进行筛选,也能快速返回结果,这在业务操作中非常便捷。如此一来,通过 Logs Explorer 就能轻松实现日志的确认与分析。

    但在实际运维中,无法做到时刻监控仪表盘和 Logs Explorer。因此,通过设置 Alerts(告警),可以在满足特定条件时实现检测与通知。有关告警的详细信息及设置方法,请参考以下文档:《Create and manage rules | Elastic Observability [8.16] | Elastic》

    4. 存活监控

    最后,我们来实施存活监控。存活监控将使用 Synthetic monitoring(合成监控)功能。有关合成监控的详细信息,请参考以下文档:Synthetic monitoring | Elastic Observability [8.16] | Elastic

    (1)访问 Synthetic monitoring 页面

    从 Kibana 页面左侧菜单中选择「Applications」(应用)⇒「SYNTHETICS」(合成监控)⇒「Monitors」(监控器),跳转到 Synthetic monitoring 页面。

    (2)设置监控对象

    点击页面顶部的「select a different monitor type」(选择其他监控器类型),按照以下内容进行设置,然后点击「Create Monitor」(创建监控器)。

    项目名(Item Name)说明(Description)本次设置值(Current Setting)
    Select a monitor typeHTTP Ping、TCP Ping 等HTTP Ping
    URL<监控对象 URL>Logstash 服务器 URL
    Monitor name任意名称LogstashServer
    Locations监控对象运行的地域US East(美国东部)

    (3)确认监控结果

    监控对象的存活状态会如下所示进行显示。

    通过 Synthetic monitoring,仅需在 Kibana 页面进行设置,即可实现对目标主机的存活监控,轻松达成存活监控需求。(此前需要在监控对象服务器上安装名为 Heartbeat 的 Beats 组件)

    (4)设置检测与通知

    在 Synthetic monitoring 中,可从 Kibana 页面轻松开启或关闭告警。点击页面中的「LogstashServer」,会显示如截图所示的详情页面。

    点击详情页面右上角「Enable (all location)」(启用 [所有地域])的开关,即可启用或禁用告警。还能便捷地通过邮件、Slack 等方式发送通知。

    总结

    借助 Elastic Cloud,我们能够轻松实现对 AWS 上服务的可观测性。正如前文所提及的,Elastic Cloud(Elastic Stack)的优势在于,能够聚合其他云环境、本地环境的信息,统一实现资源指标监控、日志监控与存活监控。