使用 apigee-monit 进行自我修复

适用于私有云的 Apigee Edge 包含 apigee-monit,这是一个基于开源监控实用程序的工具。apigee-monit 会定期轮询 Edge 服务;如果服务不可用,apigee-monit 会尝试重启它。

如需使用 apigee-monit,您必须手动安装。它不是标准安装的一部分。

默认情况下,apigee-monit 每 60 秒检查一次 Edge 服务的状态。

快速入门

本部分介绍了如何快速上手使用 apigee-monit

如果您使用的是 Amazon Linux,请先安装 Fedora。否则,请跳过此步骤。

sudo yum install -y https://kojipkgs.fedoraproject.org/packages/monit/5.25.1/1.el6/x86_64/monit-5.25.1-1.el6.x86_64.rpm

如需安装 apigee-monit,请按以下步骤操作:

  安装 apigee-monit
/opt/apigee/apigee-service/bin/apigee-service apigee-monit install
/opt/apigee/apigee-service/bin/apigee-service apigee-monit configure
/opt/apigee/apigee-service/bin/apigee-service apigee-monit start

默认情况下,这会安装 apigee-monit 并开始监控节点上的所有组件。

  停止监控组件
/opt/apigee/apigee-service/bin/apigee-service apigee-monit unmonitor -c component_name
/opt/apigee/apigee-service/bin/apigee-service apigee-monit unmonitor -c all
  开始监控组件
/opt/apigee/apigee-service/bin/apigee-service apigee-monit monitor -c component_name
/opt/apigee/apigee-service/bin/apigee-service apigee-monit monitor -c all
  获取摘要状态信息
/opt/apigee/apigee-service/bin/apigee-service apigee-monit report
/opt/apigee/apigee-service/bin/apigee-service apigee-monit summary
  查看 apigee-monit 日志文件
cat /opt/apigee/var/log/apigee-monit/apigee-monit.log

以下各部分详细介绍了上述各个主题以及其他主题。

apigee-monit 简介

apigee-monit 有助于确保节点上的所有组件都保持正常运行。为此,它提供各种服务,包括:

  • 重启失败的服务
  • 显示摘要信息
  • Logging 监控状态
  • 发送通知
  • 监控非 Edge 服务

Apigee 建议您监控 apigee-monit 以确保其正在运行。如需了解详情,请参阅监控 apigee-monit

Apigee-monit 架构

在安装和配置适用于私有云的 Apigee Edge 期间,您可以选择在集群中的每个节点上安装单独的 apigee-monit 实例。这些单独的 apigee-monit 实例彼此独立运行:它们不会将其组件状态传达给其他节点,也不会将监控实用程序本身的故障传达给任何中央服务。

下图显示了 5 节点集群中的 apigee-monit 架构:

图 1:单独的 apigee-monit 实例在集群中的每个节点上独立运行

支持的平台

apigee-monit 支持您的私有云集群使用以下平台。(apigee-monit 支持的操作系统取决于 Private Cloud 的版本。)

操作系统 私有云版本
v4.50.00 v4.51.00 v4.52.00
CentOS 7.5、7.6、7.7、7.8 7.5、7.6、7.7、7.8 7.5、7.6、7.7、7.8
RedHat Enterprise Linux (RHEL) 7.5、7.6、7.7、7.8 7.5、7.6、7.7、7.8、7.9、8.0 7.5、7.6、7.7、7.8、7.9、8.0
Oracle Linux 7.5、7.6、7.7、7.8 7.5、7.6、7.7、7.8 7.5、7.6、7.7、7.8
* 虽然在技术上不受支持,但您可以在 CentOS/RHEL/Oracle 6.9 版上为适用于私有云 4.19.01 的 Apigee Edge 安装和使用 apigee-monit

组件配置

apigee-monit 使用组件配置来确定要监控的组件、要检查组件的哪些方面,以及在发生故障时采取的操作。

默认情况下,apigee-monit 会使用预定义的组件配置监控节点上的所有 Edge 组件。如需查看默认设置,您可以查看 apigee-monit 组件配置文件。您无法更改默认组件配置。

apigee-monit 会根据所检查的组件检查组件的不同方面。下表列出了 apigee-monit 会检查每个组件的内容,并展示了每个组件的组件配置位置。请注意,一些组件是在单个配置文件中定义的,其他组件则有自己的配置。

组件 配置位置 监控的内容
管理服务器 /opt/apigee/edge-management-server/monit/default.conf apigee-monit 检查:
  • 指定的端口处于打开状态且正在接受请求
  • 支持指定的协议
  • 响应的状态

此外,对于以下组件 apigee-monit

  • 需要在给定的周期数内发生多次失败才能采取措施
  • 设置自定义请求路径
消息处理器 /opt/apigee/edge-message-processor/monit/default.conf
Postgres 服务器 /opt/apigee/edge-postgres-server/monit/default.conf
Qpid 服务器 /opt/apigee/edge-qpid-server/monit/default.conf
路由器 /opt/apigee/edge-router/monit/default.conf
Cassandra
Edge 界面
OpenLDAP
Postgres
Qpid
ZooKeeper
/opt/apigee/data/apigee-monit/monit.conf apigee-monit 检查:
  • 服务正在运行

以下示例展示了 edge-router 组件的默认组件配置:

check host edge-router with address localhost
  restart program = "/opt/apigee/apigee-service/bin/apigee-service edge-router monitrestart"
  if failed host 10.1.1.0 port 8081 and protocol http
    and request "/v1/servers/self/uuid"
    with timeout 15 seconds
    for 2 times within 3 cycles
  then restart

  if failed port 15999 and protocol http
    and request "/v1/servers/self"
    and status < 600
    with timeout 15 seconds
    for 2 times within 3 cycles
  then restart

以下示例展示了经典版界面 (edge-ui) 组件的默认配置:

check process edge-ui
 with pidfile /opt/apigee/var/run/edge-ui/edge-ui.pid
 start program = "/opt/apigee/apigee-service/bin/apigee-service edge-ui start" with timeout 55 seconds
 stop program = "/opt/apigee/apigee-service/bin/apigee-service edge-ui stop"

这适用于传统版界面,不适用于组件名称为 edge-management-ui 的新 Edge 界面。

您无法更改任何适用于私有云的 Apigee Edge 组件的默认组件配置。但是,您可以为外部服务(例如目标端点或 httpd 服务)添加自己的组件配置。如需了解详情,请参阅非 Apigee 组件配置

默认情况下,apigee-monit 会监控运行它的某个节点上的所有组件。您可以为所有组件或单个组件启用或停用该功能。如需了解详情,请参阅以下主题:

安装 apigee-monit

默认情况下,系统不会安装 apigee-monit;您可以在升级或安装 4.19.01 版或更高版本的 Apigee Edge for Private Cloud 后手动安装它。

本部分介绍如何在支持的平台上安装 apigee-monit

如需了解如何uninstalling apigee-monit,请参阅卸载 apigee-monit

在受支持的平台上安装 apigee-monit

本部分介绍了如何在支持的平台上安装 apigee-monit

如需在受支持的平台上安装 apigee-monit,请执行以下操作

  1. 使用以下命令安装 apigee-monit
    /opt/apigee/apigee-service/bin/apigee-service apigee-monit install
  2. 使用以下命令配置 apigee-monit
    /opt/apigee/apigee-service/bin/apigee-service apigee-monit configure
  3. 使用以下命令启动 apigee-monit
    /opt/apigee/apigee-service/bin/apigee-service apigee-monit start
  4. 对集群中的每个节点重复此过程。

停止和开始监控组件

当服务因任何原因停止时,apigee-monit 会尝试重启该服务。

如果您想故意停止组件,可能会导致问题。例如,在需要备份或升级某个组件时,您可能希望停止该组件。如果 apigee-monit 在备份或升级期间重启服务,则维护过程可能会中断,可能会导致其失败。

以下各部分显示了用于停止监控组件的选项。

停止组件并取消监控

要停止组件并取消监控,请执行以下命令:

/opt/apigee/apigee-service/bin/apigee-service apigee-monit stop-component -c component_name
component_name 可以是以下项之一:
  • apigee-cassandra(卡桑德拉)
  • apigee-openldap(打开 LDAP)
  • apigee-postgresql(PostgreSQL 数据库)
  • apigee-qpidd(Qpidd)
  • apigee-sso(边缘单点登录)
  • apigee-zookeeper (ZooKeeper)
  • edge-management-server(管理服务器)
  • edge-management-ui(新版 Edge 界面)
  • edge-message-processor(消息处理器)
  • edge-postgres-server(Postgres 服务器)
  • edge-qpid-server (Qpid Server)
  • edge-router(边缘路由器)
  • edge-ui(传统版界面)

请注意,“全部”不是 stop-component 的有效选项。使用 stop-component 时,您一次只能停止和取消监控一个组件。

如需重启组件并恢复监控,请执行以下命令:

/opt/apigee/apigee-service/bin/apigee-service apigee-monit start-component -c component_name

请注意,“全部”不是 start-component 的有效选项。

如需了解如何停止和取消监控所有组件,请参阅停止所有组件并取消监控

取消监控组件(但不停止)

要取消监控某个组件(但不将其停止),请执行以下命令:

/opt/apigee/apigee-service/bin/apigee-service apigee-monit unmonitor -c component_name
component_name 可以是以下项之一:
  • apigee-cassandra(卡桑德拉)
  • apigee-openldap(打开 LDAP)
  • apigee-postgresql(PostgreSQL 数据库)
  • apigee-qpidd(Qpidd)
  • apigee-sso(边缘单点登录)
  • apigee-zookeeper (ZooKeeper)
  • edge-management-server(管理服务器)
  • edge-management-ui(新版 Edge 界面)
  • edge-message-processor(消息处理器)
  • edge-postgres-server(Postgres 服务器)
  • edge-qpid-server (Qpid Server)
  • edge-router(边缘路由器)
  • edge-ui(传统版界面)

要继续监控组件,请执行以下命令:

/opt/apigee/apigee-service/bin/apigee-service apigee-monit monitor -c component_name

取消监控所有组件(但不停止监控)

如需取消监控所有组件(但不停止它们),请执行以下命令:

/opt/apigee/apigee-service/bin/apigee-service apigee-monit unmonitor -c all

如需继续监控所有组件,请执行以下命令:

/opt/apigee/apigee-service/bin/apigee-service apigee-monit monitor -c all

停止所有组件并取消监控

如需停止所有组件并取消监控,请执行以下命令:

/opt/apigee/apigee-service/bin/apigee-service apigee-monit unmonitor -c all
/opt/apigee/apigee-service/bin/apigee-all stop

如需重启所有组件并恢复监控,请执行以下命令:

/opt/apigee/apigee-service/bin/apigee-all start
/opt/apigee/apigee-service/bin/apigee-service apigee-monit monitor -c all

如需停止监控所有组件,您还可以停用 apigee-monit,如停止、启动和停用 apigee-monit 中所述。

停止、启动和停用 apigee-monit

与任何服务一样,您可以使用 apigee-service 命令停止和启动 apigee-monit。此外,apigee-monit 支持 unmonitor 命令,可让您暂时停止监控组件。

停止 apigee-monit

如需停止 apigee-monit,请使用以下命令:

/opt/apigee/apigee-service/bin/apigee-service apigee-monit stop

启动 apigee-monit

如需启动 apigee-monit,请使用以下命令:

/opt/apigee/apigee-service/bin/apigee-service apigee-monit start

停用 apigee-monit

您可以使用以下命令暂停监控节点上的所有组件:

/opt/apigee/apigee-service/bin/apigee-service apigee-monit unmonitor -c all

或者,您也可以从节点中卸载 apigee-monit,以将其永久停用,如卸载 apigee-monit 中所述。

卸载 apigee-monit

如需卸载 apigee-monit,请执行以下操作

  1. 如果您设置了 cron 作业来监控 apigee-monit,请先移除 cron 作业,然后再卸载 apigee-monit
    sudo rm /etc/cron.d/apigee-monit.cron
  2. 使用以下命令停止 apigee-monit
    /opt/apigee/apigee-service/bin/apigee-service apigee-monit stop
  3. 使用以下命令卸载 apigee-monit
    /opt/apigee/apigee-service/bin/apigee-service apigee-monit uninstall
  4. 对集群中的每个节点重复此过程。

监控新安装的组件

如果您在运行 apigee-monit 的节点上安装新组件,则可以通过执行 apigee-monitrestart 命令开始监控该组件。这会生成一个新的 monit.conf 文件,该文件将在其组件配置中包含新组件。

以下示例重启 apigee-monit

/opt/apigee/apigee-service/bin/apigee-service apigee-monit restart

自定义 apigee-monit

您可以自定义各种 apigee-monit 设置,包括:

  1. 默认的 apigee-monit 控制设置
  2. 全局配置设置
  3. 非 Apigee 组件配置

默认的 apigee-monit 控制设置

您可以自定义默认的 apigee-monit 控制设置,例如状态检查的频率和 apigee-monit 文件的位置。为此,您可以使用包含配置的代码技术修改属性文件。即使您升级了适用于私有云的 Apigee Edge,属性文件也将保留。

下表介绍了您可以自定义的默认 apigee-monit 控件设置:

媒体资源 说明
conf_monit_httpd_port httpd 守护程序的端口。apigee-monithttpd 用于其信息中心应用,并启用报告/摘要。默认值为 2812。
conf_monit_httpd_allow 对向 httpd 守护程序发出的请求的限制。apigee-monit 使用 httpd 运行其信息中心应用并启用报告/摘要。此值必须指向 localhost(运行 httpd 的主机)。

如需要求请求中包含用户名和密码,请使用以下语法:

conf_monit_httpd_allow=allow username:"password"\nallow 127.0.0.1

添加用户名和密码时,请在各个限制条件之间插入“\n”。请勿在值中插入实际的换行符或回车符。

conf_monit_monit_datadir 存储活动详细信息的目录。
conf_monit_monit_delay_time apigee-monit 首次加载到内存后会在运行之前等待的时间。这只会影响 apigee-monit 第一个进程检查。
conf_monit_monit_logdir apigee-monit 日志文件的位置。
conf_monit_monit_retry_time apigee-monit 尝试检查每个进程的频率;默认值是 60 秒。
conf_monit_monit_rundir PID 和状态文件的位置,apigee-monit 需使用该文件检查进程。

若要自定义默认的 apigee-monit 控件设置,请执行以下操作

  1. 修改以下文件:
    /opt/apigee/customer/application/monit.properties

    如果该文件不存在,请创建该文件并将所有者设置为“apigee”用户:

    chown apigee:apigee /opt/apigee/customer/application/monit.properties

    请注意,如果该文件已存在,则除了上表中列出的属性之外,该文件中可能还会定义其他配置属性。您不应修改上述属性之外的属性。

  2. 设置属性值或将其替换为新值。

    例如,如需将日志文件的位置更改为 /tmp,请添加或修改以下属性:

    conf_monit_monit_logdir=/tmp/apigee-monit.log

  3. 将所做的更改保存到 monit.properties 文件。
  4. 使用以下命令重新配置 apigee-monit
    /opt/apigee/apigee-service/bin/apigee-service apigee-monit configure
  5. 使用以下命令重新加载 apigee-monit
    /opt/apigee/apigee-service/bin/apigee-service apigee-monit reload

    如果无法重启 apigee-monit,请按照访问 apigee-monit 日志文件中的说明检查日志文件是否存在错误。

  6. 对集群中的每个节点重复此过程。

全局配置设置

您可以为 apigee-monit 定义全局配置设置;例如,您可以为提醒添加电子邮件通知。如需完成此操作,请在 /opt/apigee/data/apigee-monit 目录中创建一个配置文件,然后重启 apigee-monit

如需为 apigee-monit 定义全局配置设置,请执行以下操作

  1. 在以下位置创建新的组件配置文件:
    /opt/apigee/data/apigee-monit/filename.conf

    其中,filename 可以是除“monit”以外任何有效的文件名。

  2. 将新配置文件的所有者更改为“apigee”用户,如以下示例所示:
    chown apigee:apigee /opt/apigee/data/apigee-monit/my-mail-config.conf
  3. 将您的全局配置设置添加到新文件中。以下示例会配置邮件服务器并设置提醒接收者:
    SET MAILSERVER smtp.gmail.com PORT 465
      USERNAME "example-admin@gmail.com" PASSWORD "PASSWORD"
      USING SSL, WITH TIMEOUT 15 SECONDS
    
    SET MAIL-FORMAT {
      from: edge-alerts@example.com
      subject: Monit Alert -- Service: $SERVICE $EVENT on $HOST
    }
    SET ALERT fred@example.com
    SET ALERT nancy@example.com

    如需查看全局配置选项的完整列表,请参阅 monit 文档

  4. 保存对组件配置文件所做的更改。
  5. 使用以下命令重新加载 apigee-monit
    /opt/apigee/apigee-service/bin/apigee-service apigee-monit reload

    如果 apigee-monit 未重启,请检查日志文件是否存在错误,如访问 apigee-monit 日志文件中所述。

  6. 对集群中的每个节点重复此过程。

非 Apigee 组件配置

您可以向 apigee-monit 添加自己的配置,以便其检查不属于适用于私有云的 Apigee Edge 的服务。例如,您可以使用 apigee-monit 向目标端点发送请求,以检查 API 是否正在运行。

如需添加非 Apigee 组件配置,请执行以下操作

  1. 在以下位置创建新的组件配置文件:
    /opt/apigee/data/apigee-monit/filename.conf

    其中,filename 可以是除“monit”以外任何有效的文件名。

    您可以根据需要创建任意数量的组件配置文件。例如,您可以为要在节点上监控的每个非 Apigee 组件创建单独的配置文件。

  2. 将新配置文件的所有者更改为“apigee”用户,如以下示例所示:
    chown apigee:apigee /opt/apigee/data/apigee-monit/my-config.conf
  3. 将您的自定义配置添加到新文件中。以下示例展示了如何检查本地服务器上的目标端点:
    CHECK HOST localhost_validate_test WITH ADDRESS localhost
      IF FAILED
        PORT 15999
        PROTOCOL http
        REQUEST "/validate__test"
        CONTENT = "Server Ready"
        FOR 2 times WITHIN 3 cycles
      THEN alert

    如需查看可能的配置设置的完整列表,请参阅 monit 文档

  4. 保存对配置文件所做的更改。
  5. 使用以下命令重新加载 apigee-monit
    /opt/apigee/apigee-service/bin/apigee-service apigee-monit reload

    如果 apigee-monit 未重启,请检查日志文件是否存在错误,如访问 apigee-monit 日志文件中所述。

  6. 对集群中的每个节点重复此过程。

请注意,这仅适用于非 Edge 组件。您无法为 Edge 组件自定义组件配置。

访问 apigee-monit 日志文件

apigee-monit 会在一个日志文件中记录所有活动,包括事件、重启、配置更改和提醒。

日志文件的默认位置为:

/opt/apigee/var/log/apigee-monit/apigee-monit.log

您可以通过自定义 apigee-monit 控件设置来更改默认位置。

日志文件条目的格式如下:

'edge-message-processor' trying to restart
[UTC Dec 14 16:20:42] info     : 'edge-message-processor' trying to restart
'edge-message-processor' restart: '/opt/apigee/apigee-service/bin/apigee-service edge-message-processor monitrestart'

您无法自定义 apigee-monit 日志文件条目的格式。

使用 apigee-monit 查看汇总状态

apigee-monit 包含以下命令,可为您提供有关节点上组件的汇总状态信息:

命令 用法
report
/opt/apigee/apigee-service/bin/apigee-service apigee-monit report
summary
/opt/apigee/apigee-service/bin/apigee-service apigee-monit summary

后续部分更详细地介绍了这些命令。

报告

report 命令可提供总览摘要,说明节点上有多少组件启动、关闭、当前正在初始化或当前未监控。以下示例会调用 report 命令:

/opt/apigee/apigee-service/bin/apigee-service apigee-monit report

以下示例展示了采用 AIO(一体式)配置时的 report 输出:

/opt/apigee/apigee-service/bin/apigee-service apigee-monit report
up:            11 (100.0%)
down:           0 (0.0%)
initialising:   0 (0.0%)
unmonitored:    1 (8.3%)
total:         12 services

在本例中,apigee-monit 将 12 项服务中的 11 项报告为正在运行。有一项服务当前未受到监控。

首次执行 report 命令时,您可能会收到 Connection refused 错误。在这种情况下,请等待 conf_monit_monit_delay_time 属性的持续时间,然后重试。

摘要

summary 命令会列出每个组件并提供其状态。以下示例会调用 summary 命令:

/opt/apigee/apigee-service/bin/apigee-service apigee-monit summary

以下示例展示了采用 AIO(一体式)配置时的 summary 输出:

/opt/apigee/apigee-service/bin/apigee-service apigee-monit summary
Monit 5.25.1 uptime: 4h 20m
 Service Name                     Status                      Type
 host_name                        OK                          System
 apigee-zookeeper                 OK                          Process
 apigee-cassandra                 OK                          Process
 apigee-openldap                  OK                          Process
 apigee-qpidd                     OK                          Process
 apigee-postgresql                OK                          Process
 edge-ui                          OK                          Process
 edge-qpid-server                 OK                          Remote Host
 edge-postgres-server             OK                          Remote Host
 edge-management-server           OK                          Remote Host
 edge-router                      OK                          Remote Host
 edge-message-processor           OK                          Remote Host

如果您在首次执行 summary 命令时收到 Connection refused 错误,请尝试等待 conf_monit_monit_delay_time 属性的时长,然后重试。

监控 apigee-monit

最佳做法是定期检查 apigee-monit 是否在每个节点上运行。

如需检查 apigee-monit 是否正在运行,请使用以下命令:

/opt/apigee/apigee-service/bin/apigee-service apigee-monit monitor_monit

Apigee 建议您在运行 apigee-monit 的每个节点上定期发出此命令。一种方法是使用按预定义的时间间隔执行计划任务的 cron 等实用程序。

如需使用 cron 监控 apigee-monit,请执行以下操作

  1. 通过将 apigee-monit.cron 目录复制到 /etc/cron.d 目录来添加 cron 支持,如以下示例所示:
    cp /opt/apigee/apigee-monit/cron/apigee-monit.cron /etc/cron.d/
  2. 打开 apigee-monit.cron 文件进行修改。

    apigee-monit.cron 文件定义要执行的 cron 作业以及执行该作业的频率。以下示例展示了默认值:

    # Cron entry to check if monit process is running. If not start it
    */2 * * * * root /opt/apigee/apigee-service/bin/apigee-service apigee-monit monitor_monit

    此文件使用以下语法,其中前五个字段定义 apigee-monit 执行操作的时间:

    min hour day_of_month month day_of_week task_to_execute

    例如,默认执行时间为 */2 * * * *,其指示 cron 每 2 分钟检查一次 apigee-monit 进程。

    执行 cron 作业的频率不能超过每分钟一次。

    如需详细了解如何使用 cron,请参阅服务器操作系统的文档或手册页面。

  3. 更改 cron 设置,使其符合贵组织的政策。例如,如需将执行频率更改为每 5 分钟一次,请将作业定义设置为以下内容:
    */5 * * * * root /opt/apigee/apigee-service/bin/apigee-service apigee-monit monitor_monit
  4. 保存 apigee-monit.cron 文件。
  5. 对集群中的每个节点重复此过程。

如果 cron 未开始监控 apigee-monit,请检查:

  • cron 作业定义后面有一个空行。
  • 文件中只定义了一个 cron 作业。(带注释的行不计算在内。)

如果您要停止或暂时停用 apigee-monit,也必须停用此 cron 作业,否则 cron 将重启 apigee-monit

如需停用 cron,请执行以下操作之一

  • 删除 /etc/cron.d/apigee-monit.cron 文件:
    sudo rm /etc/cron.d/apigee-monit.cron

    如果您以后想要重新启用 cron 以观看 apigee-monit,则必须重新复制。

  • 修改 /etc/cron.d/apigee-monit.cron 文件,并通过在行开头添加“#”注释掉作业定义;例如:
    # 10 * * * * root /opt/apigee/apigee-service/bin/apigee-service apigee-monit monitor_monit