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
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); | 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.
maestro.monitorAgent.register('{
"version" : Number,
"node" : String,
"role" : String,
"collector": String,
"config" : JSONObject
}')
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.
| Kolektor | config.properties |
|---|---|
com.ibm.maestro.monitor.collector.script |
|
com.ibm.maestro.monitor.collector.http |
|
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 .
| 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ę. |
maestro , które przechowują informacje o ścieżce i katalogu instalacji wtyczki.| 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.
- 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.
metricTypenie jest jeszcze sprawdzona. WszystkiemetricTypeznajdują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.
{
"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
{
"version": <version number>,
"category": [
<category name>,
... ...
],
"content": [
{
<category name> :{
<metric name>: <metric value>,
... ...
}
},
... ...
]
}{
"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
- 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.
{
"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.
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 timeoutThe 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 formatKolektor 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.
dashboard.visible jest ustawiony na wartość false . Domyślnie wartość ta jest ustawiona na true. "role" : {
"name" : "$roleName",
"type" : "$roleName",
"dashboard.visible" : false,monitoring_ui.json. Obsługiwane są dwie wersje tego pliku:[
{
"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>,
}
]
}
]
},
... ...
]
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.displayRoles, który może powiązać jedną kategorię wielkości mierzonej z jedną lub wieloma rolami.[
{
"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.
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 |
Typy wykresów (chartType) |
Prezentacja |
|---|---|
Lines |
Wykres liniowy |
StackedAreas |
Skumulowany wykres liniowy (wykres warstwowy) |
StackedColumns |
Wykres kolumnowy |
[
{
... ...
"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ść
availability. Ma ona następujące wartości statusu.- W NORMIE
- OSTRZEŻENIE
- KRYTYCZNY
- NIEZNANA
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".
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.
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ść
availabilityjest 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ę, parametravailabilityzostanie 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%, parametravailabilityjest ustawiony na wartość "OSTRZEŻENIE", a jeśli użycie jest większe niż 85% ",availabilityjest 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.
- 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 wtyczkaOPMDB2rejestruje kolektor dla wtyczkiDB2, produktmaestro.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:
W tym przykładzie baza danych DB2 jest rolą podstawową i jest widoczna. Protokoły SSH i OPMDB2 są niewidocznymi rolami, ponieważ ich wartość{ "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" }, ... ... ], ... ... } ], }"dashboard.visible"jest ustawiona nafalse. - 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
- 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.
"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
"vm-templates": [
{
...
scaling :{
"min": <number>,
"max": <number>,
}
},
{
...
}
]
"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.
| 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.
- Zakończona lub zakończona niepowodzeniem maszyna wirtualna, z wyjątkiem systemu głównego.
- Maszyna wirtualna, która ma status inny niż RUNNING, taki jak URUCHAMIANIE, INICJOWANIE, URUCHAMIANIE, z wyjątkiem systemu głównego.
- Maszyna wirtualna, której rola ma najmniejszą lub najmniejszą wartość określonej wielkości mierzonej między klastrem, z wyjątkiem systemu głównego.
- Losowa maszyna wirtualna, z wyjątkiem systemu głównego.
{
"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.
"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.- 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.
- 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
}') maestro.autoscalingAgent.scale_out('
{"vmTemplate":"Web_Application-was",
"roleType":"WAS"}
')- 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]
}')- W modelu aplikacji nie podano strategii skalowania.
- Skalowanie zostało wstrzymane lub jest wyłączone
- Wdrażanie jest aktualizowane
maestro.autoscalingAgent.pause_autoscaling()- W modelu aplikacji nie podano strategii skalowania.
- Skalowanie jest wznawiane lub jest wyłączone
- Wdrażanie jest aktualizowane
maestro.autoscalingAgent.resume_autoscaling()- W modelu aplikacji nie podano strategii skalowania.
- Skalowanie jest już włączone
- Wdrażanie jest aktualizowane
maestro.autoscalingAgent.enable_autoscaling()- W modelu aplikacji nie podano strategii skalowania.
- Skalowanie jest już wyłączone
- Wdrażanie jest aktualizowane
maestro.autoscalingAgent.disable_autoscaling()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.
Need to add diagram