首页 文章

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

提问于
浏览
1

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

我有一个应用程序,其中包含一系列的webapps . 这些Web应用程序中的每一个都使用Solr作为其数据库,Solr在 Cloud 模式下分为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 回答

  • 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
    

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

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

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

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

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

相关问题