定期检查 Solr 是否在 AWS 实例上 运行(AWS 监控)

Periodically check Solr is running on AWS instances (AWS monitoring)

我正在尝试弄清楚如何监控 Solr 是否 运行正在一组 EC2 实例上运行。它的工作方式如下:

我有一个包含一系列网络应用程序的应用程序。这些 webapps 中的每一个都使用 Solr 作为它们的数据库,并且 Solr 在云模式下被分配给其他 3 个服务器:

Application EC2
 |
 |- Solr EC2 1
 |- Solr EC2 2
 |- Solr EC2 3

理想的是,在应用服务器上,定期检查3个Solr实例的Solr状态,例如运行:

10.X.X.1:8983/solr/admin/cores?action=STATUS
10.X.X.2:8983/solr/admin/cores?action=STATUS
10.X.X.3:8983/solr/admin/cores?action=STATUS

如果其中任何一个 return 处于非零状态,则发送警报。我研究过 AWS CloudWatch,但我对过程指标不感兴趣,我只是想检测它是否在 运行ning 中。我发现的所有自定义检查内容都是为了统计,而不是直接 运行ning 与否,所以我无法检查 Solr 实例中的流量之类的东西,因为有时 Solr 实例没有被使用如果没有人使用演示版,就用几天。

欢迎任何帮助,

谢谢

最终,我认为理想的方法可能是使用 VPC-connected Lambda 函数,该函数使用 nodejs 或 python 脚本检查站点并使用 boto3 或 nodejs 将响应记录到 cloudwatch开发工具包。您可以配置一个 Cloudwatch 计划事件(实际上是一个 cronjob)以每分钟左右触发一次该功能。当然,Lambda 函数的好处在于它们不依赖于您管理的任何服务器,但您必须编写稍微复杂一些的脚本。

或者,您可以在 cronjob 中从您的应用程序服务器 运行 一个 bash 脚本 运行 并使用 aws cli 将数据报告给 Cloudwatch。至于 Cloudwatch 报告,您可以非常灵活地向 Cloudwatch 报告哪些数据以及如何报告。这是一个简单的例子,如果你决定在服务器上使用 cronjob 运行ning:

url=<ip address of server>
curl -s -o /dev/null $url
result=$?
iso_date=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
region=us-east-1

# zero exit code becomes 1, failure becomes 0 for 
# reporting to cloudwatch
[[ $result -gt 0 ]] && response=0 || response=1

aws cloudwatch put-metric-data \
  --metric-name SiteUpOrDown \
  --namespace Solr \
  --timestamp ${iso_date} \
  --value ${response} \
  --dimensions "Server=${url}" \
  --unit None \
  --region $region

这应该将 0s 或 1s 记录到 Cloudwatch,以表示网站正在运行或关闭。我最终会推荐一些东西来监视响应时间,而不仅仅是二进制结果——这样,您实际上将拥有连续的数据,这些数据在视觉上和衡量站点性能方面更有意义。此命令将 return 响应时间:

curl -s -w %{time_total}\n -o /dev/null ${url}

如果使用它,您仍然需要测试并适当地响应 non-zero 退出代码,因为即使 curl 失败,这也会 return 一个值,这可能是 非常误导,但这将是获得连续数据的良好开端。

如果您想配置警报,您可以在报告 0 时触发 Cloudwatch 警报,并将这些警报发送到 SNS 主题,最终发送到电子邮件地址或其他端点。

您还需要确保您的权限配置正确。您的 ec2 实例配置文件或服务帐户将需要写入 Cloudwatch 的权限。如果您使用 Lambda 函数,它还需要这些权限,以及附加到您的 VPC 子网的必要权限和配置(为此有一个托管策略)。