Usługa monitorowania dla wtyczek

Wtyczki udostępniają operacje monitorowania, które gromadzą i wyświetlają wielkości mierzone wdrażania dla wykorzystania zasobów i wydajności na poziomie maszyny wirtualnej, oprogramowania pośredniego i poziomu aplikacji.

W przypadku tworzenia własnych wtyczek dla produktu Cloud Pak Systemmożna skonfigurować i zarejestrować kolektory dla metryk specyficznych dla wtyczki w czasie wykonywania, a także zastosować metadane w celu zdefiniowania prezentacji pomiarów monitorowania w panelu wdrażania produktu Konsola instancji .

Kolektor

Produkt Cloud Pak System umożliwia monitorowanie konkretnych i wbudowanych kolektorów oraz kolektorów ogólnych i typów. Kolektory te są oparte na otwartym, luźno sprzężonym i zorientowanym na kolekcjonerskie środowisko. Wszystkie kolektory są implementowane z poziomu interfejsu com.ibm.maestro.monitor.ICollectorService, który obejmuje następujące metody:
// Creates the collector based on the given configuration values.
// @param config 
// @return uniqueId for this collector instance or null if the collector could not be created
String create(JSONObject config); 

// Returns the metadata for the available metrics from the collector.
// @param uniqueId of the collector instance to query
// @return {"categories":    [{"categoryType":"<ROLE_CATEGORY>"}],
updateInterval":  "<secs>":,"<ROLE_CATEGORY>": {<see
IMetricService.getServerMetadat{}>}}
JSONObject getMetadata(String uniqueId); 		 

// @param uniqueId of the collector instance to query 
// @param metricType not used in this release and defaults to "all" 
// @return {"<ROLE_CATEGORY>":[{"<METRIC_NAME>":"<METRIC_VALUE>"}, ...},
JSONObject getMetrics(String uniqueId);  

// @param uniqueId of the collector instance to shutdown void delete(String uniqueId);  
void delete(String uniqueId);
Monitorowanie produktu Cloud Pak System obejmuje następujące typy kolektorów:
Tabela 1. Typy modułów gromadzących monitorowanie.
Nazwa Typ Użycie
com.ibm.maestro.monitor.collector.script Skrypt Kolektor dla wtyczek, które mogą dostarczać pomiary za pomocą skryptów powłoki.
com.ibm.maestro.monitor.collector.http Protokół HTTP Kolektor dla wtyczek, które mogą dostarczać pomiary za pomocą żądania HTTP.

Monitorowanie implementuje również kilka kolektorów, które gromadzą wielkości mierzone systemu operacyjnego z agenta monitorowania dla IBM® Cloud Pak Oprogramowanie i hiperwizora, który jest odpowiedni dla procesora, pamięci, dysku i sieci w maszynach wirtualnych. Kolektory te są udostępniane we wszystkich wdrożeniach i mogą być używane przez inne komponenty lub wtyczki bez konieczności rejestrowania osobnego kolektora. Informacje na temat wielkości mierzonych, które są gromadzone przez agenta, zawiera sekcja Pomiary zgromadzone przez agenta monitorowania dla oprogramowania IBM Cloud Pak Software.

Rejestracja

Aby korzystać z kolektorów monitorowania Cloud Pak System , należy zarejestrować kolektory za pomocą konfiguracji wtyczki, podając informacje o węźle, roli, metryce i obiektach kolektora.

Produkt Cloud Pak System udostępnia interfejs produktu Python do rejestrowania kolektorów. Definicja interfejsu jest następująca:
maestro.monitorAgent.register('{
  "version"  : Number,
  "node"     : String,
  "role"     : String,
  "collector": String,
  "config"   : JSONObject
}')
Pojedynczy parametr, maestro.monitorAgent.register to obiekt JSON, który definiuje następujące atrybuty:
wersja
Numer wersji
węzeł
Nazwa serwera, na którym działa kolektor.
rola
Nazwa roli, dla której działa kolektor.
collector
Typ kolektora.
Konfiguracja
Wymagane i opcjonalne właściwości tworzenia instancji określonego typu kolektora dla konkretnego węzła i roli. Każdy typ kolektora ma własne właściwości konfiguracyjne.

Użyj komendy maestro.monitorAgent.unregister(String) , aby wyrejestrować kolektor. Parametr jest łańcuchem rejestracji.

Aby sprawdzić, czy moduł gromadzący dane jest zarejestrowany, należy użyć opcji maestro.monitorAgent.isRegistered(String). Parametr jest łańcuchem rejestracji dla kolektora, który ma zostać sprawdzony. Interfejs zwraca wartość True , aby wskazać, że kolektor z określoną rejestracją istnieje lub wartość False, aby wskazać, że kolektor o podanej rejestracji nie istnieje.

Tabela 2. Typy modułów gromadzących monitorowanie.
Kolektor config.properties
com.ibm.maestro.monitor.collector.script
{
 "metafile"  :"<meta-data file>",
 "executable":"<executable script>",
 "arguments" :"<script arguments>",
 "validRC"   :"<valid return>",
 "workdir"   :"<work dir >",
 "timeout"   :"<time out duration>"
} 
com.ibm.maestro.monitor.collector.http
{
 "metafile"   :"<meta-data file>",
 "url"        :"<URL>",
 "query"      :"<query arguments>",
 "timeout"    :"<time out duration>",
 "retry_delay":"<delay time to next retry>"
 "retry_times":"<retry_times>"
 "datahandler":"<utility jar properties >"
}
Poniższy przykładowy kod ilustruje skrypt rejestrujący używany w kolektorze skryptów:
maestro.monitorAgent.register('{
	"node":"${maestro.node}",
	"role":"${maestro.role}",
	"collector":"com.ibm.maestro.monitor.collector.script",
	"config":{<config properties>}')

Skrypty rejestrujące zwykle są umieszczane w odpowiednich skryptach lub katalogach cyklu życia wtyczki, aby upewnić się, że wtyczka jest gotowa do gromadzenia metryk. Na przykład dla modułu gromadzącego dane WebSphere® Application Server , Skrypt rejestrujący jest umieszczany w katalogu installApp_post_handlers , w którym uruchomione są wszystkie skrypty po uruchomieniu programu WebSphere Application Server .

Rejestracja z innym typem kolektora musi zapewniać odpowiednią konfigurację. Wartości dla pliku config.properties są następujące:
Tabela 3. Konfiguracja dla kolektora skryptów
Właściwość Czy jest wymagany? Wartość
Plik meta Tak Łańcuch pełnej ścieżki do pliku metadanych, który zawiera obiekt JSON.
Wykonywalny Tak Łańcuch pełnej ścieżki skryptu powłoki, który udostępnia dane wyjściowe wielkości mierzonych wtyczki.
argumenty Nie Argumenty skryptu. Wartość może być pojedynczym łańcuchem z argumentami, które są oddzielone spacjami lub może być tablicą łańcuchów. Jeśli pojedynczy argument zawiera spację, należy podać argumenty jako tablicę łańcuchów.
validRC Nie Łańcuch kodu dla poprawnego zwrotu HTTP. Wartością domyślną jest 0. Wartość może być liczbą całkowitą lub łańcuchem, który przekształca się w liczbę całkowitą.
katalogroboczy Nie Pełna ścieżka do katalogu roboczego skryptu. Wartością domyślną jest java.io-tmpdir.
limit czasu Nie Ilość czasu oczekiwania na uruchomienie skryptu w sekundach. Wartość domyślna to 5. Wartością może być liczba lub łańcuch, który przekształca się w liczbę.
Wskazówka: Aby uzyskać pełną ścieżkę do pliku metadanych lub skryptu, skrypt rejestracyjny może przygotować produkt config.properties , odwołując się do zmiennych programu maestro , które przechowują informacje o ścieżce i katalogu instalacji wtyczki.
Tabela 4. Konfiguracja dla kolektora HTTP
Właściwość Czy jest wymagany? Wartość
Plik meta Tak Łańcuch pełnej ścieżki do pliku metadanych, który zawiera obiekt JSON.
url Tak Łańcuch adresu URL żądającego pomiaru wtyczki.
zapytanie Nie Łańcuch argumentów zapytania w żądaniu HTTP.
validRC Nie Łańcuch kodu dla poprawnego zwrotu HTTP. Wartość domyślna to 200. Wartość może być liczbą całkowitą lub łańcuchem, który przekształca się w liczbę całkowitą.
limit czasu Nie Ilość czasu oczekiwania na uruchomienie skryptu w sekundach. Wartość domyślna to 5. Wartością może być liczba lub łańcuch, który przekształca się w liczbę.
retry_delay Nie Przedział czasu w sekundach, który występuje między wywołaniem niepowodzenia a następnym ponowieniem. Wartością może być liczba lub łańcuch, który przekształca się w liczbę.
retry_times Nie Łączna liczba dodatkowych prób przed wprowadzeniem okresu opóźnienia. Wartość może być liczbą całkowitą lub łańcuchem, który przekształca się w liczbę całkowitą.
Procedura obsługi danych Nie Obiekt JSON, w tym właściwości pakietu narzędziowego JAR programu narzędziowego, lub transformowanie odpowiedzi HTTP na metryki.

Przykład dla każdego typu kolektora znajduje się w sekcji Przykłady kolektora monitorowania.

Plik metadanych

Plik metadanych jest przywołany w rejestrowaniu kolektora.

Wtyczka udostępnia sformatowany plik JSON, który zawiera parametry metadanych modułu gromadzącego dane, typy kategorii metryk, które mają być ujawnione, oraz metadane opisujące poszczególne ujawnione metryki. Treść pliku metadanych zawiera informacje:
  • Wersja pliku metadanych.
  • Tablica nazw kategorii do zarejestrowania (1..n).
  • Przedział czasu (w sekundach), który ma być odpytywał o zaktualizowane dane.
  • Parametry konfiguracyjne, które są unikalne dla każdej kategorii (na przykład: mbeanQuery).
  • Lista obiektów metadanych metryki:
    attributeName
    Określa atrybut z kolektora, który ma zostać powiązany z tym pomiarem.
    metricName
    Określa nazwę pomiaru, która ma być ujawniona za pośrednictwem interfejsów API agenta monitorowania.
    metricType
    Określa typ danych, np. zakres, licznik, czas, średni, procent i łańcuch. metricType nie jest jeszcze sprawdzona. Wszystkie metricType znajdujące się na liście zostały zaakceptowane. Użytkownik może wybrać metricType , który najlepiej pasuje do danych z listy.
    opis
    (opcjonalne) Określa łańcuch, który definiuje pomiar.
Format pliku metadanych jest następujący:
{
"Version" : <metadata file version>,
"update_interval": <interval  time in seconds to poll for updated data>,
"Category": [
            <array of category names to register (1..n)>
            ],
"Metadata": [
            {
            "<category name from Category[]>":{
                "metrics": [
                  { 
                   "attribute_name": <attribute from collector to associate to this metric>
                   "metricsName": <metric name to expose through monitoring agent APIs>
                   "metricType": <metric value data type including "RANGE",
                                                                          "COUNTER",
                                                                          "PERCENT",
                                                                          "STRING", 
                                                                          "AVAILABILITY",
                                                                          STATUS>
									} ,
			           ... ...
                    ]
                  }
                },
              ... ...
             ]
}

Format pomiaru

Dane wprowadzane przez wtyczki do kolektora muszą być zgodne z konkretnym formatem, aby można było je przeanalizować i przesłać przez agenta monitorowania do wielkości mierzonych. Na przykład wtyczka, która korzysta z kolektora skryptów, musi zapewnić sformatowanie danych wyjściowych skryptu, a wtyczka w kolektorze HTTP musi zapewnić, że odpowiedź HTTP lub wyjście procedury obsługi danych są sformatowane. Format pomiaru znajduje się w formacie JSON:
{
"version": <version number>,
    "category": [
        <category name>,
	   ... ...
        
    ],
    "content": [
        {
            <category name> :{
                <metric name>: <metric value>,
                   ... ...
            }
        },
       ... ...
    ]
}
W poniższym przykładzie przedstawiono wielkości mierzone, które są poprawnie sformatowane dla kolektora:
{
"version": 2,
    "category": [
        "WAS_JVMRuntime",
        "WAS_TransactionManager",
        "WAS_JDBCConnectionPools",
        "WAS_WebApplications"
    ],
    "content": [
        {
            "WAS_JVMRuntime": {
                "jvm_heap_used": 86.28658,
                "used_memory": 176576,
                "heap_size": 204639
            }
        },
        {
            "WAS_TransactionManager": {
                "rolledback_count": 0,
                "active_count": 0,
                "committed_count": 0
            }
        },
        {
            "WAS_JDBCConnectionPools": {
                "max_percent_used": 0,
                "min_percent_used": 0,
                "percent_used": 0,
                "wait_time": 0,
                "min_wait_time": 0,
                "max_wait_time": 0
            }
        },
        {
            "WAS_WebApplications": {
                "max_service_time": 210662,
                "min_service_time": 0,
                "service_time": 8924,
                "request_count": 30
            }
        }
    ]
}

Obsługa błędów

Istnieją dwa typy błędów, które mogą wystąpić podczas wywoływania skryptów kolektorów dla kolektora skryptów lub procedury obsługi danych dla kolektora HTTP w celu pobrania sformatowanych pomiarów:
  • Na poziomie skryptu lub procedury obsługi danych, gdy błędy występują w skryptach i procedurach obsługi danych.
  • Na poziomie kolektora, gdy błędy są zgłaszane, gdy kolektor uruchamia skrypt lub wywołuje procedurę obsługi danych.
Kolektor obsługuje błędy na poziomie kolektora bezpośrednio, ale może obsłużyć tylko błędy na poziomie skryptu lub procedury obsługi danych, gdy błędy są zwracane przez skrypty lub procedury obsługi danych. W przypadku kolektora skryptów skrypty powinny komunikować się z wtyczkami, gromadzić wielkości mierzone i wyjściowe sformatowane wielkości mierzone. Skrypty mogą obsługiwać błędy jako oczekiwane lub nieoczekiwane podczas komunikowania się i formatowania, a następnie ujawniać błędy w kolektorze. W przypadku kolektora HTTP procedury obsługi danych transformują dane w odpowiedzi HTTP ze wtyczek na sformatowane wielkości mierzone. Procedury obsługi danych mogą obsługiwać błędy transformacji, a następnie ujawniać je w kolektorze. Aby możliwe było przekazywanie błędów do kolektorów, skrypty lub procedury obsługi danych muszą być zawijane.
{
"FFDC": <error message >
}

Gdy kolektor pobiera obiekt FFDC ze skryptów lub procedur obsługi danych, rejestruje je w plikach dziennika i śledzenia w celu rozwiązywania problemów. Propaguje je również do agenta monitorowania, który następnie usuwa odpowiednie rekordy z pamięci podręcznej monitorowania, dzięki czemu funkcja API monitorowania nie zwraca już starych pomiarów. W wyniku tego interfejs użytkownika nie wyświetla tych komunikatów o błędach dla wtyczek, w których są gromadzone obiekty FFDC.

W przypadku błędów na poziomie kolektora, które są zgłaszane, gdy moduł gromadzący dane uruchamia skrypty, wysyła żądania HTTP lub wywołuje transformatory danych, kolektor opakowuje błędy w obiektach FFDC, a następnie rejestruje i propaguje je w taki sam sposób, jak obiekty FFDC ze skryptów i procedur obsługi danych.

Komunikaty o błędach kolektora skryptów obejmują:
The collector has trouble in calling scripts registered by plug-in for outputting metrics, for example, script files are missing
The collector gets error return code (RC) when executing script files
The collector gets nothing and empty string from return of executing script files
The collector fails to parse metrics from return of executing script files due to unexpected ending or incorrect JSON format
The collector gets error message from return of executing script files
The collector executing script files is timeout
Komunikaty o błędach kolektora HTTP obejmują:
The collector waiting for  HTTP response is timeout
The collector gets nothing from HTTP response
The collector get error status code from HTTP response, such as 4xx for client error, 5xx for server error
The collector gets error from user transformer instead of metrics
The collector fails to parse metrics from user transformer  due to incorrect JSON format
Kolektor HTTP może wychwytywać błędy przed wywołaniem procedury obsługi danych, a w rezultacie żadne dane nie będą dostępne dla procedury obsługi danych w celu dalszego przetwarzania. W takiej sytuacji kolektor przechodzi w obiekt o wartości NULL, co sprawia, że procedura obsługi danych jest świadoma, że nie ma danych wejściowych. Procedura obsługi danych może określić sposób generowania końcowych danych dla kolektora. Na przykład procedury obsługi danych mogą tworzyć obiekty FFDC z komunikatem, na przykład "Brak zgromadzonych danych" dla danych wejściowych obiektu o wartości NULL lub tworzyć wielkości mierzone wtyczek z własnymi konkretnymi wartościami dla wartości NULL, na przykład "UNKNOWN" w celu uzyskania dostępności.

Prezentacja interfejsu użytkownika

Wielkości mierzone wtyczki są wyświetlane na karcie Monitorowanie oprogramowania pośredniego w Konsola instancji. Wtyczki udostępniają metadane opisujące pomiar i kategorię w celu wyświetlania pomiarów, a także definiują format wyświetlania pomiarów.

Plik monitoring_ui.json znajduje się w katalogu plugin projektu wtyczki, na przykład plugin.com.ibm.was/plugin/monitoring_ui.json. Inne pliki JSON znajdują się również w tym katalogu, w tym config.json i config.meta.json.

Uwaga: Monitorowanie oprogramowania pośredniego nie jest wyświetlane dla niewidocznych ról. Rola jest niewidoczna, jeśli dla roli w modelu topologii program dashboard.visible jest ustawiony na wartość false . Domyślnie wartość ta jest ustawiona na true.
 "role" : {
        "name"  : "$roleName",
        "type"  : "$roleName",
        "dashboard.visible" : false,
Metadane są definiowane w produkcie monitoring_ui.json. Obsługiwane są dwie wersje tego pliku:
Rysunek 1. monitoring_ui.json dla pojedynczej roli
[
{
        "version": 1,
        "category": < category name from Category[] defined in 
                      metric metadata>,
        "label": <the content showed on chart for the category>,
        "displays": [
            {
                "label": <string showed on chart element for the 
                            metric>,
                "monitorType": <time and type properties of metric to 
                                 Display>,
                "chartType": <chart type for displaying the metric>,
                "metrics": [
                    {
                        "attributeName": <metric name defined in 
                                            metric medata>,
                        "label": <string showed on chart element 
                                    for the metric>,
                    } 
                ] 
            } 
        ] 
},
... ...
]
Zakłada się, że produkt monitoring_ui.json obsługuje pojedynczą rolę o takiej samej nazwie jak wtyczka. Powinna być ona używana z wtyczkami, które zawierają tylko jedną rolę i nie odwołują się do innych wtyczek.
Aby obsługiwać wiele ról we wtyczce, w wersji 2 znajduje się dodatkowy atrybut typu tablicowego displayRoles, który może powiązać jedną kategorię wielkości mierzonej z jedną lub wieloma rolami.
Rysunek 2. Wersja 2 produktu monitoring_ui.json dla wielu ról
[
{
        "version": 2,
        "displayRoles": [<role name>, ...]
        "category": < category name from Category[] defined in 
                      metric metadata>,
        "label": <the content showed on chart for the category>,
        "displays": [
            {
                "label": <string showed on chart element for the 
                            metric>,
                "monitorType": <time and type properties of metric to 
                                 Display>,
                "chartType": <chart type for displaying the metric>,
                "metrics": [
                    {
                        "attributeName": <metric name defined in 
                                            metric medata>,
                        "label": <string showed on chart element 
                                    for the metric>,
                    } 
                ] 
            } 
        ] 
},
... ...
]

W przypadku obu wersji pliku monitoring_ui.json displays zdefiniuj atrybuty dla wyglądu pomiaru w interfejsie użytkownika. Wszystkie pomiary w jednej kategorii są wyświetlane w ten sam sposób i współużytkują jeden wykres. Atrybuty monitorType i chartType powinny być używane razem w celu zdefiniowania, jak wyglądają metryki. Na przykład, jeśli parametr monitorType jest ustawiony na wartość HistoricalNumber , a parametr chartType ma wartość Lines dla kategorii wielkości mierzonych w tym samym czasie, to pomiar jest wyświetlany jako wykres liniowy z czasem w osi X i wartościami metryk w osi Y.

Tabela 5. Typy monitorów
Typy monitorów (monitorType) Opis
HistoricalNumber Dane wielkości mierzonej w prostym numerze dla osi czasu historii
HistoricalPercentage Dane wielkości mierzonej w procentach dla osi czasu historii
RealtimeNumber Dane wielkości mierzonej w prostej liczbie dla bieżącej tymczasowości
RealtimePercentage Dane wielkości mierzonej w procentach dla bieżącej tymczasowości
Tabela 6. typy wykresów
Typy wykresów (chartType) Prezentacja
Lines Wykres liniowy
StackedAreas Skumulowany wykres liniowy (wykres warstwowy)
StackedColumns Wykres kolumnowy
Alternatywą dla właściwości HistoricalNumber i chartTypejest użycie chartWidgetName w celu zdefiniowania wyglądu. W poniższym przykładzie przedstawiono użycie produktu chartWidgetNazwa.
[
{
    ... ...
        "category": "DATABASE_DRILLDOWN_HEALTH",
        "label": "Database Health Indicator",
        "displays": [
            {
                "label": " Database Health Indicator ",
                "chartWidgetName": "paas.widgets.HealthStatusTrend",                
                "metrics": [
                    {
                        "attributeName": "data_server_status",
                        "label": " Data_Server_Status " 
                    },
                    {
                        "attributeName": "io",
                        "label": "I/O" 
                    },
                    {
                        "attributeName": "locking",
                        "label": " Locking " 
                    },                                         
                    {
                        "attributeName": "logging",
                        "label": "Logging " 
                    },
                    {
                        "attributeName": "memory",
                        "label": "Memory" 
                    },      
                    {
                        "attributeName": "recovery",
                        "label": "Recovery" 
                    }, 
                    {
                        "attributeName": "sorting",
                        "label": "Sorting" 
                    }, 
                    {
                        "attributeName": "storage",
                        "label": "Storage" 
                    },                                                                            
                    {
                        "attributeName": "workload",
                        "label": "Workload" 
                    } 
                ]
            }                                     
        ] 
    }
]
Wielkości mierzone z tą konfiguracją są wyświetlane jako dwie kolumny z etykietami metryk w pierwszej kolumnie i z kolorową ikoną kwadratowego wskaźnika, aby wyświetlić status.

Dostępność

Po wdrożeniu wtyczki jej rola ma specjalny status, który wskazuje jego ogólną poprawność, zwaną availability. Ma ona następujące wartości statusu.
  • W NORMIE
  • OSTRZEŻENIE
  • KRYTYCZNY
  • NIEZNANA
Ikona jest powiązana z każdą wartością.
Aby zapewnić status poprawności dla roli, wtyczka może powiązać jedną z jej pomiarów z availability , dzięki czemu usługa monitorowania może wyświetlić ikony statusu i indykatora aktualizacji na podstawie bieżącej wartości pomiaru. Ustaw wartość metric_type na AVAILABILITY w pliku metadanych wtyczki, aby to powiązanie było możliwe.
... ...
"metadata":[
    	{
            "DATABASE_AVAILABILITY":{
                "metrics":[{
                        "attribute_name":"database_availability",
                        "metric_name":"database_availability",
                        "metric_type":"AVAILABILITY"
                    }
                ]
            }
        },    
... ...

Pomiar powiązany z produktem availability może należeć do dowolnej kategorii, ale może mieć tylko jeden pomiar dla powiązania. Jeśli zdefiniowano wiele powiązań, tylko pierwsza z nich jest efektywna, a pozostałe są ignorowane. Pomiar dla powiązania musi być typu String i może akceptować tylko obsługiwane wartości w czasie wykonywania: "NORMAL", "WARNING", "CRITICAL" i "UNKNOWN".

W przypadku wtyczki, która wiąże wielkości mierzone z produktem availability, status "UNKNOWN" należy ustawić, jeśli wtyczka nie może pobrać wielkości mierzonych dla produktu availability. Status może być archiwizowany w skryptach kolektora (jeśli używany jest kolektor skryptów) lub procedur obsługi danych (jeśli używany jest kolektor HTTP).
  • Ze względu na to, że skrypty pobierają pomiary według własnego mechanizmu, mogą utworzyć predefiniowaną metrykę dla produktu availability , gdy nie powiedzie się pobranie pomiarów.
  • Ponieważ procedury obsługi danych pobierają dane z modułu gromadzącego dane HTTP, moduł gromadzący dane musi je poinformować, gdy z odpowiedzi HTTP nie są pobierane żadne dane. W ramach umowy kolektor HTTP przekazuje obiekt o wartości NULL do procedur obsługi danych, gdy nie zostanie on w stanie uzyskać danych, zanim wywoła procedury obsługi danych. Procedury obsługi danych powinny tworzyć metrykę predefiniowaną dla produktu availability , gdy odbierają one obiekt o wartości NULL. Więcej informacji na ten temat zawiera sekcja Rozwiązywanie problemów z kolektorami monitorowania.
Jeśli wtyczka nie powiąże pomiaru z produktem availability, usługa monitorowania zastosuje następujący algorytm w celu wygenerowania availability dla roli wtyczki:
  • Jeśli do wtyczki używana jest strategia skalowania, do określenia statusu poprawności używany jest stan skalowania. Po osiągnięciu progu wartość availability jest ustawiana na wartość "WARNING", dopóki nie zostanie utworzona nowa instancja roli. Jeśli zostanie osiągnięta maksymalna liczba instancji roli lub utworzona instancja nie powiedzie się, parametr availability zostanie ustawiony na wartość "CRITICAL".
  • Jeśli strategia skalowania nie jest używana, charakterystyki systemu operacyjnego są używane w produkcie availability. Jeśli użycie procesora jest większe niż 70%, parametr availability jest ustawiony na wartość "OSTRZEŻENIE", a jeśli użycie jest większe niż 85% ", availability jest ustawiony na wartość" KRYTYCZNY ".

Rozwiązywanie problemów dotyczących gromadzenia danych

Problem: zarejestrowałem kolektor dla ról w mojej wtyczce, ale role nie są wymienione w widoku Monitorowanie oprogramowania pośredniego.

Rozwiązanie: Istnieje kilka możliwych przyczyn:
  • Błędna nazwa roli w parametrze "register".

    Gdy wtyczka rejestruje kolektor dla siebie samego, zwykle uzyskuje on nazwę roli bezpośrednio z poziomu produktu maestro.role['name'] w swoich skryptach. Jednak gdy wtyczka rejestruje kolektor dla innych wtyczek, a nie sam siebie, zwracana jest niepoprawna nazwa roli. Na przykład, gdy wtyczka OPMDB2 rejestruje kolektor dla wtyczki DB2, produkt maestro.role['name'] zwraca niepoprawną nazwę roli, ponieważ zawsze zwraca nazwę roli bieżącej wtyczki. Upewnij się, że podano poprawną nazwę roli do parametru "register" i upewnij się, że jest on używany przez moduł gromadzący dane.

  • Plik monitoring_ui.json w wersji 1 znajduje się w niepoprawnej wtyczce.

    Ponieważ plik monitoring_ui.json w wersji 1 nie zawiera informacji o roli, interfejs użytkownika przyjmuje, że produkt monitoring_ui.json obsługuje rolę wtyczki, w której znajduje się dany plik. Aby uniknąć tego problemu, upewnij się, że produkt monitoring_ui.json znajduje się we wtyczce, dla której gromadzone są pomiary, lub użyj pliku monitoring_ui.json w wersji 2, który jawnie definiuje role.

  • Brak nazwy roli w pliku monitoring_ui.json w wersji 2.

    Plik monitoring_ui.json w wersji 2 wymaga atrybutu "displayRoles". Jeśli plik monitoring_ui.json w wersji 2 nie zawiera informacji o roli, interfejs użytkownika nie może znaleźć odpowiedniego monitoring_ui.json dla zgromadzonych wielkości mierzonych. Jeśli aktualizujesz monitoring_ui.json z wersji 1 do wersji 2, upewnij się, że zawiera ona atrybut "displayRoles" i uwzględni rolę, z jaką dany kolektor pracuje.

  • Wielkości mierzone są gromadzone dla niewidocznej roli.

    Jeśli rola jest niewidoczna, wielkości mierzone nie są wyświetlane w interfejsie użytkownika, nawet jeśli są dla niego kolekcjonowane wielkości mierzone. Jeśli rola nie jest wyświetlana, upewnij się, że wartość "dashboard.visible" nie jest ustawiona na wartość false.

    Istnieją dwa rodzaje ról dla widoczności, widocznej roli i niewidocznej roli. Widoczna rola jest wyświetlana na stronie Virtual Application Instances (Instancje aplikacji wirtualnych) i zwykle są one wyświetlane w ramach wdrażania, takie jak WebSphere Application Server i role DB2® . Nie można wyświetlić niewidocznej roli na stronie Instancje aplikacji wirtualnej. Role te zwykle działają jako komponent zaplecza i asystenta. Przykłady: MONITORING, SSH i OPMDB2. Programiści wtyczek mogą określić widoczność swoich ról wtyczek, ustawiając wartość boolowskową dla atrybutu "dashboard.visible" w topologii. W poniższym fragmencie kodu topologii przedstawiono przykład:
    {    
    "vm-templates": [        
    	... ...
        {
                "name": "database-db2",
                "roles": [
                    {   
                        "type": "DB2",
                        "name": "DB2"     
                        ... ...  
                    },
                    {
                        "global": true,
                        "plugin": "ssh/2.0.0.1",
                        "dashboard.visible": false,
                        "type": "SSH",
                        "name": "SSH"
     
                   },
                    {
                        "global": true,
                        "plugin": "opmdb2/1.0.0.0",
                        "depends": [
                            {
                                "role": "database-db2.DB2",
                                "type": "DB2"
                            }
                        ],
                        "dashboard.visible": false,
                        "type": "OPMDB2",
                        "name": "OPMDB2"
                    },
                       ... ...
                   ],
                    ... ...
            }
        ],
    
    }
    W tym przykładzie baza danych DB2 jest rolą podstawową i jest widoczna. Protokoły SSH i OPMDB2 są niewidocznymi rolami, ponieważ ich wartość "dashboard.visible" jest ustawiona na false.
  • Wielkości mierzone nie są gromadzone.

    Usługa monitorowania ignoruje role bez początkowych pomiarów nawet wtedy, gdy istnieje kolektor, który został pomyślnie zarejestrowany dla tej roli. Sprawdź pliki dziennika i śledzenia, aby sprawdzić, czy moduł gromadzący dane działa poprawnie.

Problem: Moje role są wyświetlane na liście w widoku Monitorowanie, ale nie mogę wyświetlić ich pomiarów. KomunikatCWZMO0040W: No real-time metric data is found for deployment.

Rozwiązanie: Komunikat o błędzie jest wyświetlany, gdy usługa monitorowania nie może już znaleźć wielkości mierzonych dla określonej roli. Sprawdź pliki dziennika i śledzenia, aby upewnić się, że moduł gromadzący dane działa poprawnie.

Automatyczne skalowanie

Funkcja skalowania elastycznegolub skalowania automatycznegow module dodatkowym korzysta z monitorowania. Automatyczne skalowanie umożliwia automatyczne dodawanie lub usuwanie wirtualnych aplikacji i instancji usług współużytkowanych, które są oparte na obciążeniu.

Opcjonalnie można włączyć funkcję automatycznego skalowania, przyłączając strategię skalowania do aplikacji docelowej lub usługi współużytkowanej. Strategia jest również używana do dostarczania wymagań dotyczących skalowania do mechanizmu zaplecza. Wymagania obejmują zdarzenie wyzwalające, czas wyzwalania i numer instancji, które napędzają procedurę skalowania.

Produkt Cloud Pak System obsługuje dwa typy skalowania: skalowanie poziome i skalowanie pionowe.

Skalowanie poziome

Skalowanie poziome rozszerzy lub zmniejszy wdrożenie, dodając węzły do wdrożenia (wyskalowanie) lub usuwając węzły z wdrożenia (scale-in).

skalowanie pionowe

Skalowanie pionowe zwiększa lub redukuje wielkość węzła, dodając rdzenie procesorów, zwiększając wielkość pamięci lub podłączając nowe dyski do węzłów (scale-up) lub usuwając rdzenie procesorów, zmniejszając wielkość pamięci lub usuwając dyski z węzłów (scale-down).

Przegląd strategii skalowania

Strategia automatycznego skalowania może być przyłączona do dwóch rodzajów komponentów w produkcie Cloud Pak System: aplikacji wirtualnej i współużytkowanej usługi. W przypadku aplikacji wirtualnej można jawnie dodać strategię skalowania do jednego lub większej liczby komponentów aplikacji w programie budującym wzorce. W przypadku usługi współużytkowanej strategia skalowania musi być opisana w modelu aplikacji, który jest udostępniany przez programistę wtyczki, jeśli usługa zapyta o możliwość automatycznego skalowania.

Wtyczki, zarówno dla aplikacji wirtualnych, jak i współużytkowanych usług, definiują strategię skalowania, opisują strategię w modelu aplikacji i udostępniają transformatory w celu wyjaśniania i dodawania atrybutów skalowania do dokumentu topologii, gdy strategia jest wdrażana z wtyczkami. Budowanie aplikacji automatycznie generuje segment strategii skalowania w modelu aplikacji tylko wtedy, gdy korzystasz z usług współużytkowanych. W czasie wykonywania mechanizm automatycznego skalowania zaplecza najpierw ładuje atrybuty skalowania i generuje zestaw reguł dla wyzwalacza skalowania. Następnie mechanizm zaplecza oblicza w zestawie reguł i decyduje o tym, czy obciążenie osiąga próg dla dodawania lub usuwania aplikacji, czy współużytkowanych instancji usług. Ostatnim etapem tego procesu jest zakończenie żądania.

Aby zastosować strategię automatycznego skalowania do wtyczki, należy upewnić się, że strategia skalowania jest zdefiniowana w modelu aplikacji, z którym powiązana jest wtyczka, co gromadzi wymagania specyficzne dla użytkownika związane z możliwością skalowania. Należy także upewnić się, że strategia jest transformowana do dokumentu topologii, który prowadzi mechanizm zaplecza w celu sprawdzenia zdarzenia wyzwalającego i podjęcia działań skalowania.

Skalowanie elementów

Strategia skalowania określa kryteria kierowania automatycznymi zachowaniami i ograniczeniami w działaniach skalowania. Zawiera ona trzy podstawowe elementy: zdarzenie wyzwalające, czas wyzwalacza i limit zasobów.
  • zdarzenie wyzwalające

    Działania skalowania są wyzwalane w oparciu o zmianę wartości określonych pomiarów. Zdarzenie wyzwalające określa typ wielkości mierzonych monitorowania i zakres progów, dla których wyzwalane są różne działania skalowania.

    Dla każdej wielkości mierzonej w definicji zdarzenia istnieją dwa progi: próg skali i próg skali. Na przykład użycie procesora dla maszyn wirtualnych, które uruchamiają instancje WebSphere Application Server , może być metryką dla zdarzenia wyzwalającego, a progi dla skali-in i scale-out-20% i 80%, a następnie, gdy wartość wykorzystania procesora jest wyższa niż 80%, nowy WebSphere Application Server instancja została uruchomiona. Jeśli użycie procesora jest mniejsze niż 20%, do usunięcia zostanie wybrana istniejąca instancja serwera WebSphere Application Server .

  • Czas wyzwolenia

    Aby zapobiec występowaniu skoków, system korzysta z zakresu czasu w celu monitorowania wartości pomiaru, a nie wartości pobranej w chwili, zanim wyzwoli działanie skalowania. Czas wyzwalania określa czas, w którym ma być wstrzymany próg sprawdzający, zanim zostaną podjęte działania skalowania po spełnieniu warunku progu. Na przykład, w momencie, gdy wykorzystanie procesora jest monitorowane powyżej 80%, uruchamiany jest licznik czasu. Jeśli czas wyzwalacza jest ustawiony na 120 sekund, to gdy licznik czasu osiągnie wartość 120 sekund, operacja skalowania jest uruchamiana. Jeśli w czasie korzystania z procesora zostanie przekroczony limit czasu, co oznacza, że użycie procesora spada poniżej 80% w tym przykładzie, licznik czasu zostanie zatrzymany. Jest on restartowany, gdy użycie procesora ponownie zostanie wprowadzone do progu.

  • Limit zasobów

    Aby zapobiec korzystaniu z wszystkich zasobów systemowych, wymagany jest limit zasobów dla zachowania skalowania. Na przykład: strategia skalowania powinna określać łączną liczbę instancji, które może mieć jednocześnie wtyczka lub co najmniej na podstawie skali lub skali. Jeśli wielkość klastra wtyczki osiągnie krawędź jego zakresów, żadna instancja nie zostanie dodana do klastra ani z niego usunięta, nawet jeśli zdarzenie wyzwalające jest spełnione.

Strategia skalowania obejmuje skalowanie poziome, które jest obsługiwane w poprzednich wersjach i elementach dla skalowania pionowego. Istnieją trzy typy zdarzeń wyzwalających: skalowanie poziome, skalowanie pionowe procesora i skalowanie pionowe pamięci. ScaleUpCPUThreshold określa próg, dla którego liczba procesorów jest zwiększana w węźle. ScaleUpMemoryThreshold określa próg, dla którego wielkość pamięci jest zwiększana w węźle. Limit zasobów obejmuje zarówno procesor, jak i pamięć. Wartości min i max procesora określają maksymalną liczbę rdzeni, które mogą być dodawane do węzła przez działanie skalowania i może zostać zmniejszone do węzła w ramach działania skalowania w dół. Wartości min i max pamięci określają maksymalną ilość pamięci, która może być przydzielona do węzła, oraz minimalną ilość pamięci, do której można zredukować wdrożenie. Ta wersja zawiera również wartości przyrostu i zmniejszania dla pojedynczego działania skalowania. Wartości przyrostu i zmniejszania procesora określają liczbę dodawanych lub usuniętych rdzeni w jednej operacji skalowania lub skalowania. Wartości przyrostu pamięci i zmniejszenia ilości pamięci określają, ile pamięci jest dodawane lub usuwane w ramach jednej operacji skalowania lub czyszczenia. W poprzednich wersjach wartości te nie istnieją, ponieważ tylko jeden węzeł jest dodawany lub usuwany domyślnie w jednej skali lub w działaniu wyskalowania.

Model aplikacji

Funkcja automatycznego skalowania jest osadzona jako strategia w modelu aplikacji. Model aplikacji służy do opisywania komponentów, strategii i odsyłaczy w aplikacjach wirtualnych lub usługach współużytkowanych. W przypadku aplikacji wirtualnych model może być wizualnie wyświetlany i edytowany za pomocą programu budującego wzorce.

Projektanci aplikacji wirtualnych mogą dostosowywać komponenty i strategie, w tym strategię automatycznego skalowania aplikacji, w programie budującym wzorce. Brak narzędzia do wizualizowania usług współużytkowanych w modelu aplikacji. Automatyczne skalowanie może być dostosowywane tylko w Konsola instancji po wdrożeniu usługi. Strategia skalowania opisana w modelu aplikacji, dla aplikacji wirtualnej lub usługi współużytkowanej, jest zgodna ze specyfikacją modelu aplikacji. Strategia jest zdefiniowana w węźle z grupą atrybutów.

W zestawie atrybutów opisane są trzy elementy automatycznego skalowania, zdarzenie wyzwalające, czas wyzwalania i zakres numerów instancji. Nie istnieje konwencja o nazwie dla kluczy atrybutów, ale muszą być one zrozumiałe dla wtyczki w celu przesłania do dokumentu topologii. Poniższy kod jest przykładem elementów, które są opisane we wtyczce:
"model": {
   "nodes": [
  	       {
			   ... ...
             },
             {
             "id": <policy id>
             "type":<policy type>
             "attributes": {
		
      	              <No.1 metric id for trigger event>: [
      	              < threshold for scale-in >,
      	              < threshold for scale-out >
      	               ],
      	              <No.2 metric for trigger event>: [
      	              < threshold for scale-in >,
      	              < threshold for scale-out >
      	               ],
      	              <... :[... ,... ]>
      	              <No.n metric for trigger event>: [
      	              < threshold for scale-in >,
      	              < threshold for scale-out >
      	                ],
      	              <trigger time id>: <trigger time value>
      	              <instance range number id": [
      	                 <min number>,
      	                 <max number>
      	                ],
					}
			},
			{
				... ...
			}
		]
}

Atrybuty opisują strategię skalowania w modelu aplikacji. W przykładowym segmencie JSON zdarzenie wyzwalające może zawierać wiele pomiarów i progów dla jednej strategii skalowania, co oznacza, że operacje skalowania na wtyczce mogą być wyzwalane przez różne pozycje warunków o różnych metrykach. Relacja między tymi wpisami jest jawnie wyjaśniana przez transformator wtyczki i oznaczona w dokumencie topologii. Nie jest wymagane oznaczanie ich w modelu aplikacji, z tym wyjątkiem, że ich etykieta może być używana do definiowania relacji w interfejsie użytkownika. Produkt Cloud Pak System wymaga, aby metadane zostały udostępnione we wtyczce do wyjaśniania komponentów w modelu aplikacji w celu prezentacji interfejsu użytkownika. W przypadku strategii skalowania wtyczka może stosować poprawne typy widgetów i typy danych do atrybutów dla zdarzenia wyzwalacza, czasu wyzwalacza i zasięgu numeru instancji.

Model topologii

W dokumencie topologii skalowanie jest rozszerzone tak, aby zawierały atrybuty z automatycznego skalowania. Skalowanie neat zawiera tylko atrybuty min i max, z których oba zwykle mają taką samą wartość. Ta wartość wskazuje wielkość stałego klastra w szablonie wtyczki.
"vm-templates": [
		{
			...
      scaling :{
                 "min": <number>,
                 "max": <number>,
                  }
		},
		{
      ...
		}
]
Jeśli w skalowaniu uwzględniane są więcej atrybutów, takich jak triggerEvents i triggerTime, to zmienia się ona w sposób automatycznego skalowania w klastrze. Wartość min i maxnie powinna być taka sama, jak wartość min dla dolnej granicy zakresu numerów instancji, a wartość max dla górnego limitu. Atrybuty automatycznego skalowania są wyświetlane w następującym przykładzie kodu JSON.
"vm-templates": [
{
	...
  scaling :{
     "role" : <role type for the template>,
     "triggerEvents": [
         {
            "metric": <metric category and item linked by ".">,
            "scaleOutThreshold": {
                "value": <metric value with its data type>,
                "type": "CONSTANT",
                "relation": <comparison symbol including "<", 
                                                         ">", 
                                                         "<=",
                                                         ">=" >
                             },
            "conjunction": <conjunction type with other trigger 
                           events including "OR", "AND">
            "scaleInThreshold": {
                "value": <number>,
                "type": "CONSTANT",
                "relation": <comparison symbol>
                         }
        	},
         "triggerTime": <number>
         },
        {
            "metric": " metric category and item",
            "scaleOutThreshold": {
                "value":<number>,
                "type": "CONSTANT",
                "relation": <comparison symbol>
            },
            "conjunction": <conjunction type with other trigger 
                           events>
            "scaleInThreshold": {
                "value": <number>,
                "type": "CONSTANT",
                "relation": <comparison symbol>,
                "electMetricTimeliness": <"historical"|"instant">
            }
            "triggerTime": <number>
        },
	  {
       {
            "metric": " metric category and item",
            "scaleUpCPUThreshold": {
                "value":<number>,
                "type": "CONSTANT",
                "relation": <comparison symbol>
            },
            "conjunction": <conjunction type with other trigger 
                           events>
            "triggerTime": <number>
	  },
	  {
            "metric": " metric category and item",
            "scaleUpMemoryThreshold": {
                "value":<number>,
                "type": "CONSTANT",
                "relation": <comparison symbol>
            },
            "conjunction": <conjunction type with other trigger 
                           events>
            "triggerTime": <number>
		  },
		  {
      ...
        }
    ],
    "min": <number>,
    "max": <number>,
    "maxcpucount": <number>,
    "minmemory": <number>,
    "cpucountUpIncrement": <number>,
    "memoryUpIncrement": <number>,
    "triggerTime": <number>,
   }
   ...
 },
 {
  ...
 }
]

Produkt Cloud Pak System obsługuje wiele zdarzeń wyzwalających dla operacji skalowania. Zdarzenia te są obecnie agregowane w dwóch trybach: OR i AND. Tryb OR oznacza, że operacja skalowania jest wyzwalana, jeśli wystąpi tylko jedno zdarzenie. Operacja AND oznacza, że jeśli wszystkie zdarzenia zdarzają się w tym samym czasie, tylko wtedy wyzwalana jest operacja skalowania. Automatyczne skalowanie zależy od monitorowania w celu gromadzenia metryk dla inspekcji. Aby upewnić się, że gromadzone są odpowiednie wielkości mierzone, wartość klucza pomiar w każdym zdarzeniu wyzwalającego musi być spójna z wartością category i attributeName. Te atrybuty są zdefiniowane w metadanych wtyczki dla modułów gromadzących monitorowanie. Wartości mogą być łączone przez . w metryce. Na przykład CPU.Used reprezentuje pomiar z kategorią CPU i attributeName w polu Używane. Monitorowanie udostępnia również grupę metryk na poziomie systemu operacyjnego, która może być również wybrana przez programistów wtyczek i używana do automatycznego skalowania. Szczegółowe informacje na ten temat zawiera sekcja Pomiary zgromadzone przez agenta monitorowania dla oprogramowania IBM Cloud Pak Software.

Niektóre atrybuty są specyficzne dla konkretnego typu skalowania. Na przykład: min i max są używane z skalowaniem poziomym. Poniższa tabela zawiera listę atrybutów i powiązanych z nimi typów skalowania.
Tabela 7. Atrybuty
Typ Klucz Opis
Skalowanie poziome min Minimalna liczba maszyn wirtualnych, jaką może mieć rola
max Maksymalna liczba maszyn wirtualnych, jaką może mieć rola
scaleInThreshold Pomiar i jego próg dla działania skali
scaleOutThreshold Pomiar i jego próg dla działania skalowania
Skalowanie pionowe maxcpucount Maksymalna liczba rdzeni, jaką może mieć maszyna wirtualna
scaleUpCPUThreshold Pomiar i jego próg dla działania skali
cpucountUpIncrement Liczba rdzeni, które mają być zwiększane o jeden krok w trybie skalowania procesora
minmemory Minimalna wielkość pamięci dla maszyny wirtualnej
maxmemory Maksymalna wielkość pamięci dla maszyny wirtualnej
scaleUpMemoryThreshold Pomiar i jego próg dla działania w pamięci scale-up
memoryUpIncrement Wielkość pamięci do zwiększenia w jednej akcji pamięci typu scale-up

Atrybut triggerTime jest współużytkowany przez kilka typów skalowania i wyzwala zdarzenia. Można go umieścić wewnątrz obiektu triggerEvent lub w obiekcie triggerEvent . Jego umiejscowienie określa jego zakres. Jeśli element triggerTime jest umieszczony wewnątrz obiektu triggerEvent , ma on zastosowanie tylko do jego obiektu triggerEvent . Jeśli element triggerTime jest umieszczany poza obiektem triggerEvent , jest on stosowany globalnie dla wszystkich obiektów produktu triggerEvent . Jeśli istnieje atrybut triggerTime zarówno wewnątrz, jak i na zewnątrz obiektu triggerEvent , pierwszeństwo ma triggerTime znajdujący się wewnątrz obiektu.

Transformator udostępniony przez wtyczkę musi definiować atrybuty strategii skalowania w modelu aplikacji i odwzorowywać je na nazwane atrybuty w dokumencie topologii. Elementy automatycznego wywołania zdarzenia wyzwalacza, czasu wyzwolenia i zasięgu numeru instancji odpowiadają elementom triggerEvents, triggerTimeoraz min i max.

Skala-w działaniu jest bardziej skomplikowana niż skala-out. W przypadku skali jest to wybór instancji roli kandydackiej. Logika wyboru skali-w podąża niektóre predefiniowane reguły, które starają się skalować-w jak najbardziej rozsądny sposób. Logika zajmuje instancję jako kandydat skali w kolejności priorytetowej od reguły 1 do reguły 4.
  1. Zakończona lub zakończona niepowodzeniem maszyna wirtualna, z wyjątkiem systemu głównego.
  2. Maszyna wirtualna, która ma status inny niż RUNNING, taki jak URUCHAMIANIE, INICJOWANIE, URUCHAMIANIE, z wyjątkiem systemu głównego.
  3. Maszyna wirtualna, której rola ma najmniejszą lub najmniejszą wartość określonej wielkości mierzonej między klastrem, z wyjątkiem systemu głównego.
  4. Losowa maszyna wirtualna, z wyjątkiem systemu głównego.
Ta logika wyboru zapewnia, że niewykonalne maszyny wirtualne są usuwane jako pierwsze, a jedna z nich jest usuwana jako ostatnia. W przypadku reguły 3 użytkownicy mogą zdefiniować grupę atrybutów skalowania w topologii w celu dostosowania, na przykład, typu metryki, opcji wartości i terminowości. W przypadku wygody dostosowanie ponownie wykorzystuje niektóre z opisanych atrybutów w celu automatycznego skalowania. Poniżej przedstawiono przykład szablonu skalowania:
{
    "role" : "WAS",
    "triggerEvents": [
        {
           "metric": "CPU.Used",
            "scaleOutThreshold": {
                "value": 80,
                "type": "CONSTANT",
                "relation": ">="
            },
            "conjunction": "OR",
            "scaleInThreshold": {
                "value": 20,
                "type": "CONSTANT",
                "relation": "<",
                "electMetricTimeliness" : "historical"
            }
        }
    ],
    "min": 1,
    "max": 10,
    "triggerTime": 120
}

Wartości dla wartości "metric", "scaleInThreshold", "relation" i "electMetricTimeliness" są używane do wyznaczania sposobu wybierania instancji serwera WebSphere Application Server na potrzeby skalowania, jeśli wtyczka udostępnia ręczne operacje skalowania. W tym przykładzie "pomiar" określa, że wykorzystanie procesora jest metryką. "<" W przypadku relacji "relacja" określa, że instancja kandydata dla skali jest jedną z najniższym wykorzystaniem procesora w klastrze. Wartość "> " oznacza największe wykorzystanie procesora. W przypadku wartości "electMetricTimeliness" wartość może być "historyczna" lub "instancja". Wartość "historyczna" określa, że instancja jest wybierana na podstawie średniej wartości historycznej w ciągu 5 minut.

Skalowanie ręczne

Skalowanie ręczne zapewnia administratorom aplikacji wirtualnych elastyczny i kontrolowany sposób dodawania lub usuwania instancji wirtualnych aplikacji lub usług współużytkowania. Użycie opcji "autoscalingAgent.scale_out" i "autoscalingAgent.scale_in" powoduje, że ręczne skalowanie może przebiegać w sposób automatyczny w sposób bezpieczny. Dostosowywanie niektórych opcji ręcznego skalowania jest obsługiwane, zwykle koncentrując się na skali, korzystając z ręcznej strategii skalowania. Gdy wtyczka ujawnia ręczne operacje skalowania, transformuje ona strategię na predefiniowane atrybuty topologii, które są używane przez skalowanie zaplecza w celu archiwizowania dostosowanych składników.

W dokumencie topologii skalowanie ręczne korzysta z tych samych atrybutów, co skalowanie automatyczne.
"scaling": {
                   "role": "RTEMS"
                   "triggerEvents": [{
                          "metric": "RTEMS.ConnectionNumber ",
                          "scaleOutThreshold": { ... },
                          "conjunction": "OR",
                          "scaleInThreshold": {
                                    "value": 20,
                                    "type": "CONSTANT",
                                    "relation": "<",
                              "electMetricTimeliness" : "instant"
            }

             }
                       ],
                   "triggerTime": 120,
                   "min": 1,
                   "max": 10,
                   "manual": {
                             "scaleInMetric":"RTEMS.ConnectionNumber",
                             "metricType" : "instant",
                             "rule": "minimum"
                             }
                  }
W tym przykładzie pokazano wdrożenie z automatycznym skalowaniem i strategią skalowania ręcznego na zdalnym zdalnym serwerze Tivoli ® Enterprise Monitoring Server (RTEMS). Skala-w jest wyzwalana automatycznie za pomocą "triggerEvents" i "triggerTime", która może być również stosowana ręcznie przez użytkowników. W przypadku ręcznej skali, instancja RTEMS o najniższej wartości parametru "connectionNumber" spośród wszystkich instancji jest wybierana jako ta, która ma być niszczona za każdym razem.
Podczas tworzenia strategii automatycznego skalowania oraz ręcznej strategii skalowania i operacji dla wtyczek należy skorzystać z następujących wytycznych:
  • Jeśli stosowana jest strategia automatycznego skalowania, nie powinno być niczego innego, co jest wymagane w Budowniczym wzorcu w celu obsługi skalowania ręcznego. Wtyczka musi prezentować operacje skalowania ręcznego w operacjach skalowania ręcznego i ręcznie. Szablon skalowania udostępniony przez wtyczkę musi określać pomiar, który ma być używany do ręcznej skali-w przypadku użycia wielu pomiarów. Domyślnie używany jest tylko pierwszy pomiar. Typowe wtyczki obejmują serwer WebSphere Application Server i usługi współużytkowane, takie jak buforowanie i monitorowanie.
  • Wtyczka powinna udostępniać kombinację automatycznych i ręcznych szablonów skalowania dla użytkownika, który ma zostać wybrany, ale tylko jeden z nich może być zastosowany do vmTemplate.
  • Jeśli funkcja automatycznego skalowania we wtyczce nie ma być obsługiwana lub nie jest wymagana, ale należy włączyć skalowanie ręczne, należy zdefiniować zdarzenie triggerEvent. Szablon skalowania nadal udostępnia wartości min, max, role i triggerEvent. Jednak triggerEvent zawiera tylko wielkość mierzoną w skali, która ma być używana razem z atrybutami min i max (metrykami < lub >), które są przeznaczone dla dowolnej wtyczki lub usługi współużytkowanej do użycia, np. do systemu równoważenia obciążenia.

Interfejs skalowania

Program narzędziowy autoscalingAgent definiuje ogólny interfejs API dla skryptów Python do interakcji z agentem skalowania automatycznego na maszynie wirtualnej. Program narzędziowy udostępnia kilka funkcji.

Ręczne żądanie skalowania dla określonej roli i szablonu. Parametr jest łańcuchem przypominający format JSON. Wartości "vmTemplate" i "roleType" wskazują określoną rolę i szablon do zastosowania "scale-out". Wywołanie funkcji nie powiedzie się, jeśli:
  • Osiągnięto maksymalną liczbę instancji.
  • Skalowanie zostało wstrzymane lub wyłączone
  • Wdrażanie jest aktualizowane
  • W chmurze nie ma wystarczających zasobów do zrealizowania żądania.
maestro.autoscalingAgent.scale_out('{
             "vmTemplate":  String, 
             "roleType":  String
         }') 
W poniższych przykładach przedstawiono użycie funkcji:
maestro.autoscalingAgent.scale_out('
 {"vmTemplate":"Web_Application-was", 
 		"roleType":"WAS"}
')
Ręczne żądanie skalowania dla określonej roli i szablonu. Parametr jest łańcuchem przypominający format JSON. Wartości dla opcji "vmTemplate" i "roleType" wskazują określoną rolę i szablon do stosowania "scale-in". "Węzeł" jest atrybutem opcjonalnym, który wskazuje nazwę węzła, który ma zostać usunięty. Jeśli żaden "węzeł" nie znajduje się w parametrze, skala-jest zgodna z predefiniowanymi regułami i ręczną strategią skalowania, aby wybrać węzeł do usunięcia. Wywołanie tej funkcji nie powiedzie się, jeśli:
  • Osiągnięto minimalną liczbę instancji.
  • Skalowanie zostało wstrzymane lub wyłączone
  • Wdrażanie jest aktualizowane
maestro.autoscalingAgent.scale_in('{
             "vmTemplate":  String, 
             "roleType":  String,
             ["node" : String]
         }')
Wstrzymaj wszystkie zadania skalowania, które są uruchomione do wdrożenia. Wywołanie tej funkcji nie powiedzie się, jeśli:
  • W modelu aplikacji nie podano strategii skalowania.
  • Skalowanie zostało wstrzymane lub jest wyłączone
  • Wdrażanie jest aktualizowane
maestro.autoscalingAgent.pause_autoscaling()
Wznów wszystkie zadania skalowania, które są uruchomione dla wdrożenia. Wywołanie tej funkcji nie powiedzie się, jeśli:
  • W modelu aplikacji nie podano strategii skalowania.
  • Skalowanie jest wznawiane lub jest wyłączone
  • Wdrażanie jest aktualizowane
maestro.autoscalingAgent.resume_autoscaling()
Włącz funkcję automatycznego automatycznego śledzenia agenta. Wywołanie tej funkcji nie powiedzie się, jeśli:
  • W modelu aplikacji nie podano strategii skalowania.
  • Skalowanie jest już włączone
  • Wdrażanie jest aktualizowane
maestro.autoscalingAgent.enable_autoscaling()
Wyłącz funkcję automatycznego wyłączania agenta. Wywołanie tej funkcji nie powiedzie się, jeśli:
  • W modelu aplikacji nie podano strategii skalowania.
  • Skalowanie jest już wyłączone
  • Wdrażanie jest aktualizowane
maestro.autoscalingAgent.disable_autoscaling()
Uwaga: Chociaż istnieją inne sposoby uruchamiania lub niszczenia maszyn wirtualnych, takich jak interfejsy API usług jądra i działanie maszyny wirtualnej, nie są one bezpieczne do automatycznego skalowania, co oznacza, że mogą one powodować konflikty lub interweniować z zadaniami automatycznego skalowania, które są uruchomione w ramach wdrożenia. Na przykład zadania automatycznego skalowania są zawieszone w momencie wyzwolenia operacji skalowania i nie są wznawiane, dopóki wdrożenie nie będzie w stanie stabilnym, co oznacza, że nowo wdrożona maszyna wirtualna jest uruchomiona lub zniszczona maszyna wirtualna zniknie. Takie podejście zapewnia, że automatyczne skalowanie może poprawnie używać pomiarów z uruchomionych ról i maszyn wirtualnych, ignorując role i maszyny wirtualne, które nie działają. Funkcje API usług jądra i działania maszyny wirtualnej nie informują o automatycznym skalowaniu, gdy wyzwalają uruchamianie lub niszczą działania. Tak więc automatyczne skalowanie wykorzystuje dane z nowych maszyn wirtualnych, które nadal uruchamiają lub niszczą maszyny wirtualne, które są usuwane. Dodatkowe dane mogą prowadzić do niepotrzebnych nowych działań skalowania. Interfejsy autoscalingAgent.scale_out i autoscalingAgent.scale_in są bezpieczne dla skalowania automatycznego. Korzystanie z nich pomaga uniknąć tego rodzaju problemów i innych możliwych konfliktów między skalowaniem automatycznym a skalowaniem ręcznym.