我在Cloud Foundry中頗爲新穎,對一件事感到好奇。我知道Cloud Foundry使用NATS作爲其作業之間的消息傳遞總線。通過Java NATS連接器連接到CF的NATS盒我設法獲得了關於部署在CF上的應用程序,飛沫信息,健康管理器報告等等的大量有用信息。我的目標之一是要求「dea.find.droplet」服從NATS,這會導致作業隨着時間的推移返回應用程序的CPU,內存和磁盤使用量。Cloud Foundry,從NATS消息總線獲取應用事件
現在我必須從NATS消息中獲得有關所謂的「事件」的信息。使用CF CLI工具,我們可以調用「cf events APP_NAME」來獲取這些信息。一個特徵件針對「CF事件」是這樣的
2015-09-15T10:37:35.00-0400 audit.app.update [email protected] state: STARTED
2015-09-03T10:43:08.00-0400 audit.app.restage troy
2015-08-26T14:26:58.00-0400 app.crash s-platform index: 1, reason: CRASHED, exit_description: failed to start, exit_status: -1
我已經創建了運行遠程服務器上的行家罐子的應用程序,收集所有的NATS郵件,過濾他們推到彈性搜索進一步分析。
String reqMessage = "{\"include_stats\": true,"
\t \t \t \t \t \t //+ "\"states\": [\"RUNNING\"],"
\t \t \t \t \t \t + "\"version\": \"" + version + "\","
\t \t \t \t \t \t + "\"droplet\": \"" + droplet + "\"}";
public void requestAppStats(String subject, String reqMessage) throws JSONException{
\t \t \t // Requests
\t \t \t //subject: "dea.find.droplet",
\t \t \t natsConnector.request(subject, reqMessage, 1, TimeUnit.MINUTES, 1, new MessageHandler() {
\t \t \t @Override
\t \t \t public void onMessage(Message message) {
\t \t \t //LOGGER.info("Got a response: {}", message);
\t \t \t \t try {
\t \t \t \t \t
\t \t \t \t \t if (new JSONObject(message.getBody()).has("stats")){
\t \t \t \t \t \t
\t \t \t \t \t \t updateAppMetaDataList(message.getBody());
\t \t \t \t \t \t }
\t \t \t \t \t
\t \t \t \t \t } catch (JSONException e) {
\t \t \t \t \t \t e.printStackTrace();
\t \t \t \t \t }
\t \t \t }
\t \t \t });
有一種方式來獲得「事件」,從CCDB數據庫實例的信息,但這種做法是相當緩慢的,並把應用額外的負擔。所以我想知道是否有辦法從NATS消息中捕獲「事件」信息,就像我對應用程序使用信息做的一樣?
natsConnector.request(subject, reqMessage);
正如你可以爲了得到應用的地位看,資源使用情況,我們不得不要求‘dea.find.droplet’用JSON請求消息。
很高興知道從CF CLI工具調用「cf events APP_NAME」時會發生什麼。我查了一下CF CLI工具的源代碼(https://github.com/cloudfoundry/cli),它將我帶到CloudController作業(https://github.com/cloudfoundry/cloud_controller_ng)。看起來CloudController負責返回應用程序事件信息。儘管這是純粹的猜測。
也許至少我可以模仿這一步來融入我的應用程序。任何幫助,將不勝感激。
該應用程序的初始目標基本上是收集來自NATS框的所有消息並將它們推送到彈性搜索。我想我們選擇使用Java Spring Boot應用程序來實現這一目的,因爲方便(部署一個jar文件,將其作爲服務,放在crontab中,並且偶爾監視它)。但是後來我們注意到,如果我們要求某些主題,我們可以獲得一些非常有用且更重要的有關液滴/應用程序狀態的相關信息,我們可以使用Kibana的工具再次推送到彈性搜索,甚至可以對其進行visalize, – Odil
跑出字符:)...我只是想,既然我們已經處理了大量的NATS消息,那麼也很好地收集關於「應用事件」的信息,所以稍後我們可以提供關於我們的足夠的統計信息應用。 我們選擇Java的其他原因,因爲它不是Ruby;) 我們公司最近採用了CF,我們仍然在尋找CF及其功能的有用用例。 正如crhino指出的,我可以直接使用API調用,但在這種情況下,應用程序將是NATS消息處理邏輯和RESTful API調用處理邏輯的混合。 – Odil
我編輯了我的帖子,提供了一些有關NAT主題的更多信息,希望有所幫助! – crhino