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

时间:2017-01-20 01:30:07

标签: amazon-web-services amazon-ec2 solr cloud monitoring

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

我有一个包含一系列webapps的应用程序。每个Web应用程序都使用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

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

欢迎任何帮助,

由于

1 个答案:

答案 0 :(得分:1)

最终,我认为理想的方法可能是使用VPC连接的Lambda函数,该函数使用nodejs或python脚本检查站点,并使用boto3或nodejs SDK将响应记录到cloudwatch。您可以配置Cloudwatch预定事件(实际上是cronjob)以每分钟左右触发该功能。当然,Lambda函数的优点在于它们与您管理的任何服务器无关,但您必须编写一个稍微复杂一点的脚本。

或者,您可以在cronjob中运行从应用程序服务器运行的bash脚本,并使用aws cli将数据报告给Cloudwatch。对于Cloudwatch报告,您在向Cloudwatch报告的数据以及方式方面具有很大的灵活性。如果您决定使用在服务器上运行的cronjob,这是一个简单的示例:

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

对于站点上升或下降,这应该以0或1登录Cloudwatch。我最终会推荐一些东西来监控响应时间,而不仅仅是二进制结果 - 这样,你实际上可以获得在视觉上和评估网站性能方面更有意义的连续数据。此命令将返回响应时间:

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

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

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

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