簡體   English   中英

AWS:沒有一個實例在發送數據

[英]AWS: None of the Instances are sending data

我正在嘗試使用 Amazon Web 服務設置 Elastic Beanstalk 應用程序,但是我收到大量錯誤消息None of the instances are sending data 我嘗試使用示例應用程序多次刪除 Elastic Beanstalk 應用程序和 EC2 實例,然后重試,但我遇到了同樣的錯誤。

我還嘗試使用 AWS Elastic Beanstalk 命令行工具上傳 flask 應用程序,但隨后收到以下錯誤:

Environment health has transitioned from Pending to Severe. 100.0 % of the requests to the ELB are failing with HTTP 5xx. Insufficient request rate (0.5 requests/min) to determine application health (7 minutes ago). ELB health is failing or not available for all instances. None of the instances are sending data

為什么會出現此錯誤以及如何修復它? 謝謝。

您正在使用增強型健康監測 通過增強的健康監控,安裝在 EC2 實例上的代理會監控重要的系統和應用程序級別的健康指標,並將它們直接發送到 Elastic Beanstalk。

當您看到“沒有任何實例正在發送數據”之類的錯誤消息時,這意味着實例上的代理已崩潰,或者由於網絡錯誤或其他一些錯誤而無法將數據發布到 Elastic Beanstalk。

為了調試這個,我建議從 AWS 控制台下載“完整日志”。 您可以按照此處的“從 Elastic Beanstalk 控制台下載捆綁日志”部分中的說明獲取日志。 如果由於任何原因無法使用控制台下載日志,您還可以通過 ssh 連接到實例並查看/var/log

您將在/var/log/healthd/daemon.log找到健康代理的日志。 對這種情況有用的其他日志是/var/log/cfn-init.log/var/log/eb-cfn-init.log/var/log/eb-activity.log 您能否查看日志並提供您看到的錯誤的更多詳細信息? 這應該有望為您提供有關“沒有任何實例正在發送數據”錯誤的更多詳細信息。

關於您看到的其他健康“原因”:

  • 環境運行狀況已從 Pending 轉變為 Severe - 這是因為最初您的環境運行狀況狀態為Pending 如果實例在寬限期內未運行正常,則健康狀態將轉換為Severe 在您的情況下,由於沒有一個實例是健康的/正在發送數據,因此健康狀況轉變為嚴重。

  • 對 ELB 的 100.0% 請求失敗,HTTP 5xx。 請求率(0.5 個請求/分鍾)不足以確定應用程序運行狀況(7 分鍾前)。 使用增強的運行狀況監控時,Elastic Beanstalk 會監控除您的 EC2 實例之外的其他資源。 例如,它監控 ELB 的 cloudwatch 指標。 此錯誤意味着發送到您的環境 CNAME/負載平衡器的所有請求都因 HTTP 5xx 錯誤而失敗。 同時請求率非常低,每分鍾只有 0.5 個請求,所以這表明即使所有請求都失敗了,請求率也很低。 “7 分鍾前”意味着有關 ELB 指標的信息有點舊。 由於 Elastic Beanstalk 每隔幾分鍾監控一次 cloudwatch 指標,因此數據可能會稍微過時。 這與我們直接從 EC2 實例獲得的“近乎實時”的健康數據相反。 在您的情況下,由於實例未發送數據,因此唯一可用的健康來源是延遲了大約 7 分鍾的 ELB 指標。

  • ELB 運行狀況失敗或不適用於所有實例Elastic Beanstalk 正在查看您的 ELB 的運行狀況,即它正在檢查有多少實例在 ELB 后面服務。 在您的情況下,ELB 后面的所有實例都已停止服務,或者由於其他原因導致運行狀況不可用。 您應該仔細檢查您的服務角色是否配置正確。 您可以在此處文檔中閱讀如何正確配置服務角色。 您的應用程序可能無法啟動。

在您的情況下,我建議關注第一個錯誤“沒有任何實例正在發送數據”。 為此,您需要查看上述日志。 讓我知道你在日志中看到了什么。 代理在實例的引導過程中相當早地啟動。 因此,如果您看到“沒有任何實例正在發送數據”之類的錯誤,則很可能是引導程序失敗或代理因某種原因無法啟動。 日志應該告訴你更多。

還要確保在您的環境中使用實例配置文件。 實例配置文件允許在您的 EC2 實例上運行的運行狀況代理使用 Elastic Beanstalk 進行身份驗證。 如果實例配置文件未與您的環境關聯,則代理將無法將數據發送到 Elastic Beanstalk。 在此處閱讀有關使用 Elastic Beanstalk 的實例配置文件的更多信息。

更新健康原因“所有實例均未發送數據”的一個常見原因可能是您的實例位於 VPC 中,而您的 VPC 不允許 NTP 訪問。 此問題的典型指標是/var/log/messages: ntpdate: Synchronizing with time server: [FAILED]的以下消息/var/log/messages: ntpdate: Synchronizing with time server: [FAILED] 發生這種情況時,您的 EC2 實例上的時鍾可能會不同步,數據將被視為無效。 您還應該在 AWS Web 控制台的運行狀況頁面上的實例上看到運行狀況原因,告訴您實例時鍾不同步。 解決方法是確保您的 VPC 允許訪問 NTP。


健康代理無法發送任何數據的原因可能有很多,所以這可能不是您問題的答案,但它是我的,希望可以幫助其他人:

我遇到了同樣的錯誤並查看/var/log/healthd/daemon.log重復報告以下內容:

sending message(s) failed: (Aws::Healthd::Errors::GroupNotFoundException) Group 97c30ca2-5eb5-40af-8f9a-eb3074622172 does not exist

這是由於我在 Elastic Beanstalk 環境中制作和使用來自 EC2 實例的 AMI 映像造成的。 也就是說,我創建了一個臨時環境,其中一個實例的配置與我的生產環境相同,進入 EC2 控制台並創建了實例的映像,終止了臨時環境,然后使用新的自定義 AMI 創建了另一個環境。

當然(事后看來)這意味着臨時環境的一些設置仍在使用中。 在這種情況下,特別是/etc/healthd/config.yaml ,導致健康代理嘗試將消息發送到不再存在的健康組。

為了解決這個問題並確保周圍沒有其他陳舊的配置,我改為從生產環境中使用的默認 AMI 手動啟動一個新的 EC2 實例(在您環境的“實例”配置頁面下找到它),進行配置,然后從中創建一個新圖像並在我的新 EB 環境中使用該圖像。

檢查您的實例類型的 RAM 是否足以用於 app + os + amazon 工具。 我們受苦了很長時間,當我們發現 t2.micro 幾乎不足以滿足我們的用例時。 使用 t2.small (2GB) 后問題就消失了。

我通過添加另一個安全組(我的 Elastic Beanstalk 的默認安全組)解決了這個問題。

看來我的問題是我沒有將公共 IP 地址與我的實例相關聯......在我設置它之后它工作得很好。

我只是將負載平衡的路徑設置為響應狀態代碼 200 的 URL,僅用於研究環境。

對於我的真實應用程序,我使用執行器

如果您看到類似這樣的內容而您沒有獲得任何增強的指標,請檢查您是否不小心從 nginx 配置中刪除了conf.d/elasticbeanstalk/healthd.conf包含。 此 conf 添加了一種機器讀取日志格式,負責在 EB 中報告該數據(請參閱增強型健康日志格式 - AWS )。

沒有指標

我的實例配置文件的 IAM 角色缺少elasticbeanstalk:PutInstanceStatistics權限。

我通過查看/var/log/healthd/daemon.log發現了這一點,正如其他答案之一中所建議的那樣。

我不得不將 SSH 直接插入機器才能發現這一點,因為 Get Logs function 本身由於缺少 S3 寫入權限而失敗。

如果您正在運行Worker Tier EB,則需要添加此策略

arn:aws:iam::aws:policy/AWSElasticBeanstalkWorkerTier

我在 docker 作為平台的彈性 beanstalk 環境中運行一個應用程序。 我得到了沒有實例發送的相同錯誤。 而且我也無法獲取日志。 重建環境對我有用。

對於 2022 年抵達這里的任何人……

在啟動與當前健康環境相同的新環境並且沒有看到任何數據后,我提出了 AWS Support 票證。 我被告知:

在此,我想通知您,最近 Elastic Beanstalk 引入了名為EnhancedHealthAuthEnabled的新功能,以提高您環境的安全性並幫助防止代表您的健康數據欺騙,並且當您創建新環境時默認情況下會啟用此選項。

如果您對實例配置文件使用托管策略,則此功能無需任何進一步配置即可用於您的新環境,因為 Elastic Beanstalk 實例配置文件托管策略包含elasticbeanstalk:PutInstanceStatistics操作的權限。 但是,如果您使用自定義實例配置文件而不是托管策略,您的環境可能會顯示無數據運行狀況。 發生這種情況是因為自定義實例配置文件在默認情況下沒有PutInstanceStatistics權限,並且實例未被授權執行將增強的健康數據傳遞給服務的操作。 因此,您的環境健康狀況顯示未知/無數據狀態。

我需要附加到現有 EC2 角色的策略(根據 AWS Support 的建議)如下所示:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ElasticBeanstalkHealthAccess",
      "Action": [
        "elasticbeanstalk:PutInstanceStatistics"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:elasticbeanstalk:*:*:application/*",
        "arn:aws:elasticbeanstalk:*:*:environment/*"
      ]
    }
  ]
}

將此策略添加到我的 EC2 角色為我解決了這個問題。

在我的情況下,當我增加我的 ram 或實例類型(t2.micro 到 c5.xlarge)時,它已經解決了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM